📘 Go 언어 24강 - 외부 패키지로 모듈 분리하기
이제 진짜 실무 프로젝트처럼 기능별로 외부 패키지를 만들어 분리해보겠습니다.
기능 모듈화를 통해 유지보수와 재사용성이 훨씬 좋아집니다!
1️⃣ 디렉토리 구조 설계
📂 myapp/
├── main.go
├── handler/
│ └── member_handler.go
├── model/
│ └── member.go
├── router/
│ └── router.go
2️⃣ handler/member_handler.go
package handler
import (
"myapp/model"
"myapp/response"
"encoding/json"
"net/http"
"strconv"
"github.com/gorilla/mux"
)
var Members = []model.Member{...}
func GetMembers(w http.ResponseWriter, r *http.Request) {
response.JSON(w, http.StatusOK, true, Members, "")
}
3️⃣ model/member.go
package model
type Member struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
4️⃣ router/router.go
package router
import (
"myapp/handler"
"github.com/gorilla/mux"
)
func New() *mux.Router {
r := mux.NewRouter()
r.HandleFunc("/members", handler.GetMembers).Methods("GET")
return r
}
5️⃣ main.go
package main
import (
"myapp/router"
"net/http"
)
func main() {
r := router.New()
http.ListenAndServe(":8080", r)
}
💡 추가로
- 패키지마다
go.mod
는 하나면 충분 (루트에만) - import 시 패키지 이름은 디렉토리명 기준
🧠 요약
- Go는 디렉토리 → 패키지로 자동 매핑
- 기능 단위로 나누면 협업/유지보수 용이
- main.go는 진입점으로만 사용
한 줄 요약: "Go는 패키지 분리로 실무 스멜이 난다!"