이 Context는 설명할 것이 매우 많고 복잡하다.
3편으로 나눠서 진행하며, 이번 편에서는 Context란 무엇이고, 어떤 종류가 있는지만 알아볼 것이다.
Bean의 확장 버전으로, Spring이 Bean을 좀 더 다루기 쉽도록 기능들이 추가된 공간이다.
단순히 Bean을 다루는 것 외에도, 추가적인 기능을 제공한다.
저번 편에서 스프링엔 Bean들을 다루기 위한 Container라는 공간이 있다고 했는데, 이 공간 안에 Context라는 공간이 또 있는 것이다.
Bean들은 모두 저 Context에서 이뤄지므로,
사실상 Bean들을 직접 설정할 수 있는 공간이라고 할 수 있다.
개념적으로 Bean들이 담겨있는 공간이라고 할 수 있다.
(하지만 그 외의 여러 기능을 한다. 자세한 건 부록을 참고하자.)
> Context란, Bean들을 다루기 위해 우리가 설정할 수 있는 공간!!
Context란, Bean들을 포함하여 여러 기능을 가진 공간!!
여기서 문제점이 하나 발생한다.
자바에는 서블릿이란 객체가 존재한다.
모든 객체는 Bean으로 관리되니, 서블릿 또한 Bean으로 존재한다.
이러한 서블릿 Bean들도 각자 공통적인 부분이 있을 것이다.
예를 들면 DB 연결 부분을 생각해보자.
DB 연결은 어떤 서블릿이건 꼭 갖고 있어야 하는 작업이다.
그런데 서블릿은 모두 독립적인 객체로 서로 간섭(공유)이 불가능하다.
그럼 모든 서블릿 Bean마다 공통 부분인 DB 연결이 들어갈 것인데,
이것은 심각히 비효율적이다.
따라서 스프링의 컨텍스트는 이러한 공통 부분을 서블릿에서 분리시켜 총 2가지의 Context가 있다.
: 모든 서블릿이 공유할 수 있는 Bean들이 모인 공간을 말한다.
DB와 관련된 Repository나, Service 등이 있다.
: 서블릿 각자의 Bean들이 모인 공간이다.
웹 앱마다 한개씩 존재하므로, 웹 앱 그 자체를 의미하기도 한다.
이 컨텍스트 내의 Bean들은 서로 공유될 수 없다.
MVC의 Controller(서블릿)이 이에 해당한다.
사실 Context는 공부할 때 가장 많은 시간을 투자한 부분이다.
Container나 Context나 눈에 직접 보이지 않는 부분이라서 더욱 그랬던 것 같다ㅎㅎ
나와 같은 그런 분들에게 이 글이 조금이나마 도움이 됬으면 좋겠다 : )
다음 편에서는 이런 Context들의 관계 및 구조에 대해 살펴보도록 하겠다.