# 통신요금 관리 서비스 - 데이터 설계 종합 ## 데이터 설계 요약 ### 🎯 설계 목적 통신요금 관리 서비스의 마이크로서비스 아키텍처에서 각 서비스별 독립적인 데이터베이스 설계를 통해 데이터 독립성과 서비스 간 결합도를 최소화하고, 성능과 보안을 최적화한 데이터 아키텍처 구현 ### 🏗️ 마이크로서비스 데이터 아키텍처 ``` ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Auth Service │ │ Bill-Inquiry │ │ Product-Change │ │ │ │ Service │ │ Service │ ├─────────────────┤ ├─────────────────┤ ├─────────────────┤ │ phonebill_auth │ │ bill_inquiry_db │ │product_change_db│ │ │ │ │ │ │ │ • auth_users │ │ • customer_info │ │ • pc_product_ │ │ • auth_services │ │ • bill_inquiry_ │ │ change_ │ │ • auth_permiss │ │ history │ │ history │ │ • user_permiss │ │ • kos_inquiry_ │ │ • pc_kos_ │ │ • login_history │ │ history │ │ integration_ │ │ • permission_ │ │ • bill_info_ │ │ log │ │ access_log │ │ cache │ │ • pc_circuit_ │ │ • auth_user_ │ │ • system_config │ │ breaker_state │ │ sessions │ │ │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ └───────────────────────┼───────────────────────┘ │ ┌─────────────────┐ │ Redis Cache │ │ │ │ • 고객정보 캐시 │ │ • 상품정보 캐시 │ │ • 세션 정보 │ │ • 권한 정보 │ └─────────────────┘ ``` ### 📊 서비스별 데이터베이스 구성 #### 1. Auth Service (인증/인가) - **데이터베이스**: `phonebill_auth` - **핵심 테이블**: 7개 - **주요 기능**: - 사용자 인증 (BCrypt 암호화) - 계정 잠금 관리 (5회 실패 → 30분 잠금) - 권한 기반 접근 제어 - 세션 관리 (JWT + 자동로그인) - 감사 로그 (로그인/권한 접근 이력) #### 2. Bill-Inquiry Service (요금조회) - **데이터베이스**: `bill_inquiry_db` - **핵심 테이블**: 5개 - **주요 기능**: - 요금조회 요청 이력 관리 - KOS 시스템 연동 로그 추적 - 조회 결과 캐싱 (성능 최적화) - 고객정보 임시 캐시 - 시스템 설정 관리 #### 3. Product-Change Service (상품변경) - **데이터베이스**: `product_change_db` - **핵심 테이블**: 3개 - **주요 기능**: - 상품변경 이력 관리 (Entity 매핑) - KOS 연동 로그 추적 - Circuit Breaker 상태 관리 - 상품/고객정보 캐싱 ### 🔐 데이터 독립성 원칙 구현 #### 서비스 간 데이터 분리 ```yaml 데이터_독립성: - 각_서비스_전용_DB: 완전 분리된 데이터베이스 - FK_관계_금지: 서비스 간 외래키 관계 없음 - 캐시_기반_참조: Redis를 통한 외부 데이터 참조 - 이벤트_동기화: 필요시 이벤트 기반 데이터 동기화 서비스_내부_관계만_허용: Auth: - auth_users ↔ auth_user_sessions - auth_permissions ↔ auth_user_permissions Bill-Inquiry: - bill_inquiry_history ↔ kos_inquiry_history Product-Change: - pc_product_change_history (단일 테이블 중심) ``` ### ⚡ 성능 최적화 전략 #### 캐시 전략 (Redis) ```yaml 캐시_TTL_정책: 고객정보: 4시간 상품정보: 2시간 세션정보: 24시간 권한정보: 8시간 가용상품목록: 24시간 회선상태: 30분 캐시_키_전략: - "customer:{lineNumber}" - "product:{productCode}" - "session:{userId}" - "permissions:{userId}" ``` #### 인덱싱 전략 ```yaml 전략적_인덱스: Auth: 20개 (성능 + 보안) Bill-Inquiry: 15개 (조회 성능) Product-Change: 12개 (이력 관리) 특수_인덱스: - JSONB_GIN_인덱스: JSON 데이터 검색 - 복합_인덱스: 다중 컬럼 조회 최적화 - 부분_인덱스: 조건부 데이터 최적화 ``` #### 파티셔닝 준비 ```yaml 파티셔닝_전략: 월별_파티셔닝: - 이력_테이블: request_time 기준 - 로그_테이블: created_at 기준 자동_파티션_생성: - 트리거_기반_월별_파티션_생성 - 3개월_이전_파티션_아카이브 ``` ### 🛡️ 보안 설계 #### 데이터 보호 ```yaml 암호화: - 비밀번호: BCrypt + Salt - 민감정보: AES-256 컬럼 암호화 - 전송구간: TLS 1.3 접근_제어: - 역할_기반_권한: RBAC 모델 - 서비스_계정: 최소_권한_원칙 - DB_접근: 연결풀_보안_설정 감사_추적: - 로그인_이력: 성공/실패 모든 기록 - 권한_접근: 권한별 접근 로그 - 데이터_변경: 모든 변경사항 추적 ``` ### 📈 모니터링 및 운영 #### 모니터링 지표 ```yaml 성능_지표: - DB_응답시간: < 100ms - 캐시_히트율: > 90% - 동시_접속자: 실시간 모니터링 비즈니스_지표: - 요금조회_성공률: > 99% - 상품변경_성공률: > 95% - KOS_연동_성공률: > 98% 시스템_지표: - Circuit_Breaker_상태 - 재시도_횟수 - 오류_발생률 ``` #### 백업 및 복구 ```yaml 백업_전략: - 전체_백업: 주간 (일요일 02:00) - 증분_백업: 일간 (03:00) - 트랜잭션_로그: 15분간격 데이터_보관정책: - 요금조회_이력: 2년 - 상품변경_이력: 3년 - 로그인_이력: 1년 - KOS_연동로그: 1년 - 시스템_로그: 6개월 ``` ### 🔧 기술 스택 ```yaml 데이터베이스: - 주_DB: PostgreSQL 14 - 캐시: Redis 7 - 연결풀: HikariCP 기술_특징: - JSONB: 유연한_데이터_구조 - 트리거: 자동_업데이트_관리 - 뷰: 복잡_쿼리_단순화 - 함수: 비즈니스_로직_캡슐화 성능_도구: - 파티셔닝: 대용량_데이터_처리 - 인덱싱: 쿼리_성능_최적화 - 캐싱: Redis_활용_성능_향상 ``` ### 📋 결과물 목록 #### 설계 문서 - `auth.md` - Auth 서비스 데이터 설계서 - `bill-inquiry.md` - Bill-Inquiry 서비스 데이터 설계서 - `product-change.md` - Product-Change 서비스 데이터 설계서 #### ERD 다이어그램 - `auth-erd.puml` - Auth 서비스 ERD - `bill-inquiry-erd.puml` - Bill-Inquiry 서비스 ERD - `product-change-erd.puml` - Product-Change 서비스 ERD #### 스키마 스크립트 - `auth-schema.psql` - Auth 서비스 PostgreSQL 스키마 - `bill-inquiry-schema.psql` - Bill-Inquiry 서비스 PostgreSQL 스키마 - `product-change-schema.psql` - Product-Change 서비스 PostgreSQL 스키마 ### 🎯 설계 완료 확인사항 ✅ **데이터독립성원칙 준수**: 각 서비스별 독립된 데이터베이스 ✅ **클래스설계 연계**: Entity 클래스와 1:1 매핑 완료 ✅ **PlantUML 문법검사**: 모든 ERD 파일 검사 통과 ✅ **실행가능 스크립트**: 바로 실행 가능한 PostgreSQL DDL ✅ **캐시전략 설계**: Redis 활용 성능 최적화 방안 ✅ **보안설계 완료**: 암호화, 접근제어, 감사추적 포함 ✅ **성능최적화**: 인덱싱, 파티셔닝, 캐싱 전략 완비 ## 다음 단계 1. **데이터베이스 설치**: 각 서비스별 PostgreSQL 인스턴스 설치 2. **Redis 설치**: 캐시 서버 설치 및 설정 3. **스키마 적용**: DDL 스크립트 실행 4. **모니터링 설정**: 성능 모니터링 도구 구성 5. **백업 설정**: 자동 백업 시스템 구성 --- **설계 완료일**: `2025-09-08` **설계자**: 백엔더 (이개발) **검토자**: 아키텍트 (김기획), QA매니저 (정테스트)