본문 바로가기
J-H-T/Harbor

[다양한 Artifact 저장 / Container Image 저장] Nexus Repository & Harbor

by METAVERSE STORY 2026. 8. 10.
반응형

 

 

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 흐름이 상당히 쉽게 연결됩니다.

 

 

반응형

댓글