※ 원문 참조:
http://wiki.javajigi.net/pages/viewpage.action?pageId=7188
왜 필요한가?
우리들이 일반적으로 개발하고 있는 대부분의 자바 웹 애플리케이션의 디렉토리 구조를 보면 프로젝트마다 제각기 다르다는 것을 알 수 있다. 물론 프로젝트의 성격에 따라 다르게 구성하는 것이 맞겠지만 기본적인 디렉토리 구조에 대한 가이드안을 만든다면 프로젝트에 참여하는 개발자들이 좀 더 빠르게 친숙해 질 수 있을 것으로 생각한다.
여러분들이 지금까지 참여한 프로젝트들의 디렉토리 구조는 어떠한가? 우선 지금까지 자바지기가 진행한 프로젝트의 디렉토리 구조를 예로 들고 각각의 구조에 대한 좀 더 좋은 방안을 찾아보고자 한다.
이 문제를 토론 주제를 빠르게 선정한 이유는? 현재 자바지기에 대한 사이트 개편 작업을 진행할 예정이다. 사이트 개편 작업을 하면서 프로젝트의 디렉토리 구조를 정의할 때 다른 개발자들이 생각하거나 일반적으로 사용하는 디렉토리 구조를 공유하여 사용하기 위함이다. 프로그램에 정답이 없듯이 이 문제 또한 정답은 있을 수 없다. 단지 각각의 구조에 따른 장,단점이 있을 따름이다. 프로젝트의 성격에 따라서 디렉토리 구조를 결정하면 될 것으로 생각한다. |
무엇을 얻을 수 있나?
Java 웹 애플리케이션의 프로젝트에 대한 디렉토리 구조를 정의함으로서 신규 프로젝트를 진행할 때 추가적인 고민없이 프로젝트를 진행하는 것이 가능하다.
다양한 디렉토리 구조
디렉토리 구조 공유
여러분들이 지금 사용하고 있는 디렉토리 구조를 공유해주시면 더 좋겠네요. 만약 여러분이 그와 같은 구조를 만들었다면 왜 그와 같은 구조를 만들게 되었는지..지금과 같은 구조로 프로젝트를 진행했을 때의 장,단점은 무엇인지 등에 대해서 공유해주시면 좋겠네요. |
해결 방법
- 최근 대부분의 자바 웹 애플리케이션 개발에서 공통적으로 보이는 경향은 자바 소스 디렉토리와 Web 소스(js, css, jsp, html)를 분리한다.
- 자바 소스 디렉토리는 실제 구현 소스와 테스트 소스를 분리한다. 또한 실제 구현 소스와 같은 패키지내에 테스트 소스를 구현하는 것을 원칙으로 하고 있다.
- 빌드 환경까지 제공해줄 수 있어야 한다.
자바지기 개편안을 위한 디렉토리 구조
자바지기 개편안을 위한 디렉토리 구조는 Equinox의 디렉토리 구조를 따르는 것으로 했다. Equinox의 경우 디렉토리 구조 뿐만 아니라 각 프레임워크별로 기본 템플릿 프로젝트를 제공하기 때문에 세팅하기 쉽다.
또 한가지 Equinox를 선택하게 된 이유는 단순한 디렉토리 구조 뿐만아니라 Build 환경까지 제공한다는 것이다. Build 환경이 단순하게 Ant만을 지원했다면 선택하지 않았겠지만 Ant와 Maven의 강점 두가지를 모두 가지고 있는 구조가 마음에 들었다. 이와 같은 구조로 웹 애플리케이션을 개발할 경우 CVS나 SVN을 통하여 라이브러리를 공유하지 않은 상태로 개발하는 것이 가능하다. 또한 경우에 따라서는 Maven을 이용하여 빌드하는 것 또한 가능하기 때문이다.
Ant과 AntLib의 조합, build.xml과 pom.xml의 조합은 그 동안 해결하려고 했던 많은 문제점을 해결해 줄 수 있을 것이라 생각한다. 또한 pom.xml을 가지고 있기 때문에 Eclipse Maven IDE를 이용하여 개발하는 것이 가능하게 된다.
build.xml의 다음 코드를 통하여 Ant와 Maven이 통합되었을 때 라이브러리 관리가 얼마나 편하게 될 수 있는지 확인할 수 있을 것이다.
build.xml<artifact:pom file="pom.xml" id="maven.project"/> <artifact:dependencies pathId="compile.classpath" filesetId="compile.fileset" useScope="compile"> <pom refid="maven.project"/> </artifact:dependencies> <artifact:dependencies pathId="test.classpath" filesetId="test.fileset" useScope="test"> <pom refid="maven.project"/> </artifact:dependencies> <artifact:dependencies pathId="runtime.classpath" filesetId="runtime.fileset" useScope="runtime"> <pom refid="maven.project"/> </artifact:dependencies> <target name="compile" description="Compile main source tree java files"> <mkdir dir="${build.dir}/classes"/> <javac destdir="${build.dir}/classes" debug="true" optimize="false" deprecation="false" failonerror="true"> <src path="${src.dir}"/> <classpath> <path refid="compile.classpath"/> <fileset dir="${web.dir}/WEB-INF/lib" includes="*.jar"/> </classpath> </javac> <!-- compile tests --> <mkdir dir="${test.dir}/classes"/> <javac destdir="${test.dir}/classes" debug="true" optimize="false" deprecation="false" failonerror="true"> <src path="${test.src}"/> <classpath> <path refid="test.classpath"/> <path location="${build.dir}/classes"/> <fileset dir="${web.dir}/WEB-INF/lib" includes="*.jar"/> </classpath> </javac> <!-- Copy XML files to ${build.dir}/classes --> <copy todir="${build.dir}/classes"> <fileset dir="${src.dir}" includes="**/*.xml"/> </copy> </target>
이와 같이 두가지를 통합하여 사용할 경우 라이브러리를 개발자간에 공유할 필요없이 pom.xml만 공유하면 된다.
'【Programming】 > JSP' 카테고리의 다른 글
Web Application의 서비스 및 개발 표준 디렉토리 레이아웃 (0) | 2009.01.14 |
---|