백엔드 공부/Golang

Go와 Gin Framework 를 사용한 게시판 만들기 (1) - 시작하기

철매존 2022. 10. 19. 20:27
728x90

목표는 간단한 기능을 가진 게시판 API를 제작하는 것이다.
프론트는 안붙일건데, 이유는 귀찮아서이다 하핫

먼저 처음부터 막 진행하기는 좀 곤란하니까, Go에 Gin Framework를 붙이고 이를 확인하는 것까지 해보려고 한다.

프로젝트 만들기

Go를 통해 간단한 Get API를 만들 예정이다.

먼저 개인 폴더(chan_personal_go)를 만들어 준다.
그리고 그 아래에 main.go 폴더를 만들고, controller를 관리해줄 controller 폴더를 생성한다. 이후 해당 폴더 아래에 controller.go 파일을 생성한다.

go는 기본적으로 main.go를 동작시킨다.
이제 메인을 작성해줄 것이다.

main.go 작성

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()

    v1Api := r.Group("/api/v1")
    {
        v1Api.GET("/testGet", controller.ControllerTest)
    }

    r.Run("localhost:8080")
}

main 패키지에 위치하여, 가장 먼저 동작시킨다.
그리고 github.com/gin-gonic/gin을 import한다.

다음으로 메인 함수를 만들어준다.
gin framework의 default router인 r을 만들고, version1 api를 작성해 준다.

위의 코드대로면 localhost:8080/api/v1/testGet 을 통해 해당 API로 접근할 수 있을 것이다.

그런데 아마 이대로 코드를 치면 에러가 날 것이다.
일단은 그냥 넘어가보자

controller.go 작성

package controller

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

func ControllerTest(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
        "status": "ok",
        "data":   "잘 됩니다.",
    })
}

controller를 작성해준다.
여기서 ControllerTest가 호출되면 JSON이 return될 것이다.

go mod 만들기

main과 controller에서는 이제 에러가 출력될 것이다.
아마 둘다 import관련해서 에러가 나고 있을텐데, import를 해주기 위한 설정을 진행해주겠다.

일단 터미널창을 열어준다.

터미널에서 현재 위치를 해당 프로젝트의 가장 위 폴더로 잡는다.
나의 경우는 chan_personal_go 이다.

여기서 모듈을 만들어 줄 것이다.
모듈은 go에서 사용하려고 하는 함수 혹은 SDK가 있을 때, 이것들을 가져와서 보관해 두는 장소이다.
종속성 처리를 위해 사용된다고 생각하면 편하다.

해당 터미널에서 모듈을 만들어 준다.

go mod init [내가 만들고싶은 path 이름]

이름은 뭐 아무렇게나 해도 되는데, 내가 해줄 프로젝트 이름으로 하는게 편하다.

나는 ryoochanishandsome이라는 프로젝트명을 해주었다. 거짓말을 못하는 성격이기 때문에 어쩔 수 없었다.

그럼 이렇게 결과가 나오고, go.mod라는 녀석이 생겼을 것이다.

한번 들어가서 살펴보면

module ryoochanishandsome

go 1.19

이렇게 되어있다. 뭐가 없음.

그러면 이제 여기에 내가 사용하기 위해 import한 것들을 실제로 넣어줄 것이다.

다시 터미널에서

go get

을 실행해 준다.

그러면 이런 식으로 쭈르륵 나오고 go.mod가 변경될 것이다.

이렇게 원하는 종속성이 잘 들어간 것을 확인 가능하다.

go 내부 함수 사용하기

이제 그러면 이걸 사용할 일만 남았다.

controller에는 이제 에러가 없을 것이다.
이는 이 장소에서 import한 것들이 외부 SDK들이기 때문에, 바로 사용할 수 있기 때문이다.
근데 main.go 는 아마 문제가 있을 것이다.

아마

이런 식으로 에러가 났을텐데, 이는 controller부분이 import되지 않아서이다.

아까 우리는 go.mod에서 프로젝트 이름을 정의해 두었는데, 이제 이걸 가져오면 controller의 함수를 사용 가능할 것이다.

package main

import (
    "ryoochanishandsome/controller"

    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()

    v1Api := r.Group("/api/v1")
    {
        v1Api.GET("/testGet", controller.ControllerTest)
    }

    r.Run("localhost:8080")
}

[프로젝트이름]/controller 이렇게 go.mod에서 정의한 이름에서 쓰는 package controller를 가져온다.
여기서 controller를 썼을때 잘 가져온 이유는, 이전에 controller.go에서 package를 controlelr로 설정했기 때문이다.

이제 한번 잘 되는지 확인해 볼 것이다.

동작 확인하기

Run - Start Debugging 혹은 f5 를 눌러서 디버깅을 시작해준다.

이제 디버그 콘솔에 이런 내용이 출력되고,

실행된걸 알 수 있다.

우리가 가보려는 목적지는 api/v1/testGet이므로 http://localhost:8080/api/v1/testGet을 인터넷에 쳐본다.

잘 나오고 디버그 콘솔에서도

이렇게 호출했음을 알 수 있다.