[스프링] 스프링 컨텍스트(Spring Context) 알아보기
by rowing0328Intro
스프링 부트를 사용하면서 자동 설정 덕분에 개발이 정말 편리하다고 느꼈다.
하지만 그 내부가 어떻게 동작하는지 궁금했다.
이번 글에서는 스프링의 핵심 개념인 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에서는 WebApplicationContext가 ServletContext를 참조하여 애플리케이션 설정과 리소스를 활용하고, 서블릿 컨테이너와의 통합을 지원한다.
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 전략
Spring Framework Reference Documentation - DispatcherServlet
[실전 개발자를 위한 Spring Framework ] 강의 - Context 분리와 전략
'🌈Programming > Spring' 카테고리의 다른 글
[스프링] 스프링 부트(Spring Boot) 알아보기 (0) | 2024.12.21 |
---|
블로그의 정보
코드의 여백
rowing0328