mirror of
https://github.com/cna-bootcamp/phonebill.git
synced 2025-12-06 16:16:23 +00:00
248 lines
8.5 KiB
Markdown
248 lines
8.5 KiB
Markdown
# 통신요금 관리 서비스 - 데이터 설계 종합
|
|
|
|
## 데이터 설계 요약
|
|
|
|
### 🎯 설계 목적
|
|
통신요금 관리 서비스의 마이크로서비스 아키텍처에서 각 서비스별 독립적인 데이터베이스 설계를 통해 데이터 독립성과 서비스 간 결합도를 최소화하고, 성능과 보안을 최적화한 데이터 아키텍처 구현
|
|
|
|
### 🏗️ 마이크로서비스 데이터 아키텍처
|
|
|
|
```
|
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
│ 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매니저 (정테스트) |