과거 클라이언트 서버에 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
부족한 글 읽어주셔서 감사합니다~
피드백 환영합니다~