들어가며
maven을 사용하는 중 nexus 세팅을 해달라는 업무를 받았다. 그래서 이번에는 nexus 세팅 및 설치 방법, 그리고 인텔리제이를 통해 프로젝트 내에서 사용하는 라이브러리를 업로드하고 이를 관리하는 레파지토리를 사용하는 방법에 대해 알아보도록 하겠다!
Nexus란 ?
Apache Maven 프로젝트와 관련된 중앙 저장소 관리 시스템으로 자바 기반 프로젝트에 필요한 종속성(의존성) 파일을 저장하고 관리하는 중앙 저장소 역할을 한다.https://ssonzm.tistory.com/131
Nexus 기능
- 의존성 관리: Maven 프로젝트에서 필요한 외부 라이브러리 및 플러그인을 관리하고 다운로드 가능
- 중앙 저장소: 여러 프로젝트에 공유할 수 있는 중앙 저장소 역할
- 로컬 캐시: Maven 빌드 작업을 향상하기 위해 로컬 캐시 제공
- 보안 및 권한 관리: 사용자에게 적절한 접근 권한 부여 가능
- 프록시 기능: 의존성 다운로드 시 프록시를 통해 속도 향상
- 그룹화: 여러 저장소를 그룹화하여 하나의 가상 저장소로 사용 가능
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 접속

7 에서 지정한 host:port로 접속하면 된다.
10. 로그인
초기 비밀번호가 저장된 위치: {nexus 폴더 위치}/sonatype-work/nexus3/admin.password
초기 비밀번호로 로그인 하면 비밀번호 변경 창이 뜬다. 이때 수정해주면 된다.
아무래도 수정하면 해당 파일이 제거되는 듯 하다. 비밀번호를 착각해서 다시 위 경로로 들어가보니까 파일이 존재하지 않았다. 다행히 잘 기록해둬서 로그인할 수 있었다.
혹시 모르니 비밀번호를 잘 기록해두시길 바랍니다!
Repository에 업로드 하기 (maven deploy로 자동 업로드)
1. 상단에서 설정 아이콘(톱니바퀴 아이콘) 클릭

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


blob store 정보 입력 후 저장해준다.
3. 좌측 메뉴에서 Repository > Repositories 클릭

4. Create repository 클릭

5. maven2 (hosted) 선택

6. repository 정보 입력


version policy에서 선택할 수 있는 것은 총 3가지 이다.
1. Release
- 프로젝트가 안정적으로 배포되고 사용될 때 사용
- 일반적으로 버그 수정, 기능 개선 등 작은 변경 사항 포함
- 릴리즈 버전의 artifact는 배포된 후에 변경되지 않음 (수정 시 버전 up)
2. Snapshot
- 안정화되지 않은 개발 중인 버전
- 개발 중인 코드에 대한 최신 빌드를 나타냄
- 스냅샷 버전의 artifact는 커밋할 때마다 업데이트됨
3.Mixed
- Release, Snapshot 상관없이 배포는 되지만, 수정 시 버전 up 해야함

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

최하단에 Create repository 버튼을 클릭하면 repository 생성이 완료된다!
Role 생성
1. 좌측 메뉴에서 Security > Roles 메뉴 선택 후 우측 상단의 Create Role 버튼 클릭

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

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


이와 같이 창이 뜨면 이전에 만들었던 Repository 이름을 검색한다. 검색된 모든 항목을 선택한 후 해당 창의 우측 하단에 Confirm 버튼을 클릭한다.
User 생성
1. 좌측 메뉴에서 Security > Users 메뉴 선택 후 Create local user 버튼 클릭

2. 모든 필수 항목 입력

[입력 결과]

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

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 생성할 때 들어갔던 페이지와 동일함)

4. IntelliJ > maven 탭 이동

clean 실행 후 deploy 실행하면 파일이 nexus repository로 업로드된다.
명령어로 수행할 수도 있다. 아무 옵션을 주지 않으면 테스트가 실행되는데 스킵하고 싶다면 두 번째 명령어를 실행하면 된다.
mvn clean deploy
mvn clean delploy -Dmaven.test.skip=true
나는 인텔리제이로 진행했고 빌드가 완료되면 실행 로그에 이렇게 보여진다.

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

좌측 메뉴에서 Browse를 클릭하고 repository 리스트에서 해당 repostiory를 클릭하면 이와 같이 업로드된 snapshot 버전의 파일들을 확인할 수 있다.
Nexus Repository에서 파일 받아와 사용하기
사실 사용 방법은 굉장히 간단하다.
pom.xml 파일에tj GAV(GroubId, ArtifactId, Version)만 수정해주면 된다!

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

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

결과가 나오면 해당 repository 선택

<groupId>{Group}</groupId>
<artifactId>{Repository}</artifactId>
<version>{Version}</version>
pom.xml에 이렇게 입력해주면 끝!
마치며
이렇게 nexus를 설치하고 세팅하는 방법을 알아보았다. 세상엔 신기하고 유용한 도구가 많은 거 같다...!
그래도 입사하고 나서 새롭고 신기하고 재밌는 걸 많이 해볼 수 있어서 다행이라고 생각한다.
오늘은 여기서 마무리!
:wq 💟
댓글