diff --git a/dev/go-vibe-coding.md b/dev/go-vibe-coding.md new file mode 100644 index 0000000..0dcd094 --- /dev/null +++ b/dev/go-vibe-coding.md @@ -0,0 +1,135 @@ +--- +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 기반 도구들)