sitelink1  
sitelink2  
sitelink3 http://1 
extra_vars6 ko 

jpetstore에서의 Spring 초기설정과 IoC

Spring 프레임워크를 사용하여 웹 애플리케이션을 개발할 경우, web.xml 파일에 설정된 정보를 바탕으로 한다. 웹 애플리케이션이 시작할 때 web.xml 설정 파일에 담겨 있는 정보를 바탕으로 모든 POJO 빈에 대한 생성과 초기화 작업을 진행한다. 이러한 작업을 보여주는 부분이 jpetstore 샘플에서의 web.xml 에는 다음 부분이다.

web.xml에서의 spring 프레임워크 초기설정부분
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
                 /WEB-INF/dataAccessContext-local.xml  /WEB-INF/applicationContext.xml
   </param-value>
   <!--
   <param-value>
                 /WEB-INF/dataAccessContext-jta.xml  /WEB-INF/applicationContext.xml
   </param-value>
   -->
</context-param>

<listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

web.xml의 context-param 엘리먼트의 param-value의 값으로 정의되어진 dataAccessCont ext-local.xml 과 applicationContext.xml 파일이 POJO 빈의 생명주기를 관리하는 정보를 담고 있는 것이다. 이러한 정보를 담고 있는 것을 처리해 주는 클래스가 listener 엘리먼트에 정의되어진 ContextLoaderListener 이란 spring 프레임워크의 클래스이다.

여기서 잠시 중요하게 언급해야 하는 것은 POJO 빈의 생명주기를 관리하는 것이 spring 프레임워크라고 했는데, 이는 spring 프레임워크가 IoC(Inversion Of Control) 개념을 가지고 있기 때문이다. IoC에 대한 이해는 웹이나 많은 자료에서 언급하고 있음으로 여기서는 실제 설명에 대한 부분은 피하고 핵심적인 부분만 살펴본다.
쉽게 말해서 “제어에 대한 역전(반전)”이라고 해야 할 것이다. 이는 일반적인 프로그래밍에서는 객체의 생성 및 소멸에 해당하는 객체의 생명주기를 개발자가 직접 제어(관리)하게 된다. 그러나 Java를 이용한 웹 애플리케이션의 주요 개념 중에 Servlet과 EJB와 같은 것은 이러한 객체의 생명주기(생성에서 소멸에 이르기까지)를 컨테이너가 관리해 줌으로서 이전의 개발 방식과 다른 형태를 취하게 된다. 이와 같이 객체의 생명주기에 해당하는 제어를 개발자에서 컨테이너가 관리하게 되는 것을 IoC라고 한다.

이러한 기본적인 개념을 spring 프레임워크에서도 제공하고 있다. 따라서 spring 프레임워크는 자체 컨테이너를 내장한 프레임워크라고 할 수 있다. Spring 프레임워크에서는 더욱 세부적으로 말해서 DI(Dependency Injection)이라는 개념을 가지고 있는데 이는 EJB와 같은 것은 DL(Dependency Lookup)이라고 하여 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 빈(Bean)을 Lookup하는 것을 말한다.

반면, DI는 빈(Bean) 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해 주는 것을 말한다. 그래서 spring 프레임워크에서는 DI를 제공하기 위해서 웹 컨테이너 기본 설정 파일인 web.xml에 org.springframework.web.context.ContextLoaderListener 클래스를 사용하여 applicationContext.xml 파일을 두어 bean 엘리먼트의 설정을 통해서 관리하고자 하는 클래스를 연결 시켜주고 있다.

위에서 설명한 web.xml과 applicationContext.xml, dataAccessContext-local.xml 에 해당하는 부분이 이러한 DI를 제공하면서 spring 컨테이너의 역할을 하기 위한 설정 부분이다. 이것은 spring 프레임워크를 이용하여 웹 애플리케이션을 개발할 때 기본이되는 개념임으로 잘 기억해 두어야 한다. 이제 jpetstore 샘플 분석의 본론으로 들어가면 web.xml에 설정 되어진 나머지 부분은 jpetstore 샘플을 분석하면서 살펴보도록 하자.

번호 제목 글쓴이 날짜 조회 수
공지 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) 황제낙엽 2023.12.23 0
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 6
23 Spring프레임워크 소개문서 (2) 황제낙엽 2007.03.22 123
22 Spring프레임워크 소개문서 (1) 황제낙엽 2007.03.22 107
21 Cugain의 샘플프로젝트 jpetstore 분석기 - (1) jpetstore 설치 file 황제낙엽 2007.02.22 123
20 Cugain의 샘플프로젝트 jpetstore 분석기 - (7) PetStoreImpl.java 황제낙엽 2007.05.24 51
19 Cugain의 샘플프로젝트 jpetstore 분석기 - (6) petstore-servlet.xml 분석 황제낙엽 2007.04.27 19
18 Cugain의 샘플프로젝트 jpetstore 분석기 - (5) applicationContext.xml 분석 황제낙엽 2007.04.21 232
17 Cugain의 샘플프로젝트 jpetstore 분석기 - (4) dataAccessContext-jta.xml 분석 황제낙엽 2007.04.21 27
16 Cugain의 샘플프로젝트 jpetstore 분석기 - (3) dataAccessContext-local.xml 분석 황제낙엽 2007.04.21 40
15 Cugain의 샘플프로젝트 jpetstore 분석기 - (2) web.xml 분석 황제낙엽 2007.03.20 92
14 IoC (Inversion of Control) 컨테이너에 대한 정리 황제낙엽 2007.02.21 50
13 자바지기 1차 오픈 소스 스터디 문서모음 file 황제낙엽 2007.01.30 46
12 Spring 프레임워크를 이용한 효율적인 개발 전략 1차 황제낙엽 2007.01.30 47
11 Spring framework jpetstore 샘플 분석기 - (6) jpetstore 예제로 살펴보는 Spring MVC와 iBatis 연동 황제낙엽 2007.01.18 48
10 Spring framework jpetstore 샘플 분석기 - (5) jpetstore 에서의 InternalResourceViewResolver 황제낙엽 2007.01.18 17
9 Spring framework jpetstore 샘플 분석기 - (4) jpetstore 에서의 HandlerMapping 황제낙엽 2007.01.18 36
8 Spring framework jpetstore 샘플 분석기 - (3) jpetstore 에서의 Spring MVC 설정 황제낙엽 2007.01.18 13
» Spring framework jpetstore 샘플 분석기 - (2) jpetstore 에서의 Spring 초기 설정과 IoC 황제낙엽 2007.01.18 18
6 Spring framework jpetstore 샘플 분석기 - (1) jpetstore 설치하기 황제낙엽 2007.01.18 30
5 Spring WebFlow Introduction (웹개발을 직관적으로) 황제낙엽 2006.12.09 555
4 IoC(Inversion of Control)란 무엇인가? 황제낙엽 2006.12.09 93