개발바닥

Echo framework로 간단한 웹서버 만들기 본문

GO 언어

Echo framework로 간단한 웹서버 만들기

라이언 2022. 3. 27. 19:19
반응형

golang에는 여러 웹 프레임워크가 존재한다.

대표적인 웹 프레임워크들로는 gin, beego, Iris, Echo, Fiber ... 등이 있다.

현재 실무에서는 Echo 프레임워크를 사용하고 있습니다. 사용한 이유로는 다른 프레임워크에 비해 잘 정리된 문서로 처음 개발하는 사람들이 쉽게 따라할 수 있도록 문서가 잘 관리 되어 있고, 자신의 미들웨어를 정의하여 사용할 수 있다는 장점이 있습니다.

오늘은 Echo 프레임워크로 간단한 웹 서버를 구축해 보겠습니다.

 

echo 프레임워크 가져오기

$ go mod init     	# 모듈 초기화
$ go get github.com/labstack/echo/v4	#echo v4 가져오기

성공적으로 가져오면 go.mod 파일에 추가된 것을 확인할 수 있습니다.

 

서버 만들기

package main

import (
	"github.com/labstack/echo/v4"
	"net/http"
)

func main() {
	e := echo.New()
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello, World!")
	})
	e.Logger.Fatal(e.Start(":3000"))
}

 

라우터 만들기

// router/user.go
package router

import (
	"fmt"
	"github.com/labstack/echo/v4"
	"net/http"
)

type User struct {
	ID   int64  `json:"id"`
	Name string `json:"name"`
}

func GetUsers(c echo.Context) error {
	users := []User{User{1, "ryan"}, User{2, "joker"}}
    //호출 로직
    
	return c.JSON(http.StatusOK, users)
}

func PostUsers(c echo.Context) error {
	var user User
	if err := c.Bind(&user); err != nil {
		c.JSON(http.StatusBadRequest, nil)
	}
    //저장 로직
	fmt.Println(user)
    
	return c.JSON(http.StatusCreated, nil)
}
// main.go
package main

import (
	"echo-project/router"
	"github.com/labstack/echo/v4"
	"net/http"
)

func main() {
	e := echo.New()
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello, World!")
	})
	e.GET("/users", router.GetUsers)
	e.POST("/users", router.PostUsers)
	e.Logger.Fatal(e.Start(":3000"))
}

코드 설명

User라는 구조체를 만들고 태그 설정으로 json으로 받을 태그명을 지정해준다.

/users : http Get 메소드로 호출 시 유저 목록을 json 형태로 반환 해준다.

/users : http Post 메소드로 호출 시 json 형태로 전달 받은 데이터를 User 객체로 바인딩하고 출력한다.

핸들러 함수에는 echo.Context를 매개 변수로 받고 error을 반환으로 설정해줘야 된다.

이런식으로 필요한 api를 개발하고 등록해서 사용할 수 있다.

 

간단하게 웹 서버를 만들어 보았습니다.

앞으로 Echo 프레임워크에서 제공해주는 Group 설정, 미들웨어, 에러 핸들링 등 하나씩 포스팅 하겠습니다.

 

반응형

'GO 언어' 카테고리의 다른 글

[기본 개념 요약] 배열  (0) 2023.03.14
[기본 개념 요약] 변수  (0) 2023.03.12
유닛 테스트(Unit Test)  (0) 2022.03.09
인터페이스 (interface)  (0) 2022.03.06
모듈(Module)  (0) 2022.03.06
Comments