백엔드 개발을 하다보면 반드시 보게 되는 NGINX인데 정확히 어떻게 돌아가는지, 왜 다른 웹서버들 보다 좋은지 몰랐다. NGINX 공식 웹페이지에서 좋은 참고 자료들을 찾을 수 있었는데 그 중 한 아티클을 통으로 번역해 보았다. 원문: https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/ Inside NGINX: How We Designed for Performance & Scale NGNIX는 현재 웹 성능 분야에서 선두주자이다. 그리고 이렇게 될 수 있었던 이유는 바로 설계 디자인에 있다. 많은 웹 서버나 어플리케이션 서버들이 간단한 스레드/프로세스 기반 아키텍처를 가지는 반면, NGINX는 정교한 이벤트 기반 ..
NullPointerException(NPE) Java 에서 Optional 이 등장한 이유는 바로 NullPointerException 때문이다. NPE로 인해 발생하는 문제들은 다음과 같이 정리된다. 에러의 근원이다 : NPE는 자바에서 가장 흔히 발생하는 에러이다. 코드를 어지럽힌다 : 때로는 중첩된 null 확인 코드를 추가해야 하므로 null 때문에 코드 가독성이 떨어진다. 아무 의미가 없다 : null은 아무 의미도 표현하지 않는다. 특히 정적 형식 언어에서 값이 없음을 표현하는 방법으로는 적절하지 않다. 자바 철학에 위배된다 : 자바는 개발자로부터 모든 포인터를 숨겼다. 하지만 예외가 있는데 그것이 바로 null 포인터다. 형식 시스템에 구멍을 만든다 : null은 무형식이며 정보를 포함하고..
스트림이란 무엇인가? 은 스트림을 '데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소(sequence of elements)'로 정의한다. 1) 연속된 요소: 컬렉션처럼 특정 요소 형식으로 이루어진 연속된 값 집합의 인터페이스를 제공하고, 이 연속된 요소에 대한 계산식을 제공함 2) 소스: 컬렉션, 배열, I/O 자원 등 데이터 제공 소스로부터 데이터를 소비한다. 3) 데이터 처리 연산: 함수형 프로그래밍 언어에서 일반적으로 지원하는 연산과 데이터베이스와 비슷한 연산을 지원한다. 보다 더 쉬운 설명으로는 '스트림은 데이터 컬렉션 반복을 멋지게 처리하는 기능이다'라고 정의한다. 스트림의 장점 1) 선언형: 간결하고 가독성이 좋아짐 2) 조립할 수 있음: 유연성이 좋아짐 3) 병렬화: 성능이 좋아짐..
이 글은 서적과 백기선님의 강의를 토대로 작성된 내용입니다.동작 파라미터화 (behavior parameterization)란?에서는 동작 파라미터화를 "아직 어떻게 실행할 것인지 결정하지 않은 코드 블록" 이라고 정의한다. 용어 자체도 직관성이 떨어지고 정의 자체도 자세한 설명을 듣기 전엔 너무 모호해서 이해하는데 한참이 걸렸다. 내가 이해한 동작 파라미터화는 특정 코드 블록이 어떻게 실행될지에 대한 디테일(동작)은 파라미터에 담아서 넘긴 후(파라미터화) 나중에 가서 자세하게 구현하는 행위이다. 그렇다면 왜 디테일을 나중으로 미루자고 하는 것일까? 바로 개발을 하면서 요구사항이 계속 변하기 때문이다. 동작 파라미터화의 의도는 자바 기초 개념인 상속이나 인터페이스의 사용 목적과 결이 비슷하다. 공통 부분..
이 글은 토비의 스프링 3.1 Vol.1 서적을 토대로 다른 자료들을 함께 참고하여 정리한 내용입니다. 스프링이란? 스프링은 자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크다. 애플리케이션 프레임워크란? 개발을 빠르고 효율적으로 할 수 있도록 애플리케이션의 바탕이 되는 툴과 공통 프로그래밍 모델, 기술 API를 제공해준다. (개발자를 편하게 해주는 표준 틀이라고 생각하면 될 것 같다.) 스프링 컨테이너란? 스프링은 스프링 컨테이너 또는 애플리케이션 컨텍스트라고 불리는 스프링 런타임 엔진을 제공한다. 설정정보를 참고하여 애플리케이션을 구성하는 오브젝트 생성하고 관리한다. 독립적으로 동작할 수 있지만 웹모듈에서 동작하는 서비스나 서블릿으로 등록하여 사용한다. 스프링을 사용하기 위해서는 ..
오랜만에 알고리즘 문제 풀던 중 문자열 내 특수문자 한 종류를 제거하기 위해 다음과 같은 코드를 실행했다. str = str.replaceAll(c, ""); //c = "+" java.util.regex.PatternSyntaxException: Dangling meta character 예외가 발생했다. 사실 replaceAll이라는 함수 내용을 정확히 보지 않고 이름만 보고 str 내의 모든 c 를 "" 으로 바꾸어주겠지 싶었다. 이름만 봐서는 그냥 replace(a, b)는 가장 첫 a 만 바꾸어주는거고 replaceAll(a, b)는 문자열 내의 모든 a를 바꾸어주는거 처럼 보였기 때문이다... (찾아보니 많이들 이렇게 착각한다고..) replace() 와 replaceAll()은 모두 (Str..
https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 풀이법: 1. 최종으로 변경된 닉네임으로 다 덮어 씌워지기 때문에 저장하는 HashMap 만들기 2. id + " " + Enter/Leave를 차례대로 리스트에 저장한다 3. 2번 리스트를 순회 하면서 id의 최종닉네임을 1번 HashMap에서 가져온다. Comment: 1. 시간 복잡도는 O(2n). 코드: import java.util.*; class So..
https://programmers.co.kr/learn/courses/30/lessons/81301 코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr 풀이법: 1) HashMap 사용 코드: import java.util.*; class Solution { public static int solution(String s) { HashMap nums = new HashMap(); nums.put("zero", 0); nums.put("one", 1); nums.put("two", 2); nums.pu..
- Total
- Today
- Yesterday
- 코테
- WORE
- decorator
- digital tree
- 스프링
- trie 소스코드
- 2019 Kakao Blind
- 2020 KAKAO
- 모던 자바 인 액션
- 카카오 코테
- IOC
- 신규 아이디 추천
- behavior parameterization
- WORA
- Java #GC #가비지콜렉터 #Garbage Collector
- Java
- 카카오 인턴
- 프로그래밍 모델
- okhttp3
- PatternSyntaxException
- Kakao Blind
- 2021
- nginx 내부
- 디자인패턴
- 스프링 컨테이너
- 카카오
- 카카오코테
- Java #JIT #JVM
- jvm
- KAKAO 2021
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |