WAS 역할
WAS가 애플리케이션 실행, 요청 매핑, 세션, DB 연결 준비를 담당하는 방식을 Tomcat 중심으로 정리한다.
WAS가 요청을 받는 구간
Client
-> Web Server
-> WAS
-> Application
-> DBMS
핵심 역할
WAS(Web Application Server)는 동적인 애플리케이션 로직을 실행하고, 요청을 실제 애플리케이션 코드로 연결하는 계층이다.
Web Server와 다른 점
Web Server는 주로 HTTP 요청을 받고 정적 리소스 또는 프록시를 처리한다. WAS는 애플리케이션을 실행한다.
| 구분 | Web Server | WAS |
|---|---|---|
| 주요 역할 | 정적 파일, TLS, 프록시, 라우팅 | 애플리케이션 실행, 세션, 비즈니스 로직 |
| 대표 제품 | Nginx, Apache HTTP Server | Tomcat, JEUS, JBoss/WildFly |
| 주요 로그 | access/error log | application log, catalina log |
| 장애 예 | 502, TLS 오류, upstream 오류 | 500, OOM, DB connection 오류 |
Tomcat 기준 구조
Tomcat은 Java 웹 애플리케이션을 실행하는 Servlet Container다. 핵심 구성요소는 다음과 같다.
| 구성요소 | 역할 |
|---|---|
Server | Tomcat 전체 인스턴스 |
Service | Connector와 Engine을 묶는 단위 |
Connector | 외부 요청을 받는 입구. HTTP 8080, AJP 8009 등 |
Engine | 요청 처리 파이프라인 |
Host | 도메인/호스트명 단위 가상 호스트 |
Context | 실제 웹 애플리케이션 단위 |
요청 처리 흐름은 다음처럼 볼 수 있다.
Connector
-> Engine
-> Host
-> Context
-> Servlet / Filter / Application
Context와 배포
Tomcat에서 Context는 웹 애플리케이션 하나를 의미한다. URL 경로와 애플리케이션 배포 단위가 연결된다.
| 배포 파일 | 일반적인 Context Path |
|---|---|
ROOT.war | / |
sample.war | /sample |
admin.war | /admin |
404가 발생했을 때는 Web Server의 location만 볼 것이 아니라 Tomcat의 Context Path와 WAR 파일명도 같이 확인해야 한다.
세션
WAS는 사용자 상태를 세션으로 관리할 수 있다. 단일 Tomcat에서는 메모리 세션으로 충분할 수 있지만, 여러 WAS로 로드밸런싱하면 세션 유지가 문제가 된다.
요청 1 -> Tomcat A: 로그인 세션 생성
요청 2 -> Tomcat B: 세션 없음
이 경우 sticky session, session clustering, Redis 같은 외부 세션 저장소, stateless 구조를 검토한다.
자주 확인하는 파일
| 항목 | 설명 |
|---|---|
conf/server.xml | Connector, Engine, Host 설정 |
conf/context.xml | Context 공통 설정 |
webapps/ | WAR 배포 위치 |
logs/catalina.out | 표준 출력 로그 |
logs/localhost_access_log.*.txt | Tomcat 접근 로그 |
bin/setenv.sh | JVM 옵션, 환경변수 설정 |
점검 포인트
| 확인 항목 | 예시 |
|---|---|
| 프로세스 | Tomcat이 실행 중인가 |
| 포트 | Connector 포트가 listen 중인가 |
| 배포 | WAR가 정상 배포되었는가 |
| Context | URL path와 Context Path가 맞는가 |
| 로그 | catalina/app log에 예외가 있는가 |
| 리소스 | heap, thread, file descriptor가 부족하지 않은가 |
관련 블로그 기록
- Tomcat Catalina.out 파일 용량 증가 문제 해결 — Tomcat 로그 파일이 운영 리스크가 되는 사례
- WAS가 죽기 전에 로그 남기기 — WAS 장애 전에 heap dump와 GC log를 남기도록 준비한 사례
닫기 전 질문
- 이 요청은 어떤 Context로 매핑되어야 하는가?
- Web Server에서는 정상인데 500이 난다면 WAS 로그에서 무엇을 볼 것인가?
- 여러 WAS로 분산할 때 세션은 어디에 저장되는가?