Web Server와 WAS, 뭐가 다른 걸까?

chaewon·2025년 5월 7일

스프링 부트를 배우면서 톰캣이 내장되어 있다라는 것을 배우는데
정작 Web Server랑 뭐가 어떻게 다른지 헷갈릴 때가 있다.
이 기회에 정리해봤다.

1. Web Server란?

Web Server는 정적인 자원(HTML, CSS, 이미지 파일 등)을 클라이언트에게 전달하는 역할

어떤 로직도 처리하지 않고 있는 파일 그대로 브라우저에 내려주는 것에 초점이 맞춰져 있다.
대표적인 예로는 Apache HTTP Server, Nginx 등이 있다.

특징으로는

  • 단순히 파일을 서빙
  • 동적인 데이터 처리는 하지 않음
  • 속도는 빠르지만, 할 수 있는 일이 제한적

2. WAS란?

WAS는 Web Application Server, 즉 동적인 로직을 처리하는 서버

사용자의 요청을 받아 내부에서 비즈니스 로직을 처리하고,
DB에 접근하거나 결과 데이터를 가공해 HTML 형태로 반환하는 등
말 그대로 어플리케이션을 동작시킨다.

Java 기준에서는 Servlet Container가 있는 서버를 의미한다.
Tomcat, Jetty, JBoss 등이 WAS로 분류된다.

  • 동적인 요청을 처리
  • 내부 로직, DB 접근, 사용자 요청 처리 등
  • 서블릿, JSP, Spring 같은 기술이 이 위에서 동작

3. 그럼 Spring Boot의 내장 톰캣은?

Spring Boot는 기본적으로 Tomcat을 내장한 구조
이 내장 톰캣은 단순한 Web Server가 아니라 Servlet Container로서의 역할을 수행

Spring Boot의 내장 톰캣은 단순히 정적인 파일만 서빙하는 게 아니라,
Controller의 로직을 처리하고 응답을 만들어주는 역할을 하기 때문에 WAS에 해당한다.


4. Web Server vs WAS 정리

항목Web ServerWAS (Web Application Server)
처리 대상정적 파일동적 요청
사용 목적정적 리소스 전달애플리케이션 실행
대표 기술Apache, NginxTomcat, Jetty, JBoss
서블릿 지원 여부

Spring Boot에서의 Bean 등록 방법

스프링에서는 객체를 직접 생성해서 사용하는 게 아니라
스프링 컨테이너에 Bean으로 등록하고, 필요한 곳에 주입해서 사용하는 구조다.
이 Bean을 등록하는 방법은 대표적으로 세 가지가 있다.


1. 어노테이션 기반 자동 등록 (Component Scan)

가장 많이 쓰는 방식
Spring은 클래스에 어노테이션이 붙어 있으면 자동으로 감지해서 Bean으로 등록한다.

@Component
public class MyComponent {}

@Service
public class MyService {}

@Repository
public class MyRepository {}

@Controller
public class MyController {}

@SpringBootApplication에는 @ComponentScan이 포함되어 있어서,
해당 클래스 기준 하위 패키지를 자동으로 스캔한다.

장점

  • 코드가 간결
  • 역할별로 구조화하기 쉬움
  • 자동 설정과 잘 어울림

단점

  • 조건부 설정이 어려움
  • 어떤 Bean이 등록되는지 명시적으로 보이지 않음
  • 동일한 타입의 Bean이 여럿 있을 경우 충돌 가능성

2. 자바 설정 클래스 등록 (@Configuration + @Bean)

직접 Bean을 생성하고 등록하고 싶을 때 사용한다.
의존성 주입도 수동으로 처리할 수 있어 정밀한 제어가 가능하다.

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

장점

  • 어떤 Bean이 등록되는지 명확하게 알 수 있음
  • 외부 라이브러리 클래스도 등록 가능
  • 조건부 설정 등 세밀한 제어 가능.

단점

  • 설정 코드가 길어짐
  • 자동 등록보다 번거로움

3. XML 설정 (거의 사용하지 않음)

Spring 초창기에는 XML 파일을 통해 Bean을 등록했지만,
Spring Boot 이후로는 거의 사용하지 않는다.

<bean id="myService" class="com.example.MyServiceImpl"/>

장점

  • 설정과 코드가 분리되

단점

  • 가독성이 떨어지고 유지보수가 어려움
  • 현대적인 Spring Boot 방식과 어울리지 않음

정리

등록 방식장점단점사용 시기
어노테이션 기반 등록코드 간결, 구조 파악 쉬움세밀한 제어 어려움일반적인 경우
자바 설정 클래스 등록명확한 제어 가능, 외부 객체 등록 가능설정 코드가 많아짐복잡한 설정이 필요한 경우
XML 설정설정/코드 분리가독성 떨어짐, Spring Boot에서 비권장레거시 프로젝트 유지보수 시 사용

0개의 댓글