InfoGrab DocsInfoGrab Docs

Go의 의존성 관리

Go의 소스 기반 의존성 관리 방식, 모듈 버전 관리, 패키지 페치, 체크섬 및 프록시 설정 방법을 설명합니다.

Go는 아티팩트(artifact) 기반이 아닌 소스 기반의 방식으로 의존성을 관리하는 독특한 접근 방식을 사용합니다. 아티팩트 기반 의존성 관리 시스템에서는 패키지가 소스 코드로부터 생성된 아티팩트로 구성되며, 소스 코드와는 별도의 리포지터리 시스템에 저장됩니다. 예를 들어, 많은 NodeJS 패키지는 패키지 리포지터리로 npmjs.org 를, 소스 리포지터리로 github.com 을 사용합니다. 반면 Go의 패키지는 소스 코드 자체이며, 패키지를 릴리즈하더라도 아티팩트 생성이나 별도의 리포지터리가 필요하지 않습니다. Go 패키지는 VCS 서버의 버전 관리 리포지터리에 저장되어야 합니다. 의존성은 해당 VCS 서버에서 직접 가져오거나, VCS 서버에서 직접 페치하는 중간 프록시를 통해 가져옵니다. 버전 관리 # Go 1.11에서는 모듈과 일급(first-class) 패키지 버전 관리 기능이 Go 생태계에 도입되었습니다. 이전에는 Go에 버전 관리를 위한 명확한 메커니즘이 없었습니다. 서드파티 버전 관리 도구가 존재하기는 했지만, 기본 Go 환경에는 버전 관리 기능이 지원되지 않았습니다. Go 모듈은 시맨틱 버전 관리(semantic versioning) 를 사용합니다. 모듈의 버전은 v 를 접두사로 붙인 유효한 시맨틱 버전인 VCS(버전 관리 시스템) 태그로 정의됩니다. 예를 들어, gitlab.com/my/project 의 1.0.0 버전을 릴리즈하려면 개발자가 Git 태그 v1.0.0 을 생성해야 합니다. 0과 1이 아닌 주요(major) 버전의 경우, 모듈 이름 뒤에 /vX 를 붙여야 하며, 여기서 X는 주요 버전입니다. 예를 들어, gitlab.com/my/project 의 v2.0.0 버전은 gitlab.com/my/project/v2 로 명명하고 임포트해야 합니다. Go는 특정 VCS 커밋을 참조하는 특별한 시맨틱 버전인 '유사 버전(pseudo-versions)'을 사용합니다. 시맨틱 버전의 프리릴리즈 컴포넌트는 타임스탬프와 커밋 식별자의 첫 12자로 끝나야 합니다: vX.0.0-yyyymmddhhmmss-abcdefabcdef : X에 대한 이전 태그된 커밋이 없는 경우. vX.Y.Z-pre.0.yyyymmddhhmmss-abcdefabcdef : 가장 최근의 이전 태그가 vX.Y.Z-pre인 경우. vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdefabcdef : 가장 최근의 이전 태그가 vX.Y.Z인 경우. VCS 태그가 이러한 패턴 중 하나와 일치하면 무시됩니다. Go 모듈과 버전 관리에 대한 완전한 이해를 위해 공식 Go 웹사이트의 블로그 포스트 시리즈 를 참고하세요. '모듈(Module)'과 '패키지(Package)' # 패키지는 *.go 파일을 담고 있는 폴더입니다. 모듈은 go.mod 파일을 담고 있는 폴더입니다. 모듈은 보통 패키지이기도 합니다. 즉, go.mod 파일과 *.go 파일을 모두 담고 있는 폴더입니다. 모듈에는 하위 디렉터리가 있을 수 있으며, 이 하위 디렉터리들도 패키지가 될 수 있습