Golang에서 웹 서버나 API 서버를 만들 때 가장 많이 사용되고 비교되는 3개의 프레임워크/패키지가 net/http, Gin, Fiber입니다.
아래는 이 셋의 핵심적인 차이점, 성능, 구조, 사용 목적을 정리한 비교입니다.

Boilerplate(보일러플레이트)는 개발 전반에서 자주 등장하는 개념으로 모든 코드를 작성하기 위해서 필요한 기본 코드 틀 이라고 할 수 있다.
Import, Component, Stylesheet, Export 구조로 이루어져 있으며 개박 속도 향상, 일관성 유지, 재사용성 증가, 실수 방지 등의 목적을 가지고 있다.
| 프레임워크 | RPS (Requests per second, 초당 요청 수)) | 메모리 사용량 | CPU 사용률 |
|---|---|---|---|
| net/http | ~100,000 | 100% | 100% |
| Gin | ~120,000 | 120% | 80% |
| Fiber | ~200,000 이상 | 90% | 70% |
실제 수치는 환경/미들웨어 구성에 따라 달라지며, Fiber는 fasthttp를 기반으로 하여 커널 레벨에서 더 적은 메모리 복사와 context 전환을 수행하기 때문에 성능이 뛰어남
func userHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
http.Error(w, "허용되지 않은 메서드", http.StatusMethodNotAllowed)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]string{"message": "success"})
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/api/users", userHandler)
log.Fatal(http.ListenAndServe(":8080", mux))
}
func main() {
r := gin.Default()
// Global middleware
r.Use(gin.Logger(), gin.Recovery())
r.GET("/api/users", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "success"})
})
r.POST("/api/users", func(c *gin.Context) {
var body map[string]interface{}
if err := c.BindJSON(&body); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, body)
})
r.Run(":8080")
}
func main() {
app := fiber.New(fiber.Config{
Prefork: true, // 다중 프로세스로 성능 향상 가능
})
app.Use(logger.New())
app.Use(cors.New())
app.Get("/api/users", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{"message": "success"})
})
app.Post("/api/users", func(c *fiber.Ctx) error {
var body map[string]interface{}
if err := c.BodyParser(&body); err != nil {
return c.Status(400).JSON(fiber.Map{"error": err.Error()})
}
return c.JSON(body)
})
app.Listen(":8080")
}
| 사용상황 | 추천 프레임워크 | 이유 |
|---|---|---|
| 표준 API, 외부 의존성 최소화 필요 | net/http | 표준이므로 안정적, 내장 라이브러리만으로 충분 |
| 일반적인 REST API 서버 | Gin | 가장 많이 사용, 문서 많고, 성능/생산성 균형 |
| 초고성능, Express 스타일 선호 | Fiber | 비동기 I/O 기반으로 매우 빠르고 문법 간결 |
| 상황 | 추천 | 이유 |
|---|---|---|
| Go 기본기 학습, 저수준 제어, 표준 호환성 중시 | 🟦 net/http | 가장 단순하고 Go 언어의 HTTP 모델을 정확히 이해 가능 |
| 일반적인 REST API 서버 (CRUD 중심) | 🟩 Gin | 문서 많고, 표준 라이브러리 호환성 유지하면서 생산성 확보 |
| 고성능, 비동기 I/O, 대규모 요청 처리 필요 | 🟥 Fiber | fasthttp 기반으로 초고속, Express 스타일로 코드 간결 |