2 minute read

이번에 회사에서 maven에서 nexus의 SNAPSHOT repository를 사용하게 되면서 이를 처리하는 과정에서 알게 된 것들을 정리해 놓으면 좋을 것 같다는 생각에 본 포스트를 작성하게 되었습니다.

1. nexus의 SNAPSHOT repository를 사용하게 된 배경

문제

제가 관리하고 있는 모듈을 사용하는 상위 모듈에서 모든 모듈을 패키징 하는 작업을 진행할 시 제가 관리하고 있는 모듈들의 라이브러리가 상위 모듈의 릴리즈 파일에 있는 것과 제가 관리하는 모듈의 릴리즈 파일에 있는 것들이 같은 파일임에도 불구하고 용량 차이가 발생하여 패키징 작업이 진행 되지 않는다는 문제를 보고 받았습니다.

원인

용량 차이가 발생한 이유는 상위 모듈 (앞으로는 A 모듈이라고 하겠습니다)과 제가 관리하는 하위 모듈 (앞으로는 B라고 하겠습니다) 의 릴리즈 시점이 달라서와 SNAPSHOT repository를 사용하지 않아서 발생하였습니다.

좀 더 구체적으로 설명을 드리자면 maven에서는 파일명에 SNAPSHOT이 들어가지 않은 라이브러리 관련해서는 nexus에 이전에 업로드를 진행했지만 수정 사항이 생겨 삭제하고 재업로드를 진행해도 자동으로 갱신한 라이브러리로 변경해 주지 않습니다. maven에서 새로 업로드한 파일로 갱신하려면 메이블 로컬 저장소에서 삭제를 하고 다시 받아오는 방법 밖에는 없습니다.

그리고 상위 모듈인 A모듈이 하위 모듈인 B모듈 보다 먼저 릴리즈를 끝내버린 이유도 있습니다.

해결 방법

상위 모듈인 A 모듈을 먼저 릴리즈 해서 발생하는 문제는 작업자들 간의 의사 소통이 되지 않는 문제이므로 논외로 하고, maven에서 동일한 파일명에 대해 nexus에 재업로드를 진행했을 때 자동으로 갱신되지 않는 문제에 대한 해결 방법으로는 SNAPSHOT repository를 사용하는 방법으로 해결할 수 있고, 어떻게 적용하는지 알려드리도록 하겠습니다.

2. SNAPSHOT repository를 사용하는 방법

  1. nexus SNAPSHOT repository로 deploy 하는 방법
    아래 방법은 적용하고자 하는 프로젝트에서 maven 빌드가 정상적으로 동작한다는 전제 조건하에 진행하셔야 합니다.
    • maven global setting.xml 파일 내용 변경
      setting.xml 파일 경로 : 내 PC/C:/사용자/사용자명/.m2/
      ```
    diquest-snapshot userId password

    snapshot repository id snapshot repository snapshot repository url
     - `pom.xml`의 `build` 항목에서 다음과 같은 plugin을 추가   
    
    maven-deploy-plugin 2.8.2 default-deploy deploy deploy
     - `pom.xml`에 `distributionManagement` 항목 추가 및 `snapshotRepository` 추가   
    
    snapshot repository id snapshot repository url
     - `pom.xml`에서 모듈의 버전명에 `SNAPSHOT` 추가   
    
    4.5.6.0-SNAPSHOT

    ```

    • maven Lifecycle에서 deploy를 실행하여 nexus에 정상적으로 업로드가 되는지 확인
  2. SNAPSHOT 라이브러리 dependency에 추가하는 방법
    • pom.xmlrepositories에 snapshot repository 정보 추가
      ```
    snapshot repository id snapshot repository url true daily
     - `pom.xml`의 `dependency` 추가 시 `version`에 `SNAPSHOT` 추가   
    
    groupId artifactId 3.4.3.3-SNAPSHOT

    ```

3. SNAPSHOT repository를 사용하는 이유

SNAPSHOT repository를 사용하는 이유로는 위에 SNAPSHOT repository를 사용하게 된 배경으로 maven 로컬 repository 문제와 관련이 있습니다.

maven에서 SNAPSHOT repository에 업로드를 진행하게 되면 업로드를 진행했던 날짜와 시간 정보도 같이 올라가게 되어서 같은 SNAPSHOT 이지만 좀 더 상세한 정보를 포함해서 라이브러리가 업로드 되고, maven에서 dependency의 version에 SNAPSHOT을 붙인 경우에는 가장 최근에 업로드한 라이브러리를 가져오기 때문에 이전에 업로드한 SNAPSHOT 라이브러리와의 충돌 문제가 발생하지 않기 때문입니다.

마치며

이번에는 maven에서 nexus의 SNAPSHOT repository 사용하는 방법에 대해서 알아보았는데요 회사에서는 릴리즈 시에 개인 프로젝트보다는 특정 툴을 이용하는 것이 일관성을 보장하기 때문에 maven이나 nexus 등의 툴을 사용하는데 이러한 툴을 사용하면서도 왜 SNAPSHOT repository를 사용하는지에 대해서 알지 못했었는데 이번 기회를 통해 알 수 있게 되었고, 다음에 개인적으로 토이 프로젝트를 할 때에도 이러한 것들을 직접 구성해서 진행할 때에 본 포스트가 많은 도움을 줄 듯 해서 작성을 해보았습니다.

본 포스트는 제가 기록하고 공부하기 위해서 작성한 것이라 다소 틀린 내용이 있을 수 있습니다. 이러한 점 양해 부탁드리며 틀린 점이 있다면 날카로운 비난보다는 따스한 비판을 해주시면 감사하겠으며, 궁금한 점이 있으시다면 댓글 남겨주시기 바랍니다. 긴 글 읽어주셔서 감사합니다!

Tags:

Categories:

Updated:

Comments