1. Go Modules란?
Go Modules는 Go 언어의 패키지 및 의존성을 관리하기 위한 시스템입니다. Go 1.11에서 처음 도입되었으며, Go 1.13부터는 기본적으로 활성화되어 있습니다. Go modules는 이전의 GOPATH를 사용한 의존성 관리 방식보다 더 유연하고 명확한 구조를 제공합니다.
Go Modules의 주요 장점
- 의존성 관리 자동화: 외부 패키지나 라이브러리의 버전을 쉽게 관리할 수 있습니다.
- 버전 관리: 특정 버전의 패키지를 명시적으로 사용할 수 있으며, 업데이트도 편리합니다.
- 의존성 분리: 프로젝트별로 의존성을 분리하여 관리할 수 있습니다.
2. go mod의 주요 명령어
- go mod init
프로젝트 디렉터리에서 go mod init 명령어를 사용하면 해당 디렉터리에 새로운 go.mod 파일이 생성됩니다. 이 파일은 현재 프로젝트의 모듈 정보와 의존성을 관리합니다.
go mod init example.com/myproject
위 명령어는 example.com/myproject라는 이름의 모듈을 초기화합니다. go.mod 파일에는 모듈 이름과 Go 버전 등의 정보가 포함됩니다.
- go mod tidy
go mod tidy는 프로젝트에서 사용 중인 모든 의존성을 정리하는 명령어입니다. 사용되지 않는 패키지를 go.mod와 go.sum 파일에서 제거하고, 필요한 의존성을 추가합니다.
go mod tidy
- go mod download
이 명령어는 go.mod에 정의된 모든 의존성을 다운로드합니다. 네트워크를 통해 외부 패키지를 가져와서 로컬 캐시에 저장합니다.
go mod download
go mod vendor
- go mod graph
go mod graph는 현재 프로젝트의 의존성 그래프를 시각적으로 확인할 수 있는 명령어입니다. 이 명령어를 통해 각 패키지가 어떤 의존성 관계를 가지고 있는지 파악할 수 있습니다.
go mod graph
3. Go Modules의 파일
- go.mod 파일
go.mod 파일은 프로젝트의 모듈 정보를 담고 있습니다. 이 파일에는 다음과 같은 정보들이 포함됩니다.
module example.com/myproject
go 1.20
require (
github.com/gin-gonic/gin v1.7.7
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5
)
- module: 모듈의 이름을 정의합니다.
- go: 사용하는 Go의 버전을 명시합니다.
- require: 프로젝트에서 사용하는 외부 패키지와 그 버전을 나열합니다.
- go.sum 파일
go.sum 파일은 의존성에 대한 해시값을 저장하여 의존성의 무결성을 보장합니다. go mod tidy나 go mod download 등의 명령어를 실행할 때 자동으로 생성되며, 이를 통해 외부 패키지가 변조되지 않았음을 확인할 수 있습니다.
4. 모듈 버전 관리
Go Modules에서는 버전 관리가 매우 중요합니다. Go는 **Semantic Versioning(시맨틱 버전 관리)**를 따르며, 주로 vX.Y.Z 형식으로 버전이 명시됩니다.
- X (Major): 호환되지 않는 API 변경
- Y (Minor): 새로운 기능 추가 (하위 호환 가능)
- Z (Patch): 버그 수정
모듈 업데이트는 go get 명령어로 수행할 수 있습니다.
go get example.com/myproject@v1.2.3
5. 모듈 버전 충돌 해결
Go Modules는 동일한 패키지의 여러 버전을 동시에 사용하는 것을 허용하지 않습니다. 따라서 패키지 간 버전 충돌이 발생하면, 프로젝트가 정상적으로 빌드되지 않을 수 있습니다. 이때 go mod tidy 명령어를 사용하여 충돌을 해결하거나, 수동으로 go.mod 파일을 수정해 해결할 수 있습니다.
'IT > Golang' 카테고리의 다른 글
Golang Vs PHP (4) | 2024.11.04 |
---|---|
Go 구조체(struct) (0) | 2024.03.13 |
Go 패키지 (1) | 2024.03.13 |
Go Map (0) | 2024.03.13 |
Go 슬라이스(slice) (2) | 2024.03.13 |