본문 바로가기

프로그래밍/Spring

전자정부 프레임워크를 Java Config 방식으로 설정해보자(환경구축)

예전부터 Spring MVC Project를 Java Config 방식으로 설정하는 내용에 대해 글을 쓸려고 생각했었다. 그러나 어떻게 시작하면 글을 읽는 사람에게 좀 더 와 닿는 내용이 될 수 있을까..란 부분에 대해 고민하다보니 쉽지가 않았다. 그러다가 전자정부 샘플 프로젝트를 보면서 이 XML 기반의 프로젝트를 Java Config 방식으로 바꾸는 방법에 대해 언급하면 맨바닥에 걍 Java Config 방식으로 만드는 것보 다는 이해하기 쉬운 내용이 나올수도 있겠다란 생각이 들어 지금부터 이 내용에 대해 글을 써보고자 한다. 여기서는 JDK 1.7, 전자정부 프레임워크 개발환경의 최신버전인 3.5.1을 사용하며 Web Container로 Tomcat 7.0을 사용했다. 그리고 앞으로 계속 설명하게 될 내용들이 모두 반영되어 있는 프로젝트 소스를 github에 올려 놓았다. 전자정부 프레임워크에서도 git을 사용할 수 있기 때문에 github을 연동해서 가져올 수 있다. 아래의 주소는 프로젝트 소스가 올라와 있는 github 주소이다.

 

https://github.com/TerryChang/egovconfigboard

 

우리가 전자정부 프레임워크를 이용하여 MVC 프로젝트를 만들때 아마 전자정부 프레임워크 개발환경(앞으로는 이클립스라고 하겠다. 어차피 전자정부 프레임워크가 이클립스 기반에서 만든것이다 보니 혼선은 없을것이다)의 File -> New -> eGovFrame Web Project 메뉴를 통해서 만들것이다. 이 메뉴를 통해서 만들다 보면 다음의 화면을 접하게 된다.

 

 

 

이 화면을 처음 보는 시점에서는 Generate Example 체크박스에 체크가 되어있지 않은 형태이겠으나 여기서는 샘플 프로젝트를 이용해서 설명할것이기 때문에 체크박스에 체크한뒤 Finish 버튼을 클릭해서 프로젝트 생성을 마무리 하자

 

이렇게 프로젝트 생성을 마무리 지으면 샘플 프로젝트가 만들어지게 된다. 이걸 이클립스에 등록한 Tomcat에 프로젝트를 추가한 뒤 이클립스에서 톰캣을 실행하고 웹브라우저에서 http://localhost:8080/sample/egovSampleList.do로 접근해보면 샘플 프로젝트 화면이 나오는 것을 바로 확인할 수 있다. 한번 목록도 보고 글도 등록해보고 수정도 하며 삭제도 실행시켜보길 바란다. 왜 이걸 실행해보라고 얘기하냐면 차후에 이 프로젝트를 Java Config 설정 방식으로 바꾸었을때의 동작과 비교하기 위해서이다. 단순한 CRUD 프로젝트이기 때문에 특별히 중점으로 봐야 할 동작이나 화면은 없다.

 

그러면 이제부터 이 프로젝트의 구성에 대해 약간 설명을 해보고자 한다. 이 프로젝트는 Spring의 기본적인 추천 개발방법을 충실하게 잘 따랐다. 서비스 로직과 데이터 저장 부분은 Root Context에 설정하였고, 화면을 다루는 파트인 View 파트는 Servlet Context에 설정했다. 그러면 이것을 어떻게 확인하는가? 이 부분은 프로젝트의 web.xml에 보면 다음과 같은 부분이 있다.

 

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:egovframework/spring/context-*.xml</param-value>
	</context-param>
    
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
    
	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
    
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

 

위의 내용은 web.xml에 있는 내용중의 일부이다. <listener> 태그의 <listener-class>에 언급한 ContextLoaderListener 클래스가 Root Context를 구성해주고 <servlet> 태그의 <servlet-class> 태그에 언급한 DispatcherServlet 클래스가 Servlet Context를 구성해준다. 이때 ContextLoaderListener 클래스는 <context-param> 태그의 <param-name> 태그에 설정된 contextConfigLocation이란 파라미터에 <param-value> 태그에 설정된 값을 이용해서 Root Context를 구성하며, DispatcherServlet 클래스는 <init-param> 태그의 <param-name> 태그에 설정된 contextConfigLocation 이란 파라미터에 <param-value> 태그에 설정된 값을 이용해서 Servlet Context를 구성하게 된다. 이 내용에 따라 비추어보면 결국 Root Context는 클래스패스로 egovframework/spring 디렉토리에 파일명이 context- 로 시작하는 xml 파일들을 이용하여 Root Context를 구성하게 되며 Servlet Context는 /WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml 파일을 이용하여 Servlet Context를 구성하게 된다. 이 내용을 알고 이클립스에 만들어진 샘플 프로젝트를 보도록 하자. 샘플 프로젝트를 보면 만들어진 내용중의 다음의 것들이 있다.

 

 

또한 다음의 것도 볼 수 있다.

 

 

 

방금 위의 2개의 그림을 살펴보면 web.xml에서 언급되었던 파일들을 볼 수 있다. 즉 src/main/resources의 egovframework/spring 폴더에 있는 파일명이 context-로 시작하는 xml 파일들이 Root Context를 구성하게 되고 src/main/webapp에 있는 WEB-INF/config/egovframework/springmvc 폴더에 있는 dispatcher-servlet.xml이 Servlet Context를 구성하게 된다. 즉 우리가 기존의 XML로 환경설정되어 있는 샘플 프로젝트를 Java Config 방식으로 설정한다면 context-로 시작하는 xml 파일들과 dispatcher-servlet.xml 파일에 설정되어 있는 내용을 Java Config 방식으로 바꾸면 되는 것이다. 여기에서 우리가 작업해야 할 작업의 범위를 정의할 수 있게 된다.

 

이렇게 작업 범위를 설정했으면 이제 이 작업범위에 속하는 xml 파일들을 java 클래스로 만들어야 한다. 만약 지금과 같이 기존 프로젝트를 Java Config 로 바꾸는 작업을 한다면 xml 파일과 java 클래스를 1:1 개념으로 바꾸면 작업하기가 편하다. 그렇지 않고 완전 깨끗한 맨바닥에서 할 경우엔 환경설정의 용도에 따라 java 클래스 파일로 만들면 된다. 다음의 도표는 위에서 언급한 xml 파일들을 용도와 앞으로 만들 java 파일명으로 정리한 내용이다. 실제 이 샘플 프로젝트는 해당 용도별로 잘 분리되어 있다.

 

Context 구분 

 xml 파일 이름

 Java 파일 이름

 용도

 Root Context

 context-aspect.xml

 ContextAspect.java

 AOP 관련 설정 파일

 context-common.xml

 RootContext.java

 공통 설정 파일

 context-datasource.xml

 ContextDatasource.java

 데이터소스 설정 파일

 context-idgen.xml

 ContextIdgen.java

 Id Generator 설정 파일

 context-mapper.xml

 ContextMapper.java

 Mybatis 관련 설정 파일

 context-properties.xml

 ContextProperties.java

 프로퍼티 관련 설정 파일

 context-sqlMap.xml

 ContextSqlMap.java

 Ibatis 관련 설정 파일

 context-transaction.xml

 ContextTransaction.java

 트랜잭션 관련 설정 파일

 context-validator.xml

 ContextValidator.java

 Validator 관련 설정 파일

 Servlet Context  dispatcher-servlet.xml  ServletContext.java

 Servlet Context 관련 설정 파일

 

위의 표를 보면 XML 파일과 Java Config 파일이 1대1로 매칭이 된다. 물론 반드시 이렇게 할 필요는 없다. 사실 이해를 하기 쉽도록 하기 위해 이렇게 만들었지만 원래는 용도에 맞춰서 만드는게 가장 좋다. 즉 AOP, Data Source, 트랜잭션 등 용도별로 설정 파일이 1개씩만 존재하면 차후에 해당 용도별 파일로 찾아가면 바로 그 설정을 볼 수 있기 때문이다. 위의 도표를 보면 xml 파일명과 다른 파일명을 가진 Java Config 파일이 존재하는데 바로 RootContext.java와 ServletContext.java 파일이다. 이 파일들의 역할은 나중에 설명하겠으나 각 Context의 진입점 역할을 하는 파일이다. 앞으로 이 파일 순서대로 진행하도록 하겠다. 다만 RootContext.java 파일과 ServletContext.java 파일은 가장 나중에 설명하도록 하겠다.

 

이번 글에서는 전자정부 프레임워크의 샘플 프로젝트의 환경 설정 파일과 이에 대응하는 Java Config 파일들을 정리했다. 다음글에서는 Java Config 를 설정하는데 있어 알아두어야 할 기초적인 지식에 대해 언급하도록 하겠다.

 

 

목     차

 1. 전자정부 프레임워크를 Java Config 방식으로 설정해보자(환경구축)

 2. 전자정부 프레임워크를 Java Config 방식으로 설정해보자(기초)

 3. 전자정부 프레임워크를 Java Config 방식으로 설정해보자(context-aspect.xml 변환)

 4. 전자정부 프레임워크를 Java Config 방식으로 설정해보자(context-common.xml 변환)

 5. 전자정부 프레임워크를 Java Config 방식으로 설정해보자(context-datasource.xml 변환)

 6. 전자정부 프레임워크를 Java Config 방식으로 설정해보자(context-sqlMap.xml, context-mapper.xml 변환)

 7. 전자정부 프레임워크를 Java Config 방식으로 설정해보자(context-transaction.xml 변환)

 8. 전자정부 프레임워크를 Java Config 방식으로 설정해보자(context-idgen.xml, context-properties.xml, context-validator.xml 변환)

 9. 작성된 Java Config 클래스 파일들을 실제 등록해보자(RootContext 클래스 제작)

 10. 전자정부 프레임워크를 Java Config 방식으로 설정해보자(dispatcher-servlet.xml 변환) - 1

 11. 전자정부 프레임워크를 Java Config 방식으로 설정해보자(dispatcher-servlet.xml 변환) - 2

 12. 전자정부 프레임워크를 Java Config 방식으로 설정해보자(dispatcher-servlet.xml 변환) - 3