
Harbor란 무엇인가?
컨테이너 기반의 인프라(K8s)를 운영하다 보면 빌드된 이미지를 안전하게 보관하고 관리할 중앙 저장소가 필요해진다. 이때 단순한 Docker Registry를 넘어, 엔터프라이즈 환경에 필요한 보안과 관리 기능을 기본적으로 제공하는 오픈소스 솔루션이 바로 Harbor이다. CNCF(Cloud Native Computing Foundation)의 졸업(Graduated) 프로젝트로, 그 안정성과 범용성을 이미 검증받았다.
도커 레지스트리(Docker Registry)는 이미지를 저장하고 공유하는 저장소이다.
도커 레지스트리는 도커 이미지를 저장하고 공유하는 중앙 저장소이다. 쉽게 말해, GitHub가 소스코드를 보관하는 곳이라면 Docker Registry는 이미지를 보관하는 곳이다.
핵심 역할
- 이미지를 업로드(push) 하고, 필요할 때 다운로드(pull) 할 수 있다.
- 이미지의 버전 관리를 제공한다.
- 팀이나 서비스 간에 이미지를 공유할 수 있다.
종류
- Public Registry: 누구나 접근 가능한 공개 저장소이다. 대표적으로 Docker Hub가 있다.
- Private Registry: 회사나 팀 내부에서만 쓰는 비공개 저장소이다.
쓰는 이유
도커 레지스트리를 쓰면 배포할 때 같은 이미지를 여러 서버에 안정적으로 배포할 수 있고, 개발·테스트·운영 환경에서 같은 이미지를 재사용할 수 있다.
이번 포스팅에서는 Harbor의 핵심 구조와 기능을 알아보자.
Harbor의 핵심 구조와 기능

Harbor는 이미지를 단순히 쌓아두는 것을 넘어, 체계적인 관리와 보안에 초점을 맞추고 있다.
3-Depth 계층 구조

Harbor의 데이터는 3단계로 관리된다.
- Project: 가장 상위 개념으로, 팀이나 서비스 단위로 논리적인 그룹
- Repository: 단일 프로젝트 내에서 개별 애플리케이션(예:
frontend-app,backend-api)의 이미지를 모아두는 공간 - Artifact: 레포지토리 내에 저장되는 실제 결과물(이미지 태그, Helm 차트 등)
Harbor에서 Project는 단순한 폴더가 아니라, 리포지토리 묶음 + 권한 경계 + 정책 적용 단위이다.
그래서 프로젝트 단위로 RBAC, 보안 스캔, 할당량, 복제 같은 운영 기능을 나눠서 관리한다.
Repository와 Artifact는 OCI 표준 개념이다. 도커(OCI) 레지스트리 표준 규격 자체에 내장된 근본적인 개념으로, 어떤 레지스트리를 쓰더라도 이 구조를 따른다.
OCI 표준 규격은 아래와 같다.
GET /v2/<name>/manifests/<reference>
- <name> (Repository): 이미지가 모여 있는 논리적 이름 공간. (ex. `ubuntu`, `nginx`)
- <reference> (Artifact): 이미지의 특정 버전 태그(`v1.0`)이나 고유 해시값(Digest, `sha256:...`)
실제 터미널에서 이미지를 Pull 받을 때 사용하는 주소를 보면, 이 3뎁스를 확인할 수 있다.
# 도커 Pull 명령어 구조
docker pull harbor.mycompany.com / [Project] / [Repository] : [Artifact(Tag)]
# 예시
docker pull harbor.mycompany.com / team-alpha / backend-api : v1.0
- 이 명령어가 들어오면, `team-alpha`라는 Project를 찾고, 요청한 사용자 계정이 이 프로젝트에 접근 권한이 있는지 내부 DB(postgresQL)을 조회하여 검증한다.
- 권한이 통과되면 `backend-api`라는 Repository에서 `v1.0`이라는 Artifact를 꺼내서 응답해준다.
- 프로젝트가 생성되어 있어야, 이미지를 `push`할 수 있다.
RBAC (역할 기반 접근 제어)
Project 단위로 사용자 접근 권한을 세밀하게 제어할 수 있다. 특정 팀원에게는 이미지를 Pull할 권한만 주고, CI/CD 봇(Robot Account)에게는 Push 권한만 부여하는 등 멀티 테넌트 환경의 플랫폼 구축에 필수적인 기능을 제공한다.
멀티 테넌트: 하나의 시스템(인스턴스)을 띄워놓고, 여러 고객사(또는 팀)가 서로 완벽하게 격리된 상태로 자원을 공유해서 사용하는 구조
취약점 스캔 (Vulnerability Scanning)
Trivy 등 오픈소스 스캐너를 내장하고 있다. 이미지가 `Push`될 때 자동으로 OS 패키지나 라이브러리의 보안 취약점을 검사하며, 심각도(Critical, High 등)에 따라 위험한 이미지의 배포를 원천 차단할 수 있다.
스토리지 최적화 (GC 및 Retention)
운영 기간이 길어질수록 사용하지 않는 구버전 이미지가 스토리지를 가득 채우게 된다. Harbor는 태그 보존 정책(Retention Policy)을 통해 "최근 10개의 태그만 유지"와 같은 규칙을 설정할 수 있고, 가비지 컬렉션(GC)을 스케줄링하여 물리적인 디스크 공간을 주기적으로 확보할 수 있다.
Harbor 설치
-
(설치 및 실습 이후 추가 예정, 이미지 서명도 확인)
Harbor 구성 개요
Harbor를 구축하는 방식은 크게 두 가지로 나뉜다.
Docker Compose 기반
단일 노드 방식. 단일 VM 서버(EC2 등)에 빠르게 띄울 수 있어 PoC(사전 검증)나 소규모 환경에 적합하다.
Helm Chart 기반 (K8s)
쿠버네티스(k8s) 환경에서 구축. 운영 레벨에서 고가용성(HA)을 확보하기 위해 Kubernetes 클러스터 위에 배포하는 방식이다. 실무 환경에서는 데이터 영속성을 위해 외부 DB(PostgreSQL) 및 오브젝트 스토리지(AWS S3 등)와 연동하는 아키텍처를 권장한다.
참고
하버 데모 사이트
Harbor
demo.goharbor.io
https://github.com/opencontainers/distribution-spec/blob/main/spec.md
distribution-spec/spec.md at main · opencontainers/distribution-spec
OCI Distribution Specification. Contribute to opencontainers/distribution-spec development by creating an account on GitHub.
github.com
https://specs.opencontainers.org/distribution-spec/
The OpenContainers Distribution Spec
Opencontainers Specs Documentation
specs.opencontainers.org
https://github.com/goharbor/harbor/wiki/Architecture-Overview-of-Harbor
Architecture Overview of Harbor
An open source trusted cloud native registry project that stores, signs, and scans content. - goharbor/harbor
github.com
'Development' 카테고리의 다른 글
| [Claude] buddy 생성하기 / buddy 바꾸기 (2) | 2026.04.02 |
|---|---|
| [Obsidian] 문서 구조에 대한 고민 (feat.PARA 방법론) (0) | 2026.03.25 |
| obsidian cli 설정하고 사용해보기 (0) | 2026.03.23 |
| [Terminal] 코딩 에이전트, 멀티 태스킹을 위한 터미널, cmux (0) | 2026.03.23 |
| [Git] Worktree란? (feat. is already userd by worktree) (0) | 2026.03.12 |