Application Context VS Web Application Context

죠랭이·2022년 4월 24일
0

Spring

목록 보기
1/2

Spring을 공부하면서 위의 두 단어가 참 많이 등장한다. 그렇다면 이 두 단어의 차이는 무엇이며 정확한 개념은 어떤건지 헷갈릴 때가 많은데 이 기회에 한번 정리해보고자 한다.


Context라는 단어와 함께 많이 등장하는 단어가 Container라는 단어이다. IoC 컨테이너라고 하여 Spring에서는 코드 대신 오브젝트(@Bean) 제어권을 갖고 있는데 이를 Application Context 혹은 Bean Factory라고도 부른다. Bean Factory의 경우, 오브젝트 생성과 오브젝트 사이의 런타임 관계를 설정하는 DI관점에서 지칭하는 용어지만 Application Context의 경우 엔터프라이즈 어플리케이션 개발을 위한 다양한 컨테이너 기능을 추가한 의미로 사용된다. 기본적으로 Spring에는 하나 이상의 Application Context가 존재한다. Application Context에 등록된 Bean 객체의 경우 Context가 초기화될 적에 모두 생성되어 등록된 상태로 존재하고 그 이후부턴 Context에서 생성하는 기능은 거의 하지 않는다. IoC Container에 Bean 객체를 등록할 적에는 POJO와 메타정보를 합쳐 등록하는데 메타정보는 어노테이션, 클래스, XML 등의 다양한 포맷으로 등록이 가능하다.


이와 달리, Web Application Context라는 개념이 따로 존재한다. 스프링 어플리케이션에서 가장 많이 활용하는 어플리케이션 컨텍스트로 웹 환경에서 사용할 때 필요한 기능이 추가된 어플리케이션 컨텍스트이다. 웹 환경에서는 main() 메소드 대신 서블릿 컨테이너가 브라우저로부터 오는 HTTP 요청을 받아 해당 요청에 매핑되어 있는 서블릿을 실행해주는 방식으로 동작한다.


Application Context 관련하여 또 하나 중요하게 알아두어야할 점은 바로 Application Context의 계층구조이다. Application Context는 계층구조로 이루어져있기에 Bean 탐색을 할 적에도 자식 Context부터 탐색을 시작하여 최상위 계층에 존재하는 Root Application Context까지 도달하게 된다. 만약, 형제 Context에 찾고자 하는 Bean 객체가 존재할지라도 자기 자신과 부모의 Context에 존재하면 찾을 수 없다.


앞으로 Spring Framework로 개발하면서 위의 내용들을 잘 이해하고 작업할 필요가 있어보인다. 아직까지 해당 Context 관련 이슈를 만나진 못했지만 추후 작업하면서 충분히 고려해야하는 부분이기에 두뇌에 메모리 캐싱을 잘해놓도록 하자!
P.S. 스택오버플로우에서 찾은 내용도 흥미로운 것 같은데 궁금한 사람은 한번 봐도 좋을 것 같다.


참고:
토비의 스프링 Ver. 2

profile
슈퍼 개발자를 목표로 하는 주니어

0개의 댓글