Hayden's Archive

[Heroku] Heroku로 Spring Boot 배포하기 본문

Study/DevOps

[Heroku] Heroku로 Spring Boot 배포하기

_hayden 2021. 8. 31. 02:03

참고 : Heroku로 간단하게 웹 사이트 배포하기

 

💻 Heroku로 간단하게 웹 사이트 배포하기 💻

오늘은 기존에 회사에서 계속 진행하던 Autodesk Forge Viewer를 Heroku를 이용해 배포해보았다. 해보기 전엔 어려울 것 같아 겁먹었지만, 생각보다 간단한 작업이었다. 잊어버리지 않기 위해 기록!

velog.io

 

헤로쿠는 한 계정당 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를 쓸까? 그 선택의 기준은? )

 

각설하고 이제 본격적으로 헤로쿠에 스프링부트 프로젝트를 배포해보자

 


https://www.heroku.com/

 

Cloud Application Platform | Heroku

Heroku is a platform as a service (PaaS) that enables developers to build, run, and operate applications entirely in the cloud.

www.heroku.com

회원가입 과정은 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

 

[Spring] Spring Boot 2.0 Gradle Jar 배포

Spring Boot 의 강점은 내장 서버가 있어 실행 가능한 Jar 파일을 만들어 배포가 쉽습니다. Spring Boot의 많은 의존성 Library 와 사용자가 추가한 Library 를 하나의 Jar파일로 패키징 해준다는게 정말 대단

gigas-blog.tistory.com

 

이제 프로젝트 루트 디렉토리에 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 말고 깃허브와 연동해서 좀 더 편하게 할 수도 있다

이렇게 하게 되면 해당되는 브랜치에 푸시할 때마다 배포 서버에도 함께 반영이 된다

자세한 내용은 아래를 참고하자

https://dunchi.tistory.com/74

 

둔치의 개발 이야기

주니어 개발자가 공유하는 프로그래밍! 앱과 웹 그리고 실무에서 사용하는 CI/CD! 알고리즘과 코딩테스트까지

dunchi.tistory.com

 

아래는 헤로쿠에서 DB를 무료로 사용하는 것과 관련된 내용이다.

Heroku에서 MariaDB를 무료로 사용해보자

 

Heroku에서 MariaDB를 무료로 사용해보자

Heroku에서 MariaDB를 무료로 사용해보자 Heroku에 SpringBoot App을 무료로 배포해보자에 이어서 DB도 무료로 사용해보기로 하였다. DB를 사용하기 위해서는 heroku addon이 필요하다. 그리고 addon을 사용하기

blog.jungbin.kim