웹 서버 vs WAS

양성준·2025년 3월 17일

스프링

목록 보기
12/49

1. 웹 서버(Web Server)란?

"정적인 콘텐츠(HTML, CSS, JS, 이미지 등)를 제공하는 서버"

  • 주요 역할
    • 클라이언트(웹 브라우저)의 HTTP 요청을 처리하고 정적인 파일을 반환
    • 단순한 파일 서버 역할 수행
    • 동적인 요청(PHP, Java, Python 등 코드 실행이 필요한 요청)은 WAS로 전달
  • 특징
    • 요청을 받고 바로 응답 (리소스가 있으면 즉시 반환)
    • 비즈니스 로직 실행 기능이 없음
  • 대표적인 웹 서버
    • Apache HTTP Server
    • Nginx
    • Microsoft IIS

  • 작동 방식
    • 사용자가 브라우저에서 https://example.com/index.html 요청
    • 웹 서버가 index.html 파일을 찾아 브라우저에 전달
    • 브라우저는 HTML을 렌더링하여 화면에 표시
  • 예제 (웹 서버가 정적 리소스를 제공하는 경우)
GET /index.html HTTP/1.1
Host: example.com
  • 웹 서버(Apache/Nginx)가 index.html을 찾아 브라우저에 반환

2. WAS(Web Application Server)란?

  • "동적인 요청을 처리하는 서버 (비즈니스 로직 실행, 데이터베이스 연동 등)"

    • "톰캣 같은 실행 환경" + "우리가 만든 웹 애플리케이션 코드"를 합친 개념
    • 톰캣 같은 WAS 엔진 위에서 돌아가는 코드들(Controller, Service, Repository, 설정 등)은 전부 WAS의 일부
  • 주요 역할

    • HTTP 요청 수신 (톰캣 같은 WAS 엔진이 받음)
    • 서블릿 실행 (예: DispatcherServlet)
    • 우리가 만든 로직 실행 (Spring Controller, Service, Repository 등)
    • DB에 접근해서 데이터 가져오거나 저장
    • 결과를 가공해서 HTML, JSON 등으로 응답 생성
    • 응답을 클라이언트에게 전달
  • 특징

    • HTTP 요청을 분석하고 동적인 응답 생성 가능
    • 웹 서버와 함께 사용될 수도 있고, 단독으로 실행될 수도 있음
  • 대표적인 WAS

    • Tomcat (톰캣)
    • JBoss / WildFly
    • WebLogic
    • WebSphere
  • 작동 방식

    • 사용자가 https://example.com/user/123 요청
    • WAS가 userId=123을 분석하고 데이터베이스에서 해당 유저 정보를 조회
    • 조회한 데이터를 가공하여 JSON 응답 반환
  • 예제 (WAS가 동적인 요청을 처리하는 경우)

GET /user/123 HTTP/1.1
Host: example.com
  • WAS(Tomcat)가 해당 요청을 분석하고, User 정보를 DB에서 조회하여 JSON으로 응답

3. 웹 서버 vs WAS 비교 정리

4. 톰캣

"톰캣은 WAS 엔진이다!"

  • Apache Tomcat(톰캣)은 Java Servlet과 JSP(JavaServer Pages)를 실행할 수 있게 해주는 오픈소스 웹 애플리케이션 서버(WAS)다.
  • 즉, 톰캣은 HTTP 요청을 받아 서블릿(Servlet)을 실행하고, 그 결과를 HTTP 응답으로 돌려주는 역할을 한다.
  • 이런 역할을 "WAS(Web Application Server)의 핵심 엔진" 이라고 부르며,
    톰캣은 WAS의 기능을 수행하는 소프트웨어, 즉 WAS 엔진이라고 할 수 있다.

톰캣은 무엇을 담당할까?

  • 클라이언트(브라우저 등)로부터 HTTP 요청을 수신한다. (예: /login)
  • 요청을 분석한 후, 톰캣 내의 서블릿 컨테이너(Servlet Container)가 DispatcherServlet과 같은 서블릿 객체를 찾아 생성 또는 재사용하여 실행한다.
  • DispatcherServlet은 Spring MVC의 핵심 서블릿으로,내부적으로 요청을 적절한 Controller로 전달하고, 이후
    Service → Repository를 거쳐 비즈니스 로직을 수행한다.
  • 처리 결과(HTML, JSON 등)를 받아 다시 응답 객체로 만들어, 톰캣이 클라이언트에게 HTTP 응답으로 전송한다.

=> 즉, 톰캣이 요청을 처리하고, 그 위에서 동작하는 Spring 등의 프레임워크가 비즈니스 로직을 수행하는 구조!
이 전체 흐름이 WAS이고, 톰캣은 그 핵심에서 돌아가는 엔진인 것.

예시 흐름 (Spring Boot 기준)

  • 사용자가 /api/users에 요청
  • 톰캣이 요청을 수신 (WAS 역할 시작)
  • Spring DispatcherServlet이 요청을 분석
  • Controller → Service → Repository 흐름을 거쳐 DB 처리
  • 결과를 응답으로 만들어 톰캣이 다시 전달

5. Spring Boot 내장 톰캣은 어디에 해당할까?

"Spring Boot의 내장 톰캣은 WAS(Web Application Server)에 해당"

  • 이유
    • Spring Boot는 내장 톰캣(Tomcat Embedded)을 사용하여 동적인 요청을 처리
    • 웹 서버 없이 WAS 단독으로 실행 가능 (Nginx, Apache 없이도 실행 가능)
    • 서블릿 컨테이너 역할을 하면서 Spring MVC, Rest API 등을 실행할 수 있음
  • Spring Boot의 내장 톰캣 구조
    • Spring Boot 프로젝트를 실행하면 Tomcat Embedded가 실행되며, 애플리케이션을 배포할 수 있는 서블릿 컨테이너 역할을 함.
  • Spring Boot 실행 시 동작 과정
    • 사용자가 웹 요청을 보냄
    • 내장 톰캣(WAS)이 요청을 처리
    • Spring MVC 컨트롤러가 동작
    • 비즈니스 로직 실행 & 데이터베이스 연동
    • JSON 또는 HTML 응답 반환

6. 결론: Spring Boot + 톰캣 사용 방식

  • Spring Boot는 내장 톰캣만 사용 (WAS 단독)
    • 애플리케이션 실행 시, 내장된 톰캣이 바로 실행됨 (java -jar app.jar)
    • Nginx 같은 별도 웹 서버 없이 직접 클라이언트 요청을 처리할 수 있음
    • 작은 프로젝트에서는 이 방식이 일반적
  • 웹 서버(Apache, Nginx)와 함께 사용 (Reverse Proxy)
    • Nginx(Apache)를 프론트로 두고, Spring Boot의 내장 톰캣을 WAS로 사용
    • Nginx가 정적 리소스(HTML, JS)를 처리하고, API 요청을 WAS(Spring Boot)로 전달
    • 트래픽 분산, 보안, 로드 밸런싱 등의 이점이 있음
  • 추천 구조
    • 소규모 프로젝트 → Spring Boot 내장 톰캣만 사용 가능
    • 대규모 프로젝트 → Nginx + Spring Boot 톰캣 (Reverse Proxy 설정)
  • 최종 정리
  • Spring Boot의 내장 톰캣은 WAS에 해당하며, 웹 서버 없이도 동작할 수 있음!
  • 하지만 Nginx 같은 웹 서버와 함께 사용하면 성능과 확장성이 더욱 향상될 수 있음
profile
백엔드 개발자를 꿈꿉니다.

0개의 댓글