메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

Enterprise Flex RIA 해부(4) : 3개의 하위 프로젝트

한빛미디어

|

2008-08-11

|

by HANBIT

9,509

제공 : 한빛 네트워크
저자 : Tony Hillerson
역자 : 김형욱
원문 : Anatomy of an Enterprise Flex RIA Part 4: The Three Child Projects

지난 글에서는 본 J2EE 프로젝트가 어떻게 구성되어 있고 또 그것을 Maven으로 어떻게 기술했는지에 대해 살펴보았다. 이번 글에서는 계속해서 본 프로젝트의 구조에 대해 살펴보겠다.

Maven 프로젝트에서 기본적으로 찾아보는 디렉토리 중 하나가 바로 프로젝트의 소스 디렉토리이다. 이는 기본적으로 src라는 이름으로 되어있으며 이 폴더는 pom.xml 파일과 함께 프로젝트의 루트 디렉토리에 위치하고 있어야 한다.

src 내부에는 main 이라는 폴더와 test라는 폴더가 있는데, 전자는 프로젝트의 주요 코드, 후자는 테스트를 위한 코드로 구성되어 있다. 이 두 폴더의 내용은 사용되는 프로그램 언어에 따라 조금씩 달라지게 되는데 본 프로젝트의 경우를 살펴보면, 데이터 프로젝트[역자주 : bookie-data 를 말한다]는 Java 코드가 들어있는 java 디렉토리를, 웹 프로젝트[역자주 : bookie-ui를 말한다]는 java, flex 디렉토리를 하위 디렉토리로 담고 있다.

데이터 프로젝트의 경우에는 위와 같은 디렉토리 레벨에 src/main/resources 라는 디렉토리가 있어 여기에 빌드시에 필요한 각종 설정 파일, 정보 등을 포함하고 있고 또한 src/test/resources 디렉토리에는 빌드시 테스트 단계에서 필요한 모든 사항들을 가지고 있다. 그리고 위의 두 디렉토리로부터 include된 것은 모두 해당 단계 클래스패스의 루트에 위치하게 될 것이다.

웹 프로젝트에는 bookie.war 라는 이름의 디렉토리에 WAR 아카이브의 내용을 담고 있다. 이는 아직 컴파일되지 않은 상태로 java, flex 디렉토리와 마찬가지로 나중에 컴파일 될 것이다. 이미 언급했듯이 웹 아카이브 파일은 특정 위치에 특정 파일을 포함하는 형태의 고정된 구조를 띄게 된다. 구체적으로 설명하면, 웹 아카이브 파일의 루트 디렉토리에는 WEB-INF라는 디렉토리와 함께 디플로이에 대해 기술한 web.xml이라는 파일이 있어야 한다. 그리고 컴파일된 자바 파일들은 모두 WEB-INF 아래에 있는 classes 디렉토리에, 그리고 Java 라이브러리 파일들은 WEB-INF/lib 디렉토리에 위치하게 된다. 이 디렉토리들은 나중에 Maven이 생성해 줄 것이며 그 밖에 WAR의 루트에 넣고 싶은 게 있다면 모두 bookie.war 디렉토리에 포함시키면 된다.

웹 아카이브 파일이 디플로이 되면 컴파일된 Flex 애플리케이션을 포함하게 되는데 이곳에 LCDS 코드도 들어간다. bookie.war 아래의 WEB-INF 디렉토리를 보면 flex 라는 이름의 디렉토리를 찾을 수 있을텐데 바로 그곳에 LCDS를 구동시키는데 필요한 모든 자원들이 들어있다.

또 하나의 중요한 디렉토리는 데이터 프로젝트에 있는 src/data 디렉토리이다. [역자주 : 원문에는 src/main/data로 되어있으나 실제 디렉토리를 보면 src/data가 맞는 것 같다.] 여기에는 데이터 베이스 스키마를 기술한 정보와 자동화된 Java 테스트시에 사용할 테스트 데이터가 들어있다. 이 디렉토리는 표준 디렉토리는 아니지만 이곳에 두는 게 의미가 잘 통하는 것 같다. 그리고 server-config 라고 하는 또 하나의 표준화되지 않은 디렉토리가 있는데 이는 이름에서 눈치챌 수 있듯이 서버 설정 정보를 담고 있다. 이는 서버 별로 구성되므로 본 프로젝트의 서버 환경 설정을 위해 내부에 jboss 라는 디렉토리를 포함하게 된다.

사실 위에서 언급한 디렉토리는 Maven 명세에는 없는, 표준화되지 않은 디렉토리이다. 하지만 위의 설정 파일들이 JAR나 WAR에 포함되는 걸 원치 않기 때문에 표준 디렉토리인 “resources” 디렉토리에 넣지 않았다. 한편 위의 파일들을 src/server-config 처럼 src 밑에 둘까도 했지만 보다 눈에 잘 띄게 하기 위해 루트 바로 밑의 server-config로 위치를 정하였다.

Persistence unit인 “data” 프로젝트와 사용자 인터페이스인 “ui” 프로젝트를 .ear로 묶어주는 프로젝트가 바로 bookie-ear 이다. 여기에는 별도의 pom.xml 파일이 있어 Maven이 엔터프라이즈 애플리케이션을 어떻게 빌드할지를 설정할 수 있다.


    4.0.0
    
         bookieProject
         lcds.examples.bookie
         1.0-SNAPSHOT
    
    lcds.examples.bookie
    1.0-SNAPSHOT
    bookie-ear
    ear
    Bookie Example EAR Project; 
이 부분은 그 상위의 POM과 많이 비슷한 편이다. POM의 첫 부분에서 “parent” 태그를 써서 상위 프로젝트를 참조했는데 이는 Maven에게 단독 프로젝트가 아님을 알려주기 위해서이다. 프로젝트는 그것이 무엇이든 간에 artifactId, groupId 그리고 version에 의해 식별되며 “parent” 태그 아랫부분에 이러한 속성들에 대한 .ear 프로젝트의 설정 값들이 있는 걸 볼 수 있다.

    bookie
    
         
              org.apache.maven.plugins
              maven-ear-plugin
              2.3
              
                
                    
                      lcds.examples.bookie
                      bookie-data
                      /
                      true
                    
                    
                      lcds.examples.bookie
                      bookie-ui
                      /bookie
                      true
                    
                
              
         
    

다음으로, build 섹션에서는 final name으로 “1.0-SNAPSHOT” 같은 당혹스런 이름대신 “bookie”를 사용하도록 설정한 것을 볼 수 있을 것이다. 그리고 EAR 파일들을 빌드하는 EAR 플러그인 정보를 설정하는데, 여기서 bookie 데이터 프로젝트가 EAR의 루트에 위치하며 빌드시 생성된 application.xml 파일을 포함하도록 설정했음을 알 수 있다.

또 “webModule” tag 이하의 내용을 보면 웹 아카이브로 bookie-ui라는 웹 애플리케이션 프로젝트를 포함하고 contextRoot는 /bookie 로 설정을 했음을 할 수 있을 것이다. 그리고 WAR 는 묶이지 않은 상태 혹은 “풀어 헤쳐진” 상태로 설정했는데, 일단 deploy를 할 준비가 된 이상 이러한 설정은 얼마든지 변경할 수 있다. 하지만 여러분이 어떠한 환경에 있는지 그리고 그러한 환경에서 WAR를 묶어야 할지 말아야 할지에 대한 선택을 자동화하여 쉽게 만드는 방법에 대해서는 본인도 잘 모르겠다.
 

         
            lcds.examples.bookie
            bookie-data
              1.0-SNAPSHOT
         
         
            lcds.examples.bookie
            bookie-ui
            war
              1.0-SNAPSHOT
         
    

이번 섹션에서는 이 프로젝트가 의존하고 있는 다른 프로젝트들에 대해 Maven에게 알리고 있다. 이것은 전에도 얘기했던 바로 그 의존성 관리의 마법의 시작이라고 할 수 있다. 본 EAR 프로젝트는 deploy를 쉽게 할 수 있도록 JAR와 WAR를 한데 모으는 데 있어 그저 위의 프로젝트들을 dependencies 항목에 기술할 뿐 가만히 있기만 하면 되는 것이다.

다음 기사에서는 본 프로젝트의 Maven 생명주기(lifecycle)에 대해 살펴볼 것이다. 전체 연재물(영문)은 여기에서 볼 수 있다.
TAG :
댓글 입력
자료실

최근 본 책0