스프링을 공부하다 보면 빈, 빈 팩토리, 애플리케이션 컨텍스트, 스프링 컨테이너, IoC 컨테이너 등 다양한 용어들이 나온다.
궁극적으로 이 용어들이 가리키는 것은 스프링 설정 xml 파일을 말한다.
단순하게 스프링 xml 설정 파일을 가리키는 것 뿐이라면 왜 이렇게 많은 용어들이 탄생했고, 또 사용되어져 있는지 궁금하지 않을 수 없다.
솔직히 난 불편하다. (아주 쬐금~)
가정 먼저 개발자들간의 커뮤니케이션 시 위에서 언급한 용어들을 무분별하게 사용하다보니 혼란스럽다.
또한 애플리케이션 컨텍스트의 용어는 흔히 tomcat server.xml에 정의한 context를 말하는 것 같다.
물론 용어들을 세분화하면 각 용어들이 뜻하는 바를 정확하게 설명할 수 있겠지만 조금은 불편하게 사실이다.
여하튼 내 불만에 대해서는 여기까지하고, 용어 정리를 해보자.
- 빈은 스프링이 IoC 방식으로 관리하는 오브젝트이다.
xml 설정 파일에서 <bean id=userService” class=”class 경로”> 와 같이 설정되어 있는 것들이 빈이 될 수 있고, @Controller, @Service, @Repository 등의 애노테이션이 붙은 클래스들도 빈의 후보가 되는 것이다.
- 빈 팩토리는 IoC를 담당하는 핵심 컨테이너이다.
컨테이너라는 말이 상당히 부담스럽기는 하지만 서블릿의 생명 주기와 동작을 관장하는 서블릿 컨테이너와 같은 의미라고 보면 된다.
즉, IoC 컨테이너는 빈 객체들의 생명 주기와 의존 관계 설정을 관장하는 것을 의미한다.
- 애플리케이션 컨텍스트는 빈 팩토리를 확장한 IoC 컨테이너다.
IoC 컨테이너로 빈 팩토리가 있는데 왜 애플리케이션 컨텍스트가 있는지 의문이 들겠지만 좀 더 추가적인 기능이 더 확장되었다고 생각하자.
- 설정 정보, 설정 메타 정보는 IoC 컨테이너의 빈의 의존 관계 및 생명 주기를 설정하는 xml 파일을 말한다.
javaConfig도 해당된다.
그냥 xml 설정 파일이라고 생각하자.
- 스프링 컨테이너는 애플리케이션 컨텍스트는 하나의 xml 설정 파일을 지칭한다.
허나, 우리가 진행하고 있는 웹 프로젝트는 대게 여러 개의 xml 설정 파일을 만들게 되는데 각각의 설정 파일을 애플리케이션 컨텍스트라 부르고, 이 모든 것을 통칭하여 스프링 컨테이너라고 부른다.
즉, application-context.xml, dispatcher-servlet.xml 이 둘을 합쳐서 말할 때 스프링 컨테이너라고 부르는 것이다.