지난번에 AWS 인스턴스를 생성해 배포까지 진행했었다.
해당 프로젝트에서는 DB를 이용하는 부분이 있었기에 AWS RDS 연결에 대해 다뤄보려고 한다.
이번에도 참고한 블로그가 있다!

Aurora and RDS 메뉴에 들어가서 데이터베이스 생성 클릭
나는 MariaDB 최신버전을 선택했다.

프리 티어를 잊지 않고 선택해준다.
마스터 사용자 이름과 암호는 후에 코드 상에서 DB 접속할 때 필요하기 때문에 작성하고 잊지 말 것.
나는 이미 생성해 둔 인스턴스에 해당 DB를 연결할 것이기 때문에 EC2 컴퓨팅 리소스에 연결해준다.
이 외의 chartset 설정 등은 위에 언급한 블로그와 동일하게 처리했다.
지금까지 내가 사용한 mariadb 모듈화 코드는 다음과 같다.
import mariadb from 'mysql2/promise';
import dotenv from 'dotenv';
import path from 'path';
dotenv.config({ path: path.resolve(__dirname, '../.env') });
// db 연결 정보
const pool = mariadb.createPool({
host: process.env.DB_HOST,
port: process.env.DB_PORT ? parseInt(process.env.DB_PORT) : 3306,
user: process.env.DB_USER,
password : process.env.DB_PASSWORD,
database: 'quizchat',
dateStrings : true
});
export default pool;
여기서 host, port, user, password를 내가 새로 생성한 RDS에 맞게 작성해주면 된다.
user와 password는 위에서 작성했던 마스터 이름과 암호이다.
port는 기본적으로 3306인데 본인 환경에 맞는 것으로 선택하자.
host는 RDS의 엔드포인트를 입력해준다.
나는 EC2 인스턴스와 RDS를 바로 연결했기 때문에 로컬 환경에서는 해당 엔드포인트로 접속할 수 없다. 하지만 테스트는 해야하기 때문에..
이럴 때 필요한 것이 터널링이다.
서버 컴퓨터에 접속할 때와 마찬가지로 pem파일이 위치한 곳에 이동해서 다음 명령어를 입력한다.
ssh -i pem파일명 -N -L 로컬포트:RDS엔드포인트:RDS포트 EC2유저명@EC2퍼블릭IP
내가 로컬 환경에서 위에서 입력한 로컬포트로 접속하면 RDS의 포트로 연결되는 식이다. MySQL Workbench같은 툴을 이용해서 로컬 3306 포트로 접속해도 서버의 RDS로 접속할 수 있다는 사실 😉👍
이렇게 하면 수정해야 하는 부분이 있으니 체크해주자.
backend:
build: ./backend
extra_hosts:
- "host.docker.internal:host-gateway"
docker 컨테이너 내부에서 host.docker.internal 이름으로 내 로컬 컴퓨터 주소를 지정해준다. 터널링은 RDS 포트와 내 로컬 포트 사이에 이루어졌기 때문에 docker가 내 로컬 주소를 알고 있을 필요가 있다.
.env의 DB_HOST 주소도 수정해주자. docker-compose에서 지정한 변수를 그대로 가져온다.
DB_HOST=host.docker.internal