tools & libs/ETC

[Cloud] Heroku & Spring Boot

  • -

Heroku가 모든 서비스를 유료화 했습니다. 이제 더이상 무료 호스팅을 지원하지 않습니다.

강의를 하다보면 (특히 Vue 같은 SPA) 테스트를 위해 백엔드에서 동작하는 REST 서비스가 필요한 경우가 많다. 그래서 이제까지 한번 만들고 버렸던 프로젝트가 한둘이 아니다. 정성들여 만들어 놓고 어디 뒀는지 찾다가 포기. ㅜㅜ

그래서 AWS에 서비스를 등록했었는데 올린 후 내리는걸 깜빡 해서 과금이 되는 불상사를 격고는 손절 하고 있다가 Heroku에 등록해서 몇일 써봤다. (Heroku는 애플리케이션 하나에 대해서는 무료이다. )

이번 포스트에서는 Heroku를 통한 스프링 부트 애플리케이션 운용에 대해서 살펴보자.

 

Cloud Service의 종류와 Heroku

 

Cloud Service의 종류

클라우드서비스는 서비스의 유형에 따라 IaaS(Infrastructure-as-a-Service), PaaS(Platform-as-a-Service), SaaS(Software-as-a-Service) 와 같은 용어로 서비스의 형태를 구분한다. 아래의 이미지는 각 서비스의 특징에 대해서 잘 보여주고 있다.

자료출처: IaaS, PaaS 및 SaaS 비교 (redhat.com)

즉 on-site는 개발자가 컴퓨터 구매, 네트워크 설정 등의 작업 부터 SW 개발까지 모조리 진행하는 것라면 IaaS는 Infrastructure 즉 Network~Virtualization 까지는 클라우드가 해줄테니 나머지를 개발자가 처리하라는 것이다. PaaS는 다시 IaaS 위에 OS와 프로그램을 위한 runtime(JVM 같은) 까지 준비 해놓을 테니 개발자는 데이터와 애플리케이션만 준비하면 된다. SaaS는 이마저도 다 되어있으니 그냥 쓰면 된다.

 

Heroku?

Heroku란 salesforce라는 회사에서 운영하는 클라우드 서비스로 PASS이다. 

Cloud Application Platform | 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

 

기본적으로 AWS를 IaaS라고 봤을 때 Heroku를 사용하면 아래와 같이 Infrastructure와 Platform이 제공되는 상태에서 Application Logic 만 공급하면 되는 것이다!!

자료출처: Heroku vs AWS: What is the Difference? (guru99.com)

 

엄청 좋을 것만 같지만 결국 heroku는 aws에서 호스팅 된다고 한다. 따라서 사용하려면 aws 기본 비용 + heroku 비용 해서 당연히 더 비싸다. ㅜㅜ 

따라서 기업 입장에서는 개발자를 좀 더 갈궈서 IaaS 를 다룰 수 있게 하면 구지 비싼 비용으로 PaaS를 사용할 필요가 없나??

이것 이외에도 장/단점들이 많이 있지만 개인적으로 Heroku를 사용하려는 이유는 공짜이기 때문이다.

https://www.heroku.com/pricing

 

Heroku는 "Free and Hobby" 요금제를 가지고 있어서 개인 프로젝트를 호스팅하기에 아주 유용하다.

 

 

Heroku에 앱 만들기

간단한 회원 가입 과정을 마친 후 Heroku에 앱을 만드는 과정을 살펴보자.

Create new App

login 후 첫 화면(https://dashboard.heroku.com/apps)에서 Create new app을 선택한다.

다음 화면에서 적절한 App name을 입력 후 Create App을 클릭한다.

너무 설명할게 없다. ㅜㅜ 

 

Application Deploy

앱이 생성되었다면 이제 runtime 까지는 Heroku가 다 준비해줄꺼니까 Application Logic에 해당하는 Spring Boot App만 제공하면 끝이다.!!

이것 역시 Git 기반으로 프로젝트를 관리하고 있다면 아주 간단히 처리된다. 당연히 Git 기반이리라 추측한다. 생성된 애플리케이션의 deploy 메뉴로 이동하면 3가지 deploy 방식을 제시한다.

 

GitHub

git을 이용해서 project를 진행해왔다면 두 번째 옵션이 GitHub이 가장 편한 선택지이다. [Connect to GitHub]을 선택하면 바로 연동이 됐었는데.. 언젠가 부터 안된다. (2022.05.11 일 현재..)

안돼니까 별로 할말은 없는데 이게 됬을 때는 GitHub 에 push 되는 순간 heroku에도 자동으로 push가 되는 CI(Continous Integration)이 지원된다.

 

Heroku Cli 활용

Heroku CLI를 이용하면 조금 손이 가지만 역시 git을 이용해서 손쉽게 관리할 수 있다.

먼저 Heroku CLI(Command Line Interface)를 설치한다.

The Heroku CLI | Heroku Dev Center

 

The Heroku CLI | Heroku Dev Center

Last updated April 26, 2022 The Heroku Command Line Interface (CLI) lets you create and manage Heroku apps directly from the terminal. It’s an essential part of using Heroku. Install the Heroku CLI Pre-requisites The Heroku CLI requires Git, the popular

devcenter.heroku.com

 

다음으로 prompt에서 heroku login을 통해서 로그인 한다.

d:\workspaces\ws_eclipse\utils\multiplex>heroku login
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/~~~~~~~~~~~~~~~~~~~~~~
Logging in... done
Logged in as itsmeyjc@~~~~

 

로그인 성공 후 git으로 관리하는 프로젝트로 이동해서 현재 프로젝트의 git 주소를 remote 명령으로 추가해준다.

d:\workspaces\ws_eclipse\utils\multiplex>heroku git:remote -a 앱이름
set git remote heroku to https://git.heroku.com/somerest.git

이제 git remove -v 명령을 통해 확인해보면 기존의 origin과 함께 heroku가 추가된 것을 볼 수 있다.

d:\workspaces\ws_eclipse\utils\multiplex>git remote -v
heroku  https://git.heroku.com/somerest.git (fetch)
heroku  https://git.heroku.com/somerest.git (push)
origin  https://github.com/quietjun/multiplex.git (fetch)
origin  https://github.com/quietjun/multiplex.git (push)

이제 마지막으로 heroku로 push 해주면 작업 완료이다.!!

d:\workspaces\ws_eclipse\utils\multiplex>git push heroku -f
Enumerating objects: 644, done.
Counting objects: 100% (644/644), done.

 

동작 확인

이제 Open app 버튼을 클릭하면 배포된 앱이 멋지게 실행되는 것을 볼 수 있다.

그럼 앱이름.herokuapp.com 에서 배포한 앱이 잘 실행되는 것을 볼 수 있다. 

 

이처럼 PaaS를 사용하면 단지 애플리케이션만 준비하면 나머지는 그냥 "된다"

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.