# 데이터베이스 호스트DB_HOST=localhost# 포트 (PostgreSQL 기본값: 5432)DB_PORT=5432# 사용자 이름DB_USER=postgres# 비밀번호DB_PASSWORD=your-db-password# 데이터베이스 이름DATABASE_NAME=myproject_dev
# 원격 데이터베이스DB_HOST=staging-db.mycompany.comDB_PORT=5432DB_USER=myproject_stagingDB_PASSWORD=your-staging-password # 최소 32자 강력한 비밀번호DATABASE_NAME=myproject_staging
# 고가용성 데이터베이스DB_HOST=prod-db-primary.mycompany.comDB_PORT=5432DB_USER=myproject_prodDB_PASSWORD=your-production-password # 최소 64자 매우 강력한 비밀번호DATABASE_NAME=myproject_prod
-- 사용자 생성CREATE USER myproject_user WITH PASSWORD 'your-secure-password';-- 데이터베이스 권한 부여GRANT ALL PRIVILEGES ON DATABASE myproject_dev TO myproject_user;-- 스키마 권한 부여\c myproject_devGRANT ALL PRIVILEGES ON SCHEMA public TO myproject_user;GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO myproject_user;GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO myproject_user;
-- ✅ 애플리케이션 사용자 (읽기/쓰기만)CREATE USER app_user WITH PASSWORD 'your-app-password';GRANT CONNECT ON DATABASE myproject TO app_user;GRANT USAGE ON SCHEMA public TO app_user;GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;-- ✅ 읽기 전용 사용자 (분석/리포팅)CREATE USER readonly_user WITH PASSWORD 'your-readonly-password';GRANT CONNECT ON DATABASE myproject TO readonly_user;GRANT USAGE ON SCHEMA public TO readonly_user;GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;-- ❌ SUPERUSER 권한은 절대 사용 금지-- CREATE USER admin WITH SUPERUSER;
ALTER USER myproject_user WITH PASSWORD 'your-new-password';
복사
# 3. pg_hba.conf 확인 (Linux)sudo cat /etc/postgresql/16/main/pg_hba.conf# 로컬 연결 허용 확인# local all all trust# host all all 127.0.0.1/32 md5
연결 시간 초과 (timeout)
증상:
복사
Error: Connection timeout
원인:
네트워크 문제
DB 서버 과부하
연결 풀 고갈
해결:
복사
// 1. 타임아웃 증가connection: { connectionTimeoutMillis: 10000, // 10초}// 2. 연결 풀 크기 증가pool: { max: 20,}// 3. 네트워크 확인// ping DB 서버// telnet db.example.com 5432
너무 많은 연결 (too many connections)
증상:
복사
FATAL: sorry, too many clients already
원인:
PostgreSQL의 max_connections 한계 초과
해결:
복사
-- 현재 연결 수 확인SELECT count(*) FROM pg_stat_activity;-- max_connections 확인SHOW max_connections;-- max_connections 증가 (postgresql.conf)-- max_connections = 200
복사
// 애플리케이션 연결 풀 제한pool: { max: 10, // max_connections보다 충분히 작게}
max_connections를 무작정 늘리면 메모리 사용량이 증가합니다. 연결 풀 크기를 먼저 조정하세요.