전공영역 공부 기록

github action과 heroku를 이용한 스프링부트 자동화 빌드/배포

악분 2021. 6. 29. 06:50
반응형

목차

     

     

    안녕하세요. 이 글은 githbub action과 heroku를 이용해서 스프링부트 애플리케이션을 무료로 배포하는 과정을 설명합니다. 실습이 막히신 분들은 영상을 참고하시면 좋을 것같습니다.

     

    https://youtu.be/YMdwYPCyxRk

     

    1. Heroku란?

    무료로 스프링부트 애플리케이션을 배포할 수 있는데요. 바로! heroku를 이용하는 것입니다. heroku는 2021년 6월 기준 5개까지 무료로 애플리케이션을 배포합니다. heroku공식 홈페이지를 참고하면 dynos리눅스 컨테이너 런타임을 이용해서 사용자 애플리케이션을 실행한다고 설명합니다. 

    그림1 출처: https://www.heroku.com/private-spaces

     

    heroku의 특징 중 한개는 github과 연동이 되며 소스코드 빌드/애플리케이션 배포까지 수행합니다. 공식홈페이지에서는 buildpack 번들이 빌드/배포 역할을 수행한다고 설명합니다.

    그림2 출처: https://www.heroku.com/elements/buildpacks


    buildpack이 모든 프로젝트를 빌드하는 것은 아닙니다. [그림 3]처럼 해당하는 언어로 구성된 프로젝트만 빌드할 수 있습니다.

    그림3 buildpack이 빌드 가능한 언어

     

    2. github action이란?

    github action은 특정 작업을 실행하고 없어지는 가상환경인데요. 특정 git 이벤트가 발생하면 자동으로 트리거되서 사용자가 요청한 작업을 수행하고 사라집니다. 아직 아키텍처는 보지 않았지만 아마도 컨테이너 또는 FAST VM기반이지 않을까 생각됩니다.

     

    github action 활용 예로는 github main 브랜치에 소스코드가 push되면 팀원들에게 slack알림메세지를 보낼 수 있습니다. 보통은 빌드/배포 파이프라인을 많이 구축합니다.

     

     

    3. github action 생성

    3.1 워크플로우 생성

    githuh action에서 생성한 프로젝트를 워크플로우라고 합니다. [그림4]처럼 github 프로젝트 상단 메뉴에서 Action을 클릭하고 set up a workflow yourself링크를 클릭합니다.

    그림4 github action 워크플로우생성

     

    3.2 heroku 템플릿 사용

    워크플로우가 실행할 작업을 githbub action문법에 맞게 적어야합니다. 다행히도 저희는 다른사람이 만들어놓은 heroku템플릿을 사용할겁니다. 먼저 [그림5]처럼 기존에 존재한 내용 일부를 삭제합니다.

    삭제하지 않은 actions/checkout@v2는 git clone과 git checkout 명령어를 실행합니다. 

    [그림5] 기존 워크플로우 내용 일부 삭제

     

    다른 사람이 작성한 템플릿은 marketplace에서 검색할 수 있십니다. 저희는 deploy to heroku를 사용할겁니다. [그림6]처럼 marketplace에서 deploy to heroku를 검색하고 AkhileshNS님이 만든 템플릿을 선택합니다. 현재 스타수가 300개 이상입니다.

    [그림6] marketpalce검색

     

    필수항목만 복사해서 워크플로우에 붙여넣습니다. 선택항목은 Optinal이라는 주석이 있습니다. 복사가 끝나면 github action이 heroku에 빌드/배포 요청할 수 있도록 heroku 접속정보와 액세스토큰을 입력해야 합니다.

    [그림7] 일부내용 복사

     

    3.3 heroku애플리케이션 생성

    heroku에 로그인 한 후 애플리케이션을 생성합니다.

    [그림8] herokuj 애플리케이션 생성 버튼

     

    애플리케이션 이름을 입력하고 Create app버튼을 클릭합니다.

    [그림 9] 애프리케이션 이름 입력

     

    3.4 워크플로우에 heroku 접속정보 입력

    접속정보는 액세스 토큰, 이메일과 같은 민감정보가 있습니다. github은 민감정보를 외부에 변수로 설정해서 임포트하는 방법을 제공합니다. 이 외부변수를 secret이라고 합니다. secret에 저장된 변수는 내부적으로 암호화되서 저장된다고 합니다.

     

    저희가 워크플로우에 입력해야 하는 heroku접속정보를 모두 secret으로 생성하면 됩니다.

    • 액세스토큰
    • 애플리케이션 이름
    • 계정 이메일

     

    github 프로젝트 상단 메뉴에서 Settings > Secrets를 클릭 한 후 new repository secret버튼을 클릭합니다.

    [그림 10] secret생성 페이지 이동

     

     

    변수이름과 값을 입력만 하면 secret이 생성됩니다.

    [그림11] secret생성방법

     

    총 3개의 secret를 생성해야합니다. 

    [그림12] 생성해야하는 secret

     

    액세스토큰은 heroku에 로그인 한 후, 상단 오른쪽 위 마이메뉴 클릭 > Account Settings 메뉴를 클릭하면 확인할 수있습니다.

    [그림13] heroku액세스토큰 구하는 과정

     

    [그림12]에서 입력한 secret을 [그림7]에서 생성했었던 워크플로우에 사용합니다.

    [그림14] 워크플로우에 secret입력

     

    오른쪽 위 Start commit버튼을 클릭하면 워크플로우가 생성됩니다.

    [그림15] 워크플로우 생성

     

    생성한 워크플로우는 github 프로젝트에 yaml파일로 저장됩니다. 파일 경로는 .github/workflows에 저장됩니다.

    [그림16] 워크플로우파일 확인

     

    기본 템플릿 설정은 main브랜치에 push이벤트가 성공하면 생성한 워크플로우가 자동으로 실행됩니다. 방금 워크플로우 파일이 push되었으므로 github action은 워크플로우를 자동으로 실행합니다.

    github 프로젝트 상단 Actions메뉴를 클릭하면 주황색깔로 표시된 워크플로우가 보입니다.

    [그림17] 워크플로우 실행 확인

     

    [그림 9]에서 생성한 heroku프로젝트로 이동하면 github 프로젝트에 있는 스프링부트가 빌드되고 있습니다.

    [그림18] 스프링부트 프로젝트를 빌드중인 heroku

     

    빌드가 성공하면 build succeeded메세지가 나옵니다. 그리고 곧바로 빌드 아티팩트가 slug형태로 배포됩니다. heroku 프로젝트 화면 오른쪽 위에 open app버튼을 클릭하면 배포된 결과물을 확인할 수 있습니다.

    [그림19] 빌드/배포 성공 확인

     

    현재 저의 스프링부트 애플리케이션은 helloworld를 출력합니다. [그림 20]과 같이 helloworld가 잘 뜬 것이 확인됩니다.

    [그림20] 배포된 스프링부트 애플리케이션 확인

     

    4. 주의사항. Heroku 사용가능시간

    heroku 가격정책을 보면 한달에 550시간을 무료로 사용할 수 있습니다. 신용카드를 등록?하면 1000시간까지 사용할 수 있습니다.

    [그림21] heroku 가격정책(출처: https://www.heroku.com/pricing)

    반응형