Skip to content
Tags

, ,

Java Spring DDD (Domain Driven Design) 설계 방법론 (1) – Maven 설정

2013년 12월 30일

Maven은 Dependency 관리 뿐만 아니라 Build 등 여러가지 기능을 활용할 수 있는 훌륭한 툴입니다. 최근에는 Gradle이 Spring쪽에서 애용되는 것으로 보이나 그 전까지는 충분히 제 역할을 했었던 관리 툴입니다. 단지 XML 설정이라는 제한성때문에 약간 기피대상이 되는 것 같습니다.

Maven은 Eclipse나 IntelliJ나 호환성이 상당히 뛰어나고 다루기 쉽습니다. 프로젝트 내에 pom.xml 파일만 있다면 해당 파일을 수정해 Project의 설정을 변경할 수 있습니다.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.incombine</groupId>
 <artifactId>genius-core</artifactId>
 <version>1.0.0</version>
<properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <project-default-encoding>UTF-8</project-default-encoding>
 <java-version>1.6</java-version>
 <org.springframework-version>3.2.2.RELEASE</org.springframework-version>
 <org.springframework.social-version>1.0.2.RELEASE</org.springframework.social-version>
 </properties>
<dependencies>
<!-- Spring Framework -->
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-tx</artifactId>
 <version>${org.springframework-version}</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-orm</artifactId>
 <version>${org.springframework-version}</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-webmvc</artifactId>
 <version>${org.springframework-version}</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-test</artifactId>
 <version>${org.springframework-version}</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-aop</artifactId>
 <version>${org.springframework-version}</version>
 </dependency>
<!-- Spring Social -->
 <dependency>
 <groupId>org.springframework.social</groupId>
 <artifactId>spring-social-facebook</artifactId>
 <version>${org.springframework.social-version}</version>
 </dependency>
 <dependency>
 <groupId>org.springframework.social</groupId>
 <artifactId>spring-social-web</artifactId>
 <version>${org.springframework.social-version}</version>
 </dependency>
<!-- Hibernate 4 -->
 <dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-core</artifactId>
 <version>4.2.3.Final</version>
 </dependency>

<!-- JUnit 4 & Test -->
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.11</version>
 </dependency>
 <dependency>
 <groupId>org.hamcrest</groupId>
 <artifactId>hamcrest-all</artifactId>
 <version>1.3</version>
 </dependency>
 <dependency>
 <groupId>com.h2database</groupId>
 <artifactId>h2</artifactId>
 <version>1.3.170</version>
 </dependency>
<!-- Lombok Project -->
 <dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <version>0.11.0</version>
 </dependency>
</dependencies>
 <build>
 <plugins>
 <!-- Compiler -->
 <plugin>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>2.1</version>
 <configuration>
 <source>${java-version}</source>
 <target>${java-version}</target>
 <encoding>${project-default-encoding}</encoding>
 </configuration>
 </plugin>
 </plugins>
 </build>
 <repositories>
 <repository>
 <id>spring-snapshots</id>
 <name>Spring Snapshots</name>
 <url>http://repo.spring.io/snapshot</url>
 <snapshots>
 <enabled>true</enabled>
 </snapshots>
 </repository>
 <repository>
 <id>spring-milestones</id>
 <name>Spring Milestones</name>
 <url>http://repo.springsource.org/libs-milestone</url>
 <snapshots>
 <enabled>false</enabled>
 </snapshots>
 </repository>
 <repository>
 <id>org.jboss.repository.releases</id>
 <name>JBoss Maven Release Repository</name>
 <url>https://repository.jboss.org/nexus/content/repositories/releases</url>
 <snapshots>
 <enabled>false</enabled>
 </snapshots>
 </repository>
<repository>
 <releases/>
 <snapshots>
 <enabled>false</enabled>
 </snapshots>
 <id>mygrid-repository</id>
 <name>myGrid Repository</name>
 <url>http://www.mygrid.org.uk/maven/repository</url>
 </repository>
<repository>
 <id>gcm-server-repository</id>
 <url>https://raw.github.com/slorber/gcm-server-repository/master/releases/</url>
 </repository>
 </repositories>
<pluginRepositories>
 <pluginRepository>
 <id>spring-snapshots</id>
 <name>Spring Snapshots</name>
 <url>http://repo.springsource.org/libs-snapshot</url>
 <snapshots>
 <enabled>true</enabled>
 </snapshots>
 </pluginRepository>
 <pluginRepository>
 <id>spring-milestones</id>
 <name>Spring Milestones</name>
 <url>http://repo.springsource.org/libs-milestone</url>
 <snapshots>
 <enabled>false</enabled>
 </snapshots>
 </pluginRepository>
 </pluginRepositories>
</project>

Pom 파일의 간단한 예제입니다.

해당 파일 내부에 참조하는 Dependency들을 추가해주고, build툴을 등록해 build 방식을 설정해 줄 수 있습니다. 그리고 Dependency들이 존재하는 Maven Repository 경로를 설정해 해당 Repository에서 maven dependency들을 다운로드 받아올 수 있습니다. Spring에서는 자체 Repository를 운영하기 때문에 따로 File을 찾는데 많은 노력을 기울일 필요가 없습니다.

Maven을 활용하면 사용할 Dependency들을 따로 찾아서 다운로드 받에 프로젝트에 넣거나, 배포시 따로 복사해줄 필요가 없습니다. 배포 서버에서 따로 Build를 구성해 주면 해당 서버에서 빌드타임에 필요한 Dependency들을 확인해 다운로드 해주기 때문입니다. Maven 같은 빌드툴을 사용하는 것 만으로도 Java 개발을 상당히 쉽게 해줍니다.

또한 Maven은 모듈관리기능도 할 수 있습니다. 하나의 서버에서 여러개의 프로젝트를 생성해 모듈별로 작업할 경우 전체 모듈별 Build나 관리를 Parent 설정을 통해 관리해줄 수 있습니다.

 <groupId>com.incombine</groupId>
 <artifactId>bapul-parent</artifactId>
 <packaging>pom</packaging>
 <version>1.0</version>
 <name>bapul parent</name>
<modules>
 <module>core</module>
 <module>math</module>
 <module>api</module>
 <module>web</module>
</modules>

이런 방식으로 parent 폴더에 pom 파일을 만들어주신다면 해당 Parent Build 셋팅으로 내부 모듈 빌드를 편한하게 진행할 수 있습니다.

Advertisements
댓글 남기기

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: