mirror of
https://github.com/cna-bootcamp/phonebill.git
synced 2025-12-06 16:16:23 +00:00
603 lines
19 KiB
Markdown
603 lines
19 KiB
Markdown
# Bill-Inquiry 서비스 운영환경 데이터베이스 설치 계획서
|
|
|
|
## 1. 개요
|
|
|
|
### 1.1 설치 목적
|
|
- Bill-Inquiry 서비스의 운영환경 데이터베이스 구성
|
|
- Azure Database for PostgreSQL Flexible Server 활용한 관리형 데이터베이스 구축
|
|
- 고가용성, 고성능, 엔터프라이즈급 보안을 제공하는 운영환경 데이터베이스 시스템 구축
|
|
|
|
### 1.2 대상 서비스
|
|
- **서비스명**: Bill-Inquiry Service (요금 조회 서비스)
|
|
- **데이터베이스**: `bill_inquiry_db`
|
|
- **운영환경**: Azure 운영환경 (99.9% 가용성 목표)
|
|
- **예상 사용량**: Peak 1,000 동시 사용자 지원
|
|
|
|
### 1.3 참조 문서
|
|
- 물리 아키텍처 설계서: `design/backend/physical/physical-architecture-prod.md`
|
|
- 데이터 설계서: `design/backend/database/bill-inquiry.md`
|
|
- 데이터 설계 종합: `design/backend/database/data-design-summary.md`
|
|
- 스키마 스크립트: `design/backend/database/bill-inquiry-schema.psql`
|
|
|
|
## 2. Azure Database for PostgreSQL Flexible Server 구성
|
|
|
|
### 2.1 기본 설정
|
|
|
|
| 구성 항목 | 설정 값 | 설명 |
|
|
|----------|---------|------|
|
|
| 서버 이름 | phonebill-bill-inquiry-prod-pg | Bill-Inquiry 운영환경 PostgreSQL |
|
|
| 리전 | Korea Central | 주 리전 |
|
|
| PostgreSQL 버전 | 14 | 안정적인 LTS 버전 |
|
|
| 서비스 티어 | General Purpose | 범용 용도 (운영환경) |
|
|
| 컴퓨팅 크기 | Standard_D4s_v3 | 4 vCPU, 16GB RAM |
|
|
| 스토리지 | 256GB Premium SSD | 고성능 SSD, 자동 확장 활성화 |
|
|
|
|
### 2.2 고가용성 구성
|
|
|
|
| 구성 항목 | 설정 값 | 설명 |
|
|
|----------|---------|------|
|
|
| 고가용성 모드 | Zone Redundant HA | 영역 간 중복화 |
|
|
| 주 가용 영역 | 1 | Korea Central 가용 영역 1 |
|
|
| 대기 가용 영역 | 2 | Korea Central 가용 영역 2 |
|
|
| 자동 장애조치 | 활성화 | 60초 이내 자동 장애조치 |
|
|
| SLA | 99.99% | 고가용성 보장 |
|
|
|
|
### 2.3 백업 및 복구
|
|
|
|
| 구성 항목 | 설정 값 | 설명 |
|
|
|----------|---------|------|
|
|
| 백업 보존 기간 | 35일 | 최대 보존 기간 |
|
|
| 지리적 중복 백업 | 활성화 | Korea South 리전에 복제 |
|
|
| Point-in-Time 복구 | 활성화 | 5분 단위 복구 가능 |
|
|
| 자동 백업 시간 | 02:00 KST | 트래픽이 적은 시간대 |
|
|
|
|
## 3. 네트워크 및 보안 구성
|
|
|
|
### 3.1 네트워크 설정
|
|
|
|
| 구성 항목 | 설정 값 | 설명 |
|
|
|----------|---------|------|
|
|
| 연결 방법 | Private Access (VNet 통합) | VNet 내부 전용 접근 |
|
|
| 가상 네트워크 | phonebill-vnet | 기존 VNet 활용 |
|
|
| 서브넷 | Database Subnet (10.0.2.0/24) | 데이터베이스 전용 서브넷 |
|
|
| Private Endpoint | 활성화 | 보안 강화된 연결 |
|
|
| DNS 영역 | privatelink.postgres.database.azure.com | Private DNS 영역 |
|
|
|
|
### 3.2 보안 설정
|
|
|
|
| 구성 항목 | 설정 값 | 설명 |
|
|
|----------|---------|------|
|
|
| TLS 버전 | 1.2 이상 | 암호화 통신 강제 |
|
|
| SSL 강제 | 활성화 | 비암호화 연결 차단 |
|
|
| 방화벽 규칙 | VNet 내부만 허용 | AKS 서브넷만 접근 허용 |
|
|
| 인증 방법 | PostgreSQL Authentication | 기본 인증 + Azure AD 통합 |
|
|
| 암호화 | AES-256 | 저장 데이터 암호화 (TDE) |
|
|
|
|
### 3.3 Azure AD 통합
|
|
|
|
| 구성 항목 | 설정 값 | 설명 |
|
|
|----------|---------|------|
|
|
| Azure AD 인증 | 활성화 | 관리형 ID 지원 |
|
|
| AD 관리자 | phonebill-admin | Azure AD 기반 관리자 |
|
|
| 서비스 주체 | bill-inquiry-service-identity | 애플리케이션용 관리형 ID |
|
|
|
|
## 4. 데이터베이스 및 사용자 구성
|
|
|
|
### 4.1 데이터베이스 생성
|
|
|
|
```sql
|
|
-- 메인 데이터베이스 생성
|
|
CREATE DATABASE bill_inquiry_db
|
|
WITH ENCODING = 'UTF8'
|
|
LC_COLLATE = 'en_US.UTF-8'
|
|
LC_CTYPE = 'en_US.UTF-8'
|
|
TEMPLATE = template0;
|
|
|
|
-- 타임존 설정
|
|
ALTER DATABASE bill_inquiry_db SET timezone TO 'Asia/Seoul';
|
|
|
|
-- 확장 모듈 설치
|
|
\c bill_inquiry_db
|
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
CREATE EXTENSION IF NOT EXISTS "pg_stat_statements";
|
|
CREATE EXTENSION IF NOT EXISTS "pg_trgm";
|
|
```
|
|
|
|
### 4.2 사용자 및 권한 설정
|
|
|
|
```sql
|
|
-- 애플리케이션 사용자 생성
|
|
CREATE USER bill_app_user WITH PASSWORD 'Complex#Password#2025!';
|
|
|
|
-- 읽기 전용 사용자 생성 (모니터링/분석용)
|
|
CREATE USER bill_readonly_user WITH PASSWORD 'ReadOnly#Password#2025!';
|
|
|
|
-- 백업 전용 사용자 생성
|
|
CREATE USER bill_backup_user WITH PASSWORD 'Backup#Password#2025!';
|
|
|
|
-- 애플리케이션 사용자 권한
|
|
GRANT CONNECT ON DATABASE bill_inquiry_db TO bill_app_user;
|
|
GRANT USAGE ON SCHEMA public TO bill_app_user;
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO bill_app_user;
|
|
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO bill_app_user;
|
|
|
|
-- 읽기 전용 사용자 권한
|
|
GRANT CONNECT ON DATABASE bill_inquiry_db TO bill_readonly_user;
|
|
GRANT USAGE ON SCHEMA public TO bill_readonly_user;
|
|
GRANT SELECT ON ALL TABLES IN SCHEMA public TO bill_readonly_user;
|
|
|
|
-- 기본 권한 설정 (신규 테이블에 자동 적용)
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO bill_app_user;
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO bill_readonly_user;
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO bill_app_user;
|
|
```
|
|
|
|
## 5. 성능 최적화 설정
|
|
|
|
### 5.1 PostgreSQL 파라미터 튜닝
|
|
|
|
```sql
|
|
-- 연결 풀링 설정
|
|
ALTER SYSTEM SET max_connections = 200;
|
|
ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements';
|
|
|
|
-- 메모리 설정 (16GB RAM 기준)
|
|
ALTER SYSTEM SET shared_buffers = '4GB';
|
|
ALTER SYSTEM SET effective_cache_size = '12GB';
|
|
ALTER SYSTEM SET work_mem = '64MB';
|
|
ALTER SYSTEM SET maintenance_work_mem = '1GB';
|
|
|
|
-- 체크포인트 설정
|
|
ALTER SYSTEM SET checkpoint_completion_target = 0.9;
|
|
ALTER SYSTEM SET max_wal_size = '4GB';
|
|
ALTER SYSTEM SET min_wal_size = '1GB';
|
|
|
|
-- 로깅 설정
|
|
ALTER SYSTEM SET log_min_duration_statement = 1000;
|
|
ALTER SYSTEM SET log_checkpoints = on;
|
|
ALTER SYSTEM SET log_connections = on;
|
|
ALTER SYSTEM SET log_disconnections = on;
|
|
|
|
-- 통계 수집 설정
|
|
ALTER SYSTEM SET track_activities = on;
|
|
ALTER SYSTEM SET track_counts = on;
|
|
ALTER SYSTEM SET track_io_timing = on;
|
|
|
|
-- 설정 적용
|
|
SELECT pg_reload_conf();
|
|
```
|
|
|
|
### 5.2 연결 풀링 구성
|
|
|
|
| 구성 항목 | 설정 값 | 설명 |
|
|
|----------|---------|------|
|
|
| 최대 연결 수 | 200 | 동시 연결 제한 |
|
|
| HikariCP Pool Size | 15 | 애플리케이션 연결 풀 크기 |
|
|
| 연결 타임아웃 | 30초 | 연결 획득 타임아웃 |
|
|
| 유휴 타임아웃 | 10분 | 유휴 연결 해제 시간 |
|
|
| 최대 라이프타임 | 30분 | 연결 최대 생존 시간 |
|
|
|
|
## 6. 스키마 및 데이터 초기화
|
|
|
|
### 6.1 스키마 적용
|
|
|
|
```bash
|
|
# 스키마 파일 적용
|
|
psql -h phonebill-bill-inquiry-prod-pg.postgres.database.azure.com \
|
|
-U bill_app_user \
|
|
-d bill_inquiry_db \
|
|
-f design/backend/database/bill-inquiry-schema.psql
|
|
```
|
|
|
|
### 6.2 초기 데이터 확인
|
|
|
|
```sql
|
|
-- 테이블 생성 확인
|
|
SELECT table_name, table_type
|
|
FROM information_schema.tables
|
|
WHERE table_schema = 'public'
|
|
ORDER BY table_name;
|
|
|
|
-- 인덱스 생성 확인
|
|
SELECT schemaname, tablename, indexname
|
|
FROM pg_indexes
|
|
WHERE schemaname = 'public'
|
|
ORDER BY tablename, indexname;
|
|
|
|
-- 시스템 설정 확인
|
|
SELECT config_key, config_value, description
|
|
FROM system_config
|
|
WHERE is_active = true
|
|
ORDER BY config_key;
|
|
```
|
|
|
|
## 7. 읽기 전용 복제본 구성
|
|
|
|
### 7.1 읽기 복제본 생성
|
|
|
|
| 구성 항목 | 설정 값 | 설명 |
|
|
|----------|---------|------|
|
|
| 복제본 이름 | phonebill-bill-inquiry-prod-pg-replica | 읽기 전용 복제본 |
|
|
| 리전 | Korea South | 재해복구용 다른 리전 |
|
|
| 컴퓨팅 크기 | Standard_D2s_v3 | 2 vCPU, 8GB RAM (읽기용) |
|
|
| 스토리지 | 256GB Premium SSD | 마스터와 동일 |
|
|
| 용도 | 읽기 부하 분산 및 재해복구 | - |
|
|
|
|
### 7.2 읽기 복제본 활용
|
|
|
|
```yaml
|
|
application_config:
|
|
# Spring Boot DataSource 설정 예시
|
|
datasource:
|
|
master:
|
|
url: jdbc:postgresql://phonebill-bill-inquiry-prod-pg.postgres.database.azure.com:5432/bill_inquiry_db
|
|
username: bill_app_user
|
|
|
|
readonly:
|
|
url: jdbc:postgresql://phonebill-bill-inquiry-prod-pg-replica.postgres.database.azure.com:5432/bill_inquiry_db
|
|
username: bill_readonly_user
|
|
|
|
# 읽기/쓰기 분리 라우팅
|
|
routing:
|
|
write_operations: master
|
|
read_operations: readonly
|
|
analytics_queries: readonly
|
|
```
|
|
|
|
## 8. 모니터링 및 알림 설정
|
|
|
|
### 8.1 Azure Monitor 통합
|
|
|
|
| 모니터링 항목 | 알림 임계값 | 대응 방안 |
|
|
|--------------|-------------|----------|
|
|
| CPU 사용률 | 85% 이상 | Auto-scaling 또는 수동 스케일업 |
|
|
| 메모리 사용률 | 90% 이상 | 연결 최적화 또는 스케일업 |
|
|
| 디스크 사용률 | 80% 이상 | 스토리지 자동 확장 |
|
|
| 연결 수 | 180개 이상 (90%) | 연결 풀 튜닝 |
|
|
| 응답 시간 | 500ms 이상 | 쿼리 최적화 검토 |
|
|
| 실패한 연결 | 10회/분 이상 | 네트워크 및 보안 설정 점검 |
|
|
|
|
### 8.2 로그 분석 설정
|
|
|
|
```sql
|
|
-- 슬로우 쿼리 모니터링
|
|
SELECT query, calls, total_time, rows, 100.0 * shared_blks_hit /
|
|
nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
|
|
FROM pg_stat_statements
|
|
WHERE total_time > 60000 -- 1분 이상 쿼리
|
|
ORDER BY total_time DESC
|
|
LIMIT 10;
|
|
|
|
-- 데이터베이스 통계
|
|
SELECT datname, numbackends, xact_commit, xact_rollback,
|
|
blks_read, blks_hit,
|
|
100.0 * blks_hit / (blks_hit + blks_read) as cache_hit_ratio
|
|
FROM pg_stat_database
|
|
WHERE datname = 'bill_inquiry_db';
|
|
```
|
|
|
|
## 9. 백업 및 재해복구 계획
|
|
|
|
### 9.1 백업 전략
|
|
|
|
| 백업 유형 | 주기 | 보존 기간 | 위치 |
|
|
|----------|------|-----------|------|
|
|
| 자동 백업 | 일 1회 (02:00 KST) | 35일 | Azure 백업 스토리지 |
|
|
| 지리적 백업 | 자동 복제 | 35일 | Korea South 리전 |
|
|
| Point-in-Time | 연속 | 35일 내 5분 단위 | WAL 로그 기반 |
|
|
| 논리적 백업 | 주 1회 (일요일) | 3개월 | Azure Blob Storage |
|
|
|
|
### 9.2 재해복구 절차
|
|
|
|
#### RTO/RPO 목표
|
|
- **RTO (복구 시간 목표)**: 30분 이내
|
|
- **RPO (복구 지점 목표)**: 5분 이내
|
|
|
|
#### 장애 시나리오별 대응
|
|
|
|
1. **주 서버 장애**
|
|
- Azure 자동 장애조치 (60초 이내)
|
|
- DNS 업데이트 (자동)
|
|
- 애플리케이션 재연결 (자동)
|
|
|
|
2. **리전 전체 장애**
|
|
- 읽기 복제본을 마스터로 승격
|
|
- 애플리케이션 설정 변경
|
|
- 트래픽 라우팅 변경
|
|
|
|
3. **데이터 손상**
|
|
- Point-in-Time 복구 수행
|
|
- 별도 서버에서 복구 후 전환
|
|
- 데이터 무결성 검증
|
|
|
|
## 10. 보안 강화 방안
|
|
|
|
### 10.1 접근 제어
|
|
|
|
```sql
|
|
-- 특권 사용자 역할 생성
|
|
CREATE ROLE bill_admin;
|
|
GRANT ALL PRIVILEGES ON DATABASE bill_inquiry_db TO bill_admin;
|
|
|
|
-- 개발자 역할 생성 (제한적 권한)
|
|
CREATE ROLE bill_developer;
|
|
GRANT CONNECT ON DATABASE bill_inquiry_db TO bill_developer;
|
|
GRANT USAGE ON SCHEMA public TO bill_developer;
|
|
GRANT SELECT ON ALL TABLES IN SCHEMA public TO bill_developer;
|
|
|
|
-- 감사 역할 생성
|
|
CREATE ROLE bill_auditor;
|
|
GRANT CONNECT ON DATABASE bill_inquiry_db TO bill_auditor;
|
|
GRANT SELECT ON ALL TABLES IN SCHEMA public TO bill_auditor;
|
|
```
|
|
|
|
### 10.2 데이터 암호화
|
|
|
|
| 암호화 유형 | 구현 방법 | 대상 데이터 |
|
|
|------------|-----------|-------------|
|
|
| 저장 데이터 암호화 | TDE (투명한 데이터 암호화) | 모든 테이블 데이터 |
|
|
| 전송 데이터 암호화 | TLS 1.2+ | 클라이언트-서버 간 통신 |
|
|
| 컬럼 수준 암호화 | AES-256 | 고객명, 요금정보 등 민감정보 |
|
|
| 백업 암호화 | AES-256 | 모든 백업 파일 |
|
|
|
|
### 10.3 감사 설정
|
|
|
|
```sql
|
|
-- 감사 로그 활성화
|
|
ALTER SYSTEM SET log_statement = 'all';
|
|
ALTER SYSTEM SET log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h ';
|
|
ALTER SYSTEM SET log_lock_waits = on;
|
|
ALTER SYSTEM SET log_temp_files = 10240; -- 10MB 이상 임시 파일 로그
|
|
|
|
-- pg_audit 확장 설치 (필요시)
|
|
-- CREATE EXTENSION pg_audit;
|
|
-- ALTER SYSTEM SET pg_audit.log = 'write,ddl';
|
|
```
|
|
|
|
## 11. 비용 최적화
|
|
|
|
### 11.1 예상 비용 (월간, USD)
|
|
|
|
| 구성 요소 | 사양 | 예상 비용 | 최적화 방안 |
|
|
|----------|------|-----------|-------------|
|
|
| 메인 서버 | Standard_D4s_v3 | $450 | Reserved Instance (1년 약정 20% 절약) |
|
|
| 읽기 복제본 | Standard_D2s_v3 | $225 | 필요시에만 활성화 |
|
|
| 스토리지 (256GB) | Premium SSD | $50 | 사용량 기반 자동 확장 |
|
|
| 백업 스토리지 | 지리적 중복 | $20 | 보존 기간 최적화 |
|
|
| 네트워킹 | 데이터 전송 | $10 | VNet 내부 통신 활용 |
|
|
| **총 예상 비용** | | **$755** | **Reserved Instance 시 $605** |
|
|
|
|
### 11.2 비용 모니터링
|
|
|
|
```sql
|
|
-- 리소스 사용량 모니터링 쿼리
|
|
SELECT
|
|
schemaname,
|
|
tablename,
|
|
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size,
|
|
pg_total_relation_size(schemaname||'.'||tablename) as size_bytes
|
|
FROM pg_tables
|
|
WHERE schemaname = 'public'
|
|
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
|
|
|
|
-- 인덱스 사용률 확인
|
|
SELECT
|
|
t.tablename,
|
|
i.indexname,
|
|
i.idx_tup_read,
|
|
i.idx_tup_fetch,
|
|
pg_size_pretty(pg_relation_size(i.indexname::regclass)) as index_size
|
|
FROM pg_stat_user_indexes i
|
|
JOIN pg_stat_user_tables t ON i.relid = t.relid
|
|
WHERE i.idx_tup_read = 0
|
|
ORDER BY pg_relation_size(i.indexname::regclass) DESC;
|
|
```
|
|
|
|
## 12. 설치 실행 계획
|
|
|
|
### 12.1 설치 단계
|
|
|
|
| 단계 | 작업 내용 | 예상 시간 | 담당자 |
|
|
|------|-----------|----------|--------|
|
|
| 1 | Azure PostgreSQL Flexible Server 생성 | 30분 | 데옵스 |
|
|
| 2 | 네트워크 및 보안 설정 | 20분 | 데옵스 |
|
|
| 3 | 고가용성 및 백업 설정 | 15분 | 데옵스 |
|
|
| 4 | 데이터베이스 및 사용자 생성 | 10분 | 백엔더 |
|
|
| 5 | 스키마 적용 및 초기화 | 15분 | 백엔더 |
|
|
| 6 | 읽기 복제본 생성 | 20분 | 데옵스 |
|
|
| 7 | 모니터링 및 알림 설정 | 30분 | 데옵스 |
|
|
| 8 | 성능 테스트 및 튜닝 | 60분 | 백엔더/QA매니저 |
|
|
| **총 예상 시간** | | **3시간 20분** | |
|
|
|
|
### 12.2 사전 준비사항
|
|
|
|
```yaml
|
|
prerequisites:
|
|
azure_resources:
|
|
- Resource Group: phonebill-rg
|
|
- Virtual Network: phonebill-vnet
|
|
- Database Subnet: 10.0.2.0/24
|
|
- Private DNS Zone: privatelink.postgres.database.azure.com
|
|
|
|
azure_permissions:
|
|
- Contributor role on Resource Group
|
|
- Network Contributor role on VNet
|
|
- PostgreSQL Flexible Server Contributor
|
|
|
|
network_connectivity:
|
|
- AKS cluster network access
|
|
- Azure CLI access from deployment machine
|
|
- psql client tools installed
|
|
```
|
|
|
|
### 12.3 설치 스크립트
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# Bill-Inquiry 서비스 PostgreSQL 설치 스크립트
|
|
|
|
# 변수 설정
|
|
RESOURCE_GROUP="phonebill-rg"
|
|
SERVER_NAME="phonebill-bill-inquiry-prod-pg"
|
|
LOCATION="koreacentral"
|
|
ADMIN_USER="postgres"
|
|
ADMIN_PASSWORD="Complex#PostgreSQL#2025!"
|
|
DATABASE_NAME="bill_inquiry_db"
|
|
|
|
# PostgreSQL Flexible Server 생성
|
|
az postgres flexible-server create \
|
|
--resource-group $RESOURCE_GROUP \
|
|
--name $SERVER_NAME \
|
|
--location $LOCATION \
|
|
--admin-user $ADMIN_USER \
|
|
--admin-password "$ADMIN_PASSWORD" \
|
|
--sku-name Standard_D4s_v3 \
|
|
--tier GeneralPurpose \
|
|
--storage-size 256 \
|
|
--storage-auto-grow Enabled \
|
|
--version 14 \
|
|
--zone 1 \
|
|
--high-availability ZoneRedundant \
|
|
--standby-zone 2
|
|
|
|
# 데이터베이스 생성
|
|
az postgres flexible-server db create \
|
|
--resource-group $RESOURCE_GROUP \
|
|
--server-name $SERVER_NAME \
|
|
--database-name $DATABASE_NAME
|
|
|
|
# VNet 통합 설정
|
|
az postgres flexible-server vnet-rule create \
|
|
--resource-group $RESOURCE_GROUP \
|
|
--name allow-aks-subnet \
|
|
--server-name $SERVER_NAME \
|
|
--vnet-name phonebill-vnet \
|
|
--subnet database-subnet
|
|
|
|
# 백업 설정
|
|
az postgres flexible-server parameter set \
|
|
--resource-group $RESOURCE_GROUP \
|
|
--server-name $SERVER_NAME \
|
|
--name backup_retention_days \
|
|
--value 35
|
|
|
|
echo "PostgreSQL Flexible Server 설치 완료"
|
|
echo "Server: $SERVER_NAME.postgres.database.azure.com"
|
|
echo "Database: $DATABASE_NAME"
|
|
```
|
|
|
|
## 13. 테스트 계획
|
|
|
|
### 13.1 기능 테스트
|
|
|
|
```sql
|
|
-- 연결 테스트
|
|
\conninfo
|
|
|
|
-- 기본 성능 테스트
|
|
SELECT pg_size_pretty(pg_database_size('bill_inquiry_db')) as db_size;
|
|
|
|
-- 테이블 생성 및 CRUD 테스트
|
|
INSERT INTO system_config (config_key, config_value, description)
|
|
VALUES ('test.config', 'test_value', 'Test configuration');
|
|
|
|
SELECT * FROM system_config WHERE config_key = 'test.config';
|
|
|
|
DELETE FROM system_config WHERE config_key = 'test.config';
|
|
```
|
|
|
|
### 13.2 성능 테스트
|
|
|
|
```bash
|
|
# pgbench를 이용한 성능 테스트
|
|
pgbench -i -s 10 bill_inquiry_db -h $SERVER_NAME.postgres.database.azure.com -U bill_app_user
|
|
pgbench -c 50 -j 2 -T 300 bill_inquiry_db -h $SERVER_NAME.postgres.database.azure.com -U bill_app_user
|
|
```
|
|
|
|
### 13.3 장애복구 테스트
|
|
|
|
1. **계획된 장애조치 테스트**
|
|
- Azure Portal에서 수동 장애조치 수행
|
|
- 애플리케이션 연결 상태 확인
|
|
- 복구 시간 측정
|
|
|
|
2. **백업 복구 테스트**
|
|
- Point-in-Time 복구 수행
|
|
- 데이터 무결성 검증
|
|
- 복구 시간 측정
|
|
|
|
## 14. 운영 가이드
|
|
|
|
### 14.1 일상 운영 점검
|
|
|
|
```yaml
|
|
daily_checklist:
|
|
- [ ] 서버 상태 및 가용성 확인
|
|
- [ ] CPU/메모리/디스크 사용률 점검
|
|
- [ ] 백업 성공 여부 확인
|
|
- [ ] 슬로우 쿼리 로그 검토
|
|
- [ ] 오류 로그 검토
|
|
- [ ] 연결 수 및 성능 지표 확인
|
|
|
|
weekly_checklist:
|
|
- [ ] 장애조치 메커니즘 테스트
|
|
- [ ] 백업 복구 테스트 수행
|
|
- [ ] 성능 통계 분석 및 튜닝
|
|
- [ ] 보안 패치 적용 검토
|
|
- [ ] 용량 계획 검토
|
|
|
|
monthly_checklist:
|
|
- [ ] 전체 시스템 성능 검토
|
|
- [ ] 비용 최적화 기회 분석
|
|
- [ ] 재해복구 계획 업데이트
|
|
- [ ] 보안 감사 수행
|
|
```
|
|
|
|
### 14.2 긴급 대응 절차
|
|
|
|
```yaml
|
|
incident_response:
|
|
severity_1: # 서비스 중단
|
|
- immediate_action: 자동 장애조치 확인
|
|
- notification: 운영팀 즉시 알림
|
|
- escalation: 15분 내 관리자 호출
|
|
- recovery_target: 30분 내 서비스 복구
|
|
|
|
severity_2: # 성능 저하
|
|
- analysis: 성능 지표 분석
|
|
- optimization: 쿼리 튜닝 또는 리소스 증설
|
|
- timeline: 2시간 내 해결
|
|
|
|
severity_3: # 경미한 문제
|
|
- monitoring: 지속적 모니터링
|
|
- planning: 다음 정기 점검 시 해결
|
|
- timeline: 24시간 내 계획 수립
|
|
```
|
|
|
|
## 15. 결론
|
|
|
|
본 설치 계획서는 Bill-Inquiry 서비스의 운영환경에서 요구되는 고가용성, 고성능, 엔터프라이즈급 보안을 만족하는 Azure Database for PostgreSQL Flexible Server 구성을 제시합니다.
|
|
|
|
### 15.1 주요 특징
|
|
|
|
- **고가용성**: Zone Redundant HA로 99.99% 가용성 보장
|
|
- **성능 최적화**: Premium SSD, 읽기 복제본, 연결 풀링
|
|
- **보안 강화**: VNet 통합, TLS 암호화, Azure AD 인증
|
|
- **재해복구**: 35일 백업 보존, 지리적 중복, Point-in-Time 복구
|
|
- **비용 효율성**: Reserved Instance 활용으로 20% 비용 절약
|
|
|
|
### 15.2 다음 단계
|
|
|
|
1. 본 계획서 검토 및 승인 ✅
|
|
2. Azure 리소스 생성 및 구성 수행
|
|
3. 스키마 적용 및 초기화 실행
|
|
4. 성능 테스트 및 튜닝 수행
|
|
5. 모니터링 시스템 구축
|
|
6. 운영 문서 작성 및 교육
|
|
|
|
---
|
|
|
|
**작성일**: 2025-09-08
|
|
**작성자**: 데옵스 (최운영), 백엔더 (이개발)
|
|
**검토자**: 아키텍트 (김기획), QA매니저 (정테스트)
|
|
**승인자**: 기획자 (김기획) |