왜 Tomcat은 WAS가 아닐까? 그런데 왜 실무에서는 WAS처럼 쓰일까?
- 프로그래밍/스프링
- 2025. 8. 20.
개발자라면 한 번쯤 들어본 말, “Tomcat은 WAS가 아니다.”
하지만 또 다른 자리에서는 “우리는 Tomcat으로 WAS를 운영한다.” 라는 이야기를 듣습니다.
도대체 Tomcat은 WAS일까요, 아닐까요?
그리고 왜 실무에서는 Tomcat이 사실상 WAS처럼 쓰일 수 있을까요?
1. WAS의 전통적 정의
WAS(Web Application Server)는 원래 Java EE(지금의 Jakarta EE) 표준을 구현한 서버 소프트웨어를 의미했습니다.즉, 단순히 웹 요청을 처리하는 것 이상으로, 다음과 같은 기능을 제공해야 했죠.
- 트랜잭션 관리 (JTA)
- ORM (JPA, 과거엔 EJB 엔티티 빈)
- 메시징 (JMS)
- 보안/세션 관리
- DI, 의존성 주입 (CDI)
IBM WebSphere, Oracle WebLogic, JBoss 같은 “전통적인 WAS”가 바로 이 역할을 수행했습니다.
2. Tomcat의 본질: Servlet/JSP 컨테이너
Tomcat은 오픈소스, 가볍고 빠른 Servlet/JSP 컨테이너입니다.
즉, Jakarta EE 풀 스펙을 모두 지원하지 않고, HTTP 요청 → Servlet 실행 → 응답 반환이라는 단순한 동작에 집중합니다.
따라서 전통적인 기준으로 보면, Tomcat은 “불완전한 WAS”입니다.
3. Spring이 가져온 변화
하지만 판도를 바꾼 건 Spring Framework입니다. Spring은 Tomcat이 가지지 못한 WAS 기능들을 자체적으로 제공합니다.
@Transactional
→ 트랜잭션 관리 (JTA 대체)- Spring Data JPA → JPA API 지원
- Spring Security → 인증/인가 (Jakarta EE Security 대체)
- DI/IoC 컨테이너 → 의존성 관리 (CDI 대체)
- 메시징 통합 → JMS, Kafka 등 다양한 브로커 연동
즉, Tomcat + Spring 조합 = 전통적 WAS가 제공하던 기능을 거의 모두 충족하게 된 것입니다.
4. 그래서 실무에서는?
- 과거: WebSphere, WebLogic 같은 대형 WAS에 의존
- 현재: Tomcat + Spring 조합으로 충분 → 비용 저렴, 가볍고 유연
- 결과: Spring Boot가 Tomcat을 내장 서버로 기본 제공 → 사실상 표준처럼 자리잡음
이제 “WAS”라는 단어는 더 이상 Jakarta EE 풀 스펙 서버만을 가리키지 않습니다.
실무에서는 단순히 “웹 서버(Nginx)와 구분되는, 동적 로직을 수행하는 서버” 정도의 의미로 확장되었죠.
5. 마치며
정리하면, Tomcat이 WAS처럼 쓰일 수 있는 건 Spring이 그 공백을 메워주기 때문입니다.
- Tomcat = Servlet 컨테이너 (기본기 담당)
- Spring = 엔터프라이즈 기능 세트 (부족한 기능 채워줌)
지금도 이 조합이 수많은 서비스의 표준 구조가 되고 있습니다.
'프로그래밍 > 스프링' 카테고리의 다른 글
Spring boot - Major Version 업데이트 JPA QueryDsl 문제 해결 (2.7.3 > 3.1.3) (0) | 2023.09.11 |
---|---|
Spring Security - MySql Password()을PasswordEncoder로 구현하는 방법 (0) | 2022.02.18 |
Spring Boot - 스프링 부트 Whitelabel 에러 처리 방법 (0) | 2021.10.26 |
Spring - 실무에서 사용하는 React + SpringBoot 프로젝트 만들기 with Gradle (4) | 2021.09.01 |
Spring boot - vuejs를 사용하는 스프링 부트 프로젝트 만들기 (0) | 2021.08.25 |