Go 바이브코딩 가이드 작성 — 주의사항, 프레임워크, 빌드 패턴
This commit is contained in:
135
dev/go-vibe-coding.md
Normal file
135
dev/go-vibe-coding.md
Normal file
@@ -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 기반 도구들)
|
||||
Reference in New Issue
Block a user