주요글: 도커 시작하기
반응형

회사를 옮길 때 마다 Maven 리포지토리와 관련된 비슷한 짓거리를 하고 그 내용을 동료들에게 알려주어야 하는 귀찮음을 줄이고자 정리해 보았다.


회사에서 내부적으로 사용할 Maven 리포지토리가 필요한 경우가 있다. 예를 들어, 오라클 JDBC 드라이버는 Maven 중앙 리포지토리에 존재하지 않기 때문에 모든 개발자들이 로컬 리포지토리에 따로 등록해주는 수고를 해야 하는데, 내부용 Maven 리포지토리를 만들어서 그곳에 오라클 JDBC 드라이버를 등록하면 한 사람만 내부용 리포지토리에 등록해주는 수고를 해 주면 나머지 개발자는 편하게 오라클 JDBC 드라이버를 Maven의 depedency로 등록해서 사용할 수 있게 된다. (한 사람이 노력으로 많은 개발자들의 중복 작업이 사라진다. DRY!!) 외부의 jar 파일 뿐만 아니라 내부에서 사내의 다수 프롤젝트에서 사용될 모듈을 만드는 경우에도 내부용 리포지토리를 만들면 쉽게 관련 모듈을 사용/관리할 수 있게 된다.

내부용 리포지토리 구축을 쉽게 하고 싶을 때에는 Nexus(http://www.sonatype.org/nexus/)를 사용하면 된다. Nexus는 자바로 만들어져 있으며, WAR로도 배포되기 때문에 손쉽게 설치할 수 있다는 장점이 있다. 설치에 대한 정보는 Nexus 홈페이지를 참고하기 바란다.

Nexus를 설치하면 최초에 다음의 리포지토리를 제공해준다.
  • Releases: 내부에서 만들어진 모듈의 정식 버전을 등록할 때 사용 (releases)
  • Snapshots: 내부에서 만들어진 모듈의 스냅샵 버전을 등록할 때 사용 (snapshots)
  • 3rd party: 외부 업체 제공 모듈을 등록할 때 사용 (예를 들어, 오라클 JDBC 드라이버 등) (thirdparty)
  • 기타 Central, Apache Snapshots, Codehaus Snapshots 등 외부 리포지토리 연결 (central 등)
  • 그리고, 이들을 하나처럼 보이게 해 주는 Public Repositories (public)
위 목록에서 뒤의 괄호안에 있는 이름이 리포지토리 주소에서 사용되는 경로인데, 예를 들어, Releases 리포지토리의 주소는 http://host/nexus-ver/content/repositories/releases/ 의 형식을 가지며, 그룹의 경우는 http://host/nexus-ver/content/groups/public의 형식을 갖는다.

릴리즈하기 위한 Maven 설정

내가 만든 Maven 프로젝트를 리포지토리에 배포하려면 다음의 세 가지 작업을 해 주어야 한다.
  • pom.xml 파일에 배포 대상 리포지토리 설정하기
  • settings.xml 파일에 배포 대상 리포지토리 연결 정보 설정하기
  • 배포하기
먼저 pom.xml 파일에 다음과 같이 <distributionManagement> 태그를 등록한다.

pom.xml 파일

<distributionManagement>
<repository>
<id>mycompany.internal.release</id>
<name>MyCompany Internal Repository</name>
<url>http://host/nexus/content/repositories/releases/</url>
</repository>
</distributionManagement>

두 번째로 settings.xml 파일에 pom.xml 파일에 설정한 리포지토리에 연결할 때 사용할 정보를 추가해주는 것이다. settings.xml 파일은 여러 위치에 만들 수 있는데 필자의 경우 [홈디렉토리]/.m2 디렉토리에 주로 만들어준다. 아래 코드는 settings.xml 파일의 작성 예이다.

settings.xml 파일

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>mycompany.internal.release</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>

</settings>

<server> 태그는 특정 서버에 연결할 때 사용할 아이디/암호를 입력하는데 이때 <id>의 값은 pom.xml에 등록한 리포지토리의 <id> 값과 일치해야 한다.

위와 같이 작업이 끝났다면 이제 배포만 하면 된다. Maven 프로젝트 디렉토리에서 다음과 같이 deploy 명령어를 실행하면 pom.xml 파일에 등록했던 배포 대상 리포지토리에 프로젝트의 artifact가 배포된다.

mvn deploy

등록된 것 사용하기

배포된 artifact를 다른 프로젝트에서 사용하려면 다음과 같이 앞서 구축한 내부용 리포지토리를 등록해주고 depedency를 추가해주면 된다.


<repositories>

<repository>

<id>mycompany.internal.repo</id>

<url>http://host/nexus/content/repositories/releases/</url>

<releases>

<enabled>true</enabled>

</releases>

</repository>

</repositories>


<dependencies>

<dependency>

<groupId>com.mycompany</groupId>

<artifactId>my-common-module</artifactId>

<version>3.0</version>

</dependency>

</dependencies>


Snapshot 등도 동일한 방식으로 등록 및 사용할 수 있다.



+ Recent posts