
Nexus는 “여러 종류의 개발 산출물을 보관하는 종합 창고”,
Harbor는 “컨테이너 이미지에 특화된 전문 창고”입니다. 📦🐳
한 줄 비교
| 구분 | Nexus Repository | Harbor |
| 주 목적 | 다양한 Artifact 저장 | Container Image 저장 |
| 대표 저장물 | Maven, npm, PyPI, NuGet, Docker 등 | Docker/OCI Container Image |
| 성격 | 범용 Artifact Repository | Container Registry |
| Kubernetes 친화성 | 사용 가능 | 매우 높음 |
| 이미지 보안/스캔 | 가능하지만 주력은 아님 | 강점 |
| 이미지 복제 | 가능 | Replication 기능이 강함 |
| 대표 사용 | 개발 패키지/라이브러리 관리 | K8s 배포용 이미지 관리 |
1. Nexus는 뭐냐?
개발하다 보면 여러 종류의 파일이 생깁니다.
Java 개발
→ .jar / Maven Package
Node.js 개발
→ npm Package
Python 개발
→ pip / PyPI Package
.NET 개발
→ NuGet Package
Docker 개발
→ Container Image
이런 것을 한 군데에 모아 관리하는 게 Nexus Repository입니다.
즉,
Nexus
├─ Maven
├─ npm
├─ PyPI
├─ NuGet
├─ Helm
└─ Docker Image
그래서 Nexus를 범용 Artifact Repository라고 부릅니다.
여기서 Artifact라는 말은 어렵게 생각할 필요 없이,
개발/빌드 과정에서 만들어지거나 사용하는 결과물
이라고 보면 됩니다.
예를 들어 개발자가:
mvn package
를 실행해서 만든
my-app-1.0.jar
같은 파일도 Artifact입니다.
2. Harbor는 뭐냐?
Harbor는 목적이 훨씬 명확합니다.
Docker / Kubernetes에서 사용하는 컨테이너 이미지를 저장하고 관리하는 Registry
입니다.
예를 들어:
my-harbor.company.com
│
├─ app/frontend:v1
├─ app/backend:v2
├─ ai/pytorch:2.7
└─ infra/nginx:1.29
Kubernetes에서는 Harbor에 저장된 이미지를 가져와서 Pod를 실행합니다.
Harbor
│
│ Image Pull
↓
Kubernetes
│
├─ Pod A
├─ Pod B
└─ Pod C
예를 들면 Deployment YAML에:
containers:
- name: backend
image: harbor.company.com/app/backend:v2
라고 설정합니다.
Kubernetes가 Harbor에서 이미지를 Pull해서 Pod를 실행하는 것입니다.
3. 그런데 Nexus도 Docker Image 저장할 수 있잖아?
맞습니다. 👍
여기가 가장 헷갈리는 부분입니다.
Nexus도 Docker Registry 기능을 제공합니다.
그래서 이렇게도 가능합니다.
Nexus
├─ Maven
├─ npm
├─ PyPI
└─ Docker Image
반면 Harbor는:
Harbor
└─ Container Image
├─ Docker Image
├─ OCI Artifact
└─ Helm/OCI Artifact
즉 기능이 일부 겹칩니다.
하지만 방향성이 다릅니다.
Nexus
"개발에 필요한 여러 종류의 패키지를
한곳에서 관리하자."
Harbor
"컨테이너 이미지를
전문적으로 관리하자."
라고 생각하면 가장 쉽습니다.
4. 회사에서 둘 다 사용하는 이유
실제 기업에서는 Nexus와 Harbor를 같이 사용하는 경우가 많습니다.
예를 들어:
개발자
│
├─ Maven / npm / PyPI
│ ↓
│ Nexus
│
│
└─ Docker Build
↓
Harbor
↓
Kubernetes
조금 더 현실적으로 보면:
Git
│
↓
Jenkins / GitLab CI
│
├───────────────┐
│ │
↓ ↓
Nexus Harbor
│ │
JAR Container Image
npm backend:v1
Python Package frontend:v3
│ │
│ ↓
│ Kubernetes
│ │
│ Pod
이런 구조입니다.
5. 예를 들어 Java 서비스를 만든다면
Java 개발자가 소스코드를 작성합니다.
Spring Boot Source
빌드하면:
app.jar
가 생성됩니다.
이 JAR 파일을 Nexus에 올릴 수 있습니다.
Nexus
company-java
└─ app
├─ app-1.0.jar
├─ app-1.1.jar
└─ app-1.2.jar
그 다음 Docker Image를 만듭니다.
FROM eclipse-temurin:21
COPY app.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
이미지 빌드:
docker build -t backend:v1 .
그리고 Harbor에 Push:
docker push harbor.company.com/app/backend:v1
결과:
Nexus
└─ app-1.0.jar
Harbor
└─ backend:v1
역할이 이렇게 나뉩니다.
6. Harbor가 Container 환경에서 강한 이유
Harbor에는 컨테이너 운영에 유용한 기능이 많이 있습니다.
예를 들면:
Harbor
Project
├─ Repository
│ ├─ image:v1
│ ├─ image:v2
│ └─ image:v3
│
├─ 사용자 권한
├─ 이미지 취약점 Scan
├─ Image Signing
├─ Replication
├─ Retention Policy
└─ Garbage Collection
특히 Replication이 중요합니다.
예를 들어 DR 센터가 있다면:
운영센터 Harbor
│
│ Replication
↓
DR센터 Harbor
또는:
서울 Harbor
│
│ Image Replication
↓
부산 Harbor
처럼 컨테이너 이미지를 동기화할 수 있습니다.
앞에서 보셨던 Harbor Native Replication이 바로 이 기능입니다.
7. Nexus가 강한 부분
Nexus의 강점은 패키지 종류입니다.
예를 들면 기업 개발환경이:
Java
Python
Node.js
.NET
Docker
라면 Nexus 하나에서:
Nexus
├─ Maven Repository
├─ npm Repository
├─ PyPI Repository
├─ NuGet Repository
└─ Docker Repository
를 운영할 수 있습니다.
또 하나 중요한 기능이 Proxy Repository입니다.
개발자가 인터넷에서 직접 패키지를 받지 않고:
개발자
↓
Nexus
↓
인터넷 Maven Central
형태로 사용할 수 있습니다.
한 번 받은 패키지는 Nexus가 캐시합니다.
첫 번째 요청
Developer
↓
Nexus
↓
Internet
↓
package 다운로드
↓
Nexus Cache
두 번째 요청
Developer
↓
Nexus Cache
그래서 사내 폐쇄망 환경에서도 많이 사용합니다.
8. Nexus와 Harbor를 창고로 비유하면
이렇게 생각하시면 거의 정확합니다. 😄
Nexus = 대형 종합 물류센터
🏢 Nexus 종합창고
1층 : Java JAR
2층 : npm
3층 : Python Package
4층 : NuGet
5층 : Docker Image
Harbor = 컨테이너 전문 물류센터
🐳 Harbor 컨테이너 전문창고
Docker Image
OCI Image
Helm/OCI Artifact
+ 취약점 검사
+ 이미지 복제
+ 이미지 보존 정책
+ 프로젝트 권한관리
9. Kubernetes에서는 어떤 걸 더 많이 쓰냐?
Container Image 관리만 보면 보통 Harbor가 훨씬 자연스럽습니다.
특히 온프레미스 Kubernetes에서는:
Developer
↓
Git
↓
CI/CD
↓
Harbor
↓
Kubernetes
구조가 매우 흔합니다.
예:
GitLab
↓
Jenkins
↓
Docker Build
↓
Harbor
↓
ArgoCD
↓
Kubernetes
여기에서 각각 역할도 다릅니다.
GitLab
→ Source Code 저장
Nexus
→ JAR / npm / Python Package 저장
Harbor
→ Container Image 저장
ArgoCD
→ Kubernetes에 배포
10. 최종적으로 이것만 기억하시면 됩니다 ⭐
Nexus
= Artifact 종합 저장소
Harbor
= Container Image 전문 저장소
그리고 회사에서는 경쟁 관계라기보다 서로 역할을 나눠 함께 사용하는 경우가 많습니다.
┌─ Nexus
│ JAR
│ npm
Source → CI/CD ─────┤ PyPI
│
└─ Harbor
Docker Image
↓
Kubernetes
특히 온프레미스 K8s 환경이라면 저는 개념을 다음처럼 잡는 것을 추천합니다.
Nexus = 개발 패키지 관리 계층
Harbor = 컨테이너 이미지 공급 계층
ArgoCD = K8s 배포 계층
이 세 가지를 같이 이해하면 이후 Git → Jenkins → Nexus → Harbor → ArgoCD → Kubernetes 전체 CI/CD 흐름이 상당히 쉽게 연결됩니다.
'J-H-T > Harbor' 카테고리의 다른 글
| [OCI Artifact] Open Container Initiative (컨테이너 이미지와 Registry가 서로 호환되도록 표준 규격을 만드는 표준) (0) | 2026.08.10 |
|---|
댓글