Tech

Nexus 적용기: Repository 업로드부터 사용 방법까지

봄의 개발자 2024. 10. 17.
728x90
반응형

들어가며

maven을 사용하는 중 nexus 세팅을 해달라는 업무를 받았다. 그래서 이번에는 nexus 세팅 및 설치 방법, 그리고 인텔리제이를 통해 프로젝트 내에서 사용하는 라이브러리를 업로드하고 이를 관리하는 레파지토리를 사용하는 방법에 대해 알아보도록 하겠다!


Nexus란 ?

Apache Maven 프로젝트와 관련된 중앙 저장소 관리 시스템으로 자바 기반 프로젝트에 필요한 종속성(의존성) 파일을 저장하고 관리하는 중앙 저장소 역할을 한다.https://ssonzm.tistory.com/131

 

Nexus 기능

  1. 의존성 관리: Maven 프로젝트에서 필요한 외부 라이브러리 및 플러그인을 관리하고 다운로드 가능
  2. 중앙 저장소: 여러 프로젝트에 공유할 수 있는 중앙 저장소 역할
  3. 로컬 캐시: Maven 빌드 작업을 향상하기 위해 로컬 캐시 제공
  4. 보안 및 권한 관리: 사용자에게 적절한 접근 권한 부여 가능
  5. 프록시 기능: 의존성 다운로드 시 프록시를 통해 속도 향상
  6. 그룹화: 여러 저장소를 그룹화하여 하나의 가상 저장소로 사용 가능

 

0. 공식 가이드에서는 홈 디렉토리에서 nexus 실행시키는 것을 권장하지 않기 때문에 새로운 폴더 생성 후 그 폴더 내에서 작업 수행

1. nexus3 가장 최신 버전 다운로드

wget <https://download.sonatype.com/nexus/3/latest-unix.tar.gz>

 

2. tar 파일 압축 해제

tar -xvzf latest-unix.tar.gz

 

3. tar 파일 삭제

rm latest-unix.tar.gz

 

4. 현재 사용자가 root인 경우

리눅스의 경우 whoami 명령어 사용해서 현재 사용자 확인 가능하다. 나는 root 사용자가 아니었기 때문에 생략했다.

 

[사용자 추가 생성]

sudo useradd nexus
visudo
sudo chown -R nexus:nexus /opt/nexus
sudo chown -R nexus:nexus /opt/sonatype-work

 

5. nexus.rc 사용자 지정

vi {nexus 파일 경로}/bin/nexus.rc
run_as_user="{사용자 이름}"

처음 파일 들어갔을 때 #run_as_user=”” 라고 되어있었다. 앞에 주석 지우고 사용자 이름 “” 내에 추가해주었다.

 

6. JAVA_HOME 환경 설정 안되어 있는 경우

{nexus 폴더 경로}/nexus-3.73.0-12/bin/nexus 

INSTALL4J_JAVA_HOME_OVERRIDE="/usr/local/src/java/jdk-11.0.2”

처음에는 자바 8로 했으나 실행 시 에러가 발생해서 11로 변경해주어서 해결했다.

 

* 자바 11.0.2 사용 시 에러 발생함! 아래 게시글 참고

 

Nexus 적용기: 갑작스런 에러!

발생 문제Nexus 서버 실행하고 해당 포트로 들어갔는데 갑자기 이상한 에러가 떴다 ...싸늘하다 ... 식은 땀이 나기 시작했다 이게 뭐람2024-10-31 15:01:33,658+0900 WARN [qtp205803213-93] admin org.sonatype.nexus.sie...

ssonzm.tistory.com

 

7. HOST, PORT설정

{nexus 폴더 경로} /nexus-3.73.0-12/etc/nexus-default.properties

application-port={원하는 PORT}
application-host={원하는 HOST IP}

default로 port는 8081, host는 0.0.0.0 으로 설정되어있다. 필요한 경우 변경하면 된다.

 

8. nexus 실행

{nexus 파일 경로}/bin 위치로 가면 nexus 라는 파일이 있다. ./nexus run 을 해주면 로그가 뜨면서 실행된다.

 

다른 글에선 ./nexus start 해주면 된다는데 나는 심볼릭 링크 만드는 과정 등 일부 생략했기 때문에 그런건지 run 옵션을 사용해야만 실행이 제대로 되었다.

 

9. nexus web 접속

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Nexus란 ? - 9. nexus web 접속

7 에서 지정한 host:port로 접속하면 된다.

 

10. 로그인

초기 비밀번호가 저장된 위치: {nexus 폴더 위치}/sonatype-work/nexus3/admin.password

초기 비밀번호로 로그인 하면 비밀번호 변경 창이 뜬다. 이때 수정해주면 된다.

 

아무래도 수정하면 해당 파일이 제거되는 듯 하다. 비밀번호를 착각해서 다시 위 경로로 들어가보니까 파일이 존재하지 않았다. 다행히 잘 기록해둬서 로그인할 수 있었다.

 

혹시 모르니 비밀번호를 잘 기록해두시길 바랍니다!

 


 

Repository에 업로드 하기 (maven deploy로 자동 업로드)

 

1. 상단에서 설정 아이콘(톱니바퀴 아이콘) 클릭

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Repository에 업로드 하기 (maven deploy로 자동 업로드) - 1. 상단에서 설정 아이콘(톱니바퀴 아이콘) 클릭

 

2. Blob Stores 생성

업로드된 데이터를 특정 파일에 지정해서 저장하고 싶을 때 생성해주면 된다!

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Repository에 업로드 하기 (maven deploy로 자동 업로드) - 2. Blob Stores 생성
Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Repository에 업로드 하기 (maven deploy로 자동 업로드) - 2. Blob Stores 생성

blob store 정보 입력 후 저장해준다.

 

3. 좌측 메뉴에서 Repository > Repositories 클릭

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Repository에 업로드 하기 (maven deploy로 자동 업로드) - 3. 좌측 메뉴에서 Repository > Repositories 클릭

 

4. Create repository 클릭

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Repository에 업로드 하기 (maven deploy로 자동 업로드) - 4. Create repository 클릭

 

 

5. maven2 (hosted) 선택

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Repository에 업로드 하기 (maven deploy로 자동 업로드) - 5. maven2 (hosted) 선택

 

6. repository 정보 입력

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Repository에 업로드 하기 (maven deploy로 자동 업로드) - 6. repository 정보 입력

 

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Repository에 업로드 하기 (maven deploy로 자동 업로드) - 6. repository 정보 입력

version policy에서 선택할 수 있는 것은 총 3가지 이다.

1. Release

  • 프로젝트가 안정적으로 배포되고 사용될 때 사용
  • 일반적으로 버그 수정, 기능 개선 등 작은 변경 사항 포함
  • 릴리즈 버전의 artifact는 배포된 후에 변경되지 않음 (수정 시 버전 up)

2. Snapshot

  • 안정화되지 않은 개발 중인 버전
  • 개발 중인 코드에 대한 최신 빌드를 나타냄
  • 스냅샷 버전의 artifact는 커밋할 때마다 업데이트됨

3.Mixed

  • Release, Snapshot 상관없이 배포는 되지만, 수정 시 버전 up 해야함

 

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Repository에 업로드 하기 (maven deploy로 자동 업로드) - 6. repository 정보 입력

이전에 생성한 Blob store가 있다면 선택해준다. 그렇지 않다면 default를 선택하면 된다.

 

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Repository에 업로드 하기 (maven deploy로 자동 업로드) - 6. repository 정보 입력

최하단에 Create repository 버튼을 클릭하면 repository 생성이 완료된다!

 


Role 생성

 

1. 좌측 메뉴에서 Security > Roles 메뉴 선택 후 우측 상단의 Create Role 버튼 클릭

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Role 생성 - 1. 좌측 메뉴에서 Security > Roles 메뉴 선택 후 우측 상단의 Create Role 버튼 클릭

 

2. Role Type Nexus role 선택 후 Role Setup의 정보 (id, name 필수) 작성

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Role 생성 - 2. Role Type Nexus role 선택 후 Role Setup의 정보 (id, name 필수) 작성

 

3. Applied Privileges 에서 Modify Applied Privileges 버튼 클릭

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Role 생성 - 3. Applied Privileges 에서 Modify Applied Privileges 버튼 클릭

 

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Role 생성 - 3. Applied Privileges 에서 Modify Applied Privileges 버튼 클릭

이와 같이 창이 뜨면 이전에 만들었던 Repository 이름을 검색한다. 검색된 모든 항목을 선택한 후 해당 창의 우측 하단에 Confirm 버튼을 클릭한다.

 


 

User 생성

1. 좌측 메뉴에서 Security > Users 메뉴 선택 후 Create local user 버튼 클릭

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - User 생성 - 1. 좌측 메뉴에서 Security > Users 메뉴 선택 후 Create local user 버튼 클릭

 

2. 모든 필수 항목 입력

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - User 생성 - 2. 모든 필수 항목 입력

 

[입력 결과]

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - User 생성 - 2. 모든 필수 항목 입력

 

3. 하단의 Roles 선택 부분에서 이전에 만들었던 Role 선택

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - User 생성 - 3. 하단의 Roles 선택 부분에서 이전에 만들었던 Role 선택

 

4. 하단의 Create local user 버튼 클릭

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - User 생성 - 4. 하단의 Create local user 버튼 클릭

 


 

IntelliJ maven으로 nexus repository에 업로드 

1. settings.xml 파일 생성

C:\\Users\\{사용자 이름}\\.m2

보통 이 경로에 .m2 폴더가 있다. 내부에 settings.xml 파일이 없다면 만들어준다. 있다면 그대로 사용하면 된다!

 

2. 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>{repository name}</id>
      <username>{nexus id}</username>
      <password>{nexus password}</password>
    </server>
  </servers>
</settings>

 

3. 프로젝트의 pom.xml 수정

<project>
	...
	
    <distributionManagement>
        <snapshotRepository>
            <id>{repostiroy name}</id>
            <url>{repository url}</url>
        </snapshotRepository>
    </distributionManagement>
</project>

나는 snapshot 버전의 repository를 생성했기 때문에 <snapshotRepository> 태그를 사용했지만 release 버전의 경우 <release> 태그를 사용하면 된다.

 

사실 settings.xml의 server > id 태그 값과 pom.xml 의 distributionManagement > snapshotRepository > id 태그 값이 꼭 repository 이름과 동일할 필요는 없다. 단지 구분하기 쉽게 repository 이름을 사용한 것이다. 대신 꼭 지켜야 할 것은 두 개의 id 태그 값을 동일하게 사용해야 한다는 것이다.

 

[Respository URL 확인 방법]

repository url은 설정 아이콘 클릭 > Respitory > Repositories 메뉴에서 아래와 같이 확인할 수 있다. (repository 생성할 때 들어갔던 페이지와 동일함)

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - IntelliJ maven으로 nexus repository에 업로드  - 3. 프로젝트의 pom.xml 수정

 

4. IntelliJ > maven 탭 이동

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - IntelliJ maven으로 nexus repository에 업로드  - 4. IntelliJ > maven 탭 이동

clean 실행 후 deploy 실행하면 파일이 nexus repository로 업로드된다.

 

명령어로 수행할 수도 있다. 아무 옵션을 주지 않으면 테스트가 실행되는데 스킵하고 싶다면 두 번째 명령어를 실행하면 된다.

mvn clean deploy
mvn clean delploy -Dmaven.test.skip=true

 

나는 인텔리제이로 진행했고 빌드가 완료되면 실행 로그에 이렇게 보여진다.

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - IntelliJ maven으로 nexus repository에 업로드  - 4. IntelliJ > maven 탭 이동

 

실행 전에 nexus가 실행 중인지 꼭 확인하고, 이전에 입력한 설정 값들이 제대로 반영되었는지 한 번 더 확인하기! (내가 확인 제대로 안 해서 계속 deploy 실패했다는 …)

 

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - IntelliJ maven으로 nexus repository에 업로드  - 4. IntelliJ > maven 탭 이동

 

좌측 메뉴에서 Browse를 클릭하고 repository 리스트에서 해당 repostiory를 클릭하면 이와 같이 업로드된 snapshot 버전의 파일들을 확인할 수 있다.

 


Nexus Repository에서 파일 받아와 사용하기

사실 사용 방법은 굉장히 간단하다.

pom.xml 파일에tj GAV(GroubId, ArtifactId, Version)만 수정해주면 된다!

 

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Nexus Repository에서 파일 받아와 사용하기

Search > Custom > More criteria > Repository Name 선택!

 

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Nexus Repository에서 파일 받아와 사용하기

검색란이 뜨면 repository name 작성 후 검색

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Nexus Repository에서 파일 받아와 사용하기

 

결과가 나오면 해당 repository 선택

 

Nexus 적용기: Repository 업로드부터 사용 방법까지 - undefined - Nexus Repository에서 파일 받아와 사용하기

 

<groupId>{Group}</groupId>
<artifactId>{Repository}</artifactId>
<version>{Version}</version>

 

pom.xml에 이렇게 입력해주면 끝!

 


 

마치며

이렇게 nexus를 설치하고 세팅하는 방법을 알아보았다. 세상엔 신기하고 유용한 도구가 많은 거 같다...!

그래도 입사하고 나서 새롭고 신기하고 재밌는 걸 많이 해볼 수 있어서 다행이라고 생각한다. 

오늘은 여기서 마무리!

 

:wq 💟

728x90
반응형

댓글