들어가며
웹 서버를 공부하다 보면 Reverse Proxy라는 용어를 자주 접하게 됩니다.
처음에는 단순히 “Nginx가 Tomcat 앞에 있는 구조” 정도로만 이해했지만, 실제 서버를 운영하면서 Reverse Proxy의 역할이 생각보다 훨씬 중요하다는 것을 알게 되었습니다.
특히 대부분의 Spring 프로젝트에서는 Nginx와 Tomcat을 함께 사용하는 구조를 사용합니다.
그렇다면 왜 사용자는 Tomcat에 직접 접속하지 않고 Nginx를 거쳐서 접속할까요?
이번 글에서는 Reverse Proxy의 개념과 Nginx가 Tomcat 앞에서 어떤 역할을 하는지 쉽게 알아보겠습니다.
Proxy란?
먼저 Reverse Proxy를 이해하려면 Proxy가 무엇인지 알아야 합니다.
Proxy는 말 그대로 대리인입니다.
사용자 대신 요청을 전달하거나 응답을 받아오는 역할을 합니다.
예를 들어 회사에서 인터넷 접속 시 Proxy 서버를 거치는 경우가 있습니다.
사용자
│
▼
Proxy Server
│
▼
인터넷
사용자는 실제 인터넷과 직접 통신하지 않고 Proxy 서버를 통해 요청을 보내게 됩니다.
이를 Forward Proxy라고 합니다.
Reverse Proxy란?
Reverse Proxy는 이름 그대로 반대 방향의 Proxy입니다.
사용자는 Reverse Proxy 서버에 접속하지만 실제 요청은 내부 서버로 전달됩니다.
대표적인 구조는 다음과 같습니다.
사용자
│
▼
Nginx (Reverse Proxy)
│
▼
Tomcat
사용자는 Tomcat이 존재하는지조차 알지 못합니다.
모든 요청은 먼저 Nginx가 받고, 필요한 경우 Tomcat으로 전달합니다.
즉,
사용자와 실제 애플리케이션 서버 사이에서 중간 역할을 하는 서버가 Reverse Proxy입니다.
Nginx가 Tomcat 앞에 있는 이유
Tomcat도 HTTP 요청을 받을 수 있는데 왜 굳이 Nginx를 앞에 둘까요?
가장 큰 이유는 역할을 분리하기 위해서입니다.
Nginx는 다음과 같은 작업을 담당합니다.
- HTTP/HTTPS 요청 처리
- SSL 인증서 관리
- 정적 파일 제공
- Reverse Proxy
- Load Balancing
Tomcat은
- Java 실행
- Spring 실행
- Controller 호출
- Service 실행
- MyBatis 실행
- Database 연동
처럼 실제 비즈니스 로직을 수행합니다.
역할을 나누면 서버의 성능과 관리 효율이 좋아집니다.
실제 요청은 어떻게 처리될까?
예를 들어 로그인 요청이 들어왔다고 가정해 보겠습니다.
전체 흐름은 다음과 같습니다.
브라우저
│
▼
Nginx
│
▼
Tomcat
│
▼
Spring Controller
│
▼
Service
│
▼
MyBatis
│
▼
Oracle
│
▼
Tomcat
│
▼
Nginx
│
▼
브라우저
사용자는 하나의 URL만 접속했을 뿐이지만 내부에서는 여러 단계를 거쳐 응답이 생성됩니다.
Reverse Proxy를 사용하는 장점
1. SSL 인증서를 한 곳에서 관리할 수 있다.
HTTPS를 사용하는 서비스에서는 SSL 인증서가 필요합니다.
Reverse Proxy를 사용하면 SSL 처리를 Nginx에서만 수행하면 됩니다.
Tomcat마다 인증서를 설정할 필요가 없어 관리가 편리합니다.
2. 정적 파일을 빠르게 제공할 수 있다.
이미지, CSS, JavaScript 파일은 Java 애플리케이션을 실행할 필요가 없습니다.
Nginx가 직접 응답하기 때문에 Tomcat의 부담을 줄일 수 있습니다.
3. 여러 대의 Tomcat으로 요청을 분산할 수 있다.
서비스 규모가 커지면 Tomcat을 여러 대 운영하기도 합니다.
사용자
│
▼
Nginx
│ │
▼ ▼
Tomcat1 Tomcat2
│
▼
Database
Nginx가 요청을 적절히 분산해 주기 때문에 특정 서버에만 부하가 집중되는 것을 방지할 수 있습니다.
4. 내부 서버를 외부에 노출하지 않는다.
사용자는 Nginx에만 접속합니다.
Tomcat은 내부 네트워크에서만 동작하도록 구성할 수 있어 보안 측면에서도 유리합니다.
외부에서는 Tomcat의 포트나 IP를 직접 알 필요가 없습니다.
Reverse Proxy가 없다면?
만약 Reverse Proxy가 없다면 사용자는 Tomcat에 직접 접속해야 합니다.
사용자
│
▼
Tomcat
이 경우에도 서비스는 동작할 수 있습니다.
하지만 SSL 설정, 정적 파일 처리, 로드 밸런싱 등을 모두 Tomcat에서 처리해야 하므로 운영 환경에서는 비효율적인 경우가 많습니다.
그래서 대부분의 서비스에서는 Nginx와 같은 Reverse Proxy를 함께 사용합니다.
실무에서는 이렇게 사용합니다
제가 운영하는 서버 역시 대부분 Nginx + Tomcat 구조를 사용합니다.
사용자는 Nginx에 접속하지만 실제 Java 애플리케이션은 Tomcat에서 실행됩니다.
이 구조를 이해하고 나면 장애를 분석할 때도 훨씬 수월합니다.
예를 들어 사이트가 접속되지 않는다고 해서 무조건 Tomcat을 의심하기보다,
- Nginx가 정상적으로 실행 중인지
- Reverse Proxy 설정이 올바른지
- SSL 인증서가 정상인지
- Tomcat 프로세스가 살아 있는지
등을 순서대로 확인하게 됩니다.
실제로 운영하다 보면 Tomcat은 정상인데 Nginx 설정이나 SSL 문제로 인해 사이트 접속이 되지 않는 경우도 적지 않습니다.
마무리
Reverse Proxy는 단순히 요청을 전달하는 기능만 하는 것이 아닙니다.
SSL 처리, 정적 파일 제공, 로드 밸런싱, 보안 등 다양한 역할을 수행하며 실제 운영 환경에서는 거의 필수적인 구성 요소입니다.
Nginx와 Tomcat을 함께 사용하는 이유도 각자의 역할을 분리하여 성능과 안정성을 높이기 위해서입니다.
Reverse Proxy의 개념을 이해하면 웹 서비스의 전체 구조를 훨씬 쉽게 이해할 수 있고, 장애가 발생했을 때 원인을 파악하는 데에도 많은 도움이 됩니다.
함께 읽으면 좋은 글
👉 웹서버(Web Server)와 WAS의 차이 | Nginx와 Tomcat으로 쉽게 이해하기