의존성 관리하기

의존성 관리하기 (Managing dependencies)

코드가 외부 패키지를 사용하기 시작하면, 그 패키지들(모듈 형태로 배포되는)은 여러분 코드의 의존성(dependency)이 됩니다. 시간이 지나면서 이들을 업그레이드하거나 교체해야 하는 일도 생기죠. Go는 외부 의존성을 코드에 통합하면서 Go 애플리케이션을 안전하게 유지해 주는 의존성 관리 도구를 제공합니다.

이 주제에서는 코드에 받아들인 의존성을 관리하는 작업들을 어떻게 수행하는지 설명합니다. 대부분은 Go 도구로 처리할 수 있어요. 이 주제는 또 유용하게 쓸 수 있는 몇 가지 의존성 관련 작업도 다룹니다.

출처: Go 공식 문서

참고 자료 (See also)

  • 의존성을 모듈로 다루는 게 처음이라면, Getting started 튜토리얼을 잠깐 훑어보는 걸 추천해요.
  • go 명령으로 의존성을 관리하면 요구사항이 일관되게 유지되고 go.mod 파일의 내용도 유효하게 유지됩니다. 명령에 대한 레퍼런스는 Command go를 보세요. 명령줄에서 go help *command-name*처럼 go help를 입력해서 도움말을 볼 수도 있어요. 예를 들면 go help mod tidy처럼요.
  • 의존성 변경에 쓰는 Go 명령들은 go.mod 파일을 편집합니다. 파일 내용에 대한 자세한 설명은 go.mod 파일 레퍼런스를 참고하세요.
  • 편집기나 IDE가 Go 모듈을 알게 하면 의존성 관리 작업이 더 수월해져요. Go를 지원하는 편집기에 대해서는 Editor plugins and IDEs를 보세요.
  • 이 주제는 다른 사람이 쓸 수 있도록 모듈을 개발·배포·버전 관리하는 방법을 다루지는 않습니다. 그 내용은 Developing and publishing modules를 참고하세요.

의존성 사용·관리 워크플로

Go 도구로 유용한 패키지를 받아서 사용할 수 있어요. pkg.go.dev에서 유용해 보이는 패키지를 검색한 뒤, go 명령으로 그 패키지들을 여러분 코드에 import 해서 함수를 호출할 수 있습니다.

다음은 가장 흔한 의존성 관리 단계를 나열한 것이에요. 각 단계에 대한 자세한 내용은 이 주제의 해당 섹션에서 다룹니다.

의존성을 모듈로 관리하기

Go에서는 import 하는 패키지를 담고 있는 모듈 단위로 의존성을 관리합니다. 이 과정은 다음 요소들이 뒷받침해 줘요:

  • 모듈을 게시하고 그 코드를 가져오는 분산 시스템. 개발자들은 자신의 저장소에서 다른 개발자가 사용할 수 있도록 모듈을 공개하고, 버전 번호를 붙여 게시합니다.
  • 패키지 검색 엔진이자 문서 브라우저인 pkg.go.dev. 여기서 모듈을 찾을 수 있어요. 유용한 패키지 찾기·import 하기 참고
  • 모듈의 안정성과 하위 호환성 보장을 이해하는 데 도움이 되는 모듈 버전 번호 규칙. Module version numbering 참고
  • 모듈 소스 가져오기, 업그레이드 등 의존성 관리를 쉽게 만들어 주는 Go 도구. 이 주제의 각 섹션에서 자세히 다룹니다.

유용한 패키지 찾기·import 하기

pkg.go.dev에서 유용해 보이는 함수가 있는 패키지를 검색할 수 있어요.

코드에 쓰고 싶은 패키지를 찾았다면, 페이지 상단에서 패키지 경로를 확인하고 Copy path 버튼을 눌러 경로를 클립보드에 복사하세요. 여러분 코드에서 그 경로를 import 문에 붙여 넣으면 됩니다:

import "rsc.io/quote"

코드가 패키지를 import 한 뒤에는 의존성 추적을 활성화하고, 컴파일할 수 있도록 패키지 코드를 받아와야 해요. 자세한 내용은 코드에서 의존성 추적 활성화의존성 추가를 참고하세요.

코드에서 의존성 추적 활성화하기

추가하는 의존성을 추적·관리하려면 먼저 코드를 자체 모듈에 넣어야 해요. 그러면 소스 트리 루트에 go.mod 파일이 생성됩니다. 이후 추가하는 의존성들은 그 파일에 기록돼요.

코드를 자체 모듈에 넣으려면 go mod init 명령을 사용합니다. 예를 들어 명령줄에서 코드의 루트 디렉터리로 이동한 뒤, 다음과 같이 명령을 실행해요:

$ go mod init example/mymodule

go mod init 명령의 인자는 모듈 경로(module path)입니다. 가능하다면 모듈 경로는 소스 코드가 있는 저장소 위치여야 해요.

모듈의 최종 저장소 위치를 아직 모른다면, 안전한 대체 값을 사용하세요. 여러분이 소유한 도메인 이름이나 통제할 수 있는 다른 이름(예: 회사 이름)과 함께 모듈 이름이나 소스 디렉터리에서 파생된 경로를 붙이면 됩니다. 자세한 내용은 모듈 이름 짓기를 참고하세요.

Go 도구로 의존성을 관리할 때, 그 도구들은 go.mod 파일을 갱신해서 의존성의 최신 목록을 유지합니다.

의존성을 추가하면 Go 도구는 의존하는 모듈들의 체크섬을 담은 go.sum 파일도 만듭니다. Go는 이 파일로 다운로드한 모듈 파일의 무결성을 검증하는데, 특히 여러분 프로젝트를 함께 작업하는 다른 개발자들에게 유용합니다.

go.mod와 go.sum 파일을 코드와 함께 저장소에 포함하세요.

자세한 내용은 go.mod 레퍼런스를 참고하세요.

모듈 이름 짓기

go mod init로 의존성 추적용 모듈을 만들 때, 모듈의 이름이 되는 모듈 경로를 지정합니다. 모듈 경로는 모듈 안 패키지들의 import 경로 접두어가 돼요. 다른 모듈의 모듈 경로와 충돌하지 않는 모듈 경로를 지정해야 합니다.

모듈 경로는 최소한 그 기원(origin)을 나타내는 것만으로도 충분해요. 예를 들어 회사, 저자, 소유자 이름처럼요. 하지만 모듈이 무엇인지나 무엇을 하는지 더 설명적으로 만들 수도 있습니다.

모듈 경로는 대체로 다음 형태를 띱니다:

<prefix>/<descriptive-text>
  • prefix(접두어)는 대체로 모듈을 부분적으로 설명하는 문자열, 예를 들어 기원을 나타내는 문자열이에요. 다음과 같은 것일 수 있어요:
    • Go 도구가 모듈의 소스 코드를 찾을 수 있는 저장소 위치 (모듈을 게시한다면 필수). 예를 들어 github.com/<project-name>/이 될 수 있어요. 모듈을 다른 사람이 쓰도록 게시할 수도 있다고 생각한다면 이 모범 사례를 따르세요. 게시에 대한 자세한 내용은 Developing and publishing modules을 참고해요.
    • 여러분이 통제하는 이름. 저장소 이름을 쓰지 않는다면, 다른 사람이 쓰지 않을 게 확실한 접두어를 고르세요. 좋은 선택은 회사 이름이에요. widgets, utilities, app 같은 흔한 용어는 피하세요.
  • descriptive text(설명 텍스트)로는 프로젝트 이름이 좋은 선택입니다. 패키지 이름이 기능을 설명하는 역할의 대부분을 담당한다는 점을 기억하세요. 모듈 경로는 그 패키지 이름들을 위한 네임스페이스를 만들어 줍니다.

예약된 모듈 경로 접두어

Go는 다음 문자열들이 패키지 이름에 쓰이지 않을 것임을 보장합니다.

  • test — 다른 모듈의 함수를 로컬에서 테스트하기 위해 설계된 코드가 담긴 모듈의 모듈 경로 접두어로 test를 쓸 수 있어요. 테스트의 일부로 생성되는 모듈에는 test 경로 접두어를 사용하세요. 예를 들어 테스트 자체가 go mod init test를 실행한 뒤, Go 소스 분석 도구로 테스트하기 위해 그 모듈을 특정한 방식으로 설정할 수 있어요.
  • example — 일부 Go 문서에서 모듈 경로 접두어로 사용됩니다. 예를 들어 의존성 추적만을 위한 모듈을 만드는 튜토리얼에서 처럼요. Go 문서는 또 예제가 게시된 모듈일 수 있음을 보여줄 때 example.com을 사용한다는 점도 참고하세요.

의존성 추가하기

게시된 모듈의 패키지를 import 하기 시작했다면, go get 명령으로 그 모듈을 관리 대상 의존성으로 추가할 수 있어요.

이 명령은 다음 일을 합니다:

  • 필요하다면, 명령줄에 이름이 나온 패키지를 빌드하는 데 필요한 모듈을 위한 require 지시문을 go.mod 파일에 추가합니다. require 지시문은 모듈이 의존하는 모듈의 최소 버전을 추적합니다. 자세한 내용은 go.mod 레퍼런스를 참고하세요.
  • 필요하다면, 그에 의존하는 패키지를 컴파일할 수 있도록 모듈 소스 코드를 다운로드합니다. proxy.golang.org 같은 모듈 프록시에서 또는 버전 관리 저장소에서 직접 다운로드할 수 있어요. 소스는 로컬에 캐시됩니다.

Go 도구가 모듈을 다운로드하는 위치는 설정할 수 있어요. 자세한 내용은 모듈 프록시 서버 지정하기를 참고하세요.

몇 가지 예를 들어 볼게요.

  • 모듈 안 한 패키지의 모든 의존성을 추가하려면, 아래 같은 명령을 실행하세요 ("."는 현재 디렉터리의 패키지를 가리켜요):
$ go get .
  • 특정 의존성을 추가하려면, 명령 인자로 그 모듈 경로를 지정하세요.
$ go get example.com/theirmodule

이 명령은 또한 다운로드하는 각 모듈을 인증(authenticate)합니다. 이는 모듈이 게시된 시점의 상태에서 변하지 않았음을 보장하기 위한 것이에요. 모듈이 게시된 이후에 변경됐다면 — 예를 들어 개발자가 커밋 내용을 바꿨다면 — Go 도구가 보안 에러를 표시합니다. 이 인증 검사는 변조됐을 수 있는 모듈로부터 여러분을 보호해 줍니다.

특정 의존성 버전 가져오기

go get 명령에서 버전을 지정해 의존성 모듈의 특정 버전을 받을 수 있습니다. 이 명령은 go.mod 파일의 require 지시문을 갱신합니다(직접 수동으로 갱신할 수도 있어요).

이렇게 하고 싶은 경우가 있을 수 있어요:

  • 모듈의 특정 사전 릴리스(pre-release) 버전을 받아서 시험해 보고 싶을 때.
  • 현재 요구하는 버전이 잘 동작하지 않는다는 걸 발견해서, 신뢰할 수 있는 버전을 받고 싶을 때.
  • 이미 요구 중인 모듈을 업그레이드하거나 다운그레이드하고 싶을 때.

go get 명령 사용 예시입니다:

  • 특정 번호 버전을 받으려면 모듈 경로에 @ 기호와 원하는 버전을 붙이세요:
$ go get example.com/[email protected]
  • 최신 버전을 받으려면 모듈 경로에 @latest를 붙이세요:
$ go get example.com/theirmodule@latest

다음 go.mod 파일 require 지시문 예시(자세한 내용은 go.mod 레퍼런스)는 특정 버전 번호를 요구하는 방법을 보여줍니다:

require example.com/theirmodule v1.3.4

사용 가능한 업데이트 찾아보기

현재 모듈에서 이미 사용 중인 의존성에 더 새로운 버전이 있는지 확인할 수 있어요. go list 명령으로 모듈의 의존성 목록과 함께 각 모듈에서 사용 가능한 최신 버전을 표시해 보세요. 사용 가능한 업그레이드를 발견한 뒤에는 코드로 직접 시험해서 새 버전으로 업그레이드할지 결정할 수 있습니다.

go list 명령에 대한 자세한 내용은 go list -m을 참고하세요.

예시를 몇 개 들어 볼게요.

  • 현재 모듈의 의존성인 모든 모듈과 각각에 사용 가능한 최신 버전을 나열:
$ go list -m -u all
  • 특정 모듈에 사용 가능한 최신 버전 표시:
$ go list -m -u example.com/theirmodule

의존성 업그레이드·다운그레이드

Go 도구로 사용 가능한 버전을 찾아낸 뒤, 다른 버전을 의존성으로 추가하면 의존성 모듈을 업그레이드하거나 다운그레이드할 수 있어요.

코드의 의존성 동기화하기

더 이상 import 하지 않는 패키지의 의존성을 제거하면서, 코드가 import 하는 모든 패키지에 대한 의존성을 관리하고 있는지 확인할 수 있어요.

코드와 의존성을 이것저것 바꾸다 보면, 관리 중인 의존성·다운로드된 모듈 모음이 코드에서 import 하는 패키지가 실제로 요구하는 모음과 더 이상 맞지 않는 상황이 생길 수 있어요. 그럴 때 유용한 작업이죠.

관리 중인 의존성 세트를 정리하려면 go mod tidy 명령을 사용하세요. 이 명령은 코드에서 import 하는 패키지 세트를 바탕으로 go.mod 파일을 편집해서, 필요한데 빠져 있는 모듈은 추가하고 관련 패키지를 제공하지 않는 사용하지 않는 모듈은 제거합니다.

이 명령은 인자가 없고, 제거된 모듈에 대한 정보를 출력하는 -v 플래그 하나만 있습니다.

$ go mod tidy

미게시 모듈 코드에 대한 개발·테스트

게시되지 않았을 수도 있는 의존성 모듈을 코드가 사용하도록 지정할 수 있어요. 이 모듈들의 코드는 각각의 저장소, 그 저장소의 포크(fork), 또는 이들을 소비하는 현재 모듈과 같은 로컬 드라이브에 있을 수 있어요.

이렇게 하고 싶은 경우는:

  • 외부 모듈 코드에 직접 변경을 가하고 싶을 때. 예를 들어 포크하고/복제한 뒤, 모듈에 수정 사항을 준비해서 모듈 개발자에게 풀 리퀘스트로 보내고 싶은 경우가 있죠.
  • 새 모듈을 만들고 아직 게시하지 않아서, go get 명령이 닿을 수 있는 저장소에 없을 때.

로컬 디렉터리의 모듈 코드 요구하기

요구하는 모듈의 코드가 그것을 요구하는 코드와 같은 로컬 드라이브에 있다고 지정할 수 있어요. 이런 경우에 유용하죠:

  • 별도의 모듈을 개발하면서 현재 모듈에서 테스트하고 싶을 때.
  • 외부 모듈의 문제를 고치거나 기능을 추가하면서 현재 모듈에서 테스트하고 싶을 때. (외부 모듈을 여러분 자신의 저장소 포크에서 요구할 수도 있다는 점을 참고하세요. 자세한 내용은 자신의 저장소 포크에서 외부 모듈 코드 요구하기 참고.)

require 지시문에 주어진 모듈 경로를 go.mod 파일의 replace 지시문으로 교체하면 go 명령이 모듈 코드의 로컬 사본을 사용하도록 지시할 수 있어요. 지시문에 대한 자세한 내용은 go.mod 레퍼런스를 참고하세요.

다음 go.mod 파일 예시에서, 현재 모듈은 외부 모듈 example.com/theirmodule을 요구하고 있으며, 교체(replace)가 제대로 동작하도록 존재하지 않는 버전 번호(v0.0.0-unpublished)를 사용합니다. replace 지시문은 원래 모듈 경로를 현재 모듈의 디렉터리와 같은 레벨에 있는 디렉터리인 ../theirmodule로 교체합니다.

module example.com/mymodule

go 1.23.0

require example.com/theirmodule v0.0.0-unpublished

replace example.com/theirmodule v0.0.0-unpublished => ../theirmodule

require/replace 쌍을 설정할 때는 go mod editgo get 명령을 사용해서 파일이 표현하는 요구사항이 일관되게 유지되도록 하세요:

$ go mod edit -replace=example.com/[email protected]=../theirmodule
$ go get example.com/[email protected]

참고: replace 지시문을 사용하면 Go 도구는 의존성 추가에서 설명한 대로 외부 모듈을 인증하지 않습니다.

버전 번호에 대한 자세한 내용은 Module version numbering을 참고하세요.

Go 1.18은 Go에 workspace 모드를 추가했는데, 이를 통해 여러 모듈을 동시에 작업할 수 있어요. Tutorial: Getting started with multi-module workspaces를 참고하세요.

자신의 저장소 포크에서 외부 모듈 코드 요구하기

외부 모듈의 저장소를 포크했다면(모듈 코드의 문제를 고치거나 기능을 추가하기 위해), Go 도구가 모듈 소스로 여러분의 포크를 사용하도록 할 수 있어요. 이는 여러분 코드에서 변경 사항을 테스트할 때 유용합니다. (모듈을 요구하는 코드와 같은 로컬 드라이브의 디렉터리에 있는 모듈 코드를 요구할 수도 있다는 점을 참고하세요. 자세한 내용은 로컬 디렉터리의 모듈 코드 요구하기 참고.)

이렇게 하려면 go.mod 파일의 replace 지시문을 사용해서 외부 모듈의 원래 모듈 경로를 저장소의 포크 경로로 교체하면 됩니다. 이렇게 하면 Go 도구가 컴파일할 때 교체된 경로(포크의 위치)를 사용하도록 지시하면서도, import 문은 원래 모듈 경로 그대로 두는 것이 가능해져요.

replace 지시문에 대한 자세한 내용은 go.mod 파일 레퍼런스를 참고하세요.

다음 go.mod 파일 예시에서, 현재 모듈은 외부 모듈 example.com/theirmodule을 요구합니다. replace 지시문은 그 원래 모듈 경로를 모듈 자체 저장소의 포크인 example.com/myfork/theirmodule로 교체해요.

module example.com/mymodule

go 1.23.0

require example.com/theirmodule v1.2.3

replace example.com/theirmodule v1.2.3 => example.com/myfork/theirmodule v1.2.3-fixed

require/replace 쌍을 설정할 때는 Go 도구 명령을 사용해서 파일이 표현하는 요구사항이 일관되게 유지되도록 하세요. go list 명령으로 현재 모듈이 사용 중인 버전을 확인하고, 그 다음 go mod edit 명령으로 요구 중인 모듈을 포크로 교체하세요:

$ go list -m example.com/theirmodule
example.com/theirmodule v1.2.3
$ go mod edit -replace=example.com/[email protected]=example.com/myfork/[email protected]

참고: replace 지시문을 사용하면 Go 도구는 의존성 추가에서 설명한 대로 외부 모듈을 인증하지 않습니다.

버전 번호에 대한 자세한 내용은 Module version numbering을 참고하세요.

저장소 식별자로 특정 커밋 가져오기

go get 명령으로 해당 저장소의 특정 커밋에 있는 미게시 모듈 코드를 추가할 수 있어요.

이렇게 하려면 go get 명령을 사용하면서, @ 기호로 원하는 코드를 지정하면 됩니다. go get을 사용하면 명령이 커밋에 대한 세부 정보를 바탕으로 한 의사 버전(pseudo-version) 번호를 사용해 외부 모듈을 요구하는 require 지시문을 go.mod 파일에 추가합니다.

몇 가지 예를 들어 볼게요. 소스가 git 저장소에 있는 모듈을 기준으로 한 것입니다.

  • 특정 커밋에서 모듈을 받으려면 @commithash 형태를 붙이세요:
$ go get example.com/theirmodule@4cf76c2
  • 특정 브랜치에서 모듈을 받으려면 @branchname 형태를 붙이세요:
$ go get example.com/theirmodule@bugfixes

의존성 제거하기

코드가 더 이상 모듈 안의 어떤 패키지도 사용하지 않는다면, 그 모듈을 의존성으로 추적하지 않도록 할 수 있어요.

사용하지 않는 모든 모듈의 추적을 중단하려면 go mod tidy 명령을 실행하세요. 이 명령은 모듈 안의 패키지를 빌드하는 데 필요한 빠진 의존성을 추가하기도 합니다.

$ go mod tidy

특정 의존성을 제거하려면 go get 명령을 사용해서 모듈 경로를 지정하고 @none을 붙이세요:

$ go get example.com/theirmodule@none

go get 명령은 제거된 모듈에 의존하는 다른 의존성도 다운그레이드하거나 제거합니다.

도구 의존성 (Tool dependencies)

도구 의존성은 Go로 작성되어 모듈 작업 시 사용하는 개발자 도구를 관리할 수 있게 해 줍니다. 예를 들어 stringergo generate와 함께 쓰거나, 변경 사항을 제출하기 전에 특정 린터(linter)나 포맷터(formatter)를 사용할 수 있어요.

Go 1.24 이상에서는 도구 의존성을 다음과 같이 추가할 수 있습니다:

$ go get -tool golang.org/x/tools/cmd/stringer

이 명령은 go.mod 파일에 tool 지시문을 추가하고 필요한 require 지시문이 있는지 확인합니다. 지시문이 추가되면 도구의 import 경로 마지막 비-주요-버전 구성요소를 go tool에 넘겨 도구를 실행할 수 있어요:

$ go tool stringer

여러 도구가 같은 마지막 경로 조각을 공유하거나, 그 경로 조각이 Go 배포판에 포함된 도구 중 하나와 일치하는 경우에는 전체 패키지 경로를 넘겨야 합니다:

$ go tool golang.org/x/tools/cmd/stringer

현재 사용 가능한 모든 도구 목록을 보려면 인자 없이 go tool을 실행하세요:

$ go tool

tool 지시문을 go.mod에 직접 추가할 수도 있지만, 도구를 정의하는 모듈에 대한 require 지시문이 있는지 확인해야 해요. 빠진 require 지시문을 추가하는 가장 쉬운 방법은 다음을 실행하는 것입니다:

$ go mod tidy

도구 의존성을 충족하는 데 필요한 요구사항은 모듈 그래프의 다른 요구사항처럼 동작합니다. 이들은 최소 버전 선택에 참여하며 require, replace, exclude 지시문을 존중합니다. 모듈 정리(pruning) 때문에, 도구 의존성을 가진 모듈에 의존할 때 그 도구 의존성만 채우기 위해 존재하는 요구사항은 대개 여러분 모듈의 요구사항이 되지 않아요.

tool 메타 패턴은 모든 도구에 대해 동시에 연산을 수행하는 방법을 제공합니다. 예를 들어 go get tool로 모든 도구를 업그레이드할 수 있는데, 이는 go get tool@upgrade와 동일하며, go install tool로 모두 $GOBIN에 설치할 수 있습니다.

Go 1.24 이전 버전에서는 빌드 제약으로 빌드에서 제외된 모듈 내 go 파일에 빈 import를 추가하는 방식으로 tool 지시문과 비슷한 효과를 낼 수 있어요. 이렇게 한다면 go run을 전체 패키지 경로와 함께 사용해 도구를 실행할 수 있습니다.

모듈 프록시 서버 지정하기

Go 도구로 모듈을 작업할 때, 도구는 기본적으로 proxy.golang.org(구글이 운영하는 공개 모듈 미러) 또는 모듈의 저장소에서 모듈을 직접 다운로드합니다. Go 도구가 대신 다른 프록시 서버를 사용해서 모듈을 다운로드·인증하도록 지정할 수 있어요.

여러분이나 여러분 팀이 다른 모듈 프록시 서버를 설정했거나 선택해서 그것을 쓰고 싶을 때 유용합니다. 예를 들어 일부는 의존성 사용 방식을 더 세밀하게 통제하기 위해 모듈 프록시 서버를 설정하기도 해요.

Go 도구가 사용할 다른 모듈 프록시 서버를 지정하려면 GOPROXY 환경 변수를 하나 이상의 서버 URL로 설정하세요. Go 도구는 지정한 순서대로 각 URL을 시도합니다. 기본적으로 GOPROXY는 공개된 Google 운영 모듈 프록시를 먼저 지정하고, 그다음 모듈의 저장소(모듈 경로에 지정된 대로)에서 직접 다운로드하도록 지정합니다:

GOPROXY="https://proxy.golang.org,direct"

다른 동작을 지원하는 값들을 포함해 GOPROXY 환경 변수에 대한 자세한 내용은 go 명령 레퍼런스를 참고하세요.

변수를 다른 모듈 프록시 서버의 URL로 설정할 수 있는데, URL을 쉼표 또는 파이프(|)로 구분합니다.

  • 쉼표를 사용하면, 현재 URL이 HTTP 404 또는 410을 반환할 때만 Go 도구가 목록의 다음 URL을 시도합니다.
GOPROXY="https://proxy.example.com,https://proxy2.example.com"
  • 파이프를 사용하면, Go 도구는 HTTP 에러 코드와 무관하게 목록의 다음 URL을 시도합니다.
GOPROXY="https://proxy.example.com|https://proxy2.example.com"

Go 모듈은 공개 인터넷에서 접근할 수 없는 버전 관리 서버와 모듈 프록시에서 개발·배포되는 경우가 많아요. GOPRIVATE 환경 변수를 설정해서 go 명령이 비공개 소스에서 모듈을 다운로드·빌드하도록 구성할 수 있습니다.

GOPRIVATE 또는 GONOPROXY 환경 변수는 비공개여서 어떤 프록시에도 요청하면 안 되는 모듈 접두어와 일치하는 glob 패턴 목록으로 설정할 수 있어요. 예를 들어:

GOPRIVATE=*.corp.example.com,*.research.example.com

더 알아보기 (Learn more)