스프링에서 말하는 서블릿 애플리케이션 컨텍스트가 서블릿 컨텍스트인가요?

2013-07-18 10:53

구분이 잘 안가서..;;; 일반적으로 자바 웹개발에서 서블릿을 이용해서 개발할때 ServletContext 이런게 있잖아요?

스프링에서 애플리케이션 컨텍스트 구성방법중에 서블릿 애플리케이션 컨텍스트 - 루트 애플리케이션 컨텍스트 이렇게 구성하는게 있다고 봤는데요.

저렇게 구분하는 이유가 프레젠테이션 계층을 스프링이 제공하는 웹프레임워크가 아닌 다른 기술의 웹프레임워크를 사용할때 저 서블릿 애플리케이션 컨텍스트를 다른 기술의 웹프레임워크의 서블릿 컨텍스트? 그런걸 이용하고 그 서블릿 컨텍스트를 이용해서 스프링의 루트 애플리케이션 컨텍스트를 가져와서 스프링으로 구성된 서비스계층과 데이터 엑세스 계층의 기술을 사용...

그렇다면 서블릿 애플리케이션 컨텍스트와 서블릿 컨텍스트는 같은 개념의 존재인가요? ... 음.. 쓰다보니...뭔가 알것 같으면서도... @_@ 잘 모르겠다는;;;;

3개의 의견 from SLiPP

2013-07-18 12:29

일단 용어를 정리해야 하는데 서블릿 애플리케이션 컨텍스트가 아니고 (아마도) 웹 애플리케이션 컨텍스트를 말씀하신 것 같네요. 웹 애플리케이션 컨텍스트는 서블릿 컨텍스트와 관련은 있지만 개념은 전혀 다릅니다.

스프링에서 말하는 "애플리케이션 컨텍스트"는 스프링이 관리하는 빈들이 담겨 있는 컨테이너라고 생각하시면 됩니다. 스프링 안에는 여러 종류의 애플리케이션 컨텍스트 구현체가 있는데, ApplicationContext라는 인터페이스를 구현한 객체들이 다 이 애플리케이션 컨텍스트입니다. 웹 애플리케이션 컨텍스트는 ApplicationContext를 확장한 WebApplicationContext 인터페이스의 구현체를 말합니다. WebApplicationContext는 ApplicationContext에 getServletContext() 메서드가 추가된 인터페이스입니다. 이 메서드를 호출하면 서블릿 컨텍스트를 반환됩니다. 결국 웹 애플리케이션 컨텍스트는 스프링 애플리케이션 컨텍스트의 변종이면서 서블릿 컨텍스트와 연관 관계에 있다는 정도로 정리가 됩니다. 이 메서드가 추가됨과 동시에 서블릿 컨텍스트를 이용한 몇가지 빈 생애 주기 스코프(애플리케이션, 리퀘스트, 세션 등)가 추가되기도 합니다.

스프링에서, 필수는 아니지만, 웹 애플리케이션을 구성할 때, 도메인과 관련된 빈들은 루트 애플리케이션 컨텍스트에 등록하고 웹과 관련된 UI 성 빈(주로 Controller)은 웹 애플리케이션 컨텍스트라는 별도의 애플리케인션 컨텍스트에 등록해서 사용합니다.

이렇게 분리를 하면 루트 애플리케이션 컨텍스트와 웹 애플리케이션 컨텍스트과 부모 자식 관계가 되는데 웹 애플리케이션 컨텍스트의 빈들은 루트 애플리케이션 컨텍스트의 빈들 주입 받을 수 있지만 거꾸로 루트 애플리케이션 컨텍스트의 빈은 웹 애플리케이션 컨텍스트 같은 자식 애플리케이션 컨텍스트의 빈을 주입 받을 수 없습니다.

이렇게 분리함으로써 Web 기술과 도메인이 분리되는 장점도 있지만, 의존 방향이 역전되거나(도메인이 웹에 의존하는 상황) 상호 의존하는 상황을 막아기도 하고, AOP가 적용되는 범위를 제한하는 등의 이점이 있습니다.

의견 추가하기

연관태그

← 목록으로