본문 바로가기

개발

Golang - echo를 활용한 API Server 만들기

echo는 go를 사용해서 HTTP Restful API Server를 개발할 수 있는 framework 입니다.
echo를 사용해서 HTTP Server를 만들어봅시다.

1. main.go 작성

다음과 같이 main.go를 작성해줍니다.

package main

import (
    "net/http"

    "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"
)

func main() {

    e := echo.New()

    e.Use(middleware.Logger())
    e.Use(middleware.Recover())

    e.GET("/", hello)

    e.Logger.Fatal(e.Start(":3000"))
}

func hello(c echo.Context) error {
    return c.String(http.StatusOK, "Hello, World!")
}

코드를 하나씩 살펴봅시다.

먼저 새로운 echo 객체를 생성해줍니다.

e := echo.New()

middleware로 Logger() 및 Recover()를 등록해줍니다.
Logger()는 서버로 들어오는 모든 요청을 로그로 남겨줍니다.
Recover()는 서버로 요청이 들어오고, 해당 요청으로 인해 golang 서버에 panic 이 발생했을 경우에도 golang 서버가 죽지않고 동작할 수 있도록 회복시켜주는 역할을 합니다.

e.Use(middleware.Logger())
e.Use(middleware.Recover())

e.Get()을 통해 서버로 들어오는 GET 요청을 처리할 수 있습니다.
Get() 과 같은 함수는 요청을 처리할 handler 함수를 인자로 받습니다.
handler 함수에서는 들어온 요청을 처리하는 로직을 작성할 수 있습니다.

e.GET("/", hello)


func hello(c echo.Context) error {
    return c.String(http.StatusOK, "Hello, World!")
}

e.Start() 함수로 서버를 시작합니다. 이 때, 인자로 시작할 포트를 입력합니다.
이번에는 3000번 포트를 사용하도록 작성했습니다.

e.Logger.Fatal(e.Start(":3000"))

2. 패키지 다운로드 및 실행

go get . 을 통해 필요한 패키지를 다운로드 받습니다.

go get .      
go: downloading github.com/labstack/echo v3.3.10+incompatible
go: downloading github.com/labstack/echo/v4 v4.12.0
go: downloading github.com/labstack/gommon v0.4.2
go: downloading golang.org/x/net v0.24.0
go: downloading golang.org/x/time v0.5.0
go: downloading github.com/mattn/go-isatty v0.0.20
go: downloading golang.org/x/sys v0.23.0
go: added github.com/golang-jwt/jwt v3.2.2+incompatible
go: added github.com/labstack/echo/v4 v4.12.0
go: added github.com/labstack/gommon v0.4.2
go: added github.com/mattn/go-colorable v0.1.13
go: added github.com/mattn/go-isatty v0.0.20
go: added github.com/valyala/bytebufferpool v1.0.0
go: added github.com/valyala/fasttemplate v1.2.2
go: upgraded golang.org/x/net v0.21.0 => v0.24.0
go: added golang.org/x/time v0.5.0

코드를 실행시켜줍니다. 다음과 같이 실행되고 있다는 화면이 노출됩니다.

go run main.go                    

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.12.0
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on [::]:3000

3. API 테스트

서버가 잘 동작하고 있는지 확인합니다.
다른 터미널을 연 뒤, curl 명령어를 통해서 API 서버가 잘 실행중인지 확인합니다.
Hello, World! 가 노출되면 잘 실행중인 것입니다.

curl localhost:3000/    
Hello, World!%

다음과 같이 로깅이 남는것을 확인할 수 있습니다.

{"time":"2024-09-18T23:22:59.218027+09:00","id":"","remote_ip":"::1","host":"localhost:3000","method":"GET","uri":"/","user_agent":"curl/8.4.0","status":200,"error":"","latency":4375,"latency_human":"4.375µs","bytes_in":0,"bytes_out":13}

'개발' 카테고리의 다른 글

Golang - Swagger 연동  (1) 2024.09.21
Golang - Connect to MongoDB  (2) 2024.09.18
Golang - Connect to MySQL  (1) 2024.09.18
Golang - 프로젝트 시작  (0) 2024.09.18
Q Learning과 DQN  (0) 2023.12.09