3.0 KiB
3.0 KiB
title, updated, tags
| title | updated | tags | |||
|---|---|---|---|---|---|
| Go 바이브코딩 가이드 | 2026-03-27 |
|
개요
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"]
관련 문서
- infra-hosts — K3s 인프라 (Go 기반 도구들)