1. 들어가며
웹 개발을 시작하면 가장 많이 듣는 용어가 있습니다.
바로 웹서버(Web Server) 와 WAS(Web Application Server) 입니다.
저 역시 처음에는 “둘 다 웹페이지를 띄워주는 프로그램 아닌가?”라고 생각했습니다.
하지만 실제 운영 환경에서 Nginx와 Tomcat을 다루면서 두 프로그램의 역할이 완전히 다르다는 것을 알게 되었습니다.
이번 글에서는 웹서버와 WAS의 차이, 그리고 Nginx와 Tomcat이 왜 함께 사용되는지 쉽게 설명해 보겠습니다
웹서버(Web Server)란?
웹서버는 사용자의 HTTP 요청을 가장 먼저 받는 프로그램입니다.
브라우저에서 URL을 입력하면 가장 먼저 웹서버가 요청을 받게 됩니다.
대표적인 웹서버로는 다음과 같은 프로그램이 있습니다.
- Nginx
- Apache HTTP Server
웹서버의 주요 역할은 다음과 같습니다.
- HTTP/HTTPS 요청 처리
- HTML, CSS, JavaScript, 이미지와 같은 정적 파일 제공
- SSL(TLS) 인증서 처리
- Reverse Proxy
- Load Balancing
예를 들어 브라우저에서 아래와 같이 이미지 파일을 요청했다고 가정해 보겠습니다.
https://example.com/images/logo.png
이 요청은 별도의 Java 프로그램을 실행할 필요 없이 웹서버가 바로 파일을 찾아 사용자에게 전달합니다.
즉, 정적인 파일을 빠르게 제공하는 것이 웹서버의 가장 큰 역할입니다.
WAS(Web Application Server)란?
WAS는 동적인 애플리케이션을 실행하는 서버입니다.
사용자의 요청에 따라 Java 코드를 실행하고, 데이터베이스를 조회한 뒤 결과를 생성하여 응답합니다.
대표적인 WAS는 다음과 같습니다.
- Apache Tomcat
- JEUS
- WebLogic
- WebSphere
예를 들어 로그인 기능을 생각해 보겠습니다.
사용자가 아이디와 비밀번호를 입력하면 단순히 HTML 파일을 전달하는 것이 아니라,
- 사용자 정보를 확인하고
- 데이터베이스를 조회하고
- 로그인 여부를 판단한 뒤
- 결과를 반환해야 합니다.
이러한 작업은 모두 WAS에서 수행됩니다.
Spring Boot, JSP, Servlet 등의 Java 애플리케이션도 Tomcat과 같은 WAS 위에서 실행됩니다.
웹서버와 WAS의 차이
웹서버와 WAS는 비슷해 보이지만 담당하는 역할이 다릅니다.
| 웹서버(Web Server) | WAS(Web Application Server) |
|---|---|
| 정적 파일 제공 | 동적 페이지 생성 |
| HTML, CSS, JS, 이미지 처리 | Java, JSP, Spring 실행 |
| HTTP/HTTPS 요청 처리 | 비즈니스 로직 수행 |
| SSL 인증서 처리 | 데이터베이스 연동 |
| Reverse Proxy | Controller, Service 실행 |
쉽게 말하면,
웹서버는 요청을 받아 전달하는 역할, WAS는 실제 프로그램을 실행하는 역할이라고 생각하면 이해하기 쉽습니다.
Nginx와 Tomcat은 왜 함께 사용할까?
그렇다면 이런 의문이 생길 수 있습니다.
“Tomcat도 웹 요청을 받을 수 있는데 Nginx는 왜 사용하는 걸까?”
결론부터 말하면 각자의 역할이 다르기 때문입니다.
실제 서비스에서는 대부분 다음과 같은 구조를 사용합니다.
사용자
│
▼
Nginx
│
▼
Tomcat
│
▼
Oracle
먼저 Nginx가 사용자의 요청을 받습니다.
이미지나 CSS 같은 정적 파일이라면 Nginx가 직접 응답합니다.
반면 로그인, 게시글 조회, 회원가입처럼 Java 프로그램이 필요한 요청은 Tomcat으로 전달합니다.
Tomcat은 Spring 애플리케이션을 실행하고 Oracle과 통신한 뒤 결과를 다시 Nginx를 통해 사용자에게 전달합니다.
이처럼 웹서버와 WAS가 역할을 분담하기 때문에 전체적인 성능과 안정성을 높일 수 있습니다.
실제 요청은 어떻게 처리될까?
예를 들어 로그인 버튼을 눌렀다고 가정해 보겠습니다.
전체 흐름은 다음과 같습니다.
브라우저
│
▼
Nginx
│
▼
Tomcat
│
▼
Spring Controller
│
▼
Service
│
▼
MyBatis
│
▼
Oracle Database
│
▼
Tomcat
│
▼
Nginx
│
▼
브라우저
사용자는 단순히 로그인 버튼만 눌렀다고 생각하지만, 실제 서버 내부에서는 이러한 과정을 거쳐 응답이 생성됩니다.
Tomcat만 사용하면 안 될까?
물론 가능합니다.
Tomcat도 자체적으로 HTTP 요청을 처리할 수 있기 때문에 소규모 프로젝트에서는 Tomcat만 사용하는 경우도 있습니다.
하지만 운영 환경에서는 대부분 Nginx와 함께 사용합니다.
그 이유는 다음과 같습니다.
- 정적 파일 처리 성능이 우수하다.
- SSL 인증서를 쉽게 적용할 수 있다.
- Reverse Proxy 구성이 가능하다.
- 여러 대의 Tomcat으로 요청을 분산할 수 있다.
- 보안 설정을 적용하기 쉽다.
그래서 실제 서비스에서는 Nginx + Tomcat 구조가 가장 많이 사용됩니다.
실무에서는 이렇게 사용합니다
제가 운영하는 서버 역시 대부분 Nginx와 Tomcat을 함께 사용하는 구조입니다.
사용자는 Nginx에 접속하지만 실제 Java 애플리케이션은 Tomcat에서 실행됩니다.
이 구조를 이해하고 나니 장애를 분석하는 방법도 달라졌습니다.
예를 들어 사이트가 접속되지 않는다고 해서 무조건 Tomcat 문제라고 생각하면 안 됩니다.
다음과 같은 다양한 원인을 함께 확인해야 합니다.
- Nginx 서비스가 정상적으로 실행 중인지
- Reverse Proxy 설정이 올바른지
- SSL 인증서에 문제가 없는지
- Tomcat 프로세스가 살아 있는지
- 방화벽이나 네트워크 설정에 문제가 없는지
실제로 운영하다 보면 Tomcat은 정상인데 Nginx 설정이나 네트워크 문제 때문에 사이트가 접속되지 않는 경우도 자주 발생합니다.
마무리
웹서버와 WAS는 모두 웹 서비스를 제공하기 위한 중요한 구성 요소이지만 담당하는 역할은 서로 다릅니다.
웹서버는 사용자의 요청을 받아 전달하고, 정적 파일을 빠르게 제공하는 역할을 합니다.
반면 WAS는 Java 애플리케이션을 실행하고 데이터베이스와 통신하며 실제 비즈니스 로직을 수행합니다.
Nginx와 Tomcat을 함께 사용하는 이유도 각자의 역할을 분리하여 성능과 안정성을 높이기 위해서입니다.
웹 개발을 처음 시작했다면 두 프로그램을 별개의 서버라고 생각하기보다 “웹 요청을 처리하는 역할”과 “애플리케이션을 실행하는 역할”을 나누는 구조라고 이해하면 훨씬 쉽게 개념을 익힐 수 있습니다.
함께 읽으면 좋은 글
👉 Reverse Proxy란? | Nginx가 Tomcat 앞에 있는 이유