목표
- ServletContainer와 SpringContainer의 차이 이해하기
Servlet
Servlet이란?
웹 요청과 응답의 흐름을 간단한 메서드 호출로 처리할 수 있게 도와주는 Java Program이다.
Servlet은 HTTP 요청을 받아 처리한 후, 응답을 반환하는 역할을 한다.
Servlet are responsible for accepting a request, processing it, and sending a response back.
public interface Servlet {
void init(ServletConfig config) throws ServletException;
void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
void destroy();
}
주요 메서드
- init() : Servlet 생성될 때 한 번만 호출된다.
- 초기화 작업을 수행하고 필요한 자원을 할당합니다.
- service() : 클라이언트 요청이 발생할 때마다 호출되며, 실제 비즈니스 로직을 수행합니다.
- destory() : Servlet이 제거될 때 한 번만 호출되며, 할당된 자원을 해제합니다.

Servlet 필요성
1. Java Thread를 활용한 요청 처리
- 기존에는 (C or C++ 프로그램으로 만들어진) CGI(Common Gateway Interface)를 이용하여 Request마다 새로운 프로세스를 생성하여 처리해, 성능이 낮고 자원 소모가 많았다.
➡️ Servlet은 요청 당 프로세스가 아니라, 스레드를 생성하여 처리하므로 성능과 비용이 최적화되었습니다.
➡️ JVM에 의해 관리되기 때문에 Memory 관리에 용이하다.
2. SRP 원칙에 따른 설계
- 요청을 처리하는 로직과 응답을 반환하는 로직을 분리하여 유지보수가 용이해졌다.
Servlet Container
- Servlet Container는 서블릿들의 생성, 실행, 삭제를 관리하는 환경이다.
Servlet Container의 역할
- 클라이언트 요청을 받아 HttpServletRequest, HttpServletResponse 객체를 생성하여 요청을 처리하고 응답을 반환합니다.
- Servlet의 생명주기 관리
- Servlet을 Sigleton으로 관리하여 불필요한 객체 생성 방지
- 웹 애플리케이션의 보안 및 세션 관리를 처리합니다. (SRP)

Servlet Container's example
- Apache Tomcat, Jetty, WildFly
Spring Container
Spring Container란?
Spring Container는 Spring Bean의 생명주기를 관리하는 환경입니다.
스프링 프레임워크의 핵심 요소로, 객체의 생성과 초기화, 소멸까지의 전 과정을 관리해 줍니다.

스프링 컨테이너 내에는 싱글톤 객체로 형태로 Spring Bean이 존재하여, 같은 객체가 여러 개 생기는 것을 방지한다. (JVM 메모리 효율적 사용을 위함)
Spring IoC Container is the core of Spring Framework. It creates the objects, configures and assembles their dependencies, manages their entire life cycle.
The Container uses Dependency Injection(DI) to manage the components that make up the application. It gets the information about the objects from a configuration file(XML) or Java Code or Java Annotations and Java POJO class. These objects are called Beans.
Since the Controlling of Java objects and their lifecycle is not done by the developers, hence the name Inversion Of Control.
Spring Container의 역할
- Bean 객체의 생명주기 관리 (생성, 초기화, 소멸)
- 의존성 주입을 지원 (개발자는 등록된 객체를 간편하게 사용할 수 있다.)
- 설정 정보 (Java Config, Annotation, XML) 기반으로 객체 생성 및 관리
- Sigleton 패턴으로 메모리 사용을 최적화합니다.
BeanFactory와 ApplicationContext를 사용할 수 있는데, 현재는 BeanFactory를 확장한 ApplicationContext를 사용하는 추세이다.
Spring IoC Container를 통해 개발자는 등록된 Bean 객체를 의존성 주입(DI)으로 가져와 간편하게 사용할 수 있습니다.
Spring Bean 등록하기

- @Controller : 해당 클래스가 Presentation Layer에서 Controller 임을 명시한다.
- @Service : 해당 클래스가 Business Layer 에서 Service 임을 명시한다.
- @Repository : 해당 클래스가 Persistence Layer 에서 DAO임을 명시한다.
- @Component : 위 세 가지 외로 Bean으로 등록하고 싶은 클래스에 명시한다.
ServletContainer와 SpringContainer의 차이점 비교
구분 | Servlet Container | Spring Container |
역할 | 서블릿을 관리하고 요청을 처리 | Spring Bean의 생성 및 생명주기 관리 |
관리 대상 | Servlet 및 HttpServletRequest, Response | Spring Bean (Service, Repository, Controller) |
의존성 주입(DI) | 직접 객체 생성 및 사용 | 컨테이너가 자동으로 의존성 주입 |
생명주기 | Servlet 생명주기 (init(), service(), destroy()) | Bean 생명주기 (@PostConstruct, @PreDestroy) |
싱글톤 지원 | Servlet 클래스는 기본적으로 싱글톤 | Spring Bean은 싱글톤으로 관리됨 |
참고자료
'Spring Framework > Spring' 카테고리의 다른 글
Spring Controller가 수백만 개의 요청을 처리하는 원리 - Spring Bean의 역할과 목적 (2) | 2025.03.18 |
---|---|
Spring DI 방식 비교: 생성자 주입과 필드 주입의 차이점 정리 (0) | 2025.03.14 |
Spring cloud Eureka 등록된 애플리케이션 조회하기 - open feign 통신 (0) | 2025.01.08 |
Spring MySQL 최적의 DBCP 설정 방법 - hikariCP, MySQL Connection 옵션 이해하기 (1) | 2024.12.21 |
Spring h2 인메모리 DatabaseCleaner 적용 방법 - 테스트 데이터 초기화를 통한 독립적인 테스트 환경 구축 (1) | 2024.12.20 |
목표
- ServletContainer와 SpringContainer의 차이 이해하기
Servlet
Servlet이란?
웹 요청과 응답의 흐름을 간단한 메서드 호출로 처리할 수 있게 도와주는 Java Program이다.
Servlet은 HTTP 요청을 받아 처리한 후, 응답을 반환하는 역할을 한다.
Servlet are responsible for accepting a request, processing it, and sending a response back.
public interface Servlet {
void init(ServletConfig config) throws ServletException;
void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
void destroy();
}
주요 메서드
- init() : Servlet 생성될 때 한 번만 호출된다.
- 초기화 작업을 수행하고 필요한 자원을 할당합니다.
- service() : 클라이언트 요청이 발생할 때마다 호출되며, 실제 비즈니스 로직을 수행합니다.
- destory() : Servlet이 제거될 때 한 번만 호출되며, 할당된 자원을 해제합니다.

Servlet 필요성
1. Java Thread를 활용한 요청 처리
- 기존에는 (C or C++ 프로그램으로 만들어진) CGI(Common Gateway Interface)를 이용하여 Request마다 새로운 프로세스를 생성하여 처리해, 성능이 낮고 자원 소모가 많았다.
➡️ Servlet은 요청 당 프로세스가 아니라, 스레드를 생성하여 처리하므로 성능과 비용이 최적화되었습니다.
➡️ JVM에 의해 관리되기 때문에 Memory 관리에 용이하다.
2. SRP 원칙에 따른 설계
- 요청을 처리하는 로직과 응답을 반환하는 로직을 분리하여 유지보수가 용이해졌다.
Servlet Container
- Servlet Container는 서블릿들의 생성, 실행, 삭제를 관리하는 환경이다.
Servlet Container의 역할
- 클라이언트 요청을 받아 HttpServletRequest, HttpServletResponse 객체를 생성하여 요청을 처리하고 응답을 반환합니다.
- Servlet의 생명주기 관리
- Servlet을 Sigleton으로 관리하여 불필요한 객체 생성 방지
- 웹 애플리케이션의 보안 및 세션 관리를 처리합니다. (SRP)

Servlet Container's example
- Apache Tomcat, Jetty, WildFly
Spring Container
Spring Container란?
Spring Container는 Spring Bean의 생명주기를 관리하는 환경입니다.
스프링 프레임워크의 핵심 요소로, 객체의 생성과 초기화, 소멸까지의 전 과정을 관리해 줍니다.

스프링 컨테이너 내에는 싱글톤 객체로 형태로 Spring Bean이 존재하여, 같은 객체가 여러 개 생기는 것을 방지한다. (JVM 메모리 효율적 사용을 위함)
Spring IoC Container is the core of Spring Framework. It creates the objects, configures and assembles their dependencies, manages their entire life cycle.
The Container uses Dependency Injection(DI) to manage the components that make up the application. It gets the information about the objects from a configuration file(XML) or Java Code or Java Annotations and Java POJO class. These objects are called Beans.
Since the Controlling of Java objects and their lifecycle is not done by the developers, hence the name Inversion Of Control.
Spring Container의 역할
- Bean 객체의 생명주기 관리 (생성, 초기화, 소멸)
- 의존성 주입을 지원 (개발자는 등록된 객체를 간편하게 사용할 수 있다.)
- 설정 정보 (Java Config, Annotation, XML) 기반으로 객체 생성 및 관리
- Sigleton 패턴으로 메모리 사용을 최적화합니다.
BeanFactory와 ApplicationContext를 사용할 수 있는데, 현재는 BeanFactory를 확장한 ApplicationContext를 사용하는 추세이다.
Spring IoC Container를 통해 개발자는 등록된 Bean 객체를 의존성 주입(DI)으로 가져와 간편하게 사용할 수 있습니다.
Spring Bean 등록하기

- @Controller : 해당 클래스가 Presentation Layer에서 Controller 임을 명시한다.
- @Service : 해당 클래스가 Business Layer 에서 Service 임을 명시한다.
- @Repository : 해당 클래스가 Persistence Layer 에서 DAO임을 명시한다.
- @Component : 위 세 가지 외로 Bean으로 등록하고 싶은 클래스에 명시한다.
ServletContainer와 SpringContainer의 차이점 비교
구분 | Servlet Container | Spring Container |
역할 | 서블릿을 관리하고 요청을 처리 | Spring Bean의 생성 및 생명주기 관리 |
관리 대상 | Servlet 및 HttpServletRequest, Response | Spring Bean (Service, Repository, Controller) |
의존성 주입(DI) | 직접 객체 생성 및 사용 | 컨테이너가 자동으로 의존성 주입 |
생명주기 | Servlet 생명주기 (init(), service(), destroy()) | Bean 생명주기 (@PostConstruct, @PreDestroy) |
싱글톤 지원 | Servlet 클래스는 기본적으로 싱글톤 | Spring Bean은 싱글톤으로 관리됨 |
참고자료
'Spring Framework > Spring' 카테고리의 다른 글
Spring Controller가 수백만 개의 요청을 처리하는 원리 - Spring Bean의 역할과 목적 (2) | 2025.03.18 |
---|---|
Spring DI 방식 비교: 생성자 주입과 필드 주입의 차이점 정리 (0) | 2025.03.14 |
Spring cloud Eureka 등록된 애플리케이션 조회하기 - open feign 통신 (0) | 2025.01.08 |
Spring MySQL 최적의 DBCP 설정 방법 - hikariCP, MySQL Connection 옵션 이해하기 (1) | 2024.12.21 |
Spring h2 인메모리 DatabaseCleaner 적용 방법 - 테스트 데이터 초기화를 통한 독립적인 테스트 환경 구축 (1) | 2024.12.20 |