Files
obsidian/dev/go-vibe-coding.md

3.0 KiB

title, updated, tags
title updated tags
Go 바이브코딩 가이드 2026-03-27
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가 _로 에러를 무시하는 코드를 생성하면 반드시 수정할 것.

// BAD
result, _ := doSomething()

// GOOD
result, err := doSomething()
if err != nil {
    return fmt.Errorf("doSomething failed: %w", err)
}

프로젝트 내 _, _ 패턴 검색하여 에러 무시 제거.

2. goroutine 누수 방지

goroutine에 반드시 종료 조건(context/channel)을 넣을 것.

// BAD — 영원히 안 끝남
go func() {
    for {
        doWork()
    }
}()

// GOOD — context로 제어
go func() {
    for {
        select {
        case <-ctx.Done():
            return
        default:
            doWork()
        }
    }
}()

3. 리소스 정리 (defer)

파일, DB 연결, HTTP 응답 등은 defer로 정리.

f, err := os.Open("file.txt")
if err != nil {
    return err
}
defer f.Close()

4. 데이터 레이스 감지

여러 goroutine이 같은 변수에 접근하면 race condition 발생 가능. -race 플래그로 감지.

go run -race main.go
go test -race ./...

5. 의존성 관리

go mod init myproject   # 프로젝트 초기화
go mod tidy             # 미사용 의존성 정리

AI가 라이브러리를 추가하면 go mod tidy 실행 습관.

빌드/테스트 명령어

go build ./...        # 컴파일 확인 (통과하면 대부분 동작함)
go test ./...         # 테스트
go run -race main.go  # 데이터 레이스 감지
go vet ./...          # 정적 분석 (버그 패턴 탐지)

웹 프레임워크

프레임워크 특징
Gin 가장 인기, 경량, Express 느낌
Echo Gin과 비슷, 미들웨어 강점
Fiber 가장 빠름, Express 개발자 친화적
Chi 표준 라이브러리 호환, 미니멀
표준 net/http 프레임워크 없이 가능

컨테이너 빌드

# 멀티스테이지 빌드 — 최종 이미지 ~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"]

관련 문서