본문 바로가기
프로그래밍/웹 개발

[Heroku] Node.js 서버 및 DB 무료 배포/호스팅 (MySQL & Sequelize)

by 제이콥J 2022. 1. 19.
Sequelize Version : ^6.12.0-alpha.1

mysql Version : 2.18.1

mysql2 Version : 2.3.3

 

1. create new app을 통해 서버 배포 준비하기

heroku 터미널 사용과 서버 배포 방법은 유튜브와 구글링을 통해 쉽게 찾을 수 있기 때문에 생략했습니다.

여기서는 MySQL과 Sequelize를 사용한 DB 연결을 중점적으로 포스팅했습니다.

 

그래도 서버 배포를 위해 입력해야할 기본 코드들은 아래와 같이 정리했습니다.

 

서버 index.js 파일에서 port에 환경변수 process.env.PORT를 할당해야합니다.

저는 express 라이브러리를 사용했으며, 사용한 코드는 아래와 같습니다.

// server의 index.js

const port = process.env.PORT || 5000

 

PORT는 heroku에서 사전 설정된 환경변수입니다.

heroku의 사전 설정 환경변수는 다음 코드로 확인할 수 있습니다.

# heroku의 환경변수를 확인하는 명령어
heroku run printenv

 

index.js 파일과 같은 경로에 'Procfile' 라는 파일을 만들어 아래 코드를 입력하고 저장합니다.

띄어쓰기가 틀리면 에러가 발생하므로 주의합니다.

// Procfile 파일에 기재할 내용

web: node index.js

 

2. Resource 메뉴에서 JawsDB MySQL 생성

해당 Add-ons을 생성하기 전에 결제 카드를 먼저 등록해야합니다.

Add-ons 검색창에 'JawsDB MySQL'를 입력 후 선택합니다.

이후 생성된 'JawsDB MySQL' 아이콘을 클릭합니다.

 

 

3. Heroku의 DB 정보 확인하기

위에서 'JawsDB MySQL' 아이콘을 클릭하셨다면 DB 정보에 관한 창이 등장합니다.

 

Host, Username, Password 정보를 통해 Heroku의 DB에 원격으로 접속할 수 있습니다.

MySQL workbench, Sequel Pro 등을 사용할 수 있습니다.

 

배포 단계에서 서버와 DB를 연결하기 위해 Connection String의 url 주소가 사용됩니다.

 

 

4. 서버와 DB를 연결하기

config 디렉토리의 config.js 파일에서 production 모드의 코드를 아래와 같이 변경합니다.

이로서 Heroku에서 서버와 DB 연결은 완료되었습니다.

 

// config/config.js

module.exports = {
  "development": {
    // 생략
  },
  "test": {
    // 생략
  },
  "production": {
    "use_env_variable": "JAWSDB_URL", 
    "dialect": "mysql"
  }
}

 

 

부가 설명을 드리면, models 디렉토리 내 index.js 파일에서 아래 코드로 인해 DB와 연결이 됩니다.

 

// models/index.js 파일 일부

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}

// process.env[config.use_env_variable]은 process.env.JAWSDB_URL이 됨
// JAWSDB_URL은 Heroku의 사전 설정 환경변수로, Connecting String의 url 주소를 담고 있음

 

 

참고링크

https://www.youtube.com/watch?v=AQp7b-1356k

https://dev.to/lawrence_eagles/causes-of-heroku-h10-app-crashed-error-and-how-to-solve-them-3jnl

 

반응형

댓글