Nginx 와 Reverse Proxy 그리고 Docker

1차 카테고리
Web
2차 카테고리
Nginx
생성 일시
2025/01/15 02:22
최종 편집 일시
2025/02/08 12:03
발행여부
unpublished
과거 클라이언트 서버에 Docker 이미지를 직접 업로드하면서 배포하는 작업을 했었다. 그때는 가이드가 있어서 따라하기만 하면 되었기에 어렵지 않았다. 하지만 당시에는 기술적으로 이해하기 어려운 부분들이 많았다. 그 중 하나가 Reverse Proxy 개념이었다. 도저히 이해가 안갔었다. 당시에는 네트워크 지식이 부족했었던 것 같다.
계속 반복해서 보다보니 어느 정도 머리로는 이해가 되었지만, 정리할 필요가 있는 주제라 생각했다. 모든 주제 프론트, 백, 인프라는 결국 연결된다. 마찬가지로 지식도 연결이 되면서 깊어짐을 느낀다. 따라서 왜 Nginx를 쓰는지. 어떻게 Docker에서 Reverse Proxy를 이용하는지 최대한 정리해보려고 한다.

웹서버

웹 서버는 HTTP 요청을 읽어서, 응답을 해주는 프로그램이다. 웹서버 프로그램을 서버 상에 설치하여, 특정 HTTP 요청에 따라, 클라이언트에게 필요한 리소스(HTML, CSS, JS 등)를 제공하는 역할을 한다. 이 웹서버로는 대표적으로 Apache, Ngnix가 있다.
그런데 최근에는 Nginx를 많이 접하고 있다. 그런데 왜 Nginx를 쓰는지는 감이 오지 않는다. 그렇다면 우리는 무엇을 쓰는게 맞는지 어떻게 결정할까? 이에 대한 이해를 하는게 어려웠다. 레퍼런스들만 찾아봐도 Nginx가 더 좋다고 한다. 그렇다면 Apache를 쓰는 사람들은 왜 쓰고 있는지가 의문이다.
그래서 점유율부터 조사해봤다.

2020년까지 웹 서버 점유율

2025년 웹 서버 점유율

Apache vs Nginx

Apache

프로세스 기반 아키텍쳐를 가지고 있다. 하나의 스레드가 하나의 요청을 처리하는 구조이다. 매 요청마다 스레드를 생성 및 할당해야 하기 때문에 리소스를 많이 잡아먹는다.
Prefork MPM(Multi Processing Module)
HTTP 요청이 올 때마다, 프로세스를 복제하여, 각각 별도 프로세스에서 HTTP 요청 처리.
Worker MPM(Multi Processing Module)
하나의 HTTP 연결 후, 여러 요청을 처리하기 위해, 복제된 프로세스 내에서 여러 쓰레드를 생성하여, 여러 HTTP 요청을 처리하는 방식.
동적 콘텐츠(예: PHP, Python) 처리에 강점이 있다.

Nginx

이벤트 기반의 아키텍쳐이다. 비동기적이고 단일 스레드로 동작. 요청을 처리하는 효율성이 높음. 적은 리소스로 많은 동시 연결을 처리할 수 있다.
Event Driven 방식
하나의 프로세스로 동작하며, HTTP 요청을 event로 비동기 방식으로 먼저 처리되는 요청을 진행.
정적 파일 제공 속도가 Apache보다 빠름. 리버스 프록시, 로드 밸런싱, 캐싱에서 높은 성능 발휘.
설정이 한 곳(nginx.conf)에서 중앙집중적으로 관리됨.
정리해보면 Nginx에서는 리소스를 적게 사용하기 때문에,

 Reference

부족한 글 읽어주셔서 감사합니다~ 피드백 환영합니다~