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 배포는 이정도면 쉽게 하실 수 있을것 같네요.