728x90
반응형
지난 글에서 간단한 Gin 프레임워크를 이용한 서버를 만들어보았습니다. 그런데, 핸들러가 늘어날 수록 main.go 가 복잡해지는 문제가 있었어요. 이 핸들러를 별도의 폴더로 이동해서 서비스별로 구분을 하면, 조금 더 관리하기 수월해질 것입니다. 이렇게 분리하는 것을 컨트롤러라고 보통 부릅니다. 그래서, controller 폴더를 먼저 만들겠습니다. controller 폴더 하위에는 svc1 과 svc2 폴더도 만듭니다.
그리고, svc1 폴더에 svc1.go 파일을 만들고, 다음과 같이 작성해줍니다.
package svc1
import "github.com/gin-gonic/gin"
func Req1(c *gin.Context) {
c.JSON(200, gin.H{
"SVC1": "REQ1",
})
}
func Req2(c *gin.Context) {
c.JSON(200, gin.H{
"SVC1": "REQ2",
})
}
마찬가지로, svc2 폴더에는 svc2.go 파일을 만들고, 다음처럼 작성해주세요.
package svc2
import "github.com/gin-gonic/gin"
func Req1(c *gin.Context) {
c.JSON(200, gin.H{
"SVC2": "REQ1",
})
}
func Req2(c *gin.Context) {
c.JSON(200, gin.H{
"SVC2": "REQ2",
})
}
그리고, main.go 를 아래처럼 수정해줍니다.
package main
import (
"log"
"os"
"github.com/gin-gonic/gin"
"github.com/joho/godotenv"
"gapi/controller/svc1"
"gapi/controller/svc2"
)
func main() {
// .env 파일 로드
if err := godotenv.Load(); err != nil {
log.Fatalf("Error loading .env file: %v", err)
}
// 환경 변수에서 포트 가져오기
port := os.Getenv("PORT")
if port == "" {
log.Fatal("PORT is not set in the .env file")
}
app := gin.Default()
app.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"hello": "world",
})
})
app.GET("/svc1/req1", svc1.Req1)
app.GET("/svc1/req2", svc1.Req2)
app.GET("/svc2/req1", svc2.Req1)
app.GET("/svc2/req2", svc2.Req2)
app.Run("0.0.0.0:" + port)
}
main.go 가 훨씬 간결해졌지요? 그런데.. 이 역시도 API 늘어갈수록 점점 커지겠지요. 이 것을 더 줄여보겠습니다.
route 라는 폴더를 만들어주고, 그 안에 api.go 파일도 생성해줍니다. api.go 파일의 내용은 아래처럼 해줍니다.
package route
import (
"gapi/controller/svc1"
"gapi/controller/svc2"
"github.com/gin-gonic/gin"
)
func Router() *gin.Engine {
var app *gin.Engine
app = gin.New()
app_svc1 := app.Group("/svc1")
app_svc1.GET("/req1", svc1.Req1)
app_svc1.GET("/req2", svc1.Req2)
app_svc2 := app.Group("/svc2")
app_svc2.GET("/req1", svc2.Req1)
app_svc2.GET("/req2", svc2.Req2)
return app
}
이제, main.go 를 아래처럼 수정해줍니다.
package main
import (
"log"
"os"
"github.com/joho/godotenv"
"gapi/route"
)
func main() {
// .env 파일 로드
if err := godotenv.Load(); err != nil {
log.Fatalf("Error loading .env file: %v", err)
}
// 환경 변수에서 포트 가져오기
port := os.Getenv("PORT")
if port == "" {
log.Fatal("PORT is not set in the .env file")
}
app := route.Router()
app.Run("0.0.0.0:" + port)
}
main.go 파일이 완전히 간결해졌지요? 좋습니다. 이제 go run main.go 를 실행하고, http://localhost:8000/svc2/req2 을 호출해봅니다.
이렇게 해서, 컨트롤러 확장하기 성공~!!! 다음에는 MySQL 을 연결해봅시다.
728x90
반응형
'Framework (Backend) > Gin' 카테고리의 다른 글
Gin framework (3) : MySQL 연결하기 (1) | 2025.01.03 |
---|---|
Gin framework (1) : 시작해보기 (0) | 2024.12.27 |
댓글