제육's 휘발성 코딩
article thumbnail
반응형

Heroku 란?

Heroku에 대해 간단하게 알아보자. Heroku는 클라우드 서비스 중 하나로, dynos라는 리눅스 런타임 애플리케이션 관리 컨테이너를 통해 사용자가 직접 서버를 관리하지 않아도 되는 PaaS 형 플랫폼을 제공해 준다. (Node, Java, Python, Go 등 거의 대부분의 언어 지원)

 

사용자가 github에 푸시를 하면 해당 애플리케이션을 빌드하고 slug 타입으로 배포해 주어 AWS 등과 비교해 봤을 때 편하게 배포할 수 있다는 장점이 있다. 단, 버전 설정과 같은 인프라 설정은 제공하지 않기 때문에 디테일한 설정이 필요한 경우엔 불편한 점이 있어 장단점이 존재한다. 

 

작년 11월까지는 무료로 dynos 컨테이너를 제공해왔지만 현재는 유료버전으로 변경되어 구독 방식으로 월 $5에 최대 1000시간을 사용할 수 있다.

 

Heroku 배포하기

이어서 Heroku 앱 생성과 GitHub Action 연동을 진행해 보자.

 

회원가입

Heroku 홈페이지에 접속해서 회원가입을 진행하자.

 
 

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

 

 
Heroku 대시보드 > create new app 클릭

회원가입을 진행하게 되면 대시보드 화면에 Create new app 메뉴가 화면에 보인다. 해당 버튼을 클릭해서 앱을 생성하자.

 

App name 지정 후 Create app

 사용할 앱 명을 지정한 후 리전을 설정하자. 결제 카드가 등록되지 않은 경우 등록을 해야 앱을 생성할 수 있다.

 

우측 상단 계정 아이콘 > 계정 설정 > API Key 메뉴 Reveal 클릭 후 API Key 복사

우측 상단에 계정 아이콘을 클릭하고 계정 설정 버튼을 누르면 프로필, SSH Keys, API Key 등의 정보를 확인할 수 있다. Heroku 배포를 위해선 API Key 정보가 반드시 필요하므로 키 값을 저장해 두자.

 

 GitHub Action 연동 

Heroku 서버에 접속하기 위해 Heroku에서 가입한 정보(API key, 이메일, 앱 이름 등)를 GitHub에 설정해주어야한다. 
 
API 키의 경우 배포 시나리오에 직접 등록해줘도 되지만, 보안 문제를 대비해 레포지토리에 Secret Variable로 선언해두는 것이 안전하다. 
 
GitHub 레포지토리 > Settings > Secrets and variables > Actions > New repository secret 클릭

배포를 진행할 GitHub 레포지토리에서 설정 메뉴에 들어가 보면 Secret 변수 설정하는 메뉴가 있다. 

 

원하는 키 이름을 입력 후 Secret API KEY 입력

 

사용할 API 키 이름과 이전에 저장한 실제 키 값을 입력 후 저장하자. 이제 Heroku 배포를 위한 배포 시나리오 작성과 설정 파일 2개만 등록하면 된다.

배포 시나리오 작성 (.github/workflows)

name: Deploy

on:
  # push 트리거 
  push:
    # main 브랜치
    branches: [ main ]
  workflow_dispatch:

jobs:

  build:
  
    runs-on: ubuntu-latest

    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v3

      - name: Deploy to Heroku
        # 사용할 라이브러리
        uses: AkhileshNS/heroku-deploy@v3.12.12
        with:
          # 레포지토리에 등록한 API KEY 이름 입력 
          heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
          # Heroku에 로그인한 이메일 정보 입력
          heroku_email: sasca37@naver.com
          # Heroku에서 생성한 앱 이름 입력 
          heroku_app_name: sasca37-service
  • main 브랜치에서 푸시가 일어날 때 Heroku에 배포되도록 구성하자. 참고로 Github Actions 사용을 위해 프로젝트 루트 디렉토리 > .github/workflows 디렉토리를 생성한 후 배포 yml을 작성하여야 한다. 
  • 배포 시나리오 작성할 때 레포지토리 Actions 메뉴에서 set up a workflow yourself 클릭 후 관련 배포 시나리오 예시를 보고 작성하는 것이 편하다.

 

system.properties 작성

java.runtime.version=11
  • 자바 11 버전 이상일 경우 system.properties 파일을 생성해서 사용할 버전명을 명시해주어야 한다. (기본은 자바 8 지원) 파일 경로는 프로젝트 루트 디렉토리에 생성한다.

 

Procfile 작성

web: java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/XXXX-0.0.1-SNAPSHOT.jar
  • Heroku 서버에서 애플리케이션을 빌드할 명령어를 선언해 주자. system.properties와 마찬가지로 프로젝트 루트 디렉토리에 생성해야 한다.

 

GitHub Action workflow

  • 레포지토리로 애플리케이션을 푸시하면 다음과 같이 workflow run 모습을 볼 수 있다.

 

Heroku app Deploy Overview

  • 배포가 완료되면 다음과 같이 앱이 정상적으로 배포된 화면을 Heroku 홈페이지에서 확인할 수 있다.

 

Heroku 수면모드 방지

Heroku는 배포 후 30분 동안 웹 트래픽이 없을 경우 자동으로 Sleep 모드에 진입하고 Sleep 모드에서 요청이 오면 일정 대기 시간이 발생한다고 한다. 직접 스케줄러로 요청을 주거나, 하단의 링크에 앱명을 등록하면 수면 모드를 방지할 수 있다.

https://kaffeine.herokuapp.com/

 

Kaffeine

Remove your app from Kaffeine. http:// .herokuapp.com Decaf App not found Your app has been removed.

kaffeine.herokuapp.com

 

반응형
profile

제육's 휘발성 코딩

@sasca37

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 맞구독은 언제나 환영입니다^^