I. 들어가며
1)
Nginx를 공부하는 이유는 저마다 다양하다. 나에게 Nginx는 지난 몇달간 나에게 해결하지못한 숙제이다.
Nginx를 피하는 것은 내 회사생활을 해태한다고 간주될 정도로 회사에서 쓰임이 자주있었고, 이는 곧 퇴근 후 공부하게끔 추동했다. 구체적으로 어떻게 쓰임이 있었냐하면... 현재 재직중인 회사 입사 시험은 Nginx & clojure 이고, 입사 후 맡아서 완료한 회사 홈페이지 리뉴얼 업무를 할 때에도 Nginx를 쓰였고, 내가 맡은 핀테크 서비스도 마찬가지로 NginX가 쓰이고 있다.
2)
이렇게 쓰이지만 나는 여전히 Nginx를 쓰는 이유를 공감하지 못하고 있었고, 그 방법도 모른채 Nginx 사용을 피하는 나자신을 조우했다. 가볍게 시작했고, 나와 같은 사람을 위해서 가볍게 정리했다.
II. 필요성
1. Nginx 는 이벤트기반구조? 아파치 서버와 무슨차이?
(1) Nginx의 대두
1) 아파치 서버?
기존 아파치 서버는 1995년 처음으로 탄생을 했다. 아파치 서버의 장점은 요청마다 프로세스를 생성하고, prefork 방식을 사용해 미리 준비가 되는 이점이 있었다. 오랜기간 사용이 되었고 그 결과 호환성과 확장성은 아파치 서버만의 장점이 되었다.
2) 아파치 서버의 한계와 Nginx의 대두
하지만 C10K(동시연결이 10,000개 이상) 문제가 대두되었다. 동시에 그리고 미리 연결하는 방식으로 keep-alive 가 있는데 이것이 아파치 서버가 문제가 되었다. 아파치 서버를 보완하기 위해서 Nginx가 탄생했다. Nginx는 하나의 프로세스를 두고, 동시커넥션을 기존 서버 앞에서 대신 처리했다.
즉 정적컨텐츠는 Nginx가 대신처리하고, 동적컨텐츠의 경우 서버와 커넥션을 유지하는 방식으로 하였다. 이렇게 한다면 아파치서버는 연결유지가 아니라, 비즈니스 로직처리에 집중할 수있게 되었다.
(2) Nginx의 폭발적 성장
1) Nginx의 폭발적 성장
2008년부터 Nginx가 폭발적인 성장을 했다. 그 이유는 스마트폰이다.
나 자신의 것인 디바이스 스마트폰은 웹에서 로그인한 상태를 유지하며 실시간 정보제공을 원했다. 이는 곧 동시커넥션 에 대한 니즈가 폭발적으로 성장하게 되었다.
2)
한편 웹에서는 점점 이미지 동영상과 같은 리소스가 커지고, 이를 빠른시간 안에 load 가 필요했고 이를 위해 TCP커넥션을 KeppAlive하였다.
이렇게 Nginx는 웹서버 보완을 위해 탄생하고 성장했다.
2. Nginx의 간단한 원리
(1) Nginx에 process 의 종류
1) master Process 와 worker Process
Nginx의 프로세스는 크게 master Process 와 worker Process로 대별된다.
전자의 경우 하나의 프로세스로서 설정파일을 읽으며 전체를 관장한다면, 후자의 다수의 프로세스 경우 요청을 처리한다. worker porcess 의 갯수는 설정파일에서 정의하거나, CPU 코어 숫자에 따라서 결졍된다.
2) worker Process
잠깐 앞서 언급한 이벤트는 무엇일까? 여기서 이벤트란 '커넥션을 형성'하고, '커넥션을 제거'하고, '새로운요청을 처리' 하는 것을 의미한다. worker process는 생성이 될 때 listen socket 이 배정된다. worker process 는 이벤트와 관련이 있다.
즉 이벤트는 OS커널이 '큐 형식' 으로 worker process 로 전달해준다. 이 방식은 아파치 서버에서 요청이 없으면 방치되는 것 보다 훨씬 효율적이다. 만약 worker process 에 전달된 작업이 오래걸리면 어떻게 해야할까? '스레드 풀'에다가 위임할 수있다. 그리고 다른 이벤트를 처리한다.
(2) 이에 기인한 NginX 이점
앞서 본 점에서 Nginx의 장점은 무엇일까?
우선 동적으로 설정변경이 가능하다. Nginx실행 중 설정이 변경되면 새로운 worker process 를 만들고, 기존에 실행중인 worker porcess는 작업이 끝나면 종료시킨다. 두번째로는 프로세스를 적게 만들 수있다. 세번째로는 로드랠런서로서 유용하다. 로드밸런서는 후술하겠다.
3. Nginx다양한 사용 예
예시를 단순히 나열하면 첫번째 Nginx는 '웹서버 가속기'로서 정적리소스를 처리하고, 로드 밸런서의 역할을 한다. 두번째 'SSL터미네이션'으로 client 와 Nginx 사이에 https 연결하고, Nginx와 Server 사이에 http 연결로 서버에 부담을 줄여 서버의 비즈니스 로직 처리에 부담을 줄여준다. 세번째 '캐싱' 이다. 이는 http 프로토코롤 전달하는 객체를 캐싱이 가능하게 끔한다.
-2일 내 공개-
III. 속성실습
1. 실습 목표
2. 엔진엑스 설치
3. conf 의 구조와 Mime Type
4. Location Context 와 리디렉션 & 재작성
5. 로드밸런서
(1) test용 express 설치와 docker 설치
(2) 도커 구성하기 (이미지 생성과 컨테이너에 담기)
(3) Nginx 설정하기
(4) 마무리
IV. 참고자료
1) https://icarus8050.tistory.com/57
2) https://www.youtube.com/watch?v=6FAwAXXj5N0&t=3s
3) https://www.youtube.com/watch?v=7VAI73roXaY&list=LL&index=3
'배움 __IL > TIL 2기' 카테고리의 다른 글
TIL : Extra-3(.class, stringBuilder) (0) | 2023.08.29 |
---|---|
TIL : Extra-2(enum, hashMap) (0) | 2023.08.26 |
TIL : Extra-1(Optional, 동시성, stream, Assertions, IllegalStateException) (0) | 2023.08.15 |