본문 바로가기

백엔드 개발/SpringMVC

Spring Di 활용하기 - 이론 (1)

<개요>

Beans가 무엇인지 알아본다. 

Application Context가 무엇인지 어떻게 돌아가는지 그 원리, 종류에 대해서도 알아본다. 

 

 

1. Beans란? 

(1) Beans의 역사

처음에 Java의 개발진인 SUNS에서 JavaBeans를 발표했다. JavaBeans는 재사용이 가능한 컴포넌트를 말한다. Beans는 Client 측면 (Front-end), 서버 측면 (Back-end) 각각 나뉘어서 쓰였다. 원래 개발진들은 Beans가 Client GUI에서 많이 사용되길 바랬다. 예를 들어 검색창을 누가 만들어 놓으면 누군가 그것을 재사용하도록 하는 것이다. 근데 Clinet GUI 파트에서의 Beans는 내용이 너무 복잡해서, 사람들이 아무도 쓰지 않아 망했다. 

 되려 서버 측면에서 Beans가 각광받았다. 꾸밈이 필요없는 Back-end Part에서는 Beans의 내용이 단순했기 때문이다. 

그래서 다시 SUNS에서 JavaBeans를 업그레이드 해서 만든 것이 EJB Beans이다. 이것은 매우 복잡했다. 그래서 사람들이 새로운 트렌드라 쓰긴 썼지만 많이들 불평했다. 

해당 EJB 의 복잡성을 없애고, 예전 JavaBeans처럼 간편한 Beans 체제를 만들고 싶었던 로드 존슨이라는 사람이 Spring Beans를 개발했다. 요새는 다들 이거 쓴다. 

Spring Beans에서 Beans는 Spring Container가 관리한다. Spring Container는 Application Context와 거의 동일어이다.

(2) Beans란? Beans와 Application Context의 관계 

Beans는 재사용이 가능한 컴포넌트이다. 

우리가 앞에서 배웠듯이 객체를 필요할 때마다 동적 할당을 받아서 선언할 필요 없이 이미, Application Context에 만들어진 채로 저장된 객체들을 가져와 사용했다. 해당 객체들을 Beans라고 볼 수있다. 

 

Beans가 돌아가는 원리는 다음과 같다. 

a. 먼저 XML 설정 파일에 <Bean/> 태그로 Bean에 대한 정의들이 적혀있다.

b. Application Context가 해당 정의들을 읽어들여서 <"객체이름", 객체가 저장된 주소> 로 객체 저장소를 안에 만들어서 저장한다. 

c. 소스코드 내부에서 객체 생성이나, 연결 요청이 들어오면 Application Context가 해당 장부를 뒤져서 그에 맞는 객체를 전해주거나, 객체들 간의 관계를 연결 시켜준다. 

 

2. Application Context

(1)Application Context의 정의 

먼저 BeanFactory에 대해서 알아보겠다. 이름 그대로 Bean을 생성하고 소멸하는 기능을 담당하는 녀석이다. 

Application Context 줄여서 AC는 해당 BeanFactory를 내부에 가지며, 추가적인 기능을 더 가진다. (객체저장소(명단), 객체들간의 관계 연결하는 기능 등)

 

AC들은 위와 같이 객체들을 저장하고 있는데, 혹시 요청사항을 해결할 수 있는 객체가 자기 내부에 없을 때는 자기 부모 AC에게 해당 문제를 넘긴다. 그러면 부모AC에서 해당 문제를 해결할 객체가 있는지 찾아보게 된다. 

따라서 부모 AC에서는 자식 AC에서 공통적으로 쓰이는 객체가 주로 저장되어 있고, 자식 AC들에는 자신 고유의 개별적인 객체들이 저장되어 있다. 

 

(2)AC의 종류

AC의 종류는 Beans 정의가 들어있는 파일이 XML 설정 파일이냐 아니면 자바코드로 적인 JavaConfig이냐에 따라서 일단 나뉜다. 그리고 Web 만들기 용이냐 아니냐에 따라 한번 더 나뉜다. 

AC 객체를 생성할 때 자신의 용도와 기호에 따라 맞는 AC를 생성하면 되겠다. 

 

 

(3)소스코드 뜯어보기

Root AC는 모든 AC들의 조상인데, 해당 객체는 ContextLoaderListener가 만든다. 

만들 때 참조하는 xml 파일이 바로 root-context 파일인 것이다. 

DispatcherServlet도 고유의 AC를 가진다. 

해당 AC는 servlet-context.xml이라는 설정파일을 통해 만들어진다.

위 모든 사항은 Web.xml에 적혀있다. 

 

Root-AC는 모든 AC들의 조상이므로, 자식 AC들은 Root-AC의 내용을 참조할 수 있다. 

그래서 Root-AC에는 모든 Servlet AC들이 사용하는 공통적인 Bean 들이 등록 되어있다. 

반대로 Root-AC는 자식들을 참조할 수 없다. 

 

Servlet AC는 해당 AC와 연결된 Servlet만 쓸 수 있다. 

그래서 해당 Servlet만이 써야하는 Bean들이 적혀있다.

 

(4)AC들간의 관계 

context는 서블릿을 저장하고 있는 저장소 (알맹이)

Application Context는 context와 , context에 대한 정보(메타데이터)를 포함하고 있음.

Applicatipn Context Pasade는 AC를 감싸고 있음.