바이브코딩으로 늘어난 사이트, EC2에서 PostgreSQL 다중 DB 구축하기
여러 바이브코딩 사이트의 데이터베이스를 AWS EC2의 PostgreSQL로 통합하고, PgBouncer 연결 관리부터 모니터링과 자동 백업까지 구성한 구축 사례입니다.

바이브코딩 사이트를 위한 AWS PostgreSQL 다중 DB 구축
바이브코딩을 활용하면 짧은 시간 안에 여러 웹사이트와 서비스를 만들 수 있습니다. 하지만 사이트가 늘어날수록 각각의 서비스에서 사용할 데이터베이스도 함께 필요해집니다.
이번 구성은 여러 사이트에서 사용할 PostgreSQL 데이터베이스를 AWS EC2 한 대에 통합하고, 접속 관리·웹 관리·모니터링·백업 기능까지 함께 운영할 수 있도록 구축한 사례입니다.
아키텍처 그림에서 순번으로 설명 합니다.
1. Client
1.1 애플리케이션
- 바이브코딩으로 제작한 웹사이트와 애플리케이션 입니다.
- 배포된 여러 사이트는 TLS로 암호화된 연결을 통해 PostgreSQL 데이터베이스에 연결합니다.
1.2 모니터링 관리자
- PostgreSQL과 서버를 관리하는 운영자 또는 관리자입니다.
- 관리자는 TLS가 적용된 도메인을 통해 pgAdmin과 Grafana에 접속합니다.
2. EC2
PostgreSQL과 관련 운영 도구가 설치되는 AWS 가상 서버입니다.
한 대의 EC2 안에서 PostgreSQL, PgBouncer, Nginx, pgAdmin, Prometheus, Grafana 등을 함께 운영하도록 구성했습니다.
여러 사이트에서 필요한 데이터베이스를 각각 분리해 생성하면서도 서버는 하나로 통합하여 관리할 수 있습니다.
3. EBS
PostgreSQL의 데이터가 저장되는 EC2 전용 스토리지입니다.
운영체제가 설치된 기본 디스크와 데이터베이스용 EBS를 분리하면 용량 확장과 백업, 장애 대응이 더욱 편리해집니다.
* EBS Snapshot
PostgreSQL 데이터가 저장된 EBS 볼륨을 스냅샷으로 백업합니다.
EBS 스냅샷은 서버나 디스크에 문제가 발생했을 때 볼륨 단위로 복구할 수 있도록 도와줍니다. 일정에 따라 자동으로 생성하고 보관 기간이 지난 스냅샷은 삭제하도록 구성할 수 있습니다.
4. Route 53
AWS의 DNS 서비스입니다.
데이터베이스 접속 주소와 관리 도구에 사용할 도메인을 EC2 서버에 연결합니다. IP 주소 대신 지정된 도메인을 사용하여 애플리케이션과 관리자가 서비스에 접근할 수 있습니다.
5. PostgreSQL
여러 바이브코딩 사이트에서 사용할 데이터를 저장하는 핵심 데이터베이스입니다.
사이트별로 데이터베이스와 사용자 계정을 분리하여 운영하기 때문에 하나의 사이트에 문제가 발생하더라도 다른 사이트의 데이터와 권한을 구분할 수 있습니다.
PostgreSQL의 기본 포트인 `5432`를 사용하며, 외부 애플리케이션은 PgBouncer를 거쳐 접속하도록 구성했습니다.
6. PgBouncer
PostgreSQL 앞에서 데이터베이스 연결을 관리하는 커넥션 풀러입니다.
여러 사이트가 PostgreSQL에 직접 연결하면 접속 수가 빠르게 증가할 수 있습니다. PgBouncer는 기존 연결을 효율적으로 재사용하여 PostgreSQL의 연결 부담을 줄여줍니다.
애플리케이션은 PostgreSQL의 `5432` 포트 대신 PgBouncer의 `6432` 포트로 접속합니다.
7. pgAdmin
PostgreSQL을 웹 화면에서 관리할 수 있는 도구입니다.
브라우저를 통해 데이터베이스와 계정 생성, 테이블 조회, SQL 실행, 접속 상태 확인 등의 관리 작업을 수행할 수 있습니다.
외부에 관리 포트를 직접 노출하지 않고 Nginx를 통해 접근하도록 구성했습니다.
8. Nginx
pgAdmin과 Grafana 같은 웹 관리 도구의 접속을 처리하는 웹 서버이자 리버스 프록시입니다.
클라이언트는 HTTPS `443` 포트로 Nginx에 접속하며, Nginx가 요청에 따라 pgAdmin 또는 Grafana로 전달합니다.
이를 통해 각 관리 도구의 포트를 외부에 직접 공개하지 않고 하나의 도메인과 TLS 인증서로 관리할 수 있습니다.
9. Exporter
EC2와 PgBouncer, PostgreSQL의 운영 상태를 수집하는 역할을 합니다.
주요 수집 대상은 다음과 같습니다.
- EC2의 CPU, 메모리, 디스크, 네트워크 상태
- PgBouncer의 연결 수와 커넥션 풀 상태
- PostgreSQL의 접속 수, 트랜잭션 및 데이터베이스 상태
수집된 정보는 Prometheus에서 조회할 수 있는 형태로 제공됩니다.
10. Prometheus
Exporter가 제공하는 서버와 데이터베이스의 상태 정보를 주기적으로 수집하고 저장합니다.
EC2의 자원 사용량뿐만 아니라 PostgreSQL과 PgBouncer의 주요 지표를 함께 수집하여 장애나 성능 저하의 원인을 확인할 수 있도록 합니다.
Prometheus는 기본적으로 `9090` 포트를 사용합니다.
11. Grafana
Prometheus가 수집한 데이터를 그래프와 대시보드로 시각화하는 도구입니다.
관리자는 Grafana에서 다음과 같은 정보를 한눈에 확인할 수 있습니다.
- EC2 CPU와 메모리 사용률
- 디스크 사용량과 네트워크 트래픽
- PostgreSQL 접속 수와 데이터베이스 상태
- PgBouncer 커넥션 풀 사용 현황
여러 데이터베이스를 운영할 때 서버의 전체 상태를 빠르게 파악하는 데 도움이 됩니다.
12. S3
PostgreSQL 데이터베이스의 논리 백업 파일을 보관하는 저장소입니다.
스케줄러를 이용하여 각 데이터베이스를 주기적으로 백업하고, 생성된 백업 파일을 S3에 전송합니다.
EBS 스냅샷과 S3 데이터베이스 백업을 함께 사용하면 서버 전체 복구와 개별 데이터베이스 복구에 모두 대응할 수 있습니다.
구축 결과
이번 아키텍처는 여러 바이브코딩 사이트에서 필요한 데이터베이스를 AWS EC2의 PostgreSQL로 통합하여 운영하는 구성입니다.
PgBouncer로 다수의 DB 연결을 관리하고, pgAdmin으로 데이터베이스를 운영하며, Prometheus와 Grafana로 상태를 모니터링합니다. 또한 EBS 스냅샷과 S3 백업을 함께 구성하여 데이터 복구 가능성도 확보했습니다.
사이트가 계속 늘어나는 환경에서 데이터베이스를 사이트마다 별도의 서버로 구축하지 않고, 하나의 PostgreSQL 서버에서 데이터베이스와 계정을 분리하여 운영할 수 있다는 점이 이 구성의 핵심입니다.
