Golang 으로 만든 웹 어플리케이션 Heroku에 배포하기

요즘 공부도할겸 golang 으로 끄적끄적 만들어보고 있는게 있습니다. 그 중 일부는 웹 환경으로 구성하고 heroku에 띄울 생각인데, 루비처럼 사전에 세팅이 필요한 부분들이 있어서 내용 정리해둡니다.

Pre-setting

우선, GoLand 같은 IDE를 쓰더라도 빌드 로그 떄문에 커밋까지만 IDE에서 하는게 개인적으론 편합니다. 어차피 각종 명령 때문에 heroku client 설치가 필요하니 이참에 한번 깔아줍시다.

Install heroku cli

On Mac

brew install heroku

On Ubuntu 16+

sudo snap install heroku --classic

On Windows

  • 64bit: https://cli-assets.heroku.com/heroku-x64.exe
  • 32bit: https://cli-assets.heroku.com/heroku-x86.exe

설치가 되면 $ heroku 형태로 heroku 앱들을 제어할 수 있습니다.

Install Dependency

다음으론.. 디펜던시 잡아주기 위해 godep을 깔아서 디펜던시를 잡아줍니다.

Install godep

go get -u github.com/tools/godep

set dependency

godep save ./...

Write Procfile

자 거의다 왔습니다. Rails는 gem file 설정부터 원래 레일즈 배포에서 하는짓들(db:migrate 등..)을 heroku 명령을 넣어주어 처리해야하는데, go의 경우는 Procfile이란 어떤 파일을 실행할지 결정해주는 파일을 통해 지정한 바이너리를 실행시킬 수 있습니다.

  • https://www.hahwul.com/2019/04/ruby-on-rails-distribute-heroku.html

Procfile에서 사용하는 타입이 몇가지가 있는데, 이 중 web은 LB와의 매핑을 해줄 수 있는 지시어로 보통의 경우 web을 많이 사용하게 되실 것 같습니다.

Procfile

web: yourbinaryname

Command

echo "web: testapp" > Procfile

Make/Push Heroku App

자 그럼 이제 heroku에도 앱을 만들어줘야합니다. (그냥 git repo 만든다고 생각하시면 편합니다.)

heroku create mytestapp

만들어주시고, git remote를 앱의 이름으로 지정한 후 heroku로 푸시를 해주시면 자동으로 배포됩니다.

Setting Git

git init .
git add *
git commit -m 'first init'
heroku git:remote -a mytestapp

Push!

git push heroku master

배포가 완료되면 Procfile에 따라서 지정된 바이너리가 실행됩니다. (보통 main.go?)

Conclusion

루비만 거의 5년가까이 쓰다가 다른 언어를 해보려고 하니 아직 손에 좀 익지는 않습니다. 다만 golang 은근히 재미있습니다. 혹시나 관심 있다면 한번 해보시는 것도 추천드립니다. 아무튼 heroku 배포는 이정도면 쉽게 하실 수 있을것 같네요.