컨텍스트와 컨테이너

말하는 감자·2025년 4월 21일

내일배움캠프

목록 보기
46/73

여기서 컨텍스트 = 컨테이너? 에 대한 의문이 들었다.

컨텍스트

  • 정의: "컨텍스트"는 어떤 객체나 시스템이 동작하는 환경을 의미
  • 이때의 "환경"은 특정 범위에서 상태나 데이터를 관리하는 영역을 뜻함.
    • 어떤 시스템이나 애플리케이션이 동작하는 범위나 상태를 관리하는 역할

➡️ “컨테이너가 어떻게 동작할지 정해주는 규칙과 환경”
1. 어떤 빈을 사용할지
2. 어떤 설정(properties, config 등)이 필요한지
3. 어떤 조건에서 어떤 객체를 쓸지
이런 정보들이 있음.

※ 하지만 스프링에서는 ApplicationContext가 스프링의 컨테이너로서 빈을 관리하기 때문에 두 용어가 겹치는 경우도 많다/

🌳 ApplicationContext (Root Container)

  • 관리 주체: 스프링 컨테이너
  • 특징
    • 애플리케이션 전반의 핵심 컨테이너
    • 비즈니스 로직, 데이터 액세스 계층의 빈 관리
    • 다른 컨테이너의 부모 컨테이너 역할
    • AppConfig 클래스에서 정의된 설정 로드
  • 관리하는 빈들
    • Service 계층 (@Service)
    • Repository 계층 (@Repository)
    • 데이터 소스, 트랜잭션 매니저 등 인프라 빈

즉, ApplicationContext는 공통 비즈니스 로직, 서비스, 리포지토리 계층 등 웹과 무관한 범용적인 빈들을 관리

☘️ WebApplicationContext

  • 특징
    • 웹 관련 빈들을 관리 - 웹 애플리케이션에 특화된 기능
    • 루트 컨테이너를 부모로 가짐
    • Request/Session 스코프 빈 관리
  • 관리하는 빈들
    • Controllers (@Controller)
    • ViewResolvers
    • HandlerMappings
    • 웹 관련 인터셉터

즉, WebApplicationContextDispatcherServlet과 연동되어 웹 요청과 관련된 빈(ViewResolver, HandlerMapping 등)을 담당



즉, ApplicationContext는 스프링의 기본 컨테이너로 빈을 관리하는 역할을 하고,
WebApplicationContext는 이를 확장해 웹 환경에서 ServletContext 접근, DispatcherServlet 연동, ViewResolver 설정 등 웹에 특화된 기능을 담당하는 컨테이너입니다.





📦 컨테이너

  • 정의: "컨테이너"는 객체를 생성, 관리, 유지하는 시스템
  • 객체를 생성하고, 생명주기를 관리하며, 객체 간의 관계를 설정하고 의존성 주입을 통해 연결하는 관리자 역할을 함.
    • 핵심 시스템

➡️ “그 컨텍스트(환경, 규칙)를 기반으로 실제 객체를 만들고 관리하고 처리해주는 시스템”
1. 입력(요청)이 오면
2. 어떤 빈을 꺼내서
3.어떤 식으로 응답을 줄지를
4. 컨텍스트의 설정에 따라 결정해서 실행.




웹 컨테이너 = 서블릿 컨테이너

  • 어디? : 웹 컨테이너
  • 웹 컨테이너가 하는 일
    • HTTP 요청을 처리함
    • 들어오는 요청에 맞는 서블릿을 호출
    • 서블릿 관리

🔬 Application Scope

특징

  • 웹 애플리케이션당 하나의 인스턴스
  • ServletContext와 유사한 생명주기
    📌 핵심: 웹 애플리케이션 전체에서 공유되는 데이터 저장용

생성되는 객체들

  • 애플리케이션 전역 설정
  • 캐시 매니저
  • 전역 카운터
  • 공유 리소스 관리자
  • 애플리케이션 이벤트 리스너




스프링 컨테이너

  • 어디? : 스프링 컨테이너
  • 스프링 컨테이너가 하는 일
    • 스프링 Bean 객체 관리
    • 디스패처 서블릿이 호출될 때 스프링 컨테이너를 초기화 한다.

🔬 Singleton Scope

특징

  • 스프링 컨테이너당 하나의 인스턴스(빈)만 생성
  • 기본 스코프
  • 상태를 공유하므로 주의 필요
    📌 핵심: 스프링 컨테이너가 관리하는 객체의 "하나뿐인 인스턴스"

생성되는 객체들

  • ApplicationContext
  • Spring Core Containers
  • Service Layer Beans
  • Repository Layer Beans
  • Configuration Beans
  • Spring Security Configurations




호출 순서

사용자 요청
   ↓
[웹서버] (: Apache, Nginx)(요청을 WAS로 전달)
[WAS = 웹 애플리케이션 서버] 
   └─ 여기부터는 톰캣 같은 '웹 컨테이너'가 담당
        ↓
   [서블릿 컨테이너] (톰캣의 핵심)
        ↓
   [DispatcherServlet 호출 (스프링 진입점)]
        ↓
   [HandlerMapping → Controller → Service → Repository 등 스프링 로직 수행]
        ↓
   [ViewResolver → 응답 생성 (HTML, JSON 등)]
        ↓
   [DispatcherServlet이 응답 전달]
        ↓
[웹 컨테이너 → 웹서버 → 사용자 브라우저]
profile
대충 데굴데굴 굴러가는 개발?자

0개의 댓글