[Go 공식문서 한국어 정리] ③3⑩. Go 모뒬 참조
Go 모뒬 참조 (Go Modules Reference)
https://go.dev/ref/mod
Go 모뒬은 Go가 의존성을 관리하는 방법입니다. 한 번의 릴리스, 버전 관리, 배포가 함께 이루어지는 패키지의 집합이며, go.mod 파일로 정의됩니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 서론
모뒬은 버전 관리 시스템(VCS) 또는 모뒬 프록시 서버로부터 바로 다운로드할 수 있습니다. 모뒬 경로(module path)는 모뒬의 고유한 이름이며, 패키지 경로의 접두사입니다.
② 핵심 개념
1. 모뒬 경로: 저장소 루트 경로 + 서브디렉토리 + 메이저 버전 접미사(/v2)로 구성됩니다.
2. 센망틱 버전(Semantic Versioning): vMajor.Minor.Patch 형태로, 하위 호환 변경=minor, 상위 호환 변경=major 증가를 의미합니다.
3. 의사 버전(Pseudo-version): 시망틱 버전 태그가 없는 커밋을 위해 vX.0.0-yyyymmddhhmmss-abcdefabcdef 형태를 사용합니다.
4. 메이저 버전 접미사: v2 이상부터 모뒬 경로에 /v2를 붙여 임포트 호환성 규칙을 지콥니다.
5. 최소 버전 선택(MVS): 의존성 그래프를 순회하며 각 모뒬의 최고 요구 버전을 선택합니다.
③ 주요 내용 상세
go.mod 파일 구성
- module: 모뒬 경로를 선언합니다. 한 파일에 하나의 module 지시문이 있어야 합니다.
- go: 해당 모뒬에 필요한 최소 Go 버전을 지정합니다. Go 1.21부터 의무화되었습니다.
- toolchain: 권장 툴체인을 선언합니다. go 지시문보다 높은 버전은 안 돼야 합니다.
- require: 의존하는 모뒬의 최소 버전을 지정합니다. // indirect는 주 모뒬의 패키지가 직접 임포트하지 않음을 의미합니다.
- replace: 특정 모뒬 버전을 다른 경로(로컬 또는 다른 모뒬)의 콘텐츠로 대체합니다.
- exclude: 특정 모뒬 버전을 모뒬 그래프에서 제외합니다.
- retract: 특정 버전이나 범위의 버전을 사용하지 마셔야 함을 알립니다. Go 1.16에서 추가되었습니다.
- godebug: GODEBUG 설정을 선언해 주 모뒬의 컴파일 시 적용됩니다.
- tool: Go 1.24부터 설정되며, go tool로 실행할 수 있는 도구 패키지를 정의합니다.
- ignore: 패키지 패턴 매칭 시 특정 디렉토리를 무시합니다.
최소 버전 선택(MVS)
의존성 그래프를 순회하며 각 모뒬의 최고 요구 버전을 추적합니다. 순회가 끝나면 선택된 최고 버전들이 빌드 목록(build list)을 형성합니다. MVS는 결정적이며, 새 버전이 나와도 빌드 목록은 변하지 않습니다.
모뒬 그래프 가지치기(Module Graph Pruning)
Go 1.17부터 go.mod에 모든 간접 의존성을 명시적으로 기록하면, go 1.17+ 모뒬의 전이 의존성은 그래프에서 제거될 수 있습니다. 이는 모뒬 그래프 크기를 줄이고 속도를 높입니다.
④ 실전 활용
- go get: 의존성을 추가, 업그레이드, 다운그레이드할 때 사용합니다. @latest, @v1.2.3, @none으로 버전을 지정할 수 있습니다.
- go mod tidy: 필요한 의존성을 추가하고 불필요한 것을 제거해 go.mod과 go.sum을 정리합니다.
- go mod vendor: 의존성을 vendor/ 디렉토리에 복사해 오프라인 빌드를 가능하게 합니다.
- GOPROXY: 모뒬 프록시 서버를 지정합니다. 기본값은 https://proxy.golang.org,direct입니다.
- GOPRIVATE/GONOPROXY: 사설 모뒬의 경우 프록시를 거쳐 직접 VCS에서 받아옵니다.
⑤ 정리
Go 모뒬은 패키지 관리의 표준이 되었으며, go.mod의 여러 지시문을 이해하면 모뒬 의존성을 효율적으로 관리할 수 있습니다. MVS와 모뒬 그래프 가지치기를 이해하면 더 가벼운 빌드를 생성할 수 있습니다.
#Go #Golang #Modules #go.mod #MVS #의존성관리 #버전관리 #공식문서

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30