[Go 공식문서 한국어 정리] ⓪18. Go Modules 게시하기
[Go 공식문서 한국어 정리] ⓪18. Go Modules 게시하기
원문 제목: Publishing Go Modules
작성자: Tyler Bui-Palsulich
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Go 모듈을 작성한 후 다른 사람이 의존할 수 있도록 게시하는 방법을 설명합니다.
Git 태그를 사용한 시맨틱 버저닝과 v0, v1 릴리스 프로세스를 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 2. 핵심 개념
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 시맨틱 버저닝
vMAJOR.MINOR.PATCH 형태의 버전입니다.
MAJOR: 하위 호환성이 깨지는 변경
MINOR: 하위 호환되는 API 추가
PATCH: 버그 수정
② v0 — 초기 불안정 버전
안정성 보장 없이 API를 개선할 수 있는 단계입니다.
모든 프로젝트는 v0부터 시작하는 것이 좋습니다.
③ v1 — 첫 안정 버전
API가 안정적임을 보장합니다.
하위 호환성을 유지해야 하며, 기존 함수 시그니처 변경이나 타입 제거는 불가능합니다.
④ 의사 버전(Pseudo-version)
태그가 없는 커밋에 대해 v0.0.0-타임스탬프-커밋해시 형태로 자동 생성됩니다.
안정적이지 않으므로 실제 릴리스 태그를 사용하는 것이 좋습니다.
⑤ 버전 태그 관리
태그를 삭제하거나 덮어쓰지 말아야 합니다.
버그가 있으면 새 버전을 릴리스해야 합니다.
모듈 미러와 체크섬 데이터베이스가 버전의 재현성을 보장합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
릴리스 전 go mod tidy와 go test ./...를 실행합니다.
git tag v0.1.0 && git push origin v0.1.0으로 버전을 게시합니다.
v0에서 공개 API를 추가하거나 하위 호환성을 깨는 변경을 하면 MINOR를 증가시킵니다.
버그를 수정하면 PATCH를 증가시킵니다.
v1.0.0을 릴리스하면 API가 고정됩니다.
strings.Replace와 ReplaceAll의 사례처럼, 기존 API를 변경할 수 없으면 새 함수를 추가합니다.
불완전한 API라도 기존 코드를 깨뜨리는 것보다 낫습니다.
Go 모듈 프록시(Go 1.13부터 기본)를 사용하면 새 버전이 즉시 반영되지 않을 수 있습니다.
몇 분 기다린 후 다시 시도하면 됩니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 4. 실전 활용 / 예시
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
라이브러리를 공개할 때는 LICENSE 파일을 포함해야 합니다.
CI/CD 파이프라인에서 자동으로 git 태그를 생성하고 푸시하도록 설정할 수 있습니다.
v1 릴리스 후에는 하위 호환성 유지가 필수이므로 API 설계에 신중해야 합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Go 모듈 게시는 git 태그와 시맨틱 버저닝으로 이루어집니다.
v0에서 API를 다듬고, v1에서 안정성을 약속합니다.
태그를 절대 삭제하거나 수정하지 말고, 문제가 있으면 새 버전을 릴리스해야 합니다.
📎 출처 링크
https://go.dev/blog/publishing-go-modules
#Go #Golang #modules #publishing #semver #공식문서

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