DevOps/AWS

ec2/로컬 에서 RDS에 접근 하기 (aws ec2, postgreSQL, pgadmin, 삽질에 중독된 개발자)

stars_one 2025. 2. 21. 23:56

 

....예? 무덤파기 대회라니 사연이 많은 개발자군요

 

안녕하신가..!

오늘은 하루종일 삽질을 하게된 나의 썰을 풀어보려고 한다!!!

그전에 주저리 주저리 내가 겪은 고통을 공유하고 싶다...!

 

내 주저리주저리를 알고 싶지 않다면 바로 밑으로 가서

"1. RDS 구축하기 " 부터 확인하길 바란다...!

 

 

 

0. RDS를 사용하게 된 이유

먼저, RDS란 AWS에서 제공하는 관계형 데이터베이스 서비스이다.

AWS Relational Database Service를 줄여서 AWS RDS라고 한다.

 

AWS에서 손쉽게 데이터베이스를 설치하고, 모니터링, 백업, 알람 등의 관리를 할 수 있고 자동화된 운영 작업을 제공해준다!

 

RDS를 사용하게 된 이유는 별게 아니다.

원래는 ec2에서 springboot, nginx proxy manager, postgresql, pgadmin 이렇게 총 4가지를 컨테이너로 돌리려고 했다.

그런데 "역시는 역시" 돈없는 그지 대학생인 나는 프리티어 유저이기 때문에 micro ec2만 생성할 수 있다!

 

 

그래서 컨테이너를 4개 못돌림....

최대 3개밖에 못돌려..미나;ㅇ럼ㄴ아ㅣㄹ

(심지어 이것마저도 내가 강제로 swap이라는 방법을 사용해서 서버 ram용량을 늘린거임 ㅋㅋ)

 

결국에는 springboot랑 nginx proxy manager만 ec2에서 돌리고,

db는 RDS로 구축하고, 로컬에서 pgadmin을 돌려서 RDS에 접근하기로 했다.

 

근데 과금 안될거 같지?~~~

ec2에서 탄력적 IP를 사용하고, RDS 에서 퍼블릭 접근을 허용해서 과금이 된단말이야

뭐 어쩌겟니 그래도 돈을 내야 사람대우를 해주는데

 

천만다행인게 그래도 시간당 0.005달러여서

프로젝트 마감 4일 안으로 1~2천원 밖에 안나와서 그냥 돈내기로 함

 

이전에 탄력적 IP 받아놓고 안쓰고 한참 놔둬서 6천원 냄


1. RDS 구축하기

RDS를 구축해보자! 

 

먼저 postgreSQL으로 RDS를 구축할 수 있다는 것을 전제로 깔고,

과정을 많이 건너뛰고 ec2와 연동하는 과정부터 설명을 하겟다

 

하지만!!! RDS를 구축할때, 외부(로컬)에서 RDS에 접근하기 위해서는 퍼블릭 IP 접근 허용을 해주어야 한다(과금, 시간당 0.005USD)

그리고 ec2의 가용영역을 확인하고, 동일한 가용영역을 RDS에 설정해두어라!!! (ex> ap-northeast-2a로 통일)

예전에는 과금안되었는데 24.02 부터 과금되는 정책으로 바뀜

 

난 퍼블릭 IP접근 허용을 안한 상태로 RDS를 구축해서 RDS이랑 서브넷까지 private으로 구축되어서

로컬에서 pgadmin이 접근이 안되었다. 그래서 하루종일 삽질함... 하하하하ㅏ하ㅏ하

public IP접근 허용으로 바꾸고 서브넷도 public으로 바꾸고 별짓을 다했지만 안돼서,

그냥 결국에 기존 RDS를 삭제하고,

public 접근허용으로 설정해서 RDS를 새로 생성했다.

 

 

먼저, RDS와 연결할 ec2의 VPC, 서브넷 그룹, 보안 그룹을 잘 확인해두자!

ec2와 RDS모두 같은 네트워크에서 동작할 것이기 때문!

 

 

 

 

EC2 왼쪽에서 네트워크 및 보안 -> 보안 그룹 -> 보안 그룹 생성을 눌러준다.

 

보안그룹 생성 창이 나오는데 보안 그룹 이름을 정해주고, VPC정보는 ec2와 동일한 것으로 선택!!! 

 

 

또한 아래의 인바운드 규칙으로 우리가 사용하는 postgreSQL을 위해 5432포트를 열어주었다.
뒤에 보안 그룹은 현재 EC2에서 사용하고 있는 보안그룹의 ID이다.
나중에 보안 그룹이 변경된다면 저것도 바꾸어주면 된다.

 

앗 그리고 RDS로 설정으로 돌아가서 연결-> 보안그룹 부분에 방금 생성한 보안그룹으로 재설정 해주면 된다!

 

다시한번 반드시!!! RDS 생성시,public IP접근 허용을 클릭해주어라!

그렇게 해야 rds, subnet모두 public으로 설정된다.
(하지만 실무에서는 이렇게 하면 안되는거 알쥐.,.? 이건 내가 팀플할때 외부(로컬) rds에 접근하기 위해서 설정해둔거야!!)

 


 

2. ec2에서 RDS에 접속하기

나는 ec2에서 docker compose로 스프링 부트 이미지를 돌리는데,

이때, jdbc 설정을 해줄때, rds public ip로 연결해주고 컨테이너를 생성하면 1차적으로 접근 설정이 완료된 것이다.

 

 

그리고, RDS에 들어가면, 이렇게 ec2와 연결하는 게 나오는데,

만약에 연결이 안되어 있다면 ec2와 연결해주어야 한다.

 

 

반드시 RDS 가용영역과 ec2가용영역을 맞춰 주어야 한다!!!

안그러면 과금됨 ㅋㅋㅋ (역시 자본주의는 매섭다)

 

 

 

 

 

이렇게 하고, ec2에 접속해서 

 

 

 

psql -h {rds public 엔드포인트} -U {db유저이름}

 

 

 

으로 접속하고 비밀번호를 입력해주면 아래와 같이 db에 접속 성공!

(그런데 아마도 postgreSQL 을 ec2에 설치안하고 실행안해두면,

위의 명령어가 실행안될거여서 postgreSQL을 알잘딱으로 설치해두자)

 

 

 

 

 


3. 로컬에서 RDS에 접속하기

로컬에서 pgadmin을 컨테이너로 돌린다음에

rds 로 접속할 것이다

 

친절히 pgadmin 생성 명령어를 알려줌

docker run -d \
  --name pgadmin \
  -p 5050:80 \
  -e PGADMIN_DEFAULT_EMAIL=이메일 설정해줘야함 \
  -e PGADMIN_DEFAULT_PASSWORD=비밀번호 설정해줘야함 \
  dpage/pgadmin4

 

 

 

그리고 5050에 접근해서 이메일이랑 비밀번호 작성하고,

 

 

 

Servers 우클릭 -> register -> server 누르고

 

위의 사진에서 General -> Name에는 아무거나 입력해줘도 됨

 

이제 connection 에서는,

 

host name/address에 rds public 엔드포인트를 복붙해주고,

maintenance db에는 db이름을 작성해주고

username에는 말그대로 내가 설정한 username을 작성해주고(rds만들때 username)

password에는 내가 설정한 비밀번호를 입력해주면 된다(rds만들때 비밀번호)

 

 

 

 

 

 

연결에 성공하면 테이블이 생긴것을 확인할 수 있다!!

 

 

 

 

 

만약 connection이 안돼서 time expiration이라는 에러가 뜨는 경우

아래의 방법을 트라이 해보자~,

 

1) rds에서 인바운드 규칙을 잘못설정한 경우, 보안그룹 설정이나, 접근 ip 설정을 바꾸어주자

 

2) rds를 만들때 public 접근허용을 해주지 않아서,

rds랑 서브넷 그룹 모두 private으로 설정되어

로컬에서 rds로 접근이 안되는 것이므로,

 

rds랑 서브넷 그룹 모두 public으로 변경해주어도 되지만,

설정해줄게 많아서 귀찮기 때문에 기존 rds를 삭제하고

rds를 새로 생성하는 것을 추천한다.

 

(단, public 액세스를 허용해야 한다. 그렇게 하면 rds, 서브넷 그룹 모두 public으로 설정되어서 로컬에서 rds로의 접근이 가능하다!!)

 

public 액세스 허용은, 과금되는거 알지?

 

 

 

 

728x90