요즘 Golang에 빠졌다. 책 한권을 다 읽고 Go의 병렬처리를 이용한 서비스를 만들었고, echo
기반의 웹으로 만들어서 배포해보고 싶었다. 갓 헤로쿠에서는 Go도 지원한다. 처음엔 조금 헤맸는데, 몇 번 시도 끝에 성공했다.
먼저 헤로쿠에 프로젝트를 하나 생성하고, 깃을 연결한다. 나는 깃허브 계정의 프로젝트를 연결했는데, Auto Deploy를 설정하면 커밋할 때마다 다시 빌드 후 배포해줘서 편하다.(이 과정에 대한 설명은 생략하겠다)
Procfile 만들기
프로젝트 최상단에 Procfile
파일을 만든다. 헤로쿠의 배포 설정에 대한 부분이고 확장자는 없다.
1 | web: go-project-name |
go-project-name
은 본인 프로젝트의 이름에 맞게 수정하면 된다. Procfile 설정은 끝이다.
의존성 추가하기
1 | go mod init github.com/user-name/project-name |
본인의 깃허브 레파지토리에 맞게 go mod init
명령어를 실행하면 go.mod
파일이 생성된다. go mod
파일에 require 항목을 작성해야 하는데, VSCode + Go 환경인 경우 go.mod
최상단에 보이는 버튼으로 자동으로 require
항목을 작성해주고, 의존성에 따른 vendor
폴더까지 자동으로 만들어준다.
1 | module github.com/zinirun/eden-zip |
내 프로젝트에 적용한 go.mod
파일의 예시이다. // indirect
주석이 달린 의존성은 프로젝트에서 직접 추가한 패키지가 아닌, 패키지에서 요구되는 또 다른 의존성 패키지라는 의미이다.
포트 설정하기
이번 프로젝트에는 Echo 프레임워크를 사용했는데, 다른 웹 프레임워크도 포트 설정은 비슷하게 할 것이다. 포트를 하드코딩하는 것이 아닌 os.Getenv("PORT")
로 포트를 잡아줘야 헤로쿠 내부의 포트로 정상적으로 실행된다.
1 | func main(){ |
기존에는 :1323
등의 방법으로 로컬에서 실행했지만, 배포시 :ENV상의 PORT
로 설정해준다.
Commit and Push
이제 설정을 마친 레파지토리를 커밋 후 푸시하면 헤로쿠에 배포된다. 헤로쿠 웹페이지에서 빌드 과정, 로그를 확인할 수 있다. 프로그램 실행 중의 로그를 볼 수도 있다.
1 | heroku logs -a 앱이름 |
로그의 일부인데, 빌드가 정상적으로 끝났지만 웹이 열리지 않는 경우 로그를 보면 해결에 도움이 된다.