Booil Jung

GitLab 컨테이너 레지스트리

현대의 소프트웨어 개발에서 컨테이너 기술은 애플리케이션의 개발, 배포, 실행 방식을 근본적으로 변화시켰습니다. 이러한 컨테이너 기반 워크플로우의 중심에는 컨테이너 이미지를 체계적으로 저장, 관리, 배포하는 ‘컨테이너 레지스트리’가 자리 잡고 있습니다. 컨테이너 레지스트리는 단순히 불변의 이미지 파일을 보관하는 저장소를 넘어, 애플리케이션과 그 모든 종속성을 하나의 패키지로 묶고 1, 시스템 간에 이를 원활하게 공유하는 핵심 중개자 역할을 수행합니다.2 이는 특히 마이크로서비스 아키텍처로 구성된 클라우드 네이티브 애플리케이션 개발에서 필수적인 인프라로 간주됩니다.2

이러한 맥락에서 GitLab 컨테이너 레지스트리는 단순한 기능 중 하나가 아닌, GitLab이 지향하는 ‘완전한 단일 DevOps 플랫폼’ 전략의 핵심 축을 담당합니다.4 GitLab은 소스 코드 관리(SCM), 지속적 통합 및 배포(CI/CD), 패키지 관리, 보안 등 소프트웨어 개발 수명주기(SDLC)에 필요한 모든 도구를 하나의 통합된 인터페이스와 단일 권한 모델 아래에서 제공하는 것을 목표로 합니다.4 컨테이너 레지스트리는 이 비전의 중심에서, 코드 작성부터 최종 배포에 이르기까지의 전 과정을 매끄럽게 연결하는 중추적인 역할을 합니다.

GitLab 컨테이너 레지스트리의 진정한 가치는 독립적인 기능으로서가 아니라, GitLab 플랫폼의 다른 핵심 기능들과의 유기적인 결합에서 발현됩니다. 소스 코드 관리, CI/CD 파이프라인, 그리고 내장된 보안 스캐닝 기능과의 긴밀한 통합은 GitLab 컨테이너 레지스트리를 단순한 ‘이미지 저장소’를 넘어, 코드 커밋부터 빌드, 취약점 분석, 그리고 최종 배포 가능한 아티팩트에 이르기까지 모든 산출물과 그 과정을 추적하고 관리하는 ‘DevSecOps 아티팩트 허브’로 기능하게 만듭니다.

이러한 통합은 다음과 같은 흐름을 통해 이루어집니다. 첫째, GitLab 컨테이너 레지스트리는 플랫폼에 내장되어 있어, 별도의 설치나 복잡한 구성 없이 프로젝트를 생성하는 것만으로도 자동으로 활성화되고 사용할 수 있습니다.1 둘째, CI/CD 파이프라인은

$CI_REGISTRY_USER, $CI_REGISTRY_IMAGE와 같은 사전 정의된 변수들을 통해 레지스트리와 원활하게 상호작용하며, 인증, 이미지 빌드, 푸시, 배포의 전 과정을 완벽하게 자동화합니다.7 셋째, 내장된 보안 스캐닝 기능은 CI/CD 파이프라인의 일부로 실행되어 레지스트리에 푸시된 이미지를 자동으로 스캔하고, 발견된 취약점 결과를 병합 요청(Merge Request)이나 파이프라인 결과 페이지에 직접 표시하여 개발자가 컨텍스트 전환 없이 즉각적으로 문제를 인지하고 조치할 수 있도록 돕습니다.8 이처럼 모든 과정이 GitLab이라는 단일 플랫폼 내에서 투명하게 연결되고 관리되므로, 컨테이너 레지스트리는 더 이상 고립된 아티팩트 저장소가 아닌, 전체 개발 프로세스의 맥락과 히스토리를 담고 있는 살아있는 중심 허브가 되는 것입니다. 본 보고서는 GitLab 컨테이너 레지스트리의 기술적 구조부터 전략적 활용 방안, 시장 내 경쟁 구도와 미래 방향성까지 다각도로 심층 분석하여, 기술 리더와 엔지니어들이 정보에 기반한 최적의 의사결정을 내릴 수 있도록 지원하는 것을 목표로 합니다.

GitLab 컨테이너 레지스트리의 아키텍처와 관리 모델을 이해하는 것은 그 기능과 한계를 파악하고, 조직의 요구사항에 맞게 최적으로 구성 및 운영하기 위한 첫걸음입니다. 기반 기술부터 스토리지 백엔드, 그리고 차세대 아키텍처의 진화 과정까지 심층적으로 분석합니다.

GitLab 컨테이너 레지스트리의 근간은 널리 사용되는 오픈소스 프로젝트인 Docker Distribution Registry입니다.10 GitLab은 이 견고한 기반 위에 자체적인 고유의 인증 및 권한 관리 레이어를 추가하여 플랫폼과의 완벽한 통합을 구현했습니다.

인증 흐름은 다음과 같이 동작합니다. 개발자가 로컬 머신에서 docker login registry.example.com 명령을 실행하면, 이 요청은 먼저 레지스트리 백엔드로 전달됩니다. 레지스트리는 유효한 인증 토큰이 없음을 확인하고, HTTP 401 Unauthorized 응답과 함께 토큰을 발급받을 수 있는 주소(token_realm)를 클라이언트에게 반환합니다.10 이 주소는 GitLab의 내부 API 엔드포인트(예: https://gitlab.example.com/jwt/auth)를 가리키도록 설정되어 있습니다.10 Docker 클라이언트는 이 주소로 다시 요청을 보내 사용자 자격 증명을 전달하고, GitLab API는 이를 검증한 후 해당 사용자의 권한이 담긴 JWT(JSON Web Token)를 생성하여 클라이언트에게 반환합니다. 이 JWT를 획득한 클라이언트는 비로소 레지스트리에 이미지를 푸시하거나 풀할 수 있는 권한을 얻게 됩니다.

이 모든 통신 과정의 보안은 TLS(Transport Layer Security) 암호화에 의해 보장됩니다. 특히 GitLab 애플리케이션과 레지스트리 서비스 간의 통신은 GitLab이 개인 키로 JWT에 서명하고, 레지스트리가 공개 키로 서명을 검증하는 방식으로 안전하게 이루어집니다.10 이 키 쌍은 기본적으로 각 설치 환경마다 자동으로 생성되어 구성됩니다.

GitLab 컨테이너 레지스트리는 이미지 데이터를 저장하기 위한 백엔드로 다양한 스토리지 옵션을 지원하며, 이는 운영 규모와 환경에 따라 유연하게 선택할 수 있습니다.

기존 레거시 레지스트리는 특히 대규모 환경에서 심각한 성능 문제와 운영상의 비효율성을 드러냈습니다. 가장 큰 문제점은 가비지 컬렉션(Garbage Collection, GC) 과정이 매우 느리고, 실행 중 서비스 중단이 필요하다는 점이었습니다.17 이러한 문제를 근본적으로 해결하기 위해 GitLab은 아키텍처를 재설계한

차세대 컨테이너 레지스트리를 선보였습니다.

차세대 컨테이너 레지스트리는 GitLab.com에서 먼저 성공적으로 적용되었으며, 셀프 호스팅 사용자를 위해 GitLab 17.3 버전부터 정식 지원(GA, General Availability)이 시작되었습니다. 기존 레거시 레지스트리는 향후 GitLab 19.0 버전에서 지원이 중단될 예정이므로, 셀프 호스팅 관리자는 마이그레이션을 계획해야 합니다.20

셀프 호스팅 환경에서 GitLab 컨테이너 레지스트리를 구성하고 운영할 때는 몇 가지 핵심 요소를 고려해야 합니다.

이처럼 GitLab 컨테이너 레지스트리의 아키텍처는 단순한 파일 저장소에서 시작하여, 성능과 확장성 문제를 해결하기 위해 메타데이터 데이터베이스를 도입하는 방향으로 진화해왔습니다. 이 진화는 단순한 기술 개선을 넘어, 셀프 호스팅 환경의 운영 패러다임에 중요한 변화를 가져옵니다. 차세대 레지스트리는 사용자에게 온라인 가비지 컬렉션과 같은 강력한 기능을 제공하는 대신, 관리자에게는 레지스트리 전용 데이터베이스라는 새로운 구성 요소를 프로비저닝하고, 백업하며, 안정적으로 운영해야 하는 추가적인 책임을 부여합니다.20 이는 ‘단순성’을 일부 희생하여 ‘성능과 확장성’을 얻는 전략적 트레이드오프로 볼 수 있습니다. 따라서 기술 리더는 이러한 변화를 명확히 인지하고, 차세대 레지스트리 도입 시 데이터베이스 관리 역량 확보 및 체계적인 마이그레이션 계획 수립에 대한 투자를 반드시 고려해야 합니다

GitLab 컨테이너 레지스트리의 가장 강력한 특징 중 하나는 GitLab CI/CD와의 완벽하고 매끄러운 통합입니다. 이 통합을 통해 개발팀은 소스 코드 변경부터 컨테이너 이미지의 빌드, 테스트, 저장, 배포에 이르는 전체 워크플로우를 단일 플랫폼 내에서 완벽하게 자동화할 수 있습니다.

모든 자동화의 중심에는 프로젝트 루트 디렉토리에 위치한 .gitlab-ci.yml 파일이 있습니다. 이 YAML 파일을 통해 개발자는 파이프라인의 각 단계(stage)와 작업(job)을 정의하고, 컨테이너 레지스트리와 상호작용하는 모든 명령을 스크립트로 작성할 수 있습니다.4 GitLab은 이 파일을 해석하여 파이프라인을 실행하며, 이를 통해 이미지 빌드, 푸시, 테스트, 배포의 전 과정을 자동화합니다.

GitLab은 CI/CD 파이프라인 내에서 컨테이너 레지스트리 관련 작업을 매우 편리하게 수행할 수 있도록 다양한 사전 정의된 변수(Predefined Variables)를 제공합니다.7 이 변수들은 파이프라인 실행 시점에 GitLab에 의해 동적으로 값이 할당되므로, 스크립트의 재사용성과 이식성을 높여줍니다.

이러한 변수들을 활용하여 다양한 고급 워크플로우를 구성할 수 있습니다.

CI/CD 파이프라인의 각 작업(job)은 기본적으로 격리된 환경에서 실행되어, 한 작업의 결과물이 다른 작업으로 직접 전달되지 않습니다. GitLab은 이 문제를 해결하기 위해 artifactscache와 같은 메커니즘을 제공하지만, 컨테이너 기반의 현대적인 워크플로우에서는 컨테이너 레지스트리가 훨씬 더 근본적이고 강력한 해결책을 제시합니다. build 작업에서 소스 코드와 모든 종속성을 포함하여 생성된 Docker 이미지는 해당 시점의 ‘완벽한 실행 가능 스냅샷’이 됩니다.7 이후의 모든

test, security_scan, deploy 작업들은 레지스트리에서 이 특정 이미지를 가져와 사용함으로써, 모든 과정이 완벽하게 동일한 환경에서 실행됨을 보장받습니다. 이처럼 GitLab 컨테이너 레지스트리는 단순한 아티팩트 저장소의 역할을 넘어, 파이프라인의 각 단계를 논리적으로 연결하고 상태(state)를 전달하는 신뢰할 수 있는 상태 저장소(state repository)로 기능합니다. 이는 전체 CI/CD 프로세스의 일관성, 재현성, 그리고 신뢰성을 보장하는 핵심적인 메커니즘입니다.

GitLab 컨테이너 레지스트리의 보안과 접근 제어는 GitLab 플랫폼의 통합된 인증 및 권한 모델에 깊이 뿌리내리고 있습니다. 다양한 인증 토큰과 역할 기반 접근 제어(RBAC)를 통해, 조직은 누가, 무엇을, 어떻게 레지스트리 자원에 접근할 수 있는지를 세밀하게 통제할 수 있습니다.

GitLab은 다양한 사용 시나리오에 맞춰 여러 종류의 토큰 기반 인증 방법을 제공합니다. 특히, 2단계 인증(2FA)이 활성화된 계정은 보안상의 이유로 일반 비밀번호를 사용한 docker login이 불가능하며, 반드시 토큰 기반 인증을 사용해야 합니다.22

어떤 토큰을 사용하든, ‘최소 권한의 원칙’에 따라 필요한 최소한의 범위(scope)만 부여하는 것이 중요합니다.

레지스트리에 대한 접근 권한은 GitLab 프로젝트 멤버에게 부여된 역할(Role)과 긴밀하게 연동됩니다. 각 역할(Guest, Reporter, Developer, Maintainer, Owner)에 따라 레지스트리에 대한 권한이 차등적으로 부여됩니다.24

여기에 더해, 프로젝트 관리자는 레지스트리 가시성(Visibility) 설정을 통해 접근 제어를 한 단계 더 강화할 수 있습니다. 이 설정은 프로젝트의 Settings > General > Visibility, project features, permissions에서 찾을 수 있습니다.24

이 가시성 설정은 주로 읽기(view, pull) 권한에 영향을 미치며, 이미지 푸시나 삭제와 같은 쓰기 권한은 사용자의 역할(Developer 이상)에 따라 결정됩니다.24

다양한 인증 토큰 옵션은 개발자와 관리자에게 유연성을 제공하지만, 동시에 어떤 상황에서 어떤 토큰을 사용해야 할지에 대한 혼란을 야기할 수 있습니다. 아래 표는 각 토큰의 핵심적인 차이점을 명확히 하여, 보안과 편의성 사이에서 최적의 결정을 내리는 데 도움을 줄 수 있도록 구성되었습니다.

토큰 유형 주요 용도 권한 범위 수명 보안 고려사항 및 권장 시나리오
개인 액세스 토큰 (PAT) 사용자 대리 인증, 로컬 개발 환경, 개인 스크립트 사용자 계정 전체 사용자가 지정 (최대 365일, 장기 가능) 25 고위험. 유출 시 피해 범위가 넓음. CI/CD 자동화에는 사용을 지양하고, 불가피할 경우 최소 권한과 짧은 만료일 설정 필수.
배포 토큰 (Deploy Token) 외부 시스템 연동 (예: Kubernetes 클러스터의 이미지 풀) 그룹 또는 프로젝트 한정 만료일 없이 영구적으로 사용 가능 중간 위험. 사용자 계정과 분리되어 관리가 용이. 시스템 간의 자동화된 읽기/쓰기 작업에 권장됨.
프로젝트/그룹 액세스 토큰 봇(Bot) 계정, 특정 프로젝트/그룹 내 자동화 프로젝트 또는 그룹 한정 사용자가 지정 낮은 위험. 권한 범위가 명확히 제한되어 PAT보다 안전. 특정 범위 내에서만 작동하는 자동화에 이상적.
CI/CD 작업 토큰 (CI_JOB_TOKEN) 파이프라인 내에서 리소스 접근 작업(Job)이 속한 프로젝트 한정 작업 실행 기간 동안만 유효 (단기) 최저 위험. 가장 안전한 옵션. 파이프라인 내에서 현재 프로젝트의 리소스를 읽는 데 기본적으로 사용.

컨테이너 기반의 개발 워크플로우가 활발해질수록, 생성되는 이미지의 수와 버전은 기하급수적으로 증가합니다. 효과적인 버전 관리 전략과 체계적인 정리 정책이 없다면, 컨테이너 레지스트리는 금세 관리 불가능한 상태에 빠지고 막대한 스토리지 비용을 유발할 수 있습니다.

컨테이너 이미지의 태그는 가변적(mutable)이라는 특성을 가집니다. 즉, my-app:latest라는 동일한 태그가 어제와 오늘 서로 다른 이미지 버전을 가리킬 수 있습니다. latest와 같은 롤링 태그는 개발 환경에서 최신 버전을 쉽게 가져올 수 있어 편리하지만, 특정 버전의 배포 일관성과 재현성이 중요한 프로덕션 환경에서는 예측 불가능성을 야기하여 심각한 문제를 일으킬 수 있습니다.31 따라서, 목적에 맞는 명확하고 일관된 태깅 전략을 수립하는 것이 매우 중요합니다.

자동화된 CI/CD 파이프라인은 하루에도 수십, 수백 개의 임시 이미지 태그를 생성할 수 있습니다. 이러한 태그들이 정리되지 않고 방치되면 레지스트리 스토리지 용량을 빠르게 소모하고, UI 성능 저하를 유발합니다.18 GitLab은 이를 자동화된 방식으로 관리하기 위해

정리 정책(Cleanup Policy) 기능을 제공합니다.

효과적인 컨테이너 레지스트리 관리는 단순히 기술적인 도구를 설정하는 것만으로 완성되지 않습니다. 무분별하게 생성되고 방치되는 이미지 태그가 문제의 근원이며 35, GitLab의 ‘정리 정책’은 이를 해결하기 위한 기술적 수단입니다.35 하지만 이 도구를 효과적으로 사용하기 위해서는 “어떤 태그를 얼마나 오래 보존하고, 어떤 태그를 언제 삭제할 것인가?”라는 근본적인 정책적 질문에 먼저 답해야 합니다. 이 질문에 대한 답은 조직의 브랜치 전략, 릴리스 주기, 감사 및 규정 준수 요구사항(예: 특정 버전의 이미지를 법규에 따라 1년간 보관)에 따라 결정됩니다. 예를 들어, 프로덕션에 배포된 이미지는 영구 보존(

Keep tags matching: v.*)하고, 개발 브랜치에서 생성된 임시 이미지는 7일 후에 삭제(Remove tags older than: 7 days, Remove tags matching: dev-.*)하는 명확한 정책을 수립할 수 있습니다. 이처럼, 기술적 도구인 ‘정리 정책’은 조직의 ‘이미지 수명 주기 및 보관 정책’을 시스템적으로 구현하는 수단입니다. 따라서 성공적인 스토리지 관리는 기술팀과 거버넌스팀이 협력하여 명확한 정책을 먼저 정의하고, 그 다음에 이를 GitLab의 기능으로 구현하는 순서로 접근해야 합니다.

GitLab은 ‘DevSecOps’라는 개념을 플랫폼의 핵심 가치로 삼고 있으며, 컨테이너 레지스트리는 이러한 철학을 구현하는 중요한 무대입니다. 이미지를 저장하는 단계를 넘어, 저장된 이미지의 보안을 자동으로 검증하고 관리하는 강력한 기능을 내장하여 개발 파이프라인 초기에 보안을 통합하는 ‘Shift Left’를 실현합니다.

GitLab은 컨테이너 스캐닝(Container Scanning) 기능을 통해 레지스트리에 저장되거나 CI/CD 파이프라인에서 빌드되는 이미지의 보안 취약점을 자동으로 탐지합니다.8

스캔 결과는 단순히 로그 파일로 남는 것이 아니라, GitLab의 UI와 워크플로우에 완벽하게 통합되어 개발자가 즉각적으로 문제를 인지하고 조치할 수 있도록 돕습니다.

소프트웨어 공급망 보안의 중요성이 커짐에 따라, 사용 중인 컨테이너 이미지가 변조되지 않았으며 신뢰할 수 있는 출처에서 왔음을 보증하는 것이 필수적입니다. GitLab은 이를 위해 오픈소스 도구인 Cosign을 이용한 컨테이너 이미지 서명을 지원합니다.24 개발자는 CI/CD 파이프라인에서 이미지를 빌드한 후 Cosign을 사용하여 디지털 서명을 추가할 수 있습니다. 서명된 이미지는 레지스트리 UI에서 별도의 아이콘으로 표시되며, 사용자는 서명의 유효성과 서명자 정보를 확인할 수 있습니다. 이는 악의적으로 변조된 이미지가 프로덕션 환경에 배포되는 것을 방지하는 강력한 보안 장치입니다.24

GitLab의 내장 기능을 최대한 활용함과 동시에, 다음과 같은 일반적인 컨테이너 보안 모범 사례를 함께 적용하는 것이 중요합니다.

GitLab 컨테이너 레지스트리는 시간이 지남에 따라 단순한 취약점 ‘탐지 및 보고’ 도구를 넘어, 조직의 보안 정책을 시스템적으로 ‘강제’하는 정책 실행 지점(Policy Enforcement Point)으로 진화하고 있습니다. 초기에는 빌드된 이미지를 스캔하여 결과를 보고하는 사후 대응적 기능에 중점을 두었습니다.8 이후 병합 요청 위젯에 결과를 통합하여, 취약점이 있는 코드가 메인 브랜치에 병합되는 것을 사전에 ‘차단’하는 기능으로 발전했습니다. 이미지 서명 기능 24은 한 걸음 더 나아가, 서명되지 않은 신뢰할 수 없는 이미지의 배포 자체를 원천적으로 막는 강력한 통제 수단입니다. 향후 로드맵에 포함된 ‘보호된 저장소’ 및 ‘불변 태그’ 20와 같은 기능들은 특정 버전의 이미지가 임의로 변경되거나 삭제되는 것을 방지하여 규정 준수와 배포 안정성을 시스템적으로 ‘강제’하게 될 것입니다. 이러한 발전 방향은 “특정 보안 기준을 충족하지 않는 아티팩트는 파이프라인을 통과하거나 배포될 수 없다”는 DevSecOps의 핵심 원칙인 ‘정책 기반 자동화(Policy-as-Code)’를 GitLab 플랫폼 내에서 직접 구현하고 있음을 보여줍니다.

GitLab 컨테이너 레지스트리는 수많은 경쟁자들이 존재하는 성숙한 시장에 속해 있습니다. 각 솔루션은 고유한 강점과 특징을 가지고 있으며, 조직의 요구사항, 기술 스택, 운영 모델에 따라 최적의 선택은 달라질 수 있습니다.

기술 리더가 여러 옵션 중에서 전략적 결정을 내릴 때, 각 솔루션의 특징을 한눈에 비교하는 것은 매우 중요합니다. 아래 표는 주요 레지스트리의 핵심 기능을 구조화하여 각 솔루션의 강점과 약점을 명확히 보여줍니다.

기능 GitLab Docker Hub Amazon ECR Google Artifact Registry Harbor
핵심 차별점 DevSecOps 플랫폼 통합 최대 규모 퍼블릭 라이브러리 AWS 생태계 통합 다중 아티팩트 통합 관리 엔터프라이즈급 보안/관리
CI/CD 통합 수준 최상 (내장) 높음 (웹훅) 높음 (AWS CodeBuild 등) 높음 (Google Cloud Build 등) 중간 (웹훅, API)
지원 아티팩트 컨테이너, 패키지, Helm 등 컨테이너 컨테이너 컨테이너, 언어 패키지 등 컨테이너, Helm, OCI
취약점 스캐닝 내장 (Trivy) 8 내장 (Docker Scout) 47 내장 48 내장 (Artifact Analysis) 50 내장 (Trivy, Clair 등) 53
이미지 서명 지원 (Cosign) 24 지원 (Docker Content Trust) 미지원 미지원 지원 (Notary) 54
역할 기반 접근 제어 프로젝트/그룹 역할 기반 조직/팀 역할 기반 AWS IAM 기반 (매우 세분화) Google Cloud IAM 기반 프로젝트 역할 기반 (세분화)
이미지 복제 미지원 (Geo는 DR 목적) 미지원 지원 (리전 간) 지원 (리전 간) 지원 (다중 레지스트리 간)
호스팅 모델 SaaS / Self-hosted SaaS SaaS SaaS Self-hosted

클라우드 서비스 도입에서 비용은 핵심적인 고려사항입니다. 아래 표는 각 서비스의 가격 모델을 표준화된 기준으로 정리하여 총 소유 비용(TCO) 예측에 도움을 줍니다.

서비스 스토리지 요금 (GB/월) 데이터 전송(Out) 요금 무료 티어 제공량 가격 모델 특징
GitLab (SaaS) 플랜에 포함된 용량 초과 시 부과 플랜에 포함된 용량 초과 시 부과 Free 플랜: 5GB 스토리지, 10GB 전송 57 사용자 기반 구독료에 기능과 용량이 포함되는 모델.
Docker Hub 플랜에 따라 다름 플랜에 따라 다름 1 Private Repo, 100 pulls/hr 58 사용자 및 기능 기반의 월간/연간 구독 모델.
Amazon ECR $0.10 45 $0.09/GB 부터 (구간별 할인) Private: 500MB/월(1년), Public: 50GB/월 60 사용한 만큼 지불하는(Pay-as-you-go) 종량제.
Google Artifact Registry $0.10 61 $0.08/GB 부터 (대륙 간) 0.5GB/월 사용한 만큼 지불하는 종량제. 리전 간 전송 비용이 복잡함.
Harbor 자체 인프라 비용 자체 인프라 비용 오픈소스 (무료) 소프트웨어 자체는 무료이나, 운영을 위한 인프라 및 관리 비용 발생.

GitLab 컨테이너 레지스트리의 경쟁 전략은 개별 기능의 ‘최고(Best-in-Breed)’를 지향하기보다는, GitLab이라는 ‘통합 제품군(Suite)’ 내에서의 ‘최적의 경험(Best-in-Suite)’을 제공하는 데 집중하고 있습니다. 예를 들어, Harbor는 엔터프라이즈 보안 기능에서, ECR은 AWS와의 통합 깊이에서, Artifact Registry는 다양한 아티팩트 지원 측면에서 GitLab보다 더 전문화된 기능을 제공할 수 있습니다.45 만약 조직이 각 영역에서 최고의 기능을 원한다면, 여러 전문 도구를 조합하는 ‘Best-in-Breed’ 전략을 선택할 수 있습니다. 하지만 이 경우, 각 도구를 별도로 구매, 구성, 인증 연동, CI/CD 파이프라인 통합에 상당한 엔지니어링 비용과 운영 복잡성이 발생합니다.

GitLab은 바로 이 지점을 공략합니다. 컨테이너 레지스트리가 SCM, CI/CD, 보안 스캐너와 처음부터 하나의 제품처럼 완벽하게 설계되었기 때문에 4, 사용자는 별도의 통합 작업 없이도 매끄러운 DevSecOps 워크플로우를 즉시 경험할 수 있습니다. 따라서 고객의 선택은 “어떤 레지스트리가 개별적으로 가장 뛰어난가?”라는 질문을 넘어, “통합의 편리함과 단일 플랫폼의 관리 효율성이 개별 전문 도구의 장점을 능가하는가?”라는 전략적 질문에 대한 답에 따라 달라집니다. GitLab은 후자를 선택하는 고객에게 가장 강력하고 차별화된 가치를 제공합니다.

GitLab 컨테이너 레지스트리는 강력한 통합 기능을 제공하지만, 특히 대규모 환경에서 운영될 때 몇 가지 알려진 문제점과 기술적 한계를 드러냈습니다. 이러한 과제들은 GitLab 이슈 트래커와 커뮤니티를 통해 지속적으로 논의되고 개선되어 왔으며, 이를 이해하는 것은 안정적인 레지스트리 운영을 위해 필수적입니다.

셀프 호스팅 GitLab 인스턴스에서 가장 큰 운영상의 제약 중 하나는, 컨테이너 레지스트리에 이미지가 하나라도 존재하는 프로젝트는 경로(path)나 이름을 변경하거나 다른 그룹으로 이전할 수 없다는 점입니다.24 만약 프로젝트 구조 변경이 필요할 경우, 관리자는 다음과 같은 매우 복잡하고 번거로운 수동 작업을 거쳐야 합니다:

  1. 프로젝트의 모든 이미지를 로컬 환경으로 docker pull하여 백업합니다.
  2. UI나 API를 통해 기존 프로젝트의 레지스트리에 있는 모든 이미지를 삭제합니다.
  3. 프로젝트의 경로를 변경하거나 다른 그룹으로 이전합니다.
  4. 백업해 둔 이미지를 새로운 경로에 맞게 다시 태그(docker tag)한 후, 새로운 레지스트리로 다시 docker push합니다.64

이 과정은 이미지 수가 많을수록 엄청난 시간과 노력을 요구하며, 사실상 대규모 프로젝트의 유연한 관리를 가로막는 심각한 한계점으로 지적되어 왔습니다.

GitLab의 핵심 철학인 ‘All-in-One’ 통합 플랫폼은 사용자에게 매끄럽고 일관된 경험을 제공한다는 강력한 장점을 가집니다.4 하지만 이러한 긴밀한 통합은 역설적으로 대규모 운영 환경에서 특정 구성 요소가 성능이나 기능적 한계에 부딪혔을 때, 해당 부분만 독립적으로 교체하거나 확장하기 어렵게 만드는

구조적 경직성으로 작용할 수 있습니다. 예를 들어, 사용자가 레거시 레지스트리의 성능 문제에 직면했을 때 17, 만약 레지스트리가 독립적인 서비스였다면 고성능의 Harbor와 같은 외부 솔루션으로 비교적 쉽게 교체할 수 있었을 것입니다. 그러나 GitLab 컨테이너 레지스트리는 CI/CD 변수, 내장 보안 스캐닝, UI 등 플랫폼의 다른 기능들과 너무나도 깊게 결합되어 있어 7, 이를 외부 제품으로 대체하는 순간 GitLab 플랫폼의 핵심 가치인 ‘완벽한 통합’이 깨지게 됩니다.65 결과적으로 사용자는 성능 문제를 겪으면서도, GitLab 자체의 다음 버전 업데이트나 차세대 레지스트리와 같은 근본적인 아키텍처 개선을 기다려야 하는 상황에 놓일 수 있습니다. 이는 통합 플랫폼이 특정 영역에서 병목 현상을 겪을 때, 전체 시스템의 유연성과 발전 속도의 발목을 잡을 수 있는 잠재적 위험이 있음을 시사합니다.

GitLab 컨테이너 레지스트리는 단순한 이미지 저장소에서 출발하여, GitLab의 DevSecOps 플랫폼 전략의 핵심 구성 요소로 진화해왔습니다. 아키텍처 개선, CI/CD 및 보안 기능과의 심층적인 통합을 통해 강력한 기능을 제공하지만, 동시에 대규모 운영 환경에서의 도전 과제들도 명확히 드러났습니다. 본 결론에서는 향후 로드맵을 분석하고, 이를 바탕으로 기술 리더와 DevOps 엔지니어를 위한 전략적 제언을 제시합니다.

GitLab의 향후 개발 방향은 현재의 한계를 극복하고, 시장의 요구에 부응하여 경쟁력을 강화하는 데 초점이 맞춰져 있습니다.

GitLab 컨테이너 레지스트리를 성공적으로 도입하고 운영하기 위해, 조직의 역할에 따라 다음과 같은 전략적 접근을 권장합니다.

  1. Introduction to Registries - GitLab University, accessed July 8, 2025, https://university.gitlab.com/courses/introduction-to-registries
  2. What is a container registry? - IBM, accessed July 8, 2025, https://www.ibm.com/think/topics/container-registry
  3. 컨테이너 레지스트리란? - Red Hat, accessed July 8, 2025, https://www.redhat.com/ko/topics/cloud-native-apps/what-is-a-container-registry
  4. Enable and Use GitLab Container Registry Baeldung on Ops, accessed July 8, 2025, https://www.baeldung.com/ops/gitlab-container-registry
  5. Amazon Elastic Container Registry (ECR) vs. GitLab Comparison - SourceForge, accessed July 8, 2025, https://sourceforge.net/software/compare/Amazon-Elastic-Container-Registry-ECR-vs-GitLab/
  6. Packages and Registries - GitLab Docs, accessed July 8, 2025, https://docs.gitlab.com/user/packages/
  7. Build and push container images to the container registry GitLab …, accessed July 8, 2025, https://docs.gitlab.com/user/packages/container_registry/build_and_push_images/
  8. Container Scanning GitLab Docs, accessed July 8, 2025, https://docs.gitlab.com/user/application_security/container_scanning/
  9. Security scanner integration contribute - GitLab Docs, accessed July 8, 2025, https://docs.gitlab.com/development/integrations/secure/
  10. GitLab container registry administration, accessed July 8, 2025, https://docs.gitlab.com/administration/packages/container_registry/
  11. Setup GitLab Container Registry - GitLab Managed by Lal Zada - Medium, accessed July 8, 2025, https://medium.com/@BuildWithLal/setup-gitlab-container-registry-gitlab-managed-bbda71b3aef4
  12. GitLab 컨테이너 레지스트리 관리, accessed July 8, 2025, https://gitlab-docs.infograb.net/ee/administration/packages/container_registry.html
  13. Container registry / Packages / Administration / Help / GitLab, accessed July 8, 2025, https://microfluidics.utoronto.ca/gitlab/help/administration/packages/container_registry.md
  14. Reference architecture: Up to 40 RPS or 2000 users - GitLab Docs, accessed July 8, 2025, https://docs.gitlab.com/administration/reference_architectures/2k_users/
  15. How to Garbage Collect the GitLab Container Registry to Free Up Storage - How-To Geek, accessed July 8, 2025, https://www.howtogeek.com/devops/how-to-garbage-collect-the-gitlab-container-registry-to-free-up-storage/
  16. Container registry / Packages / Administration / Help / GitLab - ETSI Labs, accessed July 8, 2025, https://labs.etsi.org/rep/help/administration/packages/container_registry.md
  17. Improved performance for the GitLab Container Registry garbage collection algorithm for S3, accessed July 8, 2025, https://gitlab.com/gitlab-org/gitlab/-/issues/31071
  18. container_registry view performance gets slower with more tags (#17371) / Issue - GitLab, accessed July 8, 2025, https://gitlab.com/gitlab-org/gitlab/-/issues/17371
  19. Listing tags for a container registry image is taking ~10 seconds (#207368) / Issue - GitLab, accessed July 8, 2025, https://gitlab.com/gitlab-org/gitlab/-/issues/207368
  20. Next-generation GitLab container registry goes GA, accessed July 8, 2025, https://about.gitlab.com/blog/next-generation-gitlab-container-registry-goes-ga/
  21. Reference architecture: Up to 60 RPS or 3,000 users GitLab Docs, accessed July 8, 2025, https://docs.gitlab.com/administration/reference_architectures/3k_users/
  22. Authenticate with the container registry GitLab Docs, accessed July 8, 2025, https://docs.gitlab.com/user/packages/container_registry/authenticate_with_container_registry/
  23. Run your CI/CD jobs in Docker containers - GitLab Docs, accessed July 8, 2025, https://docs.gitlab.com/ci/docker/using_docker_images/
  24. GitLab container registry, accessed July 8, 2025, https://docs.gitlab.com/user/packages/container_registry/
  25. Personal access tokens - GitLab Docs, accessed July 8, 2025, https://docs.gitlab.com/user/profile/personal_access_tokens/
  26. GitLab token overview, accessed July 8, 2025, https://docs.gitlab.com/security/tokens/
  27. gitlab_container_registry.pptx - BioHPC, accessed July 8, 2025, https://portal.biohpc.swmed.edu/media/filer_public/0f/e8/0fe8fd68-3f55-4d46-8ac9-1dc17cee06f5/gitlab_container_registry.pptx
  28. Authenticate with container registry - GitLab - ETSI Labs, accessed July 8, 2025, https://labs.etsi.org/rep/help/user/packages/container_registry/authenticate_with_container_registry.md
  29. Authenticate with container registry - GitLab - Genboree, accessed July 8, 2025, https://genboree.org/gitlab/help/user/packages/container_registry/authenticate_with_container_registry.md
  30. docker - use image from gitlab Registry in CI - Stack Overflow, accessed July 8, 2025, https://stackoverflow.com/questions/53088837/use-image-from-gitlab-registry-in-ci
  31. Container Image Versioning, accessed July 8, 2025, https://container-registry.com/posts/container-image-versioning/
  32. github - Docker tagging strategy in CI systems (GitLab) - Stack …, accessed July 8, 2025, https://stackoverflow.com/questions/70054762/docker-tagging-strategy-in-ci-systems-gitlab
  33. Best Practice for Container Image Versioning - DevOps Stack Exchange, accessed July 8, 2025, https://devops.stackexchange.com/questions/14362/best-practice-for-container-image-versioning
  34. A little help with CI/CD and Semantic Versioning : r/gitlab - Reddit, accessed July 8, 2025, https://www.reddit.com/r/gitlab/comments/k6hre1/a_little_help_with_cicd_and_semantic_versioning/
  35. Reduce container registry storage - GitLab Docs, accessed July 8, 2025, https://docs.gitlab.com/user/packages/container_registry/reduce_container_registry_storage/
  36. Cleanup policies - Container registry - GitLab Docs, accessed July 8, 2025, https://docs.gitlab.com/development/packages/cleanup_policies/
  37. Cleaning-up 7TB of data from our on-prem GitLab Container Registry - Reddit, accessed July 8, 2025, https://www.reddit.com/r/gitlab/comments/15iowcp/cleaningup_7tb_of_data_from_our_onprem_gitlab/
  38. Cleaning-up 7TB of data from our on-prem GitLab Container Registry, accessed July 8, 2025, https://blog.crafteo.io/2023/08/04/efficient-gitlab-container-registry-cleanup/
  39. Index / Container scanning / Application security / User / 帮助 / GitLab, accessed July 8, 2025, https://code.kingdee.com/gitlab/help/user/application_security/container_scanning/index.md
  40. 7 Best Practices for Container Security - Jit.io, accessed July 8, 2025, https://www.jit.io/resources/devsecops/7-best-practices-for-container-security
  41. A beginner’s guide to container security - GitLab, accessed July 8, 2025, https://about.gitlab.com/topics/devsecops/beginners-guide-to-container-security/
  42. Best Practices for Managing and Securing Container Images : r/docker - Reddit, accessed July 8, 2025, https://www.reddit.com/r/docker/comments/1i2it13/best_practices_for_managing_and_securing/
  43. What is GitLab Container Scanning? - SentinelOne, accessed July 8, 2025, https://www.sentinelone.com/cybersecurity-101/cloud-security/gitlab-container-scanning/
  44. GitLab Security Best Practices: Safeguarding Your Development Pipeline - VivaOps, accessed July 8, 2025, https://www.vivaops.ai/post/gitlab-security-best-practices
  45. Choosing the Right Container Registry Glasskube, accessed July 8, 2025, https://glasskube.dev/blog/container-image-registry-comparison/
  46. Choosing a Container Registry in 2024 - Shipyard.build, accessed July 8, 2025, https://shipyard.build/blog/container-registries/
  47. Comparing Docker Hub and GitHub Container Registry - JFrog, accessed July 8, 2025, https://jfrog.com/devops-tools/article/comparing-docker-hub-and-github-container-registry/
  48. Amazon ECR vs. Docker Hub vs. GitHub Container Registry cloudonaut, accessed July 8, 2025, https://cloudonaut.io/amazon-ecr-vs-docker-hub-vs-github-container-registry/
  49. Container registry preference : r/AskTechnology - Reddit, accessed July 8, 2025, https://www.reddit.com/r/AskTechnology/comments/zl8zig/container_registry_preference/
  50. Transition from Container Registry Artifact Registry documentation - Google Cloud, accessed July 8, 2025, https://cloud.google.com/artifact-registry/docs/transition/transition-from-gcr
  51. Google Cloud: Artifact Registry vs Container Registry - Stack Overflow, accessed July 8, 2025, https://stackoverflow.com/questions/65725870/google-cloud-artifact-registry-vs-container-registry
  52. Google Cloud Artifact Registry vs GCR Pricing : r/googlecloud - Reddit, accessed July 8, 2025, https://www.reddit.com/r/googlecloud/comments/murvaa/google_cloud_artifact_registry_vs_gcr_pricing/
  53. Compare GitLab vs. Harbor in 2025 - Slashdot, accessed July 8, 2025, https://slashdot.org/software/comparison/GitLab-vs-Harbor/
  54. Harbor vs Quay Container Registry - Wallarm, accessed July 8, 2025, https://www.wallarm.com/cloud-native-products-101/harbor-vs-quay-container-registry
  55. Harbor Container Registry - the StarlingX Documentation, accessed July 8, 2025, https://docs.starlingx.io/admintasks/kubernetes/harbor-as-system-app-1d1e3ec59823.html
  56. Harbor, accessed July 8, 2025, https://goharbor.io/
  57. Clearing Gitlab’s Package Registry automatically from the CI by Cédric Dué Medium, accessed July 8, 2025, https://medium.com/@cedricdue/clearing-gitlabs-package-registry-automatically-from-the-ci-4fab353340c
  58. Pricing Docker, accessed July 8, 2025, https://www.docker.com/pricing/
  59. Fully Managed Container Registry – Amazon Elastic Container …, accessed July 8, 2025, https://aws.amazon.com/ecr/pricing/
  60. Getting Started with Amazon Elastic Container Registry - DEV Community, accessed July 8, 2025, https://dev.to/deserie_murembeni/getting-started-with-aws-elastic-container-registry-767
  61. Pricing Artifact Registry Google Cloud, accessed July 8, 2025, https://cloud.google.com/artifact-registry/pricing
  62. Investigate: Gitlab registry push extremely slow with Kaniko (#241996) / Issue, accessed July 8, 2025, https://gitlab.com/gitlab-org/gitlab/-/issues/241996
  63. Estimated registry usage for very large namespaces (#9413) / Epic …, accessed July 8, 2025, https://gitlab.com/groups/gitlab-org/-/epics/9413
  64. Troubleshooting the GitLab container registry, accessed July 8, 2025, https://docs.gitlab.com/user/packages/container_registry/troubleshoot_container_registry/
  65. Integrate Harbor as a proxy cache for GitLab Container Registry (#421471) / Issue, accessed July 8, 2025, https://gitlab.com/gitlab-org/gitlab/-/issues/421471
  66. GitLab upcoming releases GitLab, accessed July 8, 2025, https://about.gitlab.com/upcoming-releases/
  67. GitLab Package roadmap for 2024, accessed July 8, 2025, https://about.gitlab.com/blog/gitlab-package-roadmap-for-2024/