[Go 공식문서 한국어 정리] ⓪20. Go Modules 사용하기
[Go 공식문서 한국어 정리] ⓪20. Go Modules 사용하기
원문 제목: Using Go Modules
작성자: Tyler Bui-Palsulich; Eno Compton
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Go 1.11부터 도입된 모듈 시스템은 의존성 관리의 새로운 표준입니다.
이 문서는 모듈 생성, 의존성 추가, 업그레이드, 메이저 버전 전환, 정리 등 기본 작업을 설명합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 2. 핵심 개념
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 모듈 생성
go mod init으로 go.mod 파일을 생성합니다.
모듈 경로는 루트 디렉토리의 import 경로입니다.
② 의존성 추가
새로운 import를 추가하면 go test나 go build 시 자동으로 최신 버전을 다운로드합니다.
go.mod에 직접 의존성만 기록되고, 전이적 의존성은 // indirect 주석과 함께 기록됩니다.
③ go.sum
각 모듈 버전의 암호화 체크섬을 저장하여 재현성을 보장합니다.
버전 관리에 반드시 포함해야 합니다.
④ 의존성 업그레이드
go get으로 최신 버전을 가져옵니다.
go get module@version으로 특정 버전을 지정할 수 있습니다.
⑤ 메이저 버전
v2 이상은 모듈 경로에 /v2, /v3 등의 접미사가 필요합니다.
이를 시맨틱 import versioning이라고 합니다.
⑥ 정리
go mod tidy로 사용하지 않는 의존성을 제거합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
go mod init example.com/hello로 모듈을 초기화합니다.
서브디렉토리는 모듈 경로 + 서브디렉토리 경로가 자동으로 import 경로가 됩니다.
새로운 패키지를 import하면 go 명령이 자동으로 최신 버전을 찾아 다운로드합니다.
가장 최신의 안정 태그 > 최신 프리릴리즈 태그 > 최신 태그 없는 버전 순으로 선택됩니다.
go list -m all로 현재 모듈과 모든 의존성을 확인할 수 있습니다.
go get golang.org/x/text로 업그레이드할 수 있습니다.
호환되지 않는 최신 버전이 선택되면 go get module@version으로 특정 버전을 고정할 수 있습니다.
rsc.io/quote/v3를 import하면 모듈 경로에 /v3가 포함됩니다.
동일한 모듈의 서로 다른 메이저 버전은 다른 모듈 경로로 취급됩니다.
따라서 v1과 v3를 동시에 사용할 수 있습니다.
사용하지 않는 의존성은 go mod tidy로 제거합니다.
go build나 go test는 부족한 것을 추가할 수 있지만, 안전하게 제거할 수는 없습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 4. 실전 활용 / 예시
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
새 프로젝트는 go mod init으로 시작합니다.
go.mod와 go.sum을 버전 관리에 포함합니다.
CI/CD에서 go mod download로 의존성을 미리 캐싱합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Go Modules는 의존성 관리의 미래입니다.
go mod init, go get, go mod tidy 세 가지 명령으로 대부분의 작업을 처리할 수 있습니다.
시맨틱 버저닝과 go.sum으로 안정적이고 재현 가능한 빌드를 보장합니다.
📎 출처 링크
https://go.dev/blog/using-go-modules
#Go #Golang #modules #dependency #공식문서

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