logo hsb.horse
← 블로그 목록으로 돌아가기

블로그

빌드 산출물에 포함된 의존성 분석하기

Go로 빌드한 바이너리에는 사용된 의존성과 빌드 설정 정보가 내장됩니다.

게시일: 수정일:

Go로 빌드한 바이너리에는 사용된 의존성과 빌드 설정 정보가 내장됩니다. go version -m 명령을 사용하면 소스 코드가 없어도 바이너리에서 해당 정보를 추출할 수 있습니다.

사용 목적

  • 운영 환경에서 실행 중인 바이너리의 의존성 확인
  • 취약한 라이브러리 포함 여부 점검
  • 빌드 설정(GOOS, GOARCH 등) 확인
  • 어떤 커밋에서 빌드되었는지 추적

사용 방법

Terminal window
go version -m <바이너리-경로>

출력 해석

출력은 여러 섹션으로 나뉩니다.

프리픽스의미
path모듈 import 경로
mod메인 모듈. (devel)은 로컬 빌드를 의미
dep의존 모듈. 버전과 체크섬 포함
build빌드 시 설정 및 VCS 정보

build 섹션의 주요 항목:

설명
-compiler사용한 컴파일러(보통 gc)
CGO_ENABLEDCGO 활성/비활성
GOOS / GOARCH타깃 OS / 아키텍처
vcs.revision빌드 원본 커밋 해시
vcs.time커밋 타임스탬프
vcs.modified빌드 시 미커밋 변경이 있었는지 여부

실행 예시

Terminal window
go version -m ./output
./output: go1.19
path github.com/mktbsh/output
mod github.com/mktbsh/output (devel)
dep github.com/aws/aws-lambda-go v1.34.1 h1:M3a/uFYBjii+...
dep github.com/labstack/echo/v4 v4.7.2 h1:Kv2/p8OaQ+M6...
...
build -compiler=gc
build CGO_ENABLED=0
build GOARCH=amd64
build GOOS=linux
build vcs.revision=39792fdacec6dc82b3f6335cb6b921c138f37625
build vcs.time=2022-08-18T08:50:08Z
build vcs.modified=true

이 예시에서는 Linux/amd64 타깃으로 빌드되었고, CGO는 비활성이며, 39792fd... 커밋 기반으로 빌드되었지만 미커밋 변경이 있었음(vcs.modified=true)을 알 수 있습니다.

관련 명령

  • go version - Go 버전 확인
  • go list -m all - 소스 코드 기준 의존성 목록 확인