개발새발 로그

[NestJS] 데이터베이스 AWS RDS 사용하기 본문

카테고리 없음

[NestJS] 데이터베이스 AWS RDS 사용하기

이즈흐 2025. 12. 24. 19:14

📖들어가며..

이전에 NestJS 프로젝트를 배포해보았다.

그럼 이제 데이터베이스를 배포해야한다.

 

의미를 또 찾아보니 "DB를 배포한다." 라고 하기 보다 "이미 떠있는 DB에 테이블/컬럼/인덱스 변경을 반영" 이라고 한다.

그럼 "이미 떠있는 DB"를 위해 나는 AWS의 RDS를 사용하려고 한다.

아래처럼 여러가지 있다고 하는데 이전에 AWS를 사용해보았고, AWS가 개발자들 사이에서 48% 사용률로 가장 많이 사용되고 있다해서 선택했다.

 

  • AWS RDS / Aurora
  • GCP Cloud SQL
  • Azure Database

 

 

 


AWS RDS

EC2 환경에서도 데이터베이스를 설치해서 사용할 수 있지만 RDS를 이용하면 따로 설치하지 않고 쉽게 데이터베이스를 사용할 수 있다.

RDS 또한 프리티어를 제공한다.

RDS는 프리티어가 끝나면 비용이 좀 비싼 편이므로 유의해야한다.

 

Aurora and RDS를 클릭한다.

Aurora and RDS가 무슨뜻이지?
RDS는 AWS의 관리형 관계형 DB 서비스
Aurora는 RDS 안에 있는 AWS가 만든 고성능 DB 엔진

Aurora의 핵심 특징
스토리지 자동 확장
6중 복제
노드 장애 시 수십 초 내 복구
Read Replica 자동 스케일

 

데이터 베이스 생성 클릭

 

나는 PostgreSQL을 사용했으므로 PostgreSQL을 선택한다.

아래 정보들은 입력하고 기억해야한다.

NestJS 프로젝트에서 DB와 연결할 때 사용한 환경변수 값이 아래 데이터에 해당한다.

 

DB인스턴스 식별자 DB의 이름

마스터 사용자 이름 DB의 사용자 이름

마스터 암호 DB의 비밀번호다.

 

그리고 데이터베이스 생성을 눌러주면 끝이다.

 

만약 AWS EC2에 배포를 했다면 vim을 이용해서 위 데이터로 env를 수정해줘야 한다.

 

엔드포인트 변경하기

로컬에서 개발하고 있었다면 기존의 DB 엔트포인트(host)값이 localhost로 되어있을 건데 해당 값을 바꿔줘야한다.

아래 화면에서 표시한 부분에 DB의 엔드포인트가 있다. 해당 값을 그대로 복사해서 넣어줘야 한다.

 

보안 그룹 편집

아마 vim으로 env를 편집 후에 실행하려고 하면 아래 에러가 나타날 것이다.

[Nest] 28937 - 2025. 09. 07. 오후 4:15:42 ERROR [TypeOrmModule] Unable to connect to the database. Retrying

EC2의 보안그룹에서 인바운드 규칙 편집 들어가서 사용자지정 TCP 해서 5432 포트 열어주고 0.0.0.0/0 소스 해서 해결하면된다.

EC2 Security Group을 클릭한다.

아래 처럼 구성하면 된다.

 

TypeORM에 SSL 옵션 추가

SSL 옵션이 필요한 이유

AWS RDS PostgreSQL은 기본적으로 SSL/TLS 암호화 연결을 강제하도록 설정되어 있다고 한다.

이는 데이터베이스와 애플리케이션 간의 통신을 암호화하여 보안을 강화하기 위함이다.

SSL 옵션을 설정하지 않으면 다음과 같은 에러가 발생한다.

1|main | [Nest] 6957 - 12/18/2025, 2:25:35 PM ERROR [TypeOrmModule] Unable to connect to the database. Retrying (7)... 1|main | error: no pg_hba.conf entry for host "172.31.32.15", user "mymap", database "mymap", no encryption

아래처럼 추가해주자.

TypeOrmModule.forRoot({
type:'postgres',
host: process.env.DB_HOST,
port:5432,
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
ssl: {
rejectUnauthorized:false, // 추가
  },
})

 

 

EC2에 psql 설치

만약 이전 포스팅과 같이 나처럼 AWS EC2를 사용했다면 해당 과정을 따라하면된다.

해당 과정은 아래 에러가 나와서 직접 자료를 찾아서 해결한 방법이라 옳지 않을 수도 있다.

error: database "mymap" does not exist

 

현재 RDS를 생성해놓고 연결했지만 해당 RDS에 DB가 없는 상황이다.

1️⃣ EC2에서 psql 설치

sudo apt update
sudo apt install -y postgresql-client

설치 확인:

psql --version

2️⃣ 그 다음에 실행 (EC2 터미널에서)

psql \\
  -h mymap.cl06gs4ko5jk.ap-northeast-2.rds.amazonaws.com \\
  -U mymap \\
  -d postgres \\
  --set=sslmode=require

비밀번호 입력하라는 프롬프트 뜨면

👉 RDS 생성할 때 설정한 DB 비밀번호 입력


3️⃣ 접속되면 이렇게 생김

psql (17.x)
Type "help" for help.

postgres=>

이 상태가 정상 접속 성공 상태야 🎉


4️⃣ 그 다음 바로 할 일

CREATE DATABASE mymap;
\q

 

 

이렇게 하면 에러 없이 DB와 성공적으로 연결될 것이다.


만약 pgAdmin에서 DB 보고싶은경우

보안 그룹 규칙 추가해야한다.

 

그리고 RDS의 설정에서 해당 값이 "예"인 상태여야 한다.

마지막으로 pgAdmin에서 아래처럼 값을 입력하고 save하면 된다.

 

 

 

 


📘마치며..

RDS를 처음사용해보기도 했고, 해당 과정을 진행하면서 에러가 계속 나와 시간이 오래걸렸다.

또 AWS의 UI가 계속 바뀌기도해서 자료들이 레거시해지는 경우도 있었다.

내가 해결한 방법이 정말 옳은 방법인지에 대해서 정리해보는 시간도 필요할 것 같았다.

728x90
반응형
LIST