본문 바로가기
자습

Gin (Go web framework) 앱을 Docker로 실행하기

by litaro 2020. 12. 31.

 

Gin은 Python의 Flask와 같은 web framework 이다.

Go를 공부하는 목적이 결국 서버 개발이니 Gin을 또 공부해야겠지.

그 첫번째로 Gin 앱을 Docker 이미지에 올려서 (비록 로컬이지만) HTTP 서버를 구현해보자.

Gin 으로 HTTP 서버 구현하기 

github.com/gin-gonic/gin

 

gin-gonic/gin

Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin. - ...

github.com

예제가 잘 나와있어서 그대로 따라하면 로컬에서 돌아가는 간단한 HTTP 서버는 금방 만들 수가 있다. 

  • import "github.com/gin-gonic/gin"
  • gin.Default()로 기본 router를 가져와서 원하는 method를  가져와서 설정
  • router의 GET, POST, PUT, DELETE,...method를 사용하면 된다.
    • func (group *RouterGroup) GET (relativePath string, handlers ...HandlerFunc) IRoutes {}
    • "localhost:8080/crawler?url=news.naver.com 요청시에 응답하는 예제라 : router.GET("/crawler", getting)
  • router.Run() 호출: port 설정 안하면 기본 8080으로 된다. 
  • 'go run~' 하면 서버 시작

 browser에서 localhost:8080/crawler?url=news.naver.com 로 요청하면 정상적으로 list 가져오는것 확인~

 

Docker 에 올려서 서버 돌려보기

dev.to/zeedt/deploying-gin-go-web-framework-application-with-docker-55p0

 

Deploying Gin (Go web framework) application with Docker

The importance of Docker cannot be over emphasized as it helps accelerate developer on-boarding and a...

dev.to

코드는 Gin Framework 예제와 동일하다. 결국 이 코드를 Doker Image에 Copy해서 빌드해서 해당 실행파일을 실행하도록 하면 된다.

  • 기본이되는 golang docker image를 docker hub에서 다운 받는다.

  • Dockerfile 을 작성한다.
    • FROM golang:alpine << base image 를 명시
    • ENV 로 변수 설정
    • WORKDIR /go/src/crawler-docker << container 가 동작할 기본 path를 설정 ($GOPATH
    • COPY main.go . << 해당 WORKDIR 에 main.go copy
    • RUN apk update && apk add --no-cache git << image에 git 설치
    • RUN go get github.com/ryulitaro/crawler << module 가져오기
    • RUN go build main.go << build 
    • EXPOSE &PORT  container port설정
    • ENTRYPOINT ["./main"] 실행할 go app 설정 

  • doker image 만들기 "docker build -t crawler-docker ."

  • 완성된 image를 container 에 올려 실행하자 "docker run -d -p 3006:3004 crawler-docker"
  • VSCode의 extensions 중 docker도 있어서 한눈에 이미지를 확인할 수 있다. container에 copy된 파일들과 go get으로 clone 된 모듈 파일들을 확인해볼수 있다.

 browser에서 localhost:3006/crawler?url=news.naver.com 로 요청하면 정상적으로 list 가져오는것 확인~

 

간단하게 Go로 짠 코드를 Gin Web Framework를 이용해서 서버를 돌려보고 또, 이를 Docker Image로 만들어 Container에서 올려서 돌리는 것까지 확인해봤다. 역시 한번 해보니 대충 어떻게 동작하는지 이해가 된다. ^^