Go 언어 24강 - 외부 패키지로 모듈 분리하기

 

 

📘 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는 패키지 분리로 실무 스멜이 난다!"