phonebill/design/backend/database/data-design-summary.md
2025-09-09 01:12:14 +09:00

8.5 KiB

통신요금 관리 서비스 - 데이터 설계 종합

데이터 설계 요약

🎯 설계 목적

통신요금 관리 서비스의 마이크로서비스 아키텍처에서 각 서비스별 독립적인 데이터베이스 설계를 통해 데이터 독립성과 서비스 간 결합도를 최소화하고, 성능과 보안을 최적화한 데이터 아키텍처 구현

🏗️ 마이크로서비스 데이터 아키텍처

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   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 상태 관리
    • 상품/고객정보 캐싱

🔐 데이터 독립성 원칙 구현

서비스 간 데이터 분리

데이터_독립성:
  - 각_서비스_전용_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)

캐시_TTL_정책:
  고객정보: 4시간
  상품정보: 2시간
  세션정보: 24시간
  권한정보: 8시간
  가용상품목록: 24시간
  회선상태: 30분

캐시_키_전략:
  - "customer:{lineNumber}"
  - "product:{productCode}"
  - "session:{userId}"
  - "permissions:{userId}"

인덱싱 전략

전략적_인덱스:
  Auth: 20개 (성능 + 보안)
  Bill-Inquiry: 15개 (조회 성능)
  Product-Change: 12개 (이력 관리)

특수_인덱스:
  - JSONB_GIN_인덱스: JSON 데이터 검색
  - 복합_인덱스: 다중 컬럼 조회 최적화
  - 부분_인덱스: 조건부 데이터 최적화

파티셔닝 준비

파티셔닝_전략:
  월별_파티셔닝:
    - 이력_테이블: request_time 기준
    - 로그_테이블: created_at 기준
  자동_파티션_생성:
    - 트리거_기반_월별_파티션_생성
    - 3개월_이전_파티션_아카이브

🛡️ 보안 설계

데이터 보호

암호화:
  - 비밀번호: BCrypt + Salt
  - 민감정보: AES-256 컬럼 암호화
  - 전송구간: TLS 1.3

접근_제어:
  - 역할_기반_권한: RBAC 모델
  - 서비스_계정: 최소_권한_원칙
  - DB_접근: 연결풀_보안_설정

감사_추적:
  - 로그인_이력: 성공/실패 모든 기록
  - 권한_접근: 권한별 접근 로그
  - 데이터_변경: 모든 변경사항 추적

📈 모니터링 및 운영

모니터링 지표

성능_지표:
  - DB_응답시간: < 100ms
  - 캐시_히트율: > 90%
  - 동시_접속자: 실시간 모니터링

비즈니스_지표:
  - 요금조회_성공률: > 99%
  - 상품변경_성공률: > 95%
  - KOS_연동_성공률: > 98%

시스템_지표:
  - Circuit_Breaker_상태
  - 재시도_횟수
  - 오류_발생률

백업 및 복구

백업_전략:
  - 전체_백업: 주간 (일요일 02:00)
  - 증분_백업: 일간 (03:00)
  - 트랜잭션_로그: 15분간격

데이터_보관정책:
  - 요금조회_이력: 2년
  - 상품변경_이력: 3년
  - 로그인_이력: 1년
  - KOS_연동로그: 1년
  - 시스템_로그: 6개월

🔧 기술 스택

데이터베이스:
  - 주_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매니저 (정테스트)