본문 바로가기
컴퓨터

👨‍💻 [Golang] Golang 에서 패키지 또는 모듈을 관리하는 툴이 있나요?

by 밝음의기둥 2024. 11. 12.
반응형

👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

Golang 에서 패키지 또는 모듈을 관리하는 툴이 있는지 간략히 알아보았습니다.


질문 >

Golang 에서 패키지 또는 모듈을 관리하는 툴이 있나요?

답변 >

Go에서는 패키지와 모듈을 관리하기 위한 다양한 도구와 시스템이 존재합니다. 기본적으로는 go modules가 주요 관리 도구로 사용되며, 이 외에도 여러 서드파티 도구들이 개발자들 사이에서 사용되고 있습니다.

1. Go Modules (go.mod)

Go는 1.11 버전부터 Go Modules라는 기본적인 패키지 및 모듈 관리 시스템을 도입했습니다. 이를 통해 프로젝트의 의존성을 관리하고, 다양한 버전의 패키지를 사용할 수 있습니다. Go Modules는 Go의 표준 패키지 관리 방식으로 자리 잡았으며, 다른 외부 패키지 관리 도구를 사용하지 않아도 됩니다.

Go Modules 주요 파일 및 개념

  • go.mod: 프로젝트의 루트 디렉토리에 생성되며, 프로젝트의 모듈 이름과 의존성 목록을 정의합니다. 이 파일에는 패키지의 버전과 모듈 이름이 기록됩니다.
  • go.sum: 의존성 패키지들의 체크섬을 저장하는 파일로, 의존성의 무결성을 검증합니다.

Go Modules 사용법

  • 모듈 초기화:
  • 이 명령은 프로젝트 디렉토리에 go.mod 파일을 생성하며, <module_name>은 프로젝트의 이름을 의미합니다.
go mod init <module_name>

  • 의존성 추가: 코드에서 외부 패키지를 import하고 빌드나 테스트를 실행하면 Go는 자동으로 해당 의존성을 다운로드하고 go.mod와 go.sum 파일에 기록합니다.
go get <package_name>

  • 의존성 업데이트: 특정 버전의 패키지를 업데이트하려면 다음 명령어를 사용합니다.
go get <package_name>@<version>

  • 불필요한 의존성 정리: 사용하지 않는 패키지를 자동으로 제거하려면 다음과 같이 실행합니다.
go mod tidy

  • 의존성 리스트 확인: 현재 프로젝트의 의존성을 확인하려면 다음 명령어를 사용합니다.
go list -m all

2. Dep (Deprecated)

Dep는 과거에 Go의 패키지 관리 도구로 사용되었지만, Go Modules가 도입되면서 현재는 공식적으로 사용이 권장되지 않습니다. 기존에 Dep를 사용하던 프로젝트는 go mod init을 통해 Go Modules로 쉽게 전환할 수 있습니다.

3. Gopkg.in

Gopkg.in은 버전이 명확히 구분된 API를 사용하여 외부 패키지를 가져오는 방식을 지원하는 서비스입니다. 주로 안정적인 버전 관리를 위해 사용됩니다. 패키지의 버전별로 고유 URL을 제공하므로 특정 버전을 명확히 지정할 수 있습니다.

사용 예시

import "gopkg.in/yaml.v2"

Gopkg.in은 특정 패키지 버전을 명시적으로 관리할 수 있는 장점이 있지만, Go Modules가 도입되면서 사용 빈도는 줄어들고 있습니다.

4. GVM (Go Version Manager)

GVM은 Node.js의 nvm과 유사하게 여러 버전의 Go 언어 자체를 관리하는 도구입니다. 패키지나 모듈 관리를 직접적으로 담당하지는 않지만, 특정 프로젝트에 맞는 Go 버전을 관리하고 설치하는 데 유용합니다.

GVM 사용 예시

  • 설치:
curl -sSL <https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer> | bash
source ~/.gvm/scripts/gvm

  • Go 버전 설치:
gvm install go1.16
gvm use go1.16 --default

5. Go Workspaces (Multi-module Workspaces)

Go 1.18 버전부터 go workspaces 기능이 도입되어, 여러 모듈을 하나의 작업 공간에서 관리할 수 있습니다. 프로젝트가 여러 모듈로 구성되어 있을 때 편리하며, 대규모 프로젝트에서 모듈 간 의존성 관리를 간편하게 만들어 줍니다.

Go Workspaces 사용법

  • 워크스페이스 초기화:
go work init

  • 모듈 추가: 추가할 모듈의 경로를 지정하여 워크스페이스에 포함시킬 수 있습니다.
go work use ./module1 ./module2

6. Go Vendor

vendor 디렉토리는 프로젝트 내 의존성 파일을 로컬에 복사하여, 외부 네트워크 없이 의존성을 로컬에서 직접 관리할 수 있도록 합니다. 일반적으로 go mod vendor 명령을 사용하여 생성할 수 있으며, 이를 통해 의존성을 포함한 프로젝트를 배포할 수 있습니다.

Vendor 사용법

  • Vendor 디렉토리 생성:
go mod vendor

  • Vendor 사용하여 빌드: Go는 자동으로 vendor 디렉토리를 우선시하여 빌드하지만, 명시적으로 사용하려면 mod=vendor 옵션을 사용할 수 있습니다.
go build -mod=vendor

요약

  • Go Modules: 현재 Go에서 기본적으로 사용하는 패키지 및 모듈 관리 시스템으로, 버전 관리를 자동화하여 go.mod와 go.sum 파일을 통해 관리.
  • Dep: 과거 사용된 패키지 관리 도구로 현재는 Go Modules로 대체됨.
  • Gopkg.in: 버전별 패키지 관리를 지원하는 서비스로, Go Modules 도입 후 사용 빈도 감소.
  • GVM: 여러 버전의 Go를 관리하는 도구로, 프로젝트에 맞는 Go 버전 관리에 유용.
  • Go Workspaces: Go 1.18 이상에서 여러 모듈을 하나의 작업 공간에서 관리.
  • Go Vendor: 의존성을 로컬에 저장하여 네트워크 의존성을 없애는 방식으로, Go Modules와 함께 사용 가능.

현재는 Go Modules가 공식 표준이며, 대부분의 프로젝트에서 이 방법으로 패키지를 관리합니다.


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기주도학습을 목적으로 라이브 스트리밍을 합니다. 📢 1인 게임 개발을 목표로 Unreal과 Blender를 학습 중입니

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형