go (golang) [go golang] Gin 소개 & 설치 (Introduction & Installation)
2023.01.03 20:49
[go golang] Gin 소개 & 설치 (Introduction & Installation)
0. Gin 소개 & 선택한 이유
1. Gin Installation
2. Gin REST API Tutorial
0. Gin 소개 & 선택한 이유
0. Go Develop Roadmap in 2020
1) 관련 사이트 : https://github.com/Alikhll/golang-developer-roadmap
- 위 링크를 가보시면 Golang Developer라면 익혀야될 Step에 대해서 나열되어 있다.
- 'Web Frameworks + Routers', 'ORMs', 'Caching', 'Logging', 'Testing', 'RPC' 등의 큰 주제가 있습니다.
- 아직 Golang을 접한지 얼마 안되어 우선 Web Frameworks 중 Gin을 기반으로 Toy Project를 수행하여 익숙해지려 합니다
1. Gin Web Framework를 선택한 이유?
1) 관련 포스팅 : medium.com/devtechtoday/top-7-golang-web-frameworks-in-2020-and-beyond-9ca2a89eb904
- 첫 번째로는 Github내 24K로 Stars 수가 가장 많습니다. 개발을 진행함에 있어서 가장 중요한 것은 많이 사용하는 활성화된 오픈소스냐라는 점입니다. 이는 개발자의 숙명인 구글링을 할 때 엄청난 힘이 되기 때문이죠!
- 두 번째로는 속도가 빠른 편에 속합니다. 거의 Aero를 제외하고는 가장 높은 속도를 자랑합니다.
1. Gin Installation (Gin 설치)
0. 관련 사이트
1) 관련 사이트 : github.com/gin-gonic/gin
- Gin Web Framework의 공식 Github 주소로 해당 Readme 파일에 참고할만한 많은 내용이 있으니 참고해주세요.
- 이번 포스팅의 경우도 위 내용을 바탕으로 직접 정리하였습니다.
1. 설치
※ 사전에 Go lang, Visual Studio Code는 설치되어 있다라는 가정하에 진행하도록 하겠습니다.
0) /src 하위에 gin을 테스트하기 위해 디렉토리를 하나 파준 뒤 main.go를 생성해줍니다.
1) Gin package를 먼저 설치해줍니다.
$ go get -u github.com/gin-gonic/gin
2) main.go 에 예제 코드를 복붙해줍니다
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
3) main.go 파일을 실행(run) 해준뒤 웹 브라우저에 'localhost:8080/ping'으로 들어가 본 뒤 결과값을 확인하시고 아래와 같다라면 성공하신 겁니다!
$ go run main.go
4) 기타
# 패키지에 대한 의존성 관리를 위해 module 실행
$ go mod init
# 아래 명령어를 수행하면 go.mod, go.sum이 생긴거를 보실 수 있습니다.
$ go get -u github.com/gin-gonic/gin
# makefile 생성 후 아래와 같이 작성해주면 됩니다.
dev :
go run main.go
$ make dev (== go run main.go를 실행한 것과 같은 결과값이 나옵니다.)
2. Gin REST API Tutorial
0. 작성 예시 코드
1) 아래 코드를 보시면 기본적인 GET, POST Method와 Querystring, paramter값을 보냈을 때 받는 방법에 대해서 아실 수 있을 겁니다
package main
import (
"fmt"
"io/ioutil"
"github.com/gin-gonic/gin"
)
// HomePage : GET, "/"
func HomePage(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello World!",
})
}
// PostHomePage : GET, "/"
func PostHomePage(c *gin.Context) {
body := c.Request.Body
value, err := ioutil.ReadAll(body)
if err != nil {
fmt.Println(err.Error())
}
c.JSON(200, gin.H{
"message": string(value),
})
}
// QueryStrings : GET, "/query"
func QueryStrings(c *gin.Context) {
name := c.Query("name")
age := c.Query("age")
c.JSON(200, gin.H{
"name": name,
"age" : age,
})
}
// PathParameters : GET, "/path"
func PathParameters(c *gin.Context) {
name := c.Param("name")
age := c.Param("age")
c.JSON(200, gin.H{
"name": name,
"age" : age,
})
}
func main() {
r := gin.Default()
r.GET("/", HomePage)
r.POST("/", PostHomePage)
r.GET("/query", QueryStrings) // /query?name=brenden&age=20
r.GET("/path/:name/:age", PathParameters) // /path/brenden/20
r.Run()
}
[출처] https://brenden.tistory.com/110
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.