Spring boot + Postgresql DB Heroku 배포

고라니·2021년 11월 16일
0


오랜만의 배포!
나중에 다시 보기 위해 꼼꼼히 기록!

0. heroku 에 가서 프로젝트 생성 (무료 최대 5개)


1. create new app 클릭


2. app-name 입력 후 미쿡(US)로 해서 생성!

1. heroku push 용 프로젝트 따로 생성

협업하던 GitHub 프로젝트가 아닌 heroku git 에 push할 프로젝트를 만들 것이다.

  1. 새 폴더 생성
    git bash command - 해당 폴더로 cd 후
    git clone https://github.com/myid/myproject.git

  2. 해당 폴더에 가서 숨김파일, 폴더 보이게 하고 .git 폴더 삭제

  3. gitHub에 새로운 레포지토리 생성( 현재 단계에서 필수 아님! 나중에 해줘도 됨.)

  4. git init

heroku 원격 git과 연결

$ heroku git:remote -a <app-name>
여기서 app-name은 0단계에서 만들어준 app-name 이다.

git add - commit - push 를 해준다.

$ git add .

$ git commit -am "first comm" 첫커밋이라 싸악 들어감.

$ git push heroku HEAD:main
(GitHub는 이제 master가 아니라 main이 표준이라고 한다.)


ㅎㅎ 첫 시도부터 오류가 난다.

쭈루룩 remote push 한 흔적에서 오류를 찾을 수 있으니 그냥 넘기지 말고 다 잘 읽어보자.

자바 버전이 안맞는다는 오류를 찾았다.
Heroku 는 Java 8 을 기본제공하는데, 내 프로젝트는 JAVA 11 을 쓰기 때문에 수동으로 바꿔줘야 함.
(오류잡기 1 로 이동)

Java 오류를 잡고 push를 잘 해도 처리해줄게 많아서 그냥 모든 오류들을 한번에 잡기로 했다.
오류 다 잡고 add - commit - push 진행하면 뚝딱 잘 될 것이다.
(오류잡기 2~3 )

오류잡기 1 (java version)

root folder에 system.properties 새롭게 생성하자.

한줄로 뚝딱 마무리.

오류잡기 2

jar를 새로운 폴더에 build하자

jar를 build하지도 않고 넣어주지도 않고 프로젝트만 push했었다.. 바본가?
쉽게 build하는법 : Gradle에서 Tasks/build/bootjar 더블클릭하면 됨.
(CLI로 하는법 : https://gigas-blog.tistory.com/114 가암사합니다ㅠ)

하지만 그전에!!!!! build된 .jar를 디폴트 경로 말고 다른 폴더에 넣기 위한 작업을 해주자.
왜냐면 springboot가 자동 생성해줬던 .gitignore 를 보면 애초에 build 폴더는 전부 ignore되어있기 때문이다.

그래서 ignore에 걸리지 않는 새로운 폴더인 target 폴더를 root에 만들어 준 후 build.gradle 맨 마지막줄에 다음과 같이 추가해준다. 그러면 이제부터는 build를 하면 jar가 target으로 보내진다!

bootJar {
	destinationDirectory = file("./target")
}

(default - build/libs/OOO-0.0.1-SNAPSHOT.jar )
(custom 후 - target/OOO-0.0.1-SNAPSHOT.jar )

heroku에서 .jar파일을 돌리게 하기 위해 Procfile 파일을 루트에 추가해준다. (확장자가 없음에 주의!)

web: java -Dspring.server.port=$PORT -Dspring.profiles.active=production $JAVA_OPTS -jar "target/OOO-0.0.1-SNAPSHOT.jar"
요 한줄만 넣어주면 됨.

무슨말들이냐면..
port=$PORT 사용할 포트. 일단 변수로 해놓고 yml 에서 port 번호 설정해줄거임! (오류잡기 4로)

$JAVA_OPTS -jar "jar의경로"

active=production 은 일단 배포 환경이기 때문에 활성 프로파일이 production이라고 생각하자.
활성 프로필은 좀더 공부가 필요하다.

오류잡기 3

내 로컬 DB는 h2라서 heroku add-on 을 통해 heroku에서 제공하는 DB를 붙여줘야 한다.
여러 RDBMS 중 heroku에서 기본으로 제공해주는 Heroku Postgres 을 사용할 것이다.(무료 버전 있음)

  1. Heroku 내 프로젝트 DashBoard 접속

  2. Resources Tab Click!

  3. Heroku Postgres 검색 후 add-on!

  4. add-on 후 생성된 Heroku Postgres DashBoard 접속

  5. Settings Tab - View Credentials 버튼 클릭

    이렇게 url , username, password, port 번호까지 잘 나온다. 요 녀석들을
    application.yml 에 가서 셋팅해줄 것이다.

  6. resources/application.yml

    url 맨 앞줄에 jdbc: 붙이는것 주의~

driver-class-name 는 org.postgresql.Driver 로 해주면 되는데,
먼저 build.gradle 에 가서 의존성 코드 수정해야됩니다.
(h2 driver에서 postgresql driver 로 교체하기 위해!!!)
runtimeOnly 'org.postgresql:postgresql' 해주고 업데이트하면 잘 import 됨!

(오류잡기4)

그리고 application.yml 맨 마지막줄에 PORT 넣어줘야되는것 잊지말기!

루트 폴더는 이렇게 되어있다.

url 접속해서 잘 되는지 확인.

-END-


번외1 : IntelliJ에서 heroku command가 안먹히면?

PATH="$PATH:/c/Program Files/Heroku/bin"
PATH추가하면 바로 잘된다!

번외2 : mySQL 그대로 쓰고싶으면 ?

clearDB 는 한글 지원 안 하니 jawsDB를 써라.

profile
공부를 열심히 하는 학부생

2개의 댓글

comment-user-thumbnail
2022년 5월 17일

덕분에 삽질 시간을 줄일 수 있었습니다.. 감사합니다 :)

1개의 답글