티스토리 뷰
목차
여기저기에서 이름은 많이 주워들은 엔진엑스.
좋다! 빠르다! 가볍다! 길래 쓰지 않을 이유가 없어 보여 한 번 써볼까 하고 기웃거리는 것이 이 글의 목적이다.
엔진엑스는 2004년 10월, 러시아에서 태어났고 현재는 미국에서 자라고 있는 오픈소스 웹 서버 소프트웨어이다.
여기서 웹 서버란 사용자에게 네트워크를 통해 서비스를 제공하는 컴퓨터(의 집합)를 가리킨다.
엔진엑스는 이런 웹 서버에서 사용하는 프로그램 중 하나라고 할 수 있다.
더욱 많이 들어본 아파치 HTTPd(역시 웹 서버 소프트웨어이다)를 빠르게 대체하고 있으며
22년 5월 기준 시장 점유율 1위를 기록하고 있다.
특징으로는 비동기 방식의 동시접속 처리에 특화된 작동방식이라고 하는데, 되는대로 알아보자.
Apache HTTPd vs. NGINX
Apache HTTPd
아파치 서버의 가장 큰 특징은 스레드, 혹은 프로세스 기반의 구조라는 점이다.
여기서 익숙한 문맥교환과 오버헤드가 등장하기도 한다.
프로세스 기반의 구조는 쉽게 말하면 요청 하나당 프로세스 하나를 배정하는 것이다.
때문에 메모리 사용량이 엄청나며, 이를 극복하기 위해 Worker방식이 등장해
하나의 프로세스가 여러 개의 스레드를 사용하여 요청을 처리할 수 있도록 바뀌었다.
대량의 요청엔 대량의 메모리가 필연적으로 요구되기 때문에 대용량 요청을 처리하기는 적당하지 않다고 할 수 있다.
NGINX
그럼 위와 같은 일처리 방식 말고 다른 방식이 있다? 있다.
NGINX는 웹플럭스에서 만났던 Event-Driven 방식으로 트래픽을 처리한다.
프로세스의 수를 무작정 늘리는 대신, 각 프로세스 내부에서 비동기 방식으로 효율적인 일처리를 해낸다.
조금 자세하게는 CPU와 연관되지 않은 작업은 시작시켜 놓고 바로 다음 작업으로 들어가는 식이다.
그러다 해당 작업이 끝나는 이벤트가 발생하면 그다음 작업으로 넘어가는 식이다.
여기서 짚고 넘어가야 하는 것이 Event-Loop인데, 앞서 언급한 Event-Driven 방식이
작동하는 구조를 말한다.
이벤트 루프 방식이란 싱글 스레드로 작동하는 이벤트 루프가 새로운 이벤트 요청을 스레드풀에 분배하는 것을 가리킨다.
이 과정에서 실질적인 처리는 위에서 말했듯 비동기로 처리되며, 때문에 대량의 요청도 상대적으로 쉽게 처리할 수 있다.
엔진엑스의 경우 비슷하게 마스터 프로세스와 워커 프로세스가 존재하며,
실제로 작업을 처리하는 워커 프로세스는 기본적으로 CPU의 코어 개수와 같게 할당된다.
Context-Switching을 최소화하는 방식으로 비동기 처리를 하도록 짜여 있으며,
이름은 프로세스라고 되어있지만 사실은 스레드라 일정 부분 자원을 공유하고 있다.
Forward Proxy, Reverse Proxy
- Forward Proxy - 클라이언트가 프록시서버를 경유해 요청을 전달하는 방식이며 이름 그대로 웹 요청보다 프록시 요청이 선행하는 구조이다. 일반적으로 프록시라 하면 이 포워드 프록시를 가리키며, 주도권이 클라이언트에게 있기 때문에 VPN 등을 이용해서 클라이언트를 감추거나 누구인지 속일 수 있다. 이 경우 클라이언트의 보안이 향상된다.
- Reverse Proxy - 이번엔 반대로 클라이언트 입장에서 볼 때 프록시보다 웹 요청이 먼저 이루어지는 구조이다. 조금 구체적으로는 웹 요청을 하면 뒤쪽에 있던 리버스 프록시를 호출하고, 리버스 프록시가 클라이언트의 요청을 받아 서버에게 전달하게 된다. 이 과정에서 클라이언트는 내부 서버의 IP를 알 수 없으며, 포워드 프록시와는 반대로 서버가 누구인지 숨길 수 있게 된다. 이는 물론 서버 보안이 향상되는 효과를 가지고 있다.
프록시는 공통적으로 보안, 성능, 트래픽 분산에 장점이 있다.
엔진엑스는 그중에서도 비동기로 많은 요청을 처리할 수 있다는 장점 때문에 Reverse Proxy로 주로 사용된다고 한다.
여기까지 해서 일단 엔진엑스가 무엇인지 윤곽 정도 잡아보았다.
실제로 진행하고 있는 프로젝트에서 깃헙액션과 함께 무중단배포를 하는 방법은 실습으로 알아봐야겠다.
'Development > Network' 카테고리의 다른 글
[OAuth 2.0]구글/카카오/네이버 클라이언트 아이디/시크릿 발급 (0) | 2023.07.14 |
---|---|
[Network]HTTP status Code 요약 (0) | 2023.03.18 |
[Network]네트워크 클래스, CIDR(사이더) 라우팅 기법 (2) | 2022.10.11 |
[Network]OAuth 2.0 Workflow (0) | 2022.09.28 |
[Network]OAuth 2.0 (0) | 2022.09.28 |
[Network]JWT(JSON Web Token) (0) | 2022.09.23 |
- Total
- Today
- Yesterday
- 백준
- Algorithm
- 유럽
- java
- 파이썬
- 세계일주
- Backjoon
- Python
- 유럽여행
- 남미
- RX100M5
- 칼이사
- 스프링
- 중남미
- 스트림
- 알고리즘
- 맛집
- 리스트
- a6000
- 세모
- 기술면접
- spring
- 지지
- 자바
- 세계여행
- 면접 준비
- 야경
- 동적계획법
- BOJ
- 여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |