티스토리 뷰
스프링 컨테이너와 서블릿 컨테이어는 다른 목적으로 사용된다.
- 스프링 컨테이너 : 애플리케이션의 비즈니스 로직을 관리하고, 객체의 생명주기와 의존성 관리를 담당한다.
- 서블릿 컨테이너 : 웹 요청과 응답(HTTP 프로토콜)을 처리하는 데 집중한다.
스프링 컨테이너는 IoC(Inversion of Control, 제어의 역전)을 기반으로 애플리케이션의 객체를 관리한다. IoC란 프로그램을 개발자가 아닌 프레임워크에 의해 관리되는 것을 의미한다.
서블릿 컨테이너는 웹 서버와 통신을 하여 HTTP 요청을 받고, 서블릿을 사용하여 요청을 처리한 응답을 클라이언트로 전송한다.
1. 스프링 컨테이너
스프링 컨테이너는 애플리케이션을 실행시키기 위해 객체(빈) 생성, 초기화, 의존성 주입 등을 담당한다. 이는 개발자가 쉽게 객체 간의 의존성을 관리하고, 코드의 결합도를 낮출 수 있게 한다.
대표적인 스프링 컨테이너로 ApplicationContext가 있다. BeanFactory를 확장한 인터페이스로, 대부분의 스프링 애플리케이션에서 사용된다.
2. 서블릿 컨테이너
서블릿 컨테이너는 웹 애플리케이션 서버(Web Application Server, WAS)의 하나로, HTTP 요청을 받아 서블릿을 실행하여 요청을 처리하고 응답을 내려주는 역할을 한다. 서블릿 컨테이너는 요청을 처리하기 위한 서블릿의 생명주기를 관리한다.
서블릿은 요청 URI를 처리하기 위한 서블릿을 싱글톤으로 생성한다. 예를 들어, “/hello”, “/spring” 두 URI가 존재한다면, 각 URI를 처리하기 위한 서블릿이 싱글톤으로 생성된다. 싱글톤으로 생성된 서블릿은 재사용된다.
서블릿 컨테이너는 멀티 스레딩을 통해 동시에 여러 요청을 처리할 수 있다. 예를 들어, “/hello” URI로 여러 개의 요청이 들어온다면 별도의 스레드에서 요청을 처리한다. 또한 하나의 요청이 다른 요청의 처리를 방해하지 않도록 한다.
3. 서블릿과 스프링의 상호작용
스프링 컨테이너와 서블릿 컨테이너는 서로 역할이 다르지만, 둘 간의 상호작용을 통해 웹 애플리케이션을 구축할 수 있다. 서블릿 컨테이너는 HTTP 요청을 받아 응답을 내려주고, 스프링 컨테이너는 요청을 처리하기 위한 비즈니스 로직을 관리한다.
Spring MVC 구조는 서블릿 컨테이너와 스프링 컨테이너의 상호작용을 잘 보여준다. HTTP 요청을 디스패처 서블릿으로 전달하고, 스프링 컨테이너 내에서 적절한 컨트롤러(핸들러)를 찾아 요청을 처리한다.
스프링 부트는 내장 서블릿 컨테이너(Tomcat, 아파치 톰캣)를 포함하고 있으며, 개발자는 간단하게 애플리케이션을 배포할 수 있다.