Alert

์ด ๊ธ€์€ Claude Code์˜ ๋„์›€์„ ๋ฐ›์•„ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

TL;DR

  • macOS์—์„œ brew install go๋กœ ์„ค์น˜ํ•˜๊ณ  GOPATH/bin์„ PATH์— ์ถ”๊ฐ€ํ•˜๋ฉด ์ค€๋น„ ์™„๋ฃŒ
  • go run์€ ํ…Œ์ŠคํŠธ์šฉ ์ž„์‹œ ์‹คํ–‰, go build๋Š” ๋ฐฐํฌ์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ƒ์„ฑ
  • go install์€ pipx install์— ๊ฐ€๊นŒ์šด ๊ฐœ๋…์ด๊ณ , go get์ด pip install์— ํ•ด๋‹น
  • Go๋Š” go fmt๊ฐ€ ์‚ฌ์‹ค์ƒ ๊ฐ•์ œ๋ผ ํฌ๋งคํŒ… ๋…ผ์Ÿ์ด ์—†์Œ
  • ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์‹œ go mod init์œผ๋กœ ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™” ํ•„์ˆ˜

์ด ์‹œ๋ฆฌ์ฆˆ์— ๋Œ€ํ•˜์—ฌ

Jon Bodner์˜ Learning Go๋ฅผ ์ฝ๊ณ  ์ •๋ฆฌํ•œ Go ์ž…๋ฌธ ์‹œ๋ฆฌ์ฆˆ๋‹ค. Python์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ Go๋ฅผ ์ฒ˜์Œ ๋งŒ๋‚ฌ์„ ๋•Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ, ๋‘ ์–ธ์–ด๋ฅผ ๋น„๊ตํ•ด ๊ฐ€๋ฉฐ ๊ฐœ๋…์„ ํ’€์–ด๋‚ธ๋‹ค.


1. ์„ค์น˜์™€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

macOS ๊ธฐ์ค€์œผ๋กœ Homebrew๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๋‹ค.

brew install go
go version
# go version go1.24.2 darwin/arm64

Go๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋‘ ๊ฐ€์ง€ ๊ฒฝ๋กœ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.

  • GOROOT : Go ์ž์ฒด๊ฐ€ ์„ค์น˜๋œ ๊ฒฝ๋กœ (๋ณดํ†ต ๊ฑด๋“œ๋ฆด ์ผ ์—†์Œ)
  • GOPATH : Go๊ฐ€ ์™ธ๋ถ€ ํŒจํ‚ค์ง€์™€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ

GOPATH์˜ ๊ธฐ๋ณธ๊ฐ’์€ ~/go์ด๊ณ , go install๋กœ ์„ค์น˜ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ $GOPATH/bin์— ๋“ค์–ด๊ฐ„๋‹ค. ์ด ๊ฒฝ๋กœ๋ฅผ PATH์— ์ถ”๊ฐ€ํ•ด์•ผ ์„ค์น˜ํ•œ ๋„๊ตฌ๋ฅผ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

# ~/.zshrc ๋˜๋Š” ~/.bashrc์— ์ถ”๊ฐ€
export GOPATH="$HOME/go"
export PATH="$GOPATH/bin:$PATH"

ํ˜„์žฌ ์„ค์ •์„ ํ™•์ธํ•˜๋ ค๋ฉด go env๋ฅผ ์“ฐ๋ฉด ๋œ๋‹ค.

go env          # ์ „์ฒด ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ถœ๋ ฅ
go env GOPATH   # ํŠน์ • ๋ณ€์ˆ˜๋งŒ ํ™•์ธ
go env GOROOT

Python๊ณผ์˜ ์ฐจ์ด

Python์€ sys.prefix, site-packages ๊ฐ™์€ ๊ฒฝ๋กœ๊ฐ€ ๊ฐ€์ƒํ™˜๊ฒฝ๋งˆ๋‹ค ๋‹ฌ๋ผ์ง€์ง€๋งŒ, Go๋Š” GOPATH ํ•˜๋‚˜๋กœ ๊ธ€๋กœ๋ฒŒํ•˜๊ฒŒ ๊ด€๋ฆฌ๋œ๋‹ค. ํ”„๋กœ์ ํŠธ๋ณ„ ์˜์กด์„ฑ ๊ฒฉ๋ฆฌ๋Š” Go ๋ชจ๋“ˆ(go.mod)์ด ๋‹ด๋‹นํ•œ๋‹ค.


2. ์‹คํ–‰ ๋ฐฉ์‹ โ€” go run vs go build

Python์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ฝ์–ด์„œ ์‹คํ–‰ํ•œ๋‹ค. Go๋Š” ์ปดํŒŒ์ผ ์–ธ์–ด๋ผ์„œ ๋ฐ˜๋“œ์‹œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“  ๋’ค ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋‹ค. ๋‹ค๋งŒ go run์ด ์ด ๊ณผ์ •์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•ด ์ค€๋‹ค.

go run โ€” ํ…Œ์ŠคํŠธ์šฉ ์‹คํ–‰

go run main.go

๋‚ด๋ถ€์ ์œผ๋กœ ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ , ์‹คํ–‰ํ•˜๊ณ , ๋๋‚˜๋ฉด ์‚ญ์ œํ•œ๋‹ค. Python์—์„œ python main.py ์น˜๋Š” ๊ฒƒ๊ณผ ์ฒด๊ฐ์ด ๋น„์Šทํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ์ปดํŒŒ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋‹ค.

go build โ€” ๋ฐ”์ด๋„ˆ๋ฆฌ ์ƒ์„ฑ

go build -o myapp main.go
./myapp

-o ์˜ต์…˜์œผ๋กœ ์ถœ๋ ฅ ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•œ๋‹ค. ์ƒ์„ฑ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” Go๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์€ ํ™˜๊ฒฝ์—์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค. Python์œผ๋กœ ์น˜๋ฉด PyInstaller๋กœ ํŒจํ‚ค์ง•ํ•œ ๊ฒƒ๊ณผ ๋น„์Šทํ•œ ๊ฒฐ๊ณผ๋ฌผ์ด์ง€๋งŒ, Go๋Š” ์ด๊ฒŒ ๊ธฐ๋ณธ ๋™์ž‘์ด๋‹ค.

# ์ •๋ฆฌ
go run main.go           # ์ปดํŒŒ์ผ + ์‹คํ–‰ + ์ž„์‹œํŒŒ์ผ ์‚ญ์ œ (๊ฐœ๋ฐœ ์ค‘ ํ…Œ์ŠคํŠธ)
go build -o myapp main.go  # ์ปดํŒŒ์ผ + ๋ฐ”์ด๋„ˆ๋ฆฌ ์ƒ์„ฑ (๋ฐฐํฌ์šฉ)

3. ํŒจํ‚ค์ง€ ์„ค์น˜ โ€” go install๊ณผ go get

Go์—์„œ ๋ญ”๊ฐ€๋ฅผ โ€œ์„ค์น˜โ€ํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ๋‘ ๊ฐ€์ง€๋‹ค. ์ด๋ฆ„์ด ๋น„์Šทํ•ด์„œ ์ฒ˜์Œ์— ํ—ท๊ฐˆ๋ฆฌ์ง€๋งŒ, ์šฉ๋„๊ฐ€ ์™„์ „ํžˆ ๋‹ค๋ฅด๋‹ค.

go install โ€” CLI ๋„๊ตฌ ์„ค์น˜

Go๋กœ ๋งŒ๋“ค์–ด์ง„ ์‹คํ–‰ ํŒŒ์ผ(CLI ๋„๊ตฌ)์„ ๋‚ด ์‹œ์Šคํ…œ์— ์„ค์น˜ํ•˜๋Š” ๋ช…๋ น์–ด๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„์„œ ์ปดํŒŒ์ผํ•œ ๋’ค, ์™„์„ฑ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ $GOPATH/bin์— ๋„ฃ์–ด์ค€๋‹ค.

# golangci-lint ์„ค์น˜ (๋ฆฐํŒ… ๋„๊ตฌ)
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
 
# ์„ค์น˜ ํ™•์ธ
which golangci-lint
# /Users/you/go/bin/golangci-lint

@latest๋Š” ์ตœ์‹  ๋ฒ„์ „์„ ์˜๋ฏธํ•˜๊ณ , @v1.62.0์ฒ˜๋Ÿผ ํŠน์ • ๋ฒ„์ „๋„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ณผ๋ฌผ์€ ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์ด๋ผ์„œ ์„ค์น˜ ํ›„์—๋Š” Go๊ฐ€ ์—†์–ด๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ๊ณผ๋Š” ๋ฌด๊ด€ํ•˜๋‹ค. go.mod์— ์•„๋ฌด๊ฒƒ๋„ ์ถ”๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค.

go get โ€” ํ”„๋กœ์ ํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ importํ•ด์„œ ์‚ฌ์šฉํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์–ด๋‹ค. go.mod์™€ go.sum์— ์˜์กด์„ฑ์ด ๊ธฐ๋ก๋œ๋‹ค.

# ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์›น ํ”„๋ ˆ์ž„์›Œํฌ ์ถ”๊ฐ€
go get github.com/gin-gonic/gin
 
# ํŠน์ • ๋ฒ„์ „ ์ง€์ •
go get github.com/gin-gonic/gin@v1.10.0

์‹คํ–‰ํ•ด๋„ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ์ฝ”๋“œ์—์„œ import "github.com/gin-gonic/gin"์œผ๋กœ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ์šฉ๋„๋‹ค.

Python ๋Œ€์‘ ์ •๋ฆฌ

GoPython์šฉ๋„
go install <ํŒจํ‚ค์ง€>@latestpipx install / uv tool installCLI ๋„๊ตฌ๋ฅผ ์‹œ์Šคํ…œ์— ์„ค์น˜
go get <ํŒจํ‚ค์ง€>pip install / uv addํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€
go mod tidypip freeze / uv sync์˜์กด์„ฑ ์ •๋ฆฌ ๋ฐ ๋™๊ธฐํ™”

ํ•ต์‹ฌ ์ฐจ์ด

Python์—์„œ๋Š” pip install์ด ๋„๊ตฌ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“  ๊ฐ€๋ฆฌ์ง€ ์•Š๊ณ  ์„ค์น˜ํ•œ๋‹ค. pipx๊ฐ€ ๋‚˜์˜จ ์ด์œ ๋„ ์ด ๊ตฌ๋ถ„์ด ๋ชจํ˜ธํ•ด์„œ๋‹ค. Go๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ go install(๋„๊ตฌ)๊ณผ go get(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)์œผ๋กœ ๋ช…๋ น์–ด๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค.


4. ์ฝ”๋“œ ํฌ๋งคํŒ…๊ณผ ๋ฆฐํŒ…

Python์—์„œ๋Š” black, ruff, isort, flake8 ๋“ฑ ์—ฌ๋Ÿฌ ๋„๊ตฌ๋ฅผ ์กฐํ•ฉํ•ด์„œ ์“ด๋‹ค. Go๋Š” ํฌ๋งคํŒ… ๋„๊ตฌ๊ฐ€ ์–ธ์–ด์— ๋‚ด์žฅ๋˜์–ด ์žˆ๊ณ , ์‚ฌ์‹ค์ƒ ๊ฐ•์ œ๋‹ค.

go fmt โ€” ๊ธฐ๋ณธ ํฌ๋งคํ„ฐ

go fmt ./...

./...๋Š” ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ ํ•˜์œ„์˜ ๋ชจ๋“  Go ํŒŒ์ผ์„ ๋Œ€์ƒ์œผ๋กœ ํ•œ๋‹ค. ํƒญ vs ์ŠคํŽ˜์ด์Šค, ์ค‘๊ด„ํ˜ธ ์œ„์น˜ ๊ฐ™์€ ์Šคํƒ€์ผ ๋…ผ์Ÿ์ด Go์—์„œ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. go fmt๊ฐ€ ์ •ํ•œ ์Šคํƒ€์ผ์ด ๊ณง ํ‘œ์ค€์ด๋‹ค.

goimports โ€” import ์ž๋™ ์ •๋ฆฌ

go install golang.org/x/tools/cmd/goimports@latest
goimports -w .

go fmt์˜ ๊ธฐ๋Šฅ์— ๋”ํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ, ๋น ์ง„ import ์ž๋™ ์ถ”๊ฐ€๋ฅผ ํ•ด์ค€๋‹ค. Python์˜ isort + autoflake์— ํ•ด๋‹นํ•œ๋‹ค.

go vet โ€” ์ •์  ๋ถ„์„

go vet ./...

์ปดํŒŒ์ผ์€ ํ†ต๊ณผํ•˜์ง€๋งŒ ๋ฒ„๊ทธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์ฝ”๋“œ๋ฅผ ๊ฒ€์ถœํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด fmt.Printf์—์„œ ํฌ๋งท ๋ฌธ์ž์—ด๊ณผ ์ธ์ž ๊ฐœ์ˆ˜๊ฐ€ ์•ˆ ๋งž๋Š” ๊ฒฝ์šฐ๋ฅผ ์žก์•„์ค€๋‹ค.

golangci-lint โ€” ํ†ตํ•ฉ ๋ฆฐํŒ… ๋„๊ตฌ

go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
golangci-lint run

go vet์„ ํฌํ•จํ•ด์„œ ์ˆ˜์‹ญ ๊ฐœ์˜ ๋ฆฐํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋Œ๋ ค์ฃผ๋Š” ๋„๊ตฌ๋‹ค. Python์˜ ruff๊ฐ€ ์—ฌ๋Ÿฌ ๋ฆฐํ„ฐ๋ฅผ ํ†ตํ•ฉํ•œ ๊ฒƒ๊ณผ ๋น„์Šทํ•œ ํฌ์ง€์…˜์ด๋‹ค.

Python vs Go ํฌ๋งคํŒ… ๋น„๊ต

  • Python: black/ruff๋Š” ์„ ํƒ์ด๊ณ , ํŒ€๋งˆ๋‹ค ์„ค์ •์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค
  • Go: go fmt๊ฐ€ ์œ ์ผํ•œ ํ‘œ์ค€์ด๋‹ค. ์„ค์ • ํŒŒ์ผ๋„ ์—†๊ณ , ์˜ต์…˜๋„ ์—†๋‹ค
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ Go ํ”„๋กœ์ ํŠธ๋Š” ์–ด๋””๋ฅผ ๊ฐ€๋“  ์ฝ”๋“œ ์Šคํƒ€์ผ์ด ๋™์ผํ•˜๋‹ค

5. ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™” (go mod)

Go 1.16๋ถ€ํ„ฐ ๋ชจ๋“ˆ ๋ชจ๋“œ๊ฐ€ ๊ธฐ๋ณธ์ด๋‹ค. ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด go mod init์„ ๋จผ์ € ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

mkdir myproject && cd myproject
go mod init github.com/username/myproject

์ด ๋ช…๋ น์–ด๊ฐ€ go.mod ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. Python์˜ uv init์ด๋‚˜ pyproject.toml ์ƒ์„ฑ์— ํ•ด๋‹นํ•œ๋‹ค.

module github.com/username/myproject

go 1.24.2

์ดํ›„ go get์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด go.mod์— ์˜์กด์„ฑ์ด ๊ธฐ๋ก๋˜๊ณ , go.sum์— ์ฒดํฌ์„ฌ์ด ์ €์žฅ๋œ๋‹ค.

go get github.com/gin-gonic/gin

๋ชจ๋“ˆ ๊ด€๋ จ ์ฐธ๊ณ 

  • go mod tidy : ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜์กด์„ฑ ์ œ๊ฑฐ, ๋น ์ง„ ์˜์กด์„ฑ ์ถ”๊ฐ€
  • go mod download : go.mod ๊ธฐ๋ฐ˜์œผ๋กœ ์˜์กด์„ฑ ๋‹ค์šด๋กœ๋“œ (uv sync์™€ ์œ ์‚ฌ)