🇶 웹 서버(Web Server)와 WAS(Web Application Server)의 차이를 설명하고, Spring Boot의 내장 톰캣이 이 둘 중 어디에 해당하는지 설명해주세요.
웹 서버는 정적 리소스 제공, WAS는 애플리케이션 로직을 실행함.
Spring Boot의 내장 톰캣은 Web Server 와 Web Application Server 역할 모두 수행한다.
웹 서버(Web Server)
Web Server는 클라이언트의 request에 조건에 맞는 리소스(html, css,js 등)을 전달한다. 결과적으로 UI를 렌더링하는데 필요한 리소스들을 클라이언트에게 전달하기 때문에 3-tier 아키텍처(아래참고) 에서 Presentation Layer에 해당된다.
WAS(Web Application Server)
Web Application Server는 이름에서도 볼수있듯이, Application의 핵심 로직을 처리한다. 3-tier 아키텍처(아래참고) 에서 Application Layer에 해당된다. 클라이언트의 request를 분석하고 적절한 처리를 하는 비즈니스 로직을 수행한다.
애플리케이션 실행 흐름 정리
1.클라이언트가 브라우저에서 요청 → Web Server에서 정적 리소스 응답 또는 요청을 WAS로 전달
2.WAS가 Servlet 실행 → Service, DAO, DB 처리
3.처리 결과를 클라이언트에게 전달
Spring Boot의 내장 톰캣은 Web Server or Web Application Server??
Standalone 톰캣(일반 톰캣)은 Web Server로 잘 사용하지 않고 서블릿 컨테이너의 역할을 위해 사용됨.
참고) ( Apache Tomcat® software is an open source implementation of the [Jakarta Servlet], [Jakarta Pages], [Jakarta Expression Language], [Jakarta WebSocket], [Jakarta Annotations] and [Jakarta Authentication]
https://docs.spring.io/spring-boot/how-to/webserver.html
그러나 스프링의 Embedded 톰캣은 Servlet 컨테이너의 역할말고 Web Server로의 역할도 추가적으로 수행함.
3-tier 아키텍처
웹 애플리케이션을 기능별로 3개의 계층 으로 나눈 구조
1.Presentation Layer (프레젠테이션 계층) : 프론트엔드 영역 + web server
→ 웹 브라우저 또는 HTTP 요청을 보낼 수 있는 어떤 프로그램이든 될 수 있으며, 서버에게 리소스를 요청
→ 사용자 인터페이스, 보통 웹 브라우저에 보이는 화면 (HTML/CSS/JavaScript)
→ Web server 도 http를 제공해주므로 프레젠테이션 계층이다.
The web server is the presentation tier and provides the user interface.
2.Application Layer (비즈니스 로직 계층)
→ 애플리케이션의 핵심 로직 처리. 사용자 요청을 분석하고 적절한 처리를 함.
👉 여기서 Servlet이 주로 동작.
→ WAS(Web Application Server, ex.Tomcat, jetty) 도 application 계층으로, 동적요청 처리(JSP, Servlet 실행)
3.Data Layer (데이터 계층)
→ 데이터베이스에 접근하거나 데이터를 저장/조회하는 역할
+ Deep Dive
Q. 요즘은 서버에서 HTML을 보내지않고, JSON만 보내서 화면 렌더링은 클라이언트 (브라우저 + JS 프레임워크)가 HTML을 그려주는데, 이런 경우도 web server가 Presentation 계층일까?
-> JSON을 생성해서 전달하는 REST API 서버 는 비즈니스 로직처리하여 JSON으로 데이터를 제공하므로, 애플리케이션 계층에 더 가깝다고 볼수있음. presentation layer의 역할은 대부분 클라이언트(브라우저)쪽으로 이동.
Q. Java 프로젝트에 Tomcat은 필수인가?
-> 무조건 써야하는건 아니지만 기본이다. Servlet 기반의 웹 애플리케이션을 사용한다면 기본으로 씀.
-> 원한다면 Jetty(가볍고 빠르며, 비동기 처리, 내장형으로 굿) 나 Undertow(매우 가볍고 모듈화) 로 교체가능함.
Q. Java 가 아닌 백엔드(Node.js, 파이썬 등등)에서 Tomcat을 쓸까?
-> 전혀 쓰지 않음❌ 대신 Nginx나 Apache HTTP Server를 사용
Q.Standalone 톰캣은 Web Server가 될수있나?
할수는 있으나, 고성능 정적 리소스 처리나 보안 설정 등은 Nginx, Apache HTTP Server보다 약함. 그래서 실무에서는 둘다 사용하는 경우가 많음.
Nginx (Web Server)
↓ Reverse Proxy
Tomcat (WAS)'코딩 부트캠프' 카테고리의 다른 글
| 위클리 페이퍼 - 웹 API가 SOAP에서 REST 로 전환된 이유 + 장/단점 (0) | 2025.05.17 |
|---|---|
| 위클리 페이퍼 - Spring에서 @Controller와 @RestController를 따로 쓰는 이유 (0) | 2025.05.15 |
| 위클리 페이퍼 - Spring에서 AOP를 쓰는 이유 + 실무 예시 (0) | 2025.05.15 |
| 위클리 페이퍼 - Spring Boot의 다양한 Bean 등록 방법들 + 장단점 비교 (1) | 2025.05.06 |
| 위클리페이퍼 4 - 프레임워크 vs 라이브러리 (0) | 2025.04.27 |
| 위클리페이퍼 4 - Spring Framework가 왜 필요할까? (0) | 2025.04.26 |
| 위클리페이퍼 3 - O(n)과 O(log n)의 성능 차이 (0) | 2025.04.20 |
| 위클리페이퍼 3 - HashSet은 어떻게 효과적인 중복 체크가 가능할까? (0) | 2025.04.20 |