--- title: Go 바이브코딩 가이드 updated: 2026-03-27 tags: [dev, go, vibe-coding] --- ## 개요 Go는 현재 인프라 도구의 사실상 표준 언어. Kubernetes, Docker, Traefik, K3s, Longhorn, ArgoCD, Teleport, SFTPGo, Vault, Gitea, CrowdSec, etcd 등 대부분이 Go로 작성됨. FastAPI 기반 신규 개발을 Go로 전환 예정 (2026-03-27 결정). 기존 FastAPI 서비스는 유지하면서 신규 개발부터 Go 적용. ## Go 선택 이유 | 항목 | Go | Python(FastAPI) | |------|-----|-----------------| | 메모리 | 10-30MB | 50-200MB | | 배포 | 바이너리 하나 | 런타임+의존성 | | 동시성 | goroutine (경량) | asyncio | | AI 코드 생성 정확도 | 높음 | 높음 | | 컴파일 | 빠름 (~초) | 불필요 (인터프리터) | ## 바이브코딩 시 주의사항 ### 1. 에러 처리 무시 금지 AI가 `_`로 에러를 무시하는 코드를 생성하면 반드시 수정할 것. ```go // BAD result, _ := doSomething() // GOOD result, err := doSomething() if err != nil { return fmt.Errorf("doSomething failed: %w", err) } ``` 프로젝트 내 `_, _` 패턴 검색하여 에러 무시 제거. ### 2. goroutine 누수 방지 goroutine에 반드시 종료 조건(context/channel)을 넣을 것. ```go // BAD — 영원히 안 끝남 go func() { for { doWork() } }() // GOOD — context로 제어 go func() { for { select { case <-ctx.Done(): return default: doWork() } } }() ``` ### 3. 리소스 정리 (defer) 파일, DB 연결, HTTP 응답 등은 `defer`로 정리. ```go f, err := os.Open("file.txt") if err != nil { return err } defer f.Close() ``` ### 4. 데이터 레이스 감지 여러 goroutine이 같은 변수에 접근하면 race condition 발생 가능. `-race` 플래그로 감지. ```bash go run -race main.go go test -race ./... ``` ### 5. 의존성 관리 ```bash go mod init myproject # 프로젝트 초기화 go mod tidy # 미사용 의존성 정리 ``` AI가 라이브러리를 추가하면 `go mod tidy` 실행 습관. ## 빌드/테스트 명령어 ```bash go build ./... # 컴파일 확인 (통과하면 대부분 동작함) go test ./... # 테스트 go run -race main.go # 데이터 레이스 감지 go vet ./... # 정적 분석 (버그 패턴 탐지) ``` ## 웹 프레임워크 | 프레임워크 | 특징 | |-----------|------| | Gin | 가장 인기, 경량, Express 느낌 | | Echo | Gin과 비슷, 미들웨어 강점 | | Fiber | 가장 빠름, Express 개발자 친화적 | | Chi | 표준 라이브러리 호환, 미니멀 | | 표준 net/http | 프레임워크 없이 가능 | ## 컨테이너 빌드 ```dockerfile # 멀티스테이지 빌드 — 최종 이미지 ~10MB FROM golang:1.24-alpine AS builder WORKDIR /app COPY go.* ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 go build -o server . FROM alpine:latest COPY --from=builder /app/server /server EXPOSE 8080 CMD ["/server"] ``` ## 관련 문서 - [[infra-hosts]] — K3s 인프라 (Go 기반 도구들)