Go 모듈 관리

이 페이지에서는 Artifact Registry에 저장된 패키징된 Go 모듈을 관리하는 방법을 설명합니다.

시작하기 전에

  1. 대상 저장소가 없으면 새 저장소를 만듭니다. 저장소 형식으로 Go를 선택합니다.
  2. 저장소에 대해 필요한 권한이 있는지 확인합니다.
  3. (선택사항) gcloud 명령어의 기본값을 구성합니다.
  4. Go 1.15 이상을 설치합니다.
  5. package-go-module gcloud CLI 부가기능을 설치합니다.

    gcloud components install package-go-module
  6. Artifact Registry로 인증하도록 Go를 구성합니다.

필요한 역할

모듈을 관리하는 데 필요한 권한을 얻으려면 관리자에게 저장소에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

모듈 업로드

저장소 모드: 표준

모듈을 패키징하고 저장소에 업로드하려면 다음 명령어를 실행합니다.

  gcloud artifacts go upload --project=PROJECT \
      --repository=REPOSITORY \
      --location=LOCATION \
      --module-path=MODULE_PATH \
      --version=VERSION \
      --source=SOURCE_LOCATION

다음을 바꿉니다.

  • PROJECT를 Google Cloud 프로젝트 ID로 바꿉니다.
  • REPOSITORY를 패키지가 저장된 저장소의 이름으로 바꿉니다.
  • LOCATION을 저장소의 리전 또는 멀티 리전 위치로 바꿉니다.
  • MODULE_PATH를 모듈 경로로 바꿉니다. 예를 들면 example.com/foo입니다. 자세한 내용은 Go 모듈 참조를 확인하세요.
  • VERSIONvX.Y.Z 형식으로 된 모듈의 시맨틱 버전으로 바꿉니다. 여기서 X는 주 버전이고 Y는 부 버전이고 Z는 패치 버전입니다.
  • SOURCE_LOCATION을 Go 모듈의 루트 디렉터리 경로로 바꿉니다. --source 플래그를 생략하면 기본값은 현재 디렉터리입니다.

모듈이 Artifact Registry에 업로드됩니다.

Go 모듈 만들기에 대한 자세한 내용은 이 튜토리얼을 참조하세요.

새 모듈 버전 업로드

저장소 모드: 표준

기본값이 구성된 경우 모듈의 새 버전을 기본 프로젝트, 저장소, 위치에 업로드하려면 새 버전 번호로 다음 명령어를 실행합니다.

  gcloud artifacts go upload \
      --module-path=MODULE_PATH \
      --version=VERSION \
      --source=SOURCE_LOCATION

VERSION을 업데이트된 모듈 버전으로 바꿉니다. 예를 들어 example.com/foo 경로로 모듈의 0.1.1 버전을 업로드하려면 다음 명령어를 실행합니다.

  gcloud artifacts go upload \
      --module-path=example.com/foo \
      --version=v0.1.1 \
      --source=SOURCE_LOCATION

모듈을 출시 전 버전으로 표시하려면 VERSION 뒤에 대시를 추가하고 모듈의 출시 전 식별자를 추가합니다.

  gcloud artifacts go upload \
      --module-path=MODULE_PATH \
      --version=VERSION-PRE_RELEASE_IDENTIFIERS \
      --source=SOURCE_LOCATION

PRE_RELEASE_IDENTIFIERS를 점으로 구분된 ASCII 영숫자 문자와 하이픈으로 바꿉니다. 예를 들어 alpha.x.12m.5로 식별되는 경로 example.com/foo 모듈을 사용하여 모듈의 출시 전 버전을 업로드하려면 다음 명령어를 실행합니다.

  gcloud artifacts go upload \
      --module-path=example.com/foo \
      --version=v1.0.0-alpha.x.12m.5 \
      --source=SOURCE_LOCATION

새 주 버전 업로드

저장소 모드: 표준

주 버전은 이전 버전과 하위 호환되지 않습니다. 사용자가 브레이킹 체인지를 가져오지 않도록 하려면 v1 이후의 주 버전은 이전 버전과 모듈 경로가 달라야 합니다. v2부터는 주 버전이 모듈 경로 끝에 추가됩니다.

예를 들어 example.com/foov2.0.0에 대한 모듈 경로는 example.com/foo/v2입니다.

주 버전 서픽스로 이름이 지정된 별도의 디렉터리에서 v1 다음에 주 버전을 개발하는 것이 좋습니다.

기본값이 구성된 경우 example.com/foo 경로가 포함된 모듈의 새 주 버전 2.0.0을 기본 프로젝트, 저장소, 위치에 업로드하려면 다음 안내를 따르세요.

  gcloud artifacts go upload --module-path=example.com/foo/v2 --version=v2.0.0

모듈 나열

저장소 모드: 표준

기본값이 구성된 경우 다음 명령어를 실행하여 기본 프로젝트, 저장소, 위치에서 업로드된 Go 모듈을 검사합니다.

  gcloud artifacts packages list

다음과 유사한 결과가 출력됩니다.

  Listing items under project my-project, location us-west1, repository my-repo.

  PACKAGE                   CREATE_TIME          UPDATE_TIME
  example.com/foo           2022-06-03T20:43:39  2022-06-20T20:37:40

모듈 버전 세부정보 보기

저장소 모드: 표준

기본값이 구성된 경우 다음 명령어를 실행하여 기본 프로젝트, 저장소, 위치의 모듈 버전을 확인합니다.

  gcloud artifacts versions list --package=MODULE_PATH

다음과 유사한 결과가 출력됩니다.

  Listing items under project my-project, location us-west1, repository my-repo, package example.com/foo.

  VERSION  DESCRIPTION  CREATE_TIME          UPDATE_TIME
  v0.1.0                2022-06-03T20:43:39  2022-06-03T20:43:39
  v0.1.1                2022-06-20T20:37:40  2022-06-20T20:37:40

모듈을 종속 항목으로 사용

저장소 모드: 표준

Artifact Registry에 저장된 모듈을 가져오려면 Go에 Artifact Registry에서 종속 항목을 찾고 체크섬 데이터베이스를 우회하도록 지시해야 합니다. Go용 인증 설정의 안내에 따라 인증 및 Go 환경을 설정합니다.

  1. Artifact Registry에 인증하는 데 단기 사용자 인증 정보를 사용하는 경우 다음 명령어를 실행하여 OAuth 토큰을 새로고침해야 합니다.

      GOPROXY=proxy.golang.org \
      go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@latest refresh
    
  2. 모듈에 아직 go.mod 파일이 없는 경우 디렉터리를 모듈 폴더로 변경하고 go mod init를 실행하여 패키지용 go.mod 파일을 만듭니다.

      go mod init MODULE_PATH
    

    MODULE_PATH를 Artifact Registry에 저장된 모듈의 모듈 경로로 바꿉니다. 자세한 내용은 Go 모듈 참조를 확인하세요.

  3. Artifact Registry에 저장되는 모듈 버전을 요구하려면 다음과 비슷하게 go.mod 파일을 수정합니다.

    
    module example.com/bar
    
    go 1.19
    
    require example.com/foo v0.1.0
    

    다음을 바꿉니다.

    • example.com/foo는 필수 모듈의 모듈 경로입니다.
    • v0.1.0은 Artifact Registry에 저장된 버전입니다.
  4. main.go 파일의 import 섹션에 정상적으로 모듈 경로를 포함합니다.

    예를 들어 Artifact Registry에 저장된 example.com/foo 경로로 모듈을 가져오려면 가져오기 섹션이 다음과 비슷할 수 있습니다.

      
      package main
    
      import (
        foo "example.com/foo"
      )
    
      func main() {
    
        ...
    
      }
    
      
    
  5. go mod tidy를 실행하여 종속 항목을 다운로드합니다.

      go mod tidy
    
  6. 모듈을 정상적으로 실행합니다.

      go run .
    

    Artifact Registry에 저장된 모듈을 다운로드하여 종속 항목으로 사용합니다.

패키징된 Go 모듈 삭제

저장소 모드: 표준

패키지 및 모든 해당 버전을 삭제하거나 특정 버전을 삭제할 수 있습니다.

  • 패키지를 삭제하면 작업을 실행취소할 수 없습니다.

패키지 또는 패키지 버전을 삭제하기 전에 이에 대한 중요한 종속 항목에 대해 논의하거나 처리했는지 확인합니다.

패키지를 삭제하려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 저장소 페이지를 엽니다.

    저장소 페이지 열기

  2. 저장소 목록에서 적절한 저장소를 클릭합니다.

    패키지 페이지에 저장소의 패키지가 나열됩니다.

  3. 삭제할 위젯을 선택합니다.

  4. 삭제를 클릭합니다.

  5. 확인 대화상자에서 삭제를 클릭합니다.

gcloud

다음 명령어를 실행합니다.

gcloud artifacts packages delete PACKAGE \
    [--repository=REPOSITORY] [--location=LOCATION] [--async]

각 항목의 의미는 다음과 같습니다.

  • PACKAGE는 저장소의 패키지 이름입니다.
  • REPOSITORY는 저장소 이름입니다. 기본 저장소를 구성한 경우 이 플래그를 생략하여 기본값을 사용할 수 있습니다.
  • LOCATION은 리전 또는 멀티 리전 위치입니다. 특정 위치의 저장소를 보려면 이 플래그를 사용합니다. 기본 위치를 구성한 경우 이 플래그를 생략하여 기본값을 사용할 수 있습니다.
  • --async는 진행 중인 작업이 완료되기를 기다리지 않고 즉시 반환됩니다.

패키지 버전을 삭제하려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 저장소 페이지를 엽니다.

    저장소 페이지 열기

  2. 저장소 목록에서 적절한 저장소를 클릭합니다.

    패키지 페이지에 저장소의 패키지가 나열됩니다.

  3. 패키지의 버전을 보려면 패키지를 클릭합니다.

  4. 삭제할 버전을 선택합니다.

  5. 삭제를 클릭합니다.

  6. 확인 대화상자에서 삭제를 클릭합니다.

gcloud

다음 명령어를 실행합니다.

gcloud artifacts versions delete VERSION \
    --package=PACKAGE \
    [--repository=REPOSITORY] [--location=LOCATION] \
    [--async]

각 항목의 의미는 다음과 같습니다.

  • PACKAGE는 저장소의 패키지 이름입니다.
  • REPOSITORY는 저장소 이름입니다. 기본 저장소를 구성한 경우 이 플래그를 생략하여 기본값을 사용할 수 있습니다.
  • LOCATION은 리전 또는 멀티 리전 위치입니다. 특정 위치의 저장소를 보려면 이 플래그를 사용합니다. 기본 위치를 구성한 경우 이 플래그를 생략하여 기본값을 사용할 수 있습니다.
  • --async는 진행 중인 작업이 완료되기를 기다리지 않고 즉시 반환합니다.

다음 단계