본문 바로가기
Programming Language/Go

[2] Go mod - Go의 패키지 관리 시스템

by Riverandeye 2020. 9. 25.

처음 무작정 개발에 달려들었을 때 가장 어려웠던 부분이 패키지 관리였습니다. 

다른 언어처럼 임의의 폴더에서 실행파일 main.go 를 구성하고 프로젝트를 실행했는데

모듈이 import 되지 않아서 매우 답답했었습니다. 

아니 분명 저기 상대경로로 표시해줬는데 안된다고? (매우 속터짐)

 

처음에는 go get 을 이용해서 막무가내로 글로벌로 패키지를 설치했고

import path에 항상 full path를 제공해야 하기 때문에

아 원격지에 구성된 모듈을 매번 업데이트해야 하겠구나 라고 생각해서

매번 커밋하고 push하고 go get -u 패키지로 업데이트하고.. 그런 미련한 짓을 반복했었습니다.

 

알고보니 GOPATH를 매 개발하는 프로젝트에서 환경변수로 설정을 해야

해당 프로젝트 내에서 모듈을 찾을 수 있었던 것이지요. 

그런데 그건 go 1.11 이전의 프로젝트에 해당하고 

go 1.11 버전 이후부터는 go mod를 이용해서 개별 패키지의 dependency를 명시할 수 있습니다. 

 

현재 프로젝트를 모듈로 구성하기

독립적인 프로젝트 경로를 생성하기 위해 모듈의 이름을 github.com/<사용자>/<레포이름> 으로 구성합니다.

현재 저같은 경우, 이 경로가 프로젝트의 경로가 되므로

모듈의 이름을 github.com/kucc/20-2.Backend-Session-2/riverandeye/로 구성합니다. 

 

프로젝트의 최상위에 go mod init <모듈 이름> 으로 모듈을 초기화합니다.

모듈을 초기화하면 해당 폴더에 go.mod 파일이 생성됩니다. 

 

모듈 초기화

현재 구성된 파일에 이미 작업중인 코드가 있는 경우, 외부 라이브러리를 import 했을 것입니다.

사용하고 있는 라이브러리를 모듈에 추가하기 위해

go mod tidy 명령어를 사용합니다. 

 

오류 메세지는 무시해주세요 ㅎㅅㅎ..

go mod tidy 를 수행한 후 go.mod 파일을 확인하면 다음과 같이 dependency가 설정된 것을 확인할 수 있습니다.

 

dependency 확인

이제 해당 모듈을 base 경로로 하여 로컬에 작성한 다른 패키지를 import 할 수 있습니다. 

예를 들어, 현재 프로젝트 구조가 다음과 같다고 가정합니다. 

 

프로젝트 구조

main.go 에서 models.go에 정의된 models 패키지의 Setup 메소드를 사용하기 위해선 다음과 같이 import 합니다. 

 

<modules 이름>/<상대경로> 으로 import 하기

module 이름이 github.com/kucc/20-2.Backend-Session-2/riverandeye/ 이고

해당 폴더 내에 models 폴더(패키지)를 이용하는 것이므로 다음과 같이 import 가 됩니다.

pkg/setting은 pkg폴더의 setting 폴더(패키지)를 이용하는 것이므로 다음과 같이 import 됩니다.

 

이렇게 go mod 를 이용하면 현재 내 프로젝트 내에 정의된 모듈을 사용할 수 있고,

프로젝트에 사용되는 외부 의존성들을 관리할 수 있습니다. 

dependency를 지정하는 등등의 것들은 필요할 때마다 족족 업데이트하겠습니다. 

 

Reference

blog.golang.org/using-go-modules

'Programming Language > Go' 카테고리의 다른 글

[4] Go yaml - yaml 파일을 Go로 쉽게 읽기  (0) 2020.10.03
[3] Go 웹 프레임워크 Gin  (0) 2020.10.03
[1] Golang 개념 및 기초  (4) 2020.08.20

댓글