Search
📁

⭐ Nginx, reverse proxy 찾아보기

reverse proxy

리버스 프록시는 클라이언트의 요청을 받아서 내부 서버로 전달하고, 내부 서버의 응답을 받아 클라이언트에게 반환하는 역할을 한다.
주로 웹 서버 앞단에 위치하며, 클라이언트는 실제 서버가 아닌 리버스 프록시를 통해 서버와 통신하게 된다.

Reverse Proxy가 생긴 이유

대규모 웹 서비스에서 트래픽을 효율적으로 관리하고, 보안과 성능을 최적화하기 위해 리버스 프록시가 필요하게 되었다.

Reverse Proxy를 사용하는 이유

보안 강화: 내부 서버의 IP 주소와 구조를 클라이언트로부터 숨길 수 있다.
부하 분산 (Load Balancing): 여러 대의 서버에 부하를 분산시켜 서비스의 안정성과 성능을 향상시킨다.
SSL 종료 (SSL Termination): SSL 인증서를 리버스 프록시에서 처리하여 내부 서버의 부담을 줄인다.
캐싱: 정적 콘텐츠를 캐싱하여 서버의 부하를 줄이고 응답 속도를 높인다.

Reverse Proxy 예시

Nginx, Apache HTTP Server, HAProxy 등이 대표적인 리버스 프록시 서버 소프트웨어이다.

Reverse Proxy의 장단점

장점: 보안 강화, 부하 분산, SSL 종료, 캐싱 등 다양한 기능을 통해 서비스 성능과 안정성을 향상시킬 수 있다.
단점: 설정이 복잡할 수 있으며, 추가적인 인프라 관리가 필요하다.

Reverse Proxy를 언제 써야 좋은지

트래픽이 많은 웹 서비스에서 부하 분산이 필요할 때.
내부 서버를 보호하고 보안을 강화할 때.
SSL 인증서 관리를 중앙화하고 싶을 때.
캐싱을 통해 응답 속도를 높이고 싶을 때.

Reverse Proxy를 사용하지 않으면 생기는 일

트래픽이 증가할 경우 단일 서버에 부하가 집중되어 성능 저하나 서비스 중단이 발생할 수 있다.
내부 서버의 IP와 구조가 노출되어 보안 취약점이 발생할 수 있다.
SSL 인증서 관리가 분산되어 관리 부담이 증가할 수 있다.

Nginx

Nginx는 경량 웹서버로, 정적 파일을 제공하는 웹 서버 역할을 하며, 또한 요청을 다른 서버로 전달하는 리버스 프록시 서버로도 사용된다. 웹 애플리케이션 서버(WAS)의 부하를 줄이고 로드 밸런싱을 통해 시스템 효율성을 높일 수 있다.

Nginx와 Apache의 차이점

Nginx는 이벤트 기반(event-driven) 구조로 동작한다.
적은 수의 고정된 프로세스로 많은 요청을 동시에(concurrency) 처리할 수 있음을 의미한다.
반면, Apache 웹서버는 각 요청마다 새로운 스레드를 생성하여 처리하기 때문에 요청이 많아질수록 자원 소모가 크다.

Nginx의 구조

Nginx는 설정 파일을 읽고 유효성을 검사하는 마스터 프로세스와 실제 요청을 처리하는 워커 프로세스로 구성된다.
Nginx는 이벤트 기반 모델을 사용하여 워커 프로세스 간에 요청을 효율적으로 분배하며, 운영체제(OS) 의존적인 메커니즘을 사용해 이를 최적화한다. 워커 프로세스의 수는 설정 파일에서 정의되며, 사용 가능한 CPU 코어 수에 맞게 자동 조정된다.

Nginx의 주요 기능

HTTP 서버: 정적 콘텐츠 제공, FastCGI, uWSGI, SCGI, Memcached와의 인터페이스, TLS/SSL 지원.
Reverse Proxy 및 로드 밸런서: 다중 백엔드 서버에 요청을 분산시켜 부하를 분산하고 고가용성을 제공.
메일 프록시: IMAP, POP3, SMTP 프로토콜을 지원.
TCP/UDP 프록시: 일반적인 TCP 및 UDP 트래픽을 프록시할 수 있다.

Nginx의 아키텍처

이벤트 기반의 비동기 아키텍처를 사용하여 높은 동시성을 지원한다.
멀티 프로세스 및 멀티 스레드 모델을 채택하여, 각각의 요청을 효율적으로 처리할 수 있다.
이벤트 기반 구조는 시스템에서 발생하는 다양한 이벤트(사건, 활동, 변화)에 따라 비동기적으로 작업을 처리하는 프로그래밍 모델이다. Nginx와 같은 서버 소프트웨어가 이 방식을 채택하는 이유는 많은 수의 클라이언트 요청을 효율적으로 처리하기 위함이다. 이벤트 기반 구조는 이벤트 루프, 이벤트 큐, 이벤트 핸들러를 중심으로 동작하여 많은 수의 요청을 효율적으로 처리한다. Nginx는 이러한 구조를 채택하여 높은 동시성, 낮은 자원 사용, 빠른 응답 시간을 제공한다. 이 방식은 서버의 성능을 최적화하고, 많은 수의 클라이언트 요청을 효과적으로 처리할 수 있게 한다.

Nginx의 사용 사례

웹 서버로 사용되어 정적 콘텐츠를 제공하고, 리버스 프록시로서 백엔드 서버와 클라이언트 사이의 트래픽을 중계한다.
로드 밸런싱을 통해 여러 서버에 부하를 분산시켜 웹 애플리케이션의 성능을 향상시킨다.
TLS/SSL 종료를 통해 보안 통신을 처리하고, 내부 서버의 부담을 줄인다.

Nginx의 장단점

장점
이벤트 기반 구조로 높은 동시성 처리 능력.
낮은 메모리 사용량.
정적 콘텐츠 제공에 강점.
리버스 프록시, 로드 밸런싱 기능 우수.
단점
.htaccess 같은 개별 디렉토리 설정을 지원하지 않음.
동적 콘텐츠 처리 능력에서 Apache보다 부족할 수 있음.

Nginx가 이벤트 기반으로 동작해서 많은 요청을 동시에 처리할 수 있는 이유

1.
이벤트 기반 아키텍처
Nginx는 이벤트 기반 아키텍처를 사용한다.
이벤트 기반 아키텍처에서는 하나의 워커 프로세스가 여러 이벤트를 감지하고 처리한다.
시스템 자원을 효율적으로 사용할 수 있도록 한다.
2.
비동기 방식
Nginx는 비동기 방식으로 동작한다.
비동기 방식은 요청을 처리할 때 블로킹되지 않는다.
즉, 하나의 요청이 완료되기를 기다리지 않고 다른 요청을 처리할 수 있다.
3.
논 블로킹 I/O
Nginx는 논 블로킹 I/O를 사용한다.
논 블로킹 I/O는 I/O 작업이 완료되기를 기다리지 않고 다른 작업을 계속 수행한다.
많은 수의 동시 요청을 효율적으로 처리할 수 있게 한다.

Nginx의 논 블로킹 방식의 장점

1.
높은 동시성
논 블로킹 방식은 많은 요청을 동시에 처리할 수 있다.
자원을 효율적으로 사용하게 한다.
2.
낮은 자원 사용
논 블로킹 방식은 블로킹 상태를 최소화하여 CPU와 메모리 사용을 줄인다.
서버의 성능을 최적화한다.
3.
빠른 응답 시간
논 블로킹 방식은 요청 대기 시간을 줄여 빠른 응답을 제공한다.
사용자 경험을 향상시킨다.

잠깐 그러면 왜 논 블로킹 방식의 퍼포먼스가 더 잘 나올까?

1.
컨텍스트 스위칭 최소화
논 블로킹 방식은 컨텍스트 스위칭을 최소화한다.
CPU의 오버헤드를 줄여 성능을 향상시킨다.
2.
자원 사용 최적화
논 블로킹 방식은 자원을 최적화하여 사용한다.
시스템의 전반적인 성능을 향상시킨다.
3.
I/O 대기 시간 감소
논 블로킹 방식은 I/O 대기 시간을 줄인다.
응답 시간을 단축하고 처리량을 증가시킨다.

정리

리버스 프록시는 웹 애플리케이션의 보안과 성능을 향상시키기 위해 사용되며, Nginx는 이러한 기능을 제공하는 강력한 도구이다. Nginx의 이벤트 기반 비동기 처리 방식은 많은 요청을 적은 리소스로 효율적으로 처리할 수 있게 해준다.
Nginx는 이벤트 기반 비동기 아키텍처를 사용하여 동기 작업과는 달리 비동기 작업은 요청을 블로킹하지 않고 빠르게 처리할 수 있다.
논 블로킹 방식은 높은 동시성, 낮은 자원 사용, 빠른 응답 시간을 제공하여 서버 성능을 최적화한다.
컨텍스트 스위칭을 최소화하고 자원을 최적화하여 I/O 대기 시간을 감소시키기 때문에 퍼포먼스가 더 잘 나온다.