[AWS] Elastic Beanstalk 데이터베이스 연동 for Node js


안녕하세요. 남산돈가스 입니다.

지난 번에 이어서 Elastic Beanstalk에 대한 포스팅을 조금 더 이어가보려고 합니다.

저번 포스팅에서는 eb cli를 이용하여 로컬 작업환경에서 유연하게 eb를 컨트롤하는 법을 알아 보았습니다.

이번 포스팅에서는 Elastic Beanstalk 환경에서 데이터베이스(RDS)를 생성하고, 직접 연동하는 법을 소개 해드리려고 합니다.


연동 예제는 Node js기반으로 설명하고, Node js 에서의 DB 접속은 sequelize 라는 npm 모듈을 이용하여 설명드리겠습니다.

먼저, 지난 포스팅에서 이용했던 eb create 라는 명령어를 이용해 새로운 환경을 만들겠습니다.


eb create 명령어를 이용하여 "eb-express-staging"이라는 환경을 새로 생성하였습니다.

콘솔로 이동해보니, 환경이 정상적으로 생성 된 것을 아래와 같이 확인하실 수 있습니다.

새로 생성한 환경을 선택하고 왼쪽 탭에 구성으로 가보면, "eb-express-staging" 환경의 구성정보를 확인하실 수 있습니다. 

그 중에서 하단에 데이터베이스 항목을 보시면 설정 없이 비어있는 것을 확인하실 수 있습니다.
데이터베이스를 생성하고 연동하기 위하여 데이터베이스 영역 밑 '수정'을 클릭합니다.



데이터베이스 수정페이지에선, 현재 생성되거나, 설정되어있는 DB가 없는 경우 새로 생성할 수 있습니다.
DB 엔진, 버전, 인스턴스 종류, 용량, username, password 등 기본적인 정보를 입력한 뒤 적용을 선택합니다.

적용을 누르고, 대략 10~15분이 지나면 새로운 DB가 생성 된 것을 확인하실 수 있습니다.


 이렇게 생성 된 DB는 실제 RDS 콘솔에서도 확인하실 수 있습니다. Elastic Beanstalk 콘솔에서 기본적으로 생성한 정보들 이외에도 상세 설정 정보들은 RDS 콘솔에서 변경이 가능합니다.


이제 실제 EB 환경에서 설치 된 DB 접속을 해보겠습니다.

예제로 생성한 eb-express-staging 환경은 nodejs express 기반의 프로젝트입니다.
nodejs 에서 DB ORM 모듈 중 하나인 sequelize를 이용하여 생성한 데이터베이스를 연동해보겠습니다.

아래 소스는 sequelize 모듈을 이용해 mysql 접속정보를 입력하는 소스 부분입니다.


const Sequelize = require('sequelize');

const sequelize = new Sequelize(process.env.RDS_DB_NAME, process.env.RDS_USERNAME, process.env.RDS_PASSWORD, {
    host: process.env.RDS_HOSTNAME,
    dialect: 'mysql',
    operatorsAliases: false,

    pool: {
        max: 5,
        min: 0,
        acquire: 30000,
        idle: 10000
    },

});


module.exports = sequelize;

모듈에서 새로운 Seqeulize라는 객체를 생성하기 위해 필요한 접속정보로 DB명, 사용자이름, 비밀번호, 접속 Host 가 필요한 데, 일반적으로, 이런 정보들은 환경변수로 관리를 하는게 일반적이라서, 실제 소스 부분을 보더라도, process 함수를 이용해 환경변수를 불러오도록 코딩을 하였습니다. 그렇다면,
위 소스처럼 DB명, 사용자이름, 비밀번호, 접속 Host 를 서버를 올릴 때 마다 관리해줘야하는 불편함이 있을 것 같은데요.

하지만, Elastic Beanstalk 환경에선 이 정보들을 구성 -> 데이터베이스에서 설정한 정보를 자동으로 맵핑해주고 있기 때문에, 각각의 서버에 직접 저 환경변수들을 설정해줄 필요가 없습니다.

Amazon RDS DB 인스턴스를 Node.js 애플리케이션 환경에 추가 를 참고하면,

  • RDS_HOSTNAME – DB 인스턴스의 호스트 이름입니다.
    Amazon RDS 콘솔 레이블 – Endpoint(호스트 이름)
  • RDS_PORT – DB 인스턴스가 연결을 허용하는 포트입니다. 기본값은 DB 엔진마다 다릅니다.
    Amazon RDS 콘솔 레이블 – Port
  • RDS_DB_NAME – 데이터베이스 이름(ebdb)입니다.
    Amazon RDS 콘솔 레이블 – [DB Name]
  • RDS_USERNAME – 데이터베이스에 대해 구성된 사용자 이름입니다.
    Amazon RDS 콘솔 레이블 – [Username]
  • RDS_PASSWORD – 데이터베이스에 대해 구성된 암호입니다.
위의 저 다섯가지의 환경변수들로 접속 정보를 셋팅하면 자동으로 정보를 잡아준다고 합니다.

실제로, 아무런 환경변수 설정없이 접속이 되는지 확인해보겠습니다.

Elastic Beanstalk의 환경변수를 확인하시려면 구성 -> 소프트웨어 -> 환경 속성을 확인하시면 됩니다.


보시는 것 처럼, 아무런 환경 변수도 설정되어 있지 않은 상태입니다.

그렇다면, 실제 DB접속이 되는지 확인하기 위해서, 예제로 users라는 테이블을 조회하는 GET - /users API 를 작성한 뒤, 샘플 데이터를 미리 하나 insert 해두었습니다.

Postman을 이용하여, "eb-express-staging" 환경의 접속 URL + /users API를 호출해보면,


insert했던 users의 데이터가 조회 된 것을 확인하실 수 있습니다.



EB 환경 구성을 이용하여 번거로운 DB연동 작업까지 편리하게 설정할 수 있어서 다시 한번, Elastic Beanstalk 매력에 빠지게 된 것 같습니다.

감사합니다.



댓글

주간 인기글

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

[Angular] 모델, 값이 바뀌었는데 화면 template 이 업데이트 되지 않을 때 조치 팁

AWS Lambda - API Gateway로 S3 파일 업로드 API 만들기 #3 - API Gateway - Lambda 연결 및 테스트

[AWS] Lambda + API GateWay를 이용해 간단한 RESTful API 만들기 #1

[AWS] Lambda + API GateWay를 이용해 간단한 RESTful API 만들기 #2