Spring 공부를 하다보면 다양한 컨테이너들과 컨텍스트라는 용어들을 접하게 됩니다.
처음엔 해당 용어들을 마주칠 때 마다 하나하나 개념을 찾아보다가 서로 어떤 관계에 있는지 구조를 생각하며 공부하면 더 쉽게 이해할 수 있을 것 같아 해당 포스트를 작성했습니다.
01. Container, Context 종류
- Container
- Web Container
- Setvlet Container
- Spring Container
- Context
- Application Context
- Servlet Context
- Spring Context
02. Container와 Context의 차이
우선, Containner와 Context 라는 개념이 어떤 차이가 있는지부터 알아야 이해가 쉽습니다.
- Container
- 애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행될 수 있도록 코드와 모든 종속성을 패키지하는 소프트웨어의 표준 단위
- 애플리케이션의 실행에 필요한 모든 요소
- Context
- 소프트웨어 애플리케이션 내의 특정 범위 또는 환경
- 애플리케이션별 리소스 및 구성 매개변수에 대한 액세스를 제공
- Spring 애플레케이션에서 Bean을 관리하고 애플리케이션에 리소스를 제공하기 위해 Spring Framework에서 제공하는 환경인 ApplicationContext를 참조하는 경우가 많다.
- 메모리 관리 상태, 환경
쉽게 풀자면, Container는 도커에서 사용하는 개념과 같이 어떤 컴퓨팅 환경을 가지고 있든 단위(프로그램)이고 Context는 그 안을 구성하는 환경 내용입니다.
그리고 Container는 실행환경에서 어떤 기능적인 요소를 가진 '개념' 같은 거고, Context는 실제로 코드안에 '구현'이 되어 있는 요소입니다.
03. Spring 애플리케이션의 웹 서비스 구조

04. 각 용어의 의미
마지막으로 각 용어의 의미에 대해 알아보겠습니다.
Web Container
- 웹 애플리케이션을 실행하고 관리하는 환경을 제공합니다.
- 서블릿과 JSP와 같은 웹 애플리케이션 컴포넌트를 실행하고 HTTP 요청을 처리하는 역할을 합니다.
- ex) Apache Tomcat, Jetty 등
Servlet Container
- 일반적으로 Web Container 일부로 쓰이며 서블릿을 지원하는 WAS를 일컫습니다.
- 서블릿의 생명주기 관리
- 사용자의 요청에 따라 대응되는 서블릿 메서드 호출
- 멀티 쓰레딩 지원
- 등의 역할을 수행합니다.
ServletContext
- WebApplication 에서 모든 서블릿들이 공유하는 내용을 의미하며
- 각 웹 애플리케이션당 하나의 ServletContext 인스턴스가 생성되며, 해당 웹 애플리케이션의 모든 서블릿들이 이를 공유합니다.
ApplicationContext
- Spring에서는 IoC 컨테이너인 BeanFactory 라는 개념이 존재하는데, 이를 상속 받아 필요한 기능을 추가해 확장한 것이 ApplicationContext입니다.
- 코드에서 @Configuration이 붙은 클래스를 설정 정보로 등록하고, @Bean 으로 빈 목록을 생성하고 탐색하는 역할을 합니다.
Spring Container
- Spring 애플리케이션을 관리하고 구성하는 런타임 환경을 제공합니다.
- IOC Container 라고도 불립니다.
- 객체(Bean)의 생성, 관리, 의존성 주입 등을 담당하여 개발자가 더욱 효율적으로 Spring 기반 애플리케이션을 개발할 수 있도록 도와줍니다.
- ApplicationContext를 구현한 구현체입니다.
SpringContext
- ApplicationContext 인터페이스를 구현한 여러 클래스들을 포함하는 개념입니다.
- Spring Context의 구현체로는 AnnotationConfigApplicationContext, ClassPathXmlApplicationContext, FileSystemXmlApplicationContext 등이 있습니다.
웹 애플리케이션이 다양한 컨테이너들과 컨텍스트들의 개념과 특징을 알아보았습니다.
감사합니다 :-)