코드의 여백

[스프링] 스프링 컨텍스트(Spring Context) 알아보기

by rowing0328

Intro

스프링 부트를 사용하면서 자동 설정 덕분에 개발이 정말 편리하다고 느꼈다.

하지만 그 내부가 어떻게 동작하는지 궁금했다.

 

이번 글에서는 스프링의 핵심 개념인 Spring Context 정리해 보려고 한다.

Spring Context의 역할과 주요 유형, 그리고 사용 방식을 알아보며 스프링 구조를 더 깊이 이해해 보자!

 

Spring Context

Spring Context는 스프링 프레임워크의 핵심으로, 애플리케이션의 빈(Bean)을 생성하고, 관리하는 IoC(Inversion of Control) 컨테이너이다.

이 컨텍스트는 빈의 생성, 설정, 관리뿐만 아니라 의존성 주입(DI)을 통해 객체 간의 결합도를 낮추고 유연성을 높인다.

 

Context는 Container의 일종

  • Bean Factory
    기본적인 빈 생성 및 관리하고, Lazy Loading 방식으로 필요할 때 빈을 로드한다.
  • ApplicationContext
    Bean Factory를 확장한 형태로, 트랜잭션 관리, 다국어 메시지 처리, AOP 같은 고급 기능을 제공하며, Pre-Loading 방식으로 애플리케이션 시작 시 빈을 미리 로드한다.

 

Spring Context의 주요 유형

  • ApplicationContext
    스프링 애플리케이션 전반에서 빈의 생성, 관리, 라이프사이클을 담당하는 컨텍스트
    주요 구현체 :
    • AnnotationConfigApplicationContext : 자바 기반 설정 사용
    • ClassPathXmlApplicationContext : XML 파일 기반 설정 사용
    • FileSystemXmlApplicationContext : 파일 시스템의 경로의 XML 설정 사용
  • WebApplicationContext
    웹 애플리케이션에서 사용되는 컨텍스트로, ApplicationContext를 확장한 인터페이스
    웹 애플리케이션의 Life Cycle과 관련된 기능 제공한다.
    주요 구현체 :
    • XmlWebApplicationContext : XML 설정 기반 웹 컨텍스트
    • AnnotationConfigWebApplicationContext : 자바 기반 설정 사용
  • ServletContext
    Java Servlet API에서 제공하는 인터페이스로, 서블릿 기반 웹 애플리케이션의 전역 환경 설정과 리소스 관리를 담당한다.
    Spring에서는 WebApplicationContextServletContext를 참조하여 애플리케이션 설정과 리소스를 활용하고, 서블릿 컨테이너와의 통합을 지원한다.

 

Root Context와 Servlet Context

웹 애플리케이션에서 Spring Context는 주로 두 가지로 구성된다.

  • Root Context (RootApplicationContext)
    애플리케이션 전역적으로 공유되는 빈을 정의한다.
    일반적으로 서비스 계층이나 데이터 소스 관련 빈을 포함한다.
  • Servlet Context (ServletWebApplicationContext)
    특정 서블릿과 관련된 빈을 정의한다.
    Root Context에 정의된 빈을 참조할 수 있지만 반대는 불가능하다.

 

Spring Context 사용 방식

  • XML 기반 설정
    <bean> 태그를 사용하여 빈을 정의하고 의존성을 설정한다.
  • Java 기반 설정
    @Configuration과 @Bean 어노테이션을 사용하여 빈을 정의한다.
  • 어노테이션 기반 설정
    @ComponentScan, @Autowired 등을 사용해 자동으로 빈을 탐지하고 주입한다.

 

Spring Context와 테스트

테스트 시에도 ApplicationContext를 활용하며, 이를 효율적으로 관리하기 위해 캐싱 전략을 지원한다.

이는 동일한 컨텍스트 구성이 여러 테스트에서 사용될 경우 캐시 된 컨텍스트를 재활용하여 성능을 최적화한다.

 

마무리

이번 글을 정리하면서 느낀 건, 스프링 부트를 통해 프로젝트를 쉽게 진행할 수 있다는 점이 정말 편리했지만, 왜 이렇게 쉽고 편리한지에 대한 과정을 개발자로서 반드시 익혀야 한다는 점이다.

 

자동화는 많은 보일러플레이트 코드를 줄이고 효율성을 높여주지만, 그 이면에는 기본 개념에 대한 이해 부족이 자리할 수도 있다.

 

특히, 문제가 발생했을 때는 자동화에만 의존한 탓에 해결에 더 많은 시간이 걸릴 수도 있다는 생각이 들었다.

 

참고 자료 :

토비의 스프링 Vol.2 - 3.1.2 스프링 MVC와 DispatcherServlet 전략

 

토비의 스프링 3.1 Vol 2: 스프링의 기술과 선택 | 이일민 - 교보문고

토비의 스프링 3.1 Vol 2: 스프링의 기술과 선택 | 대한민국 전자정부 표준 프레임워크 스프링을 설명하는 No. 1 베스트셀러! XML 대신 자바코드를 이용해서 스프링을 개발할 수 있는 최신 빈 설정 기

product.kyobobook.co.kr

 

Spring Framework Reference Documentation - DispatcherServlet

 

DispatcherServlet :: Spring Framework

Spring MVC, as many other web frameworks, is designed around the front controller pattern where a central Servlet, the DispatcherServlet, provides a shared algorithm for request processing, while actual work is performed by configurable delegate components

docs.spring.io

 

[실전 개발자를 위한 Spring Framework ] 강의 - Context 분리와 전략

 

[실전 개발자를 위한 Spring Framework ] 강의 - Context 분리와 전략

14강 Context 분리와 전략 목차 내용 Servlet context와 Root context 컨텍스트 분리 전략 학습 목표 Servlet context와 Root context의 차이점과 계층구조를 이해합니다. 컨텍스트 분리 전략을 이해하여 구현합니

pjc91.tistory.com

 

 

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

[스프링] 스프링 부트(Spring Boot) 알아보기  (0) 2024.12.21

블로그의 정보

코드의 여백

rowing0328

활동하기