튜토리얼: 엔터프라이즈 규모에 맞는 패키지 레지스트리 구조화
조직이 성장함에 따라 패키지 관리가 점점 복잡해질 수 있습니다. 이 튜토리얼에서는 GitLab 패키지 레지스트리 모델을 엔터프라이즈 그룹 구조에 통합하는 방법을 배울 것입니다. 이 튜토리얼을 마치면 다음을 알게 됩니다:
조직이 성장함에 따라 패키지 관리가 점점 복잡해질 수 있습니다. GitLab 패키지 레지스트리 모델은 엔터프라이즈 패키지 관리를 위한 강력한 솔루션을 제공합니다. 패키지 레지스트리를 활용하는 방법을 이해하는 것은 안전하고 간단하며 대규모로 패키지를 작업하는 데 중요합니다.
이 튜토리얼에서는 GitLab 패키지 레지스트리 모델을 엔터프라이즈 그룹 구조에 통합하는 방법을 배울 것입니다. 여기서 제공된 예시는 Maven 및 npm 패키지에 특화되어 있지만 이 튜토리얼의 개념을 GitLab 패키지 레지스트리에서 지원하는 모든 패키지로 확장할 수 있습니다.
이 튜토리얼을 마치면 다음을 알게 됩니다:
- 단일 루트 또는 최상위 그룹을 설정하여 작업을 구조화하는 방법.
- 명확한 소유권으로 패키지를 게시하기 위한 프로젝트 구성.
- 단순화된 액세스를 위한 최상위 그룹 패키지 소비 설정.
- 팀이 조직의 패키지에 액세스할 수 있도록 배포 토큰 추가.
- 패키지와 함께 안전하게 작동하도록 CI/CD 구성.
시작하기 전에#
이 튜토리얼을 완료하려면 다음이 필요합니다:
- npm 또는 Maven 패키지.
- GitLab 패키지 레지스트리에 대한 친숙함.
- 테스트 프로젝트. 기존 프로젝트를 사용하거나 이 튜토리얼을 위해 프로젝트를 만들 수 있습니다.
GitLab 패키지 레지스트리 이해#
JFrog Artifactory 및 Sonatype Nexus와 같은 전통적인 패키지 관리자는 패키지를 저장하고 업데이트하기 위해 단일 중앙화된 저장소를 사용합니다. GitLab에서는 그룹 또는 프로젝트에서 직접 패키지를 관리합니다. 이는 다음을 의미합니다:
- 팀은 코드를 저장하는 프로젝트에 패키지를 게시합니다.
- 팀은 하위의 모든 패키지를 집계하는 루트 그룹 레지스트리에서 패키지를 사용합니다.
- 액세스 제어는 기존 GitLab 권한에서 상속됩니다.
패키지가 코드처럼 저장되고 관리되기 때문에 기존 프로젝트나 그룹에 패키지 관리를 추가할 수 있습니다. 이 모델은 여러 가지 이점을 제공합니다:
- 소스 코드와 함께 패키지의 명확한 소유권
- 추가 구성 없이 세분화된 액세스 제어
- 단순화된 CI/CD 통합
- 팀 구조와의 자연스러운 정렬
- 루트 그룹 소비를 통해 모든 회사 패키지에 액세스하기 위한 단일 URL
엔터프라이즈 구조 생성#
단일 최상위 그룹 아래에 코드를 구성하는 것을 고려하세요. 예를 들어:
company/ (top-level group)
├── retail-division/
│ ├── shared-libraries/ # Division-specific shared code
│ └── teams/
│ ├── checkout/ # Team publishes packages here
│ └── inventory/ # Team publishes packages here
├── banking-division/
│ ├── shared-libraries/ # Division-specific shared code
│ └── teams/
│ ├── payments/ # Team publishes packages here
│ └── fraud/ # Team publishes packages here
└── shared-platform/ # Enterprise-wide shared code
├── java-commons/ # Shared Java libraries
└── ui-components/ # Shared UI components
이 구조에서 회사의 모든 팀은 코드와 패키지를 자신의 프로젝트에 게시하면서
최상위 company/ 그룹의 구성을 상속합니다.
최상위 그룹 설정#
Owner 역할이 있는 기존 최상위 그룹이 있는 경우 사용할 수 있습니다.
그룹이 없는 경우 만듭니다:
- 오른쪽 상단에서 새로 만들기 (+) 및 새 그룹을 선택합니다.
- 그룹 이름에서 그룹 이름을 입력합니다.
- 그룹 URL에서 네임스페이스로 사용할 그룹 경로를 입력합니다.
- 가시성 수준을 선택합니다.
- 선택 사항. 경험을 개인화하기 위한 정보를 입력합니다.
- 그룹 만들기를 선택합니다.
이 그룹은 조직의 다른 그룹 및 프로젝트를 저장합니다. 다른 프로젝트와 그룹이 있는 경우 관리를 위해 새 최상위 그룹으로 이전할 수 있습니다.
진행하기 전에 최소한 다음이 있는지 확인하세요:
- 최상위 그룹.
- 최상위 그룹 또는 하위 그룹 중 하나에 속하는 프로젝트.
패키지 게시#
명확한 소유권을 유지하기 위해 팀은 자신의 패키지 레지스트리에 패키지를 게시해야 합니다. 이렇게 하면 패키지가 소스 코드와 함께 유지되고 버전 이력이 프로젝트 활동과 연결됩니다.
Maven 패키지를 게시하려면:
-
프로젝트의 패키지 레지스트리에 게시하도록
pom.xml파일을 구성합니다:<!-- checkout/pom.xml --> <distributionManagement> <repository> <id>gitlab-maven</id> <url>${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven</url> </repository> </distributionManagement>
npm 패키지를 게시하려면:
-
package.json파일을 구성합니다:// ui-components/package.json { "name": "@company/ui-components", "publishConfig": { "registry": "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/" } }
패키지 사용#
프로젝트가 단일 최상위 그룹 아래에 구성되어 있으므로 패키지를 조직에서 여전히 액세스할 수 있습니다. 팀이 패키지를 사용할 수 있도록 단일 API 엔드포인트를 구성해 보겠습니다.
-
최상위 그룹에서 패키지에 액세스하도록
pom.xml을 구성합니다:<!-- Any project's pom.xml --> <repositories> <repository> <id>gitlab-maven</id> <url>https://gitlab.example.com/api/v4/groups/company/-/packages/maven</url> </repository> </repositories>
-
.npmrc파일을 구성합니다:# Any project's .npmrc @company:registry=https://gitlab.example.com/api/v4/groups/company/-/packages/npm/
이 구성은 프로젝트 기반 게시의 이점을 유지하면서 조직 전체의 모든 패키지에 자동으로 액세스를 제공합니다.
배포 토큰 추가#
다음으로 읽기 전용 배포 토큰을 추가합니다. 이 토큰은 조직의 하위 그룹 및 프로젝트에 저장된 패키지에 액세스를 제공하여 팀이 개발에 사용할 수 있도록 합니다.
- 최상위 그룹의 왼쪽 사이드바에서 설정 > 저장소를 선택합니다.
- 배포 토큰을 확장합니다.
- 토큰 추가를 선택합니다.
- 필드를 완성하고 범위를
read_repository로 설정합니다. - 배포 토큰 만들기를 선택합니다.
필요한 만큼 최상위 그룹에 배포 토큰을 추가할 수 있습니다. 토큰을 주기적으로 교체하세요. 토큰이 노출되었다고 의심되면 즉시 취소하고 교체하세요.
CI/CD와 함께 패키지 사용#
CI/CD 작업이 패키지 레지스트리에 액세스해야 할 때 사전 정의된 CI/CD 변수
CI_JOB_TOKEN으로 인증합니다. 이 인증은 자동으로 이루어지므로 추가 구성이 필요하지 않습니다:
publish:
script:
- mvn deploy # For Maven packages
# or
- npm publish # For npm packages
# CI_JOB_TOKEN provides automatic authentication
요약 및 다음 단계#
GitLab 프로젝트를 하나의 최상위 그룹 아래에 구성하면 여러 가지 이점이 있습니다:
- 단순화된 구성:
- 모든 패키지 액세스를 위한 하나의 URL
- 팀 전체의 일관된 설정
- 쉬운 토큰 교체
- 명확한 소유권:
- 패키지는 소스 코드와 함께 유지됩니다
- 팀은 게시에 대한 제어권을 유지합니다
- 버전 이력은 프로젝트 활동과 연결됩니다
- 자연스러운 조직:
- 그룹이 회사 구조와 일치합니다
- 팀은 자율적으로 유지하면서 협업할 수 있습니다
GitLab 패키지 레지스트리 모델은 엔터프라이즈 패키지 관리를 위한 강력한 솔루션을 제공합니다. 프로젝트 기반 게시와 최상위 그룹 소비를 결합하면 명확한 소유권과 단순화된 액세스 모두를 얻을 수 있습니다.
이 접근 방식은 보안과 사용 편의성을 유지하면서 조직과 함께 자연스럽게 확장됩니다. 단일 팀이나 부서에서 이 모델을 구현하는 것부터 시작하고, 통합된 접근 방식의 이점을 보면서 확장하세요. 이 튜토리얼은 Maven 및 npm에 초점을 맞췄지만 GitLab에서 지원하는 모든 패키지 유형에 동일한 원칙이 적용된다는 점을 기억하세요.
