Framework (Backend)/Gin

Gin framework (2) : 컨트롤러 확장하기

가우리언 2025. 1. 1.
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

댓글