깃헙을 통해서 배포를 하려면 태그가 필요한데, 깃 크라켄에서 태그를 생성한다. 메인 브랜치에서 우클릭을 하고 create tag here
을 클릭해서 태그를 만든 뒤 push한다. 그럼 하단의 TAGS 항목에 태그가 생긴 것을 확인할수 있는데, 이것을 우클릭해서 push tag to origin
을 클릭해주면 깃헙에 태그가 나타나게 된다.
요런 식으로 나타나는데, Releases에 태그를 클릭하면
이런 식으로 릴리즈를 할수 있는 화면이 나타난다.
제목과 내용을 입력하고 release를 누르면
이렇게 최초 버전이 만들어진다!
깃 크라켄에 heroku branch를 하나 생성한뒤 헤로쿠 페이지에 회원가입을 통해 로그인한다.
create Pipeline을 클릭해서 깃헙을 연동해서 게시판 프로젝트를 선택하고 connect를 한다.
파이프라인은 헤로쿠에서 일어나는 일련의 테스트와 배포의 동작들을 연결해놓을 것이며 리뷰,스테이징,프로덕션 단계에 때라서 앱들을 선택하고 작동할수 있게끔 시나리오를 만들수 있다.
이번에는 프로덕션에만 앱을 배포해서 서비스를 제공한다.
생성한 앱을 클릭하면 여러가지 옵션을 볼수 있다.
# 데모 페이지
https://bulletinboard-jyc.herokuapp.com/
my sql을 추가하기위해서 Resources 탭으로 가서 mysql을 검색하고 clearDB MySQL을 선택했다.
MySQL을 클릭하면 유저 정보를 표시해주는 사이트가 나타난다.
중요한 문제는 clearDB로 만들어진 MySQL시스템에 어떻게 접근하느냐,즉 데이터 소스 경로를 어떻게 알아내는 것이다.
헤로쿠 cli 도구를 설치해서 cli로 명령어를 전달해서 이 방법을 알아낼 것이다.
Settings 항목에 ConfigVars로 가보면 CLEARDB MySQL로 인해 생성된 Config vars 가 보인다. 이것을 프로젝트의 application.yaml
에 추가한다.
원래 작성된 설정내용 다음에 ---를 작성하고 그 다음줄에 설정 내용을 작성하게 되면 다른 프로필일 경우 해당 내용의 설정을 적용한다는 뜻이다. 만약에 설정항목이 같은 것이 있다면, 나중에 작성한 설정 내용으로 덮어 씌우게 된다.
---
spring:
config.activate.on-profile: heroku
datasource:
url: jdbc:mysql://localhost:3306/board
username: 유저 이름
password: 비밀 번호
jpa:
hibernate:
ddl-auto: validate
sql:
init:
mode: never
여기서 url 의 경우 헤로구의 config vars에 있는 url을 사용하되 환경 변수인 CLEARDB_DATABASE_URL을 사용한다.
url:${CLEARDB_DATABASE_URL}
또 유저와 비밀번호의 경우 ClearDB MySQL 사이트에 이미 지정되어있기 때문에 굳이 작성할 필요가 없다.
hibernate.ddl-auto는 create로 변경해서 테스트 데이터를 넣도록 하고
sql.init.mode는 always로 변경해서 테스트 데이터를 넣을수 있게 변경한다.
spring:
config.activate.on-profile: heroku
datasource:
url: ${CLEARDB_DATABASE_URL}
jpa:
hibernate:
ddl-auto: create
sql:
init:
mode: always
이렇게 해주면 소스코드에 유저와 비밀번호가 드러나지 않게된다.
이제 헤로쿠에 로깅을 켜기 위해서 cli로 접근하는 방법을 알아본다.
git bash 터미널로 들어가서 현개 프로젝트의 경로로 이동한다.
이제 헤로쿠를 설치할건데 헤로쿠 페이지의 우측상단에 9개의 점을 클릭해서 Documentation을 선택하면
이런 화면이 나타난다.
get Started 클릭 -> JAVA 선택 -> set up으로 가서 운영체제에 맞는 방법으로 헤로쿠 설치
윈도우의 경우 설치 후 heroku login을 하면 바로 작동하지만 git bash의 경우 git bash에 apth구성이 등록되어있지 않기 때문에 나타난 오류인데, heroku cli를 설치할때 경로를 바꾸지 않았다면 git bash에서
/c/Program\ Files/Heroku/bin/heroku login
라고 입력하면 실행이 가능하다.
만약 로그인이 되는 것을 확인 했다면 PATH를 추가해서 나중에는 heroku 만 입력해도 로그인이 될수 있게 수정한다.
PATH="$PATH:/c/Program Files/Heroku/bin"
이제 heroku login을 입력하면 로그인 확인 문구가 나타난다.
아무키나 누르면 사이트가 나타나고 로그인 버튼을 누르면 이제 로그인이 완료 된 것이다.
그 다음으로는 Procfile을 만들어야 한다. 프로젝트 루트 경로에 Procfile
을 생성한다.
web: java $JAVA_OPTS -Dserver.port=$PORT -Dspring.profiles.active=heroku -jar build/libs/bulletin-board-0.0.1-SNAPSHOT.jar
gradle 빌드를 하기 위해서는 위와같은 방식으로 작성해야한다. jar파일의 경로는 프로젝트 파일중에 build/libs에 jar 파일이 있는데 현재 내 libs 에 있는 jar 이름이 bulletin-board-0.0.1-SNAPSHOT.jar 이라고 되어있는데, build.gradle
에서 버전 이름에 따라 jar 이름이 결정되는것이다.
따라서 version을 V1.0이라고 변경한뒤 clean/build를 하면
jar 이름이 변경된 것을 볼수 있다.
따라서
web: java $JAVA_OPTS -Dserver.port=$PORT -Dspring.profiles.active=heroku -jar build/libs/bulletin-board-v1.0.jar
Procfile 에 위와같이 작성해준다. 하지만 헤로쿠 설정을 추가했으니 1.1버전으로 변경한다.
루트 경로에 system.properties
를 생성하고 자바의 버전을 기록한다.
java.runtime.version=17
헤로쿠 배포에 필요한 설정내용을 추가한다.
jar {
manifest {
attributes('Main-Class': 'com.jycproject.bulletinboard.jycBulletinBoardApplication')
}
여기서 Main-Class 에 들어가는 내용은 본인의 프로젝트 경로와 프로젝트 어플리케이션 이름이니 각각 다를 수 있다.
배포가 잘 동작하는지를 확인하고 나서 merge를 해주는것이 좋기 때문에 신중하게 작업할 것.
변동사항을 commit/push 하고 mr을 하기 직전까지 간상태에서 헤로쿠 페이지로 돌아가보면
자동으로 deploy 설정을 해줬기 때문에 Overview 항목에서 Lastest activity에 항목이 추가되어있을 것이다.
이제 gitbash 에서 heroku create를 입력해서 앱을 생성한다.
그러면 이제 gitbash에서 heroku create를 입력해서 앱을 생성한다. 만약 헤로쿠 대시보드로 앱을 만들었다면
heroku git:remote --app example-app
해당 내용을 추가해야한다. 이때 app의 이름은 자신이 add app에서 추가한 app의 이름이다.
따라서
heroku git:remote --app bulletinboard-jyc
을 입력해준다.
그다음에는 push를 해주면 되는데, 이때 현재 프로젝트에 pr을 끝내지 않았기 때문에 헤로쿠에 관련된 설정이 프로젝트에 추가되지 않은 상황이다.
아마 지금 git puch heroku main을 입력하면 오류가 나타날 것이다.
예상대로 오류가 나타났다.
push가 제대로 이루어지지 않았으니 헤로쿠의 서비스가 어떻게 이용되고 있는지를 보여주는 heroku ps를 입력해도 아마 제대로 나타나지않고 dyno도 없다고 나타날 것이다.
자! 여기서 이제 전에 완료하지 않은 merge를 완료시킨다.
이렇게 하고 나서 헤로쿠 페이지의 overview로 가보면 자동으로 빌드가 진행되는 것을 볼수 있다.
성공한 빌드로그를 확인해보면 아까 프로젝트에서 작성한 헤로쿠 관련 설정이 적용된 모습을 볼수 있는데, java의 버전을 17로 설정한 내용이 그대로 나타난 것을 확인할 수 있다.
이제 heroku open
이라고 입력하면 웹페이지에 서비스를 보는 명령어이다.
입력해서 사이트가 나타나면 아마 오류가 나타날 것이며, 해당 오류를 확인할수 있는 명령어도 알려준다.
heroku logs --tail
이라고 입력하면 로그가 나타나는데 app Crashed 문구가 있는 걸 봐서 app이 그냥 꺼진것 같다.
원인은 바로 애드온인 ClearDB MySQL인데
https://devcenter.heroku.com/categories/add-on-documentation 이 링크로 들어가면 헤로쿠가 제공하는 모든 애드온을 볼수 있는데 그중에 ClearDB MySQL로 들어가서 적당한 버전 숫자로 검색해보면
요런 내용이 나오는데, 이것은 "MySQL은 기본 5.6 버전 지원하고 있고, 설정을 변경한다면 5.7 까지 지원할수 있습니다. "
현재 내가 사용하고 있는 mysql 버전이 무려 8인데, 여기는 5.6~ 7을 지원하고있댄다.따라서 ClearDB MySQL 대신에 다른 애드온을 사용하기로 했다.
JawsDB MySQL인데 이 애드온은 mysql 8버전을 지원한다.
따라서 Resources로 가서 ClearDB MySQL을 제거한 다음 JawsDB MySQL을 검색해서 추가한다.
그리고 나서 Setting에서 Config Vars로 가보면 환경 변수의 이름이 달라져있을 것이다.
application.yaml
의 내용을 변경한다.
url: ${JAWSDB_URL}
변동사항을 push 해서 mr까지 완료 하면 Overview에 변동사항에 따른 build가 시작될 것이다.
build가 완료된 것을 확인한 다음 open app을 클릭하면
헤로쿠를 사용해서 성공적으로 배포가 완료되었다.