136 lines
3.0 KiB
Markdown
136 lines
3.0 KiB
Markdown
---
|
|
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 기반 도구들)
|