Go 코드를 GitHub에 종속시키지 말자
원제 Don't couple your Go code to GitHub
123 포인트댓글 58
Key Point
Go의 import 경로 설계가 호스팅 제공자에 대한 강한 종속성을 만들어 플랫폼 이전 시 상당한 비용을 초래하는데, 커스텀 도메인으로 이를 완전히 차단할 수 있기 때문이다.
핵심 요약
- Go는 import 경로에 코드 위치를 포함하는 방식으로 라이브러리를 관리하므로, github.com/user/repo 형태의 주소가 곧 import 경로가 된다.
- 이 방식의 문제점은 코드가 호스팅 제공자에 직접 종속되어 GitLab이나 Azure DevOps로 이전하면 모든 import 경로를 수정해야 한다는 것이다.
- 저자가 경험한 회사는 세 가지 플랫폼을 동시에 운영해야 할 정도로 마이그레이션 비용이 커서 결국 세 서비스 비용을 중복으로 지불했다.
- 해결책은 go.iain.rocks, go.uber.org, go.mongodb.org 같은 커스텀 도메인을 사용하는 것이다.
- 커스텀 도메인은 내부적으로 현재 호스팅 서비스를 가리키므로, 플랫폼을 옮겨도 사용자 입장에서는 import 경로가 바뀌지 않는다.
- 설정 방법은 Nginx에서 go-get 쿼리 파라미터를 체크하여 Go 도구 요청에는 메타데이터를 담은 HTML을 반환하고, 일반 브라우저 접근은 GitHub 리포지토리로 리다이렉트하는 것이다.
- 메타데이터는 go-import와 go-source 태그로 실제 git 저장소 위치와 소스 코드 웹 인터페이스 주소를 명시한다.
- 저자는 상용 Go 개발팀이라면 내부 라이브러리에 커스텀 도메인을 사용하여 불필요한 호스팅 제공자 종속성을 피할 것을 권장한다.