본문 바로가기

Spring/웹

Container란? (Servlet / Spring Container)

컨테이너란?

Servlet, Java등의 객체를 담고 객체의 생성 및 소멸과 같은 라이프 사이클을 관리하는 것

 

Servlet Container (ex : Tomcat)

servlet의 LifeCycle을 관리하는 컨테이너이며, 새로운 요청이 들어올 때마다 새로운 자바 스레드를 만들어줍니다.

즉, 개발자가 웹서버와 통신하기 위해 (소켓을 생성하고, 특정 포트에 리스닝하고, 스트림을 생성하는 등) 복잡한 일들을 할 필요가 없게 만들어줍니다.

Servlet Container안에는 http 프로토콜을 통해 들어오는 모든 요청을 처리하는 Disaptcher Servlet도 존재합니다. 관련 포스트는 추후에 작성하여 링크를 걸도록 하겠습니다.

Disaptcher Servlet 참고용 링크 : galid1.tistory.com/525

 

Spring Container

개발자 대신 Spring Bean의 라이프사이클을 관리하는 컨테이너 입니다. 

스프링 컨테이너의 종류는 Bean Factory와 이를 상속받은 ApplicationContext이 있습니다.

 

 

=> 여기까지 왔을 때, IoC의 개념을 정리할 수 있습니다.

IoC (=제어의 역전)

컨테이너가 개발자가 진행할 코드의 처리과정을 위임받아 대신 처리합니다.

즉, 원래라면 개발자가 Bean관리나 웹서버 소통을 위해 일련의 과정을 거쳐야했지만 Spirng Container와 Servlet Container가 유저의 요청에 따라 작성된 코드를 실행하고 응답을 알아서 내려주죠. 이것이 바로 제어의 역전입니다. 

 


Spring Container

 a. Bean Factory

스프링 설정파일에 등록된 Bean 객체를 생성하고 관리하는 기본적인 기능만 제공합니다.

 

컨테이너 구동 시, Bean의 정의는 즉시 로딩하지만,

Bean 자체가 필요하게 되기 전까지는 인스턴스화를 하지 않고

Bean이 사용될 때 인스턴스화(Lazy-Loading)하여 빈의 일생이 시작되도록 합니다. 

 

b. Application Context

Bean 객체를 생성하고 관리하는 기본적인 기능을 제공합니다.
또한 트랜잭션 관리, 메시지 기반의 다국어 처리, AOP 처리 등 많은 부분을 지원하고 있습니다.

컨테이너 구동 시,  빈을 미리 로드한 후 원할 때 빈을 지연 없이(Pre-Loading) 얻을 수 있는 방식입니다. 

이 Application Context를 보통 우리는 스프링 컨테이너 또는 IoC 컨테이너라고 부릅니다.

'Spring > ' 카테고리의 다른 글

Servlet (서블릿이란? 그리고, Dispatcher Servlet이란 ? )  (2) 2021.04.05
Spring Container & Bean 생명주기  (0) 2021.04.04
Lombok의 좋은 사용법  (3) 2021.03.29
AOP란? (Spring AOP)  (0) 2021.03.26
Spring Security  (1) 2021.02.06