[Go 공식문서 한국어 정리] ⑤1. Go 모듈 게시하기
Go 모듈 게시하기
https://go.dev/blog/publishing-go-modules
Go 모듈을 작성하여 다른 프로젝트가 의존할 수 있도록 게시하는 방법을 설명합니다. 시맨틱 버저닝과 v0/v1 릴리스 전략을 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 서론
Go 모듈은 시맨틱 버저닝(Semantic Versioning)을 사용하여 버전을 관리합니다. go.mod의 require 지시문에는 각 의존성의 최소 버전이 명시되어 있으며, 이 버전은 Git 태그로 관리됩니다.
② 핵심 개념
1. 시맨틱 버저닝: vMAJOR.MINOR.PATCH 형태입니다.
2. MAJOR: 하위 호환 불가능한 API 변경 시 증가합니다.
3. MINOR: 하위 호환 가능한 기능 추가 시 증가합니다.
4. PATCH: 버그 수정 시 증가합니다.
5. v0: 초기 불안정 버전으로, API 변경이 자유롭습니다.
6. v1: 첫 안정 버전으로, 하위 호환성을 보장합니다.
③ 주요 내용 상세
게시 절차
$ go mod tidy
$ go test ./...
$ git add go.mod go.sum
$ git commit -m "changes for v0.1.0"
$ git tag v0.1.0
$ git push origin v0.1.0
모듈 프록시(기본값)를 사용하면 태그 푸시 후 몇 분 내에 사용 가능해집니다.
v0 릴리스
- 대부분의 프로젝트는 v0부터 시작합니다.
- API가 안정되지 않았음을 의미합니다.
- 기능 추가/변경 시 MINOR를, 버그 수정 시 PATCH를 증가시킵니다.
- 예: v0.1.0 → v0.2.0(기능 추가) → v0.2.1(버그 수정)
v1 릴리스
- API가 완전히 안정되었다고 확신할 때 v1.0.0을 게시합니다.
- v1 이후에는 하위 호환 불가능한 변경을 할 수 없습니다.
- 새 기능은 MINOR로, 버그 수정은 PATCH로 릴리스합니다.
- strings.Replace → strings.ReplaceAll 사례: 기존 Replace를 깨뜨리지 않고 ReplaceAll을 추가했습니다.
주의사항
- 버전 태그를 삭제하지 마세요. 의존하는 사람의 빌드가 깨질 수 있습니다.
- 한 번 릴리스한 버전을 변경하거나 덮어쓰지 마세요.
- 모듈 미러와 체크섬 데이터베이스가 버전의 암호학적 해시를 저장하여 재현 가능한 빌드를 보장합니다.
- 지속적으로 새 버전을 태그해야 합니다. 그렇지 않으면 사용자가 오래된 버전을 받게 됩니다.
의사 버전(Pseudo-version)
- 태그가 없는 커밋에 대해 v0.0.0-타임스탬프-커밋해시 형태로 자동 생성됩니다.
- 개발 중이나 긴급 패치 시 사용할 수 있지만, 안정적인 API를 보장하지 않습니다.
- 가능한 한 명시적인 버전 태그를 사용하세요.
④ 실전 활용
- LICENSE 파일을 포함하여 게시하세요.
- go mod tidy로 불필요한 의존성을 제거한 후 게시하세요.
- go test ./...로 모든 테스트가 통과하는지 확인하세요.
- 버그나 보안 이슈가 발견되면 새 PATCH 버전을 릴리스하세요.
- API가 불완전하더라도 하위 호환성을 깨는 것보다는 새 함수를 추가하세요.
⑤ 정리
Go 모듈 게시는 간단합니다. go mod tidy와 go test로 준비한 후 git tag로 버전을 표시하고 푸시하면 됩니다. v0에서 API를 안정화한 후 v1.0.0을 게시하고, 이후에는 하위 호환성을 유지하며 MINOR/PATCH 버전을 올리세요. 시맨틱 버저닝을 따륍면 사용자가 안심하고 의존할 수 있습니다.
#Go #Golang #Modules #모듈게시 #시맨틱버저닝 #SemanticVersioning #v0 #v1 #공식문서

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