본문 바로가기

개발/웹

WAS와 웹서버, 웹컨테이너 그리고 servlet

 

🌐 WAS, 웹서버, 웹컨테이너, 그리고 서블릿 정리


✅ WAS란?

**WAS(Web Application Server)**는
자바 기반 웹 애플리케이션을 실행시켜주는 서버를 말한다.

사용자의 요청을 받아 자바 코드(컨트롤러, 서비스 로직 등)를 실행하고, 그 결과를 HTTP로 응답하는 역할을 한다.
WAS는 일반 웹서버로는 불가능한 **"동적 처리"**를 가능하게 한다.


✅ 웹서버란?

웹서버는 주로 정적인 리소스를 제공하는 역할을 한다.
예를 들어 HTML, CSS, JavaScript, 이미지 파일 등을 클라이언트에게 그대로 전달한다.

대표적인 웹서버

  • Apache HTTP Server
  • Nginx

하지만 웹서버는 자바로 작성된 로직(JSP, Spring 컨트롤러 등)을 실행하지 못한다.
그래서 웹컨테이너와 함께 동작하는 WAS가 필요하다.


✅ 웹컨테이너란?

웹컨테이너는 자바 웹 애플리케이션의 핵심 구성 요소 중 하나로,
Servlet이라는 자바 클래스(웹 요청 처리 코드)를 실행하고 관리하는 역할을 한다.

웹컨테이너의 주요 기능

  • HTTP 요청을 받아 해당 서블릿으로 매핑
  • 서블릿 객체 생성 및 생명주기 관리
  • 응답 반환

대표적인 웹컨테이너

  • Tomcat (가장 널리 사용됨)
  • Jetty, Undertow (Spring Boot에서 옵션으로 사용 가능)

✅ Servlet이란?

Servlet은 자바 코드로 작성된 웹 요청 처리 클래스다.
즉, HTTP 요청을 받아서 처리하고 응답을 만들어주는 자바 클래스다.

과거에는 개발자가 직접 서블릿을 작성했지만,
현재는 Spring과 같은 프레임워크가 내부적으로 서블릿을 자동 등록하고 관리한다.

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse res) {
        res.getWriter().write("Hello, world!");
    }
}

지금 우리가 작성하는 Spring 컨트롤러도 내부적으로는 서블릿 기반으로 동작한다.


✅ WAS는 왜 "웹서버 + 웹컨테이너"인가?

WAS는 웹서버와 웹컨테이너의 기능을 모두 포함하는 구조다.

구조적으로 보면:

  • 웹서버: 정적 리소스(HTML, JS, 이미지 등) 응답
  • 웹컨테이너: 서블릿 실행 → 동적 웹 로직 처리
  • WAS: 이 둘을 결합한 웹 애플리케이션 실행 환경

요청 처리 흐름

[브라우저 요청]
    ↓
[웹서버] - 정적 요청이면 바로 응답
    ↓
[웹컨테이너] - 동적 요청이면 서블릿 실행
    ↓
[응답 반환]

Spring Boot는 Tomcat(웹서버 + 웹컨테이너 포함)을 내장하고 있어서,
단독으로도 WAS 역할을 수행할 수 있다.


💬 면접에서 이렇게 설명하면 좋아요

WAS는 웹 애플리케이션을 실행하는 서버로, 웹서버와 웹컨테이너로 구성되어 있습니다.
웹서버는 정적인 파일을 처리하고, 웹컨테이너는 서블릿을 실행하여 자바 기반의 동적 요청을 처리합니다.
Servlet은 HTTP 요청을 처리하는 자바 클래스이며, Spring에서는 이 과정을 프레임워크가 대신 처리해줍니다.


✅ 마무리 요약

용어 설명

웹서버 정적인 파일 응답 (HTML, CSS 등)
웹컨테이너 서블릿 실행 및 HTTP 요청 처리
Servlet 자바로 만든 웹 요청 처리 클래스
WAS 웹서버 + 웹컨테이너 결합된 서버 (Spring Boot 내장 Tomcat 등)

 

'개발 > ' 카테고리의 다른 글

Restful API와 JWT  (0) 2025.05.23