Hayden's Archive
[Heroku] Heroku로 Spring Boot 배포하기 본문
헤로쿠는 한 계정당 5개의 앱을 무료로 호스팅할 수 있는 서비스이다.
해당 도메인으로 몇 시간 동안 요청이 없으면 수면상태로 전환해서 초기 접속이 늦어지는 단점도 있다.
하지만 포트폴리오 배포 서버로 가볍게 쓰기 좋고 진입 장벽이 낮으며 배포하기에 쉽다.
클라우드 종류에는 크게 IaaS, PaaS, SaaS가 있는데(참고 포스팅 : 클라우드 서비스 유형(XaaS : ~ as a Service) ) AWS의 EC2는 IaaS에 해당되고, Heroku는 PaaS에 해당된다. Heroku에는 웬만한 프로그래밍 언어가 이미 설치가 되어 있어서 코드만 올리면 배포가 완료된다. 반면 AWS의 EC2는 서버를 제공하여 개발자가 알아서 설정을 할 수 있고 Heroku보다 배포까지의 과정이 복잡하고 시간이 다소 소요된다. 서버에 대한 컨트롤을 AWS EC2를 선택하는 것이 맞고 시간을 절약하려면 Heroku를 선택하는 것이 맞다. 참고로 Heroku는 AWS 위에서 작동하므로 AWS보다 비싸다(서버+플랫폼 서비스) 한편 AWS에도 Heroku처럼 쓸 수 있는 PaaS로 AWS EB(Elastic Beanstalk)가 있다. Heroku보다 가격은 상대적으로 낮지만 사용하기에는 Heroku가 더 쉽다고 한다. (참고 : AWS를 쓸까? Heroku를 쓸까? 그 선택의 기준은? ) |
각설하고 이제 본격적으로 헤로쿠에 스프링부트 프로젝트를 배포해보자
회원가입 과정은 skip!
로그인하고 대시보드로 연결되는데 Create new app 클릭
애플리케이션 이름을 입력하고 지역을 선택한 뒤 Create app
(서치해보니까 Heroku의 Free Dyno가 US 리전이라고 하므로 Region은 US로 하겠다)
그러면 다음과 같은 화면이 뜬다.
일단 Heroku CLI부터 설치하자(설치 과정 생략)
설치 후 다음 명령어로 헤로쿠가 잘 설치되었는지 확인해보자
$ heroku --version
헤로쿠 시간을 한국 시간을 바꾸자
$ heroku config:add TZ="Asia/Seoul" --app [APPNAME]
헤로쿠에 로그인한다
$ heroku login
해당되는 경로로 이동하고 git 초기화를 해준다
$ cd my-project/
$ git init
헤로쿠 원격 git과 연결한다
$ heroku git:remote -a <app-name>
git 사용법처럼 add -> commit -> push
$ git add .
$ git commit -am "first commit"
$ git push heroku master -> 에러발생시 git push heroku HEAD:master
배포가 완료되면 새 창을 열어 화면을 확인해보자
$ heroku open
그런데 여기까지 하다 보면 에러가 발생할 수 있다.
아래의 추가적인 작업이 더 필요하다 ( 참고 : https://doinge-coding.tistory.com/78 )
gradle/wrapper 는 꼭 필요하므로 gitignore로 처리하지 않는다
Spring Boot+Gradle 프로젝트를 생성하면 기본 Jar를 배포할 수 있도록 설정되어 있다
build/libs 안에 jar 파일이 생성되는데 나는 build 폴더를 통째로 gitignore 처리해둬서
target 폴더를 따로 두어서 그쪽으로 Jar 파일이 생성되게 설정했다.
build.gradle 파일 가장 하단에 아래 코드를 추가한다.
bootJar {
destinationDirectory = file("./target")
}
스프링부트 Jar 파일 배포는 다음을 참고하자
https://gigas-blog.tistory.com/114
이제 프로젝트 루트 디렉토리에 Procfile을 만들어준다
이 파일명 때문에 에러가 많이 나는데 Profile이 아니라 Procfile이며 확장자 없이 이름만 있는 파일이다
윈도우의 경우 cmd로 아래 명령어를 입력해서 프로젝트 루트 디렉토리에 생성해준다
$ copy con Procfile
Procfile에 다음을 작성한다
예시) web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/jikji-1.0-SNAPSHOT.jar
web: java -Dserver.port=$PORT $JAVA_OPTS -jar [실행될 jar 파일 경로]
또 헤로쿠는 디폴트로 Java 8을 제공한다.
따라서 자바 버전을 설정해줘야 에러가 나지 않는데
프로젝트 루트 디렉토리에 system.properties 파일을 생성하고 다음을 입력한다
(나는 OpenJDK 11을 사용했으므로 아래와 같이 입력했다)
java.runtime.version=11
여기까지 했으면 add -> commit -> push 해서 다시 실행시켜보면 작동이 된다.
참고로 Heroku CLI 말고 깃허브와 연동해서 좀 더 편하게 할 수도 있다
이렇게 하게 되면 해당되는 브랜치에 푸시할 때마다 배포 서버에도 함께 반영이 된다
자세한 내용은 아래를 참고하자
아래는 헤로쿠에서 DB를 무료로 사용하는 것과 관련된 내용이다.