go mod, 종속성 관리

독수리박박·2023년 9월 1일
0
post-thumbnail

go mod란?


이런식으로 go 프로젝트를 생성했다면 이제 종속성 관리나 코드의 실행 및 테스트를 위해 $GOPATH 디렉토리에 코드를 배치해야 한다.

이런 제약을 없애기 위해 go는 '모듈' 이라는 개념을 도입했다. 모듈은 함께 버전이 지정된 관련 패키지 모음으로, 코드베이스에 필요한 모든 종속성을 제공한다.

이 새로운 시스템은 보다 유연한 프로젝트 구조를 가능하게 하여 다른 리포지토리 간에 전환할 때 Go 프로젝트에서 작업하기가 더 쉽게 만들어 준다. 그리고 편리하게 직,간접적인 종속성의 관리를 쉽게 만들어준다.


go module 설정(초기화)

go mod init

프로젝트의 루트 폴더에서 go mod init {examle.com}/{username}/{repo}를 통해 프로젝트 설정이 가능하다.

go mod init 명령어를 실행하게 된다면 이렇게 go.mod 파일이 생성이 된다.


종속성 관리

프로젝트를 하다 보면 여러가지 외부 종속성을 가져오기 업데이트하고 필요없는 패키지들을 삭제해야 하는 경우들이 있다.

아래 코드에서는 아직 종속성을 가져오지 않았기 떄문에 에러가 발생한다.

go get

go get {package} 통해서 필요한 패키지들을 가져올 수 있다. 맨뒤에 @v{version number}를 추가하면 특정 버젼을 지정해서 가져올 수 있다. 만약 특정 버젼에서 주 패치나 부 패치를 가져오고 싶다면 ^(캐럿)까지 붙여줘서 가져올 수 있다.

이런식으로 go get을 통해 필요한 패키지를 가져왔다.

rsc.io/quote는 직접적인 종속성이고 나머지 text와 sampler는 간접적인 종속성이다.
https://pkg.go.dev/ 에서 패키지명으로 검색을 통해 확인할 수 있다.

필요한 패키지를 가져왔기 때문에 test를 진행해보면 test가 성공한걸 확인할 수 있다.


go list -m

go list -m all은 위와 같이 현재 해당 디렉토리 폴더의 직,간접적인 종속성들을 확인할 수 있다.

go list -m -versions {package}은 해당 패키지의 모든 버젼을 확인할 수 있고 확인 후 go get을 통해서 특정 버젼의 패키지를 다운로드 할 수 있다.


go sum

go.mod와 같이 생성되는 go.sum 파일이 있다. 이 파일은 종속성을 설치하면 자동으로 생성된다. 체크섬을 유지하여 다음에 프로젝트를 실행시켜도 다시 필요한 것들을 설치할 필요가 없게 만들어 준다.

go mod tidy

만약 우리가 go mod에서 종속성을 업데이트하게 된다면 체크섬을 업데이트하기 위해서 go mod tidy를 실행시켜주어야 한다.


간단하게 go의 핵심인 mod와 종속성관리에 대해 알아보았다. 문법과 같은 부분을 공부하기 전에 환경설정이나 패키지관리들에 대한 공부의 필요성을 프로젝트를 하면서 느꼈기 때문에 절대로 쉽게 넘어가서는 안될 부분인거 같다.

0개의 댓글