계열사 지원을 하면서 생각보다 복잡한 Nexus 설정이 필요하여 Nexus가 무엇인지, 기존 문제가 뭐가 있었고, 이를 어떻게 해결했는지를 알아보았다. 이에 대해 현재 상황에만 맞게 이해하지 않고 좀 더 범용적으로 어떻게 Nexus를 활용할 수 있는지, 다음에도 비슷한 상황이 놓이면 스스로 해결할 수 있게 내용을 좀 정리해보려 한다.
Nexus Repository는 소프트웨어 패키지 저장소 관리 서버이다. 즉, Maven, Gradle, Npm, Docker 같은 빌드 도구가 필요로 하는 라이브러리를 중앙에서 관리하는 것이다. 보통 개인이 개발을 하다보면 MavenCentral을 사용하면 되는데, 회사 규모에서 개발을 하게되면 자체 개발한 공통 라이브러리 같은 것들은 오픈소스로 두지 않는 이상 MavenCentral에서 가져올 수 없고, 이를 관리해야하는 서버가 필요한데 이것이 바로 Nexus 이다.
즉, 사내에서 개발자가 pom.xml 이나 build.gradle에 의존성을 선언하면 Nexus가 다음과 같은 일을 해준다.
Nexus에서 라이브러리를 저장/제공하는 단위를 Repository
라고한다. 그리고 여기에는 세가지 타입이 있다.
Hosted Repository
Proxy Repository
spring-boot-starter-web
을 요청Group Repository
Hosted와 Proxy를 묶어서 하나의 엔트포인트로 제공하는 집합
개발자는 보통 이 Group 만 등록하면 된다.
예시
maven-group
├─ company-releases (hosted)
├─ maven-central-proxy (proxy)
└─ google-proxy (proxy)