mirror of
https://github.com/cna-bootcamp/phonebill.git
synced 2025-12-06 08:06:24 +00:00
19 KiB
19 KiB
Redis 캐시 설치 계획서 - 운영환경
1. 개요
1.1 설치 목적
- 통신요금 관리 서비스의 운영환경용 Redis 캐시 구축
- Azure Cache for Redis Premium을 활용한 고가용성 캐시 서비스 제공
- 모든 마이크로서비스 간 공유 구성으로 데이터 일관성 및 성능 최적화
- 99.9% 가용성과 엔터프라이즈급 보안 수준 달성
1.2 설계 원칙
- 고가용성: Zone Redundancy를 통한 Multi-Zone 배포
- 보안 우선: Private Endpoint와 VNet 통합을 통한 격리된 네트워크
- 성능 최적화: Premium 계층으로 고성능 및 데이터 지속성 보장
- 확장성: 클러스터링을 통한 수평 확장 지원
- 모니터링: 포괄적인 메트릭 수집 및 알림 체계
1.3 참조 문서
- 운영환경 물리아키텍처: design/backend/physical/physical-architecture-prod.md
- 데이터 설계 종합: design/backend/database/data-design-summary.md
- 백킹서비스설치방법: claude/backing-service-method.md
2. 시스템 환경
2.1 운영환경 사양
- 환경: Microsoft Azure (운영환경)
- 위치: Korea Central (주 리전), Korea South (재해복구 리전)
- 네트워크: Azure Virtual Network (VNet) 통합
- 서비스 계층: Azure Cache for Redis Premium
- 가용성: 99.99% (Zone Redundancy 적용)
- 동시 사용자: Peak 1,000명 지원
2.2 네트워크 구성
- VNet: phonebill-prod-vnet (10.0.0.0/16)
- Cache Subnet: 10.0.3.0/24 (Redis 전용)
- Private Endpoint: VNet 내부 접근만 허용
- DNS Zone: privatelink.redis.cache.windows.net
3. Azure Cache for Redis Premium 구성
3.1 기본 설정
| 구성 항목 | 설정 값 | 설명 |
|---|---|---|
| 서비스 명 | phonebill-cache-prod | 운영환경 Redis 인스턴스 |
| 계층 | Premium P2 | 6GB 메모리, 고성능 |
| 위치 | Korea Central | 주 리전 |
| 클러스터링 | 활성화 | 확장성 및 가용성 |
| 복제 | 활성화 | 데이터 안전성 |
3.2 고가용성 구성
3.2.1 Zone Redundancy 설정
zone_redundancy_config:
enabled: true
primary_zone: Korea Central Zone 1
secondary_zone: Korea Central Zone 2
tertiary_zone: Korea Central Zone 3
automatic_failover: true
failover_time: "<30초"
3.2.2 클러스터 구성
cluster_configuration:
shard_count: 3 # 데이터 분산
replicas_per_shard: 1 # 샤드별 복제본
total_nodes: 6 # 3개 샤드 × 2개 노드(마스터+복제본)
shard_distribution:
shard_0:
master: "phonebill-cache-prod-000001.cache.windows.net:6380"
replica: "phonebill-cache-prod-000002.cache.windows.net:6380"
shard_1:
master: "phonebill-cache-prod-000003.cache.windows.net:6380"
replica: "phonebill-cache-prod-000004.cache.windows.net:6380"
shard_2:
master: "phonebill-cache-prod-000005.cache.windows.net:6380"
replica: "phonebill-cache-prod-000006.cache.windows.net:6380"
4. 네트워크 보안 설정
4.1 Virtual Network 통합
vnet_integration:
resource_group: "phonebill-prod-rg"
vnet_name: "phonebill-prod-vnet"
subnet_name: "cache-subnet"
subnet_address_prefix: "10.0.3.0/24"
private_endpoint:
name: "phonebill-cache-pe"
subnet_id: "/subscriptions/{subscription}/resourceGroups/phonebill-prod-rg/providers/Microsoft.Network/virtualNetworks/phonebill-prod-vnet/subnets/cache-subnet"
connection_name: "phonebill-cache-connection"
4.2 방화벽 규칙
firewall_rules:
# AKS 노드에서만 접근 허용
- name: "Allow-AKS-Nodes"
start_ip: "10.0.1.0"
end_ip: "10.0.1.255"
description: "AKS Application Subnet 접근 허용"
# 관리용 Bastion 호스트 접근
- name: "Allow-Bastion"
start_ip: "10.0.4.100"
end_ip: "10.0.4.110"
description: "운영 관리용 Bastion 호스트"
# 외부 접근 차단 (기본값)
public_network_access: "Disabled"
4.3 보안 인증 설정
security_configuration:
# Redis AUTH 활성화
auth_enabled: true
require_ssl: true
minimum_tls_version: "1.2"
# 액세스 키 관리
access_keys:
primary_key_regeneration: "매월 1일"
secondary_key_regeneration: "매월 15일"
key_vault_integration: true
# Azure AD 통합 (Preview 기능)
azure_ad_authentication:
enabled: false # 운영 안정성을 위해 비활성화
fallback_to_access_key: true
5. 캐시 전략 및 키 관리
5.1 캐시 키 전략
5.1.1 네이밍 규칙
cache_key_patterns:
# 서비스별 네임스페이스 분리
auth_service:
user_session: "auth:session:{userId}:{sessionId}"
user_permissions: "auth:permissions:{userId}"
login_attempts: "auth:attempts:{userId}"
bill_inquiry_service:
customer_info: "bill:customer:{lineNumber}"
bill_cache: "bill:inquiry:{customerId}:{month}"
kos_response: "bill:kos:{requestId}"
product_change_service:
product_info: "product:info:{productCode}"
available_products: "product:available:{customerId}"
change_history: "product:history:{customerId}:{requestId}"
common:
system_config: "system:config:{configKey}"
circuit_breaker: "system:cb:{serviceName}"
5.2 TTL 정책
5.2.1 서비스별 TTL 설정
ttl_policies:
# 고객정보 - 4시간 (자주 조회되지만 변경 가능성 있음)
customer_info: 14400 # 4시간
# 상품정보 - 2시간 (정기적 업데이트)
product_info: 7200 # 2시간
# 세션정보 - 24시간 (로그인 유지)
session_info: 86400 # 24시간
# 권한정보 - 8시간 (보안 중요도 높음)
permissions: 28800 # 8시간
# 가용 상품 목록 - 24시간 (일반적으로 일정)
available_products: 86400 # 24시간
# 회선 상태 - 30분 (실시간성 중요)
line_status: 1800 # 30분
# KOS 응답 캐시 - 1시간 (외부 API 부하 감소)
kos_response: 3600 # 1시간
# 시스템 설정 - 1일 (거의 변경되지 않음)
system_config: 86400 # 24시간
# Circuit Breaker 상태 - 5분 (빠른 복구 필요)
circuit_breaker: 300 # 5분
5.3 메모리 관리 정책
memory_management:
# 메모리 정책 설정
maxmemory_policy: "allkeys-lru"
# 메모리 사용량 임계값
memory_thresholds:
warning: "80%" # 경고 알림
critical: "90%" # 긴급 알림
# 메모리 샘플링 설정
maxmemory_samples: 5
# 키 만료 정책
expire_policy:
active_expire_frequency: 10 # 초당 10회 만료 키 검사
lazy_expire_on_access: true # 접근 시 만료 검사
6. 데이터 지속성 설정
6.1 RDB 백업 구성
rdb_backup_configuration:
# 스냅샷 백업 설정
save_policy:
- "900 1" # 15분 이내 1개 이상 키 변경 시 저장
- "300 10" # 5분 이내 10개 이상 키 변경 시 저장
- "60 10000" # 1분 이내 10000개 이상 키 변경 시 저장
# 백업 파일 관리
backup_retention:
daily_backups: 7 # 7일간 보관
weekly_backups: 4 # 4주간 보관
monthly_backups: 12 # 12개월간 보관
# 백업 스토리지
backup_storage:
account: "phonebillprodbackup"
container: "redis-backups"
encryption: true
6.2 AOF (Append Only File) 설정
aof_configuration:
# AOF 활성화
appendonly: true
# 동기화 정책
appendfsync: "everysec" # 매초마다 디스크에 동기화
# AOF 리라이트 설정
auto_aof_rewrite_percentage: 100
auto_aof_rewrite_min_size: "64mb"
# AOF 로딩 설정
aof_load_truncated: true
7. 모니터링 및 알림 설정
7.1 Azure Monitor 통합
monitoring_configuration:
# Azure Monitor 연동
diagnostic_settings:
log_analytics_workspace: "law-phonebill-prod"
metrics_retention_days: 90
logs_retention_days: 30
# 수집할 메트릭
metrics:
- "CacheMisses"
- "CacheHits"
- "GetCommands"
- "SetCommands"
- "ConnectedClients"
- "UsedMemory"
- "UsedMemoryPercentage"
- "TotalCommandsProcessed"
- "CacheLatency"
- "Errors"
7.2 알림 규칙
alert_rules:
# 성능 관련 알림
performance_alerts:
- name: "High Cache Miss Rate"
metric: "CacheMissPercentage"
threshold: 30 # 30% 이상
window: "5분"
severity: "Warning"
action: "Teams 알림"
- name: "High Memory Usage"
metric: "UsedMemoryPercentage"
threshold: 85 # 85% 이상
window: "5분"
severity: "Critical"
action: "Teams + SMS 알림"
- name: "High Response Time"
metric: "CacheLatency"
threshold: 10 # 10ms 이상
window: "5분"
severity: "Warning"
action: "Teams 알림"
# 가용성 관련 알림
availability_alerts:
- name: "Cache Connection Failed"
metric: "Errors"
threshold: 5 # 5개 이상 에러
window: "1분"
severity: "Critical"
action: "즉시 전화 + Teams 알림"
- name: "Too Many Connected Clients"
metric: "ConnectedClients"
threshold: 500 # 500개 이상 연결
window: "5분"
severity: "Warning"
action: "Teams 알림"
7.3 대시보드 구성
dashboard_configuration:
# Azure Portal 대시보드
azure_dashboard:
- "Cache Hit/Miss 비율 차트"
- "메모리 사용량 추이"
- "연결된 클라이언트 수"
- "응답 시간 분포"
- "에러 발생률"
# Grafana 대시보드 (옵션)
grafana_dashboard:
datasource: "Azure Monitor"
panels:
- "실시간 메트릭 패널"
- "성능 추이 그래프"
- "알림 상태 표시"
8. 연결 설정 및 클라이언트 구성
8.1 연결 문자열
connection_configuration:
# 클러스터 연결 (운영환경)
cluster_connection_string: |
phonebill-cache-prod.redis.cache.windows.net:6380,
password={access_key},ssl=True,abortConnect=False,
connectTimeout=5000,syncTimeout=5000
# 클라이언트 라이브러리별 설정
client_configurations:
spring_boot:
redis_host: "phonebill-cache-prod.redis.cache.windows.net"
redis_port: 6380
redis_ssl: true
redis_timeout: 5000
redis_pool_size: 20
redis_cluster_enabled: true
connection_pool:
max_total: 20
max_idle: 10
min_idle: 5
test_on_borrow: true
test_while_idle: true
8.2 Spring Boot 연동 설정
spring_redis_configuration:
# application-prod.yml 설정
spring:
redis:
cluster:
nodes:
- "phonebill-cache-prod.redis.cache.windows.net:6380"
ssl: true
password: "${REDIS_PASSWORD}"
timeout: 5000ms
lettuce:
pool:
max-active: 20
max-idle: 10
min-idle: 5
max-wait: 5000ms
cluster:
refresh:
adaptive: true
period: 30s
9. 재해복구 및 백업 전략
9.1 지역 간 복제 설정
geo_replication:
# 주 리전 (Korea Central)
primary_region:
cache_name: "phonebill-cache-prod"
resource_group: "phonebill-prod-rg"
# 재해복구 리전 (Korea South)
secondary_region:
cache_name: "phonebill-cache-prod-dr"
resource_group: "phonebill-prod-dr-rg"
# 복제 설정
replication_configuration:
link_name: "phonebill-cache-geo-link"
replication_role: "Primary"
linked_cache_name: "phonebill-cache-prod-dr"
9.2 백업 및 복구 절차
backup_recovery:
# 백업 전략
backup_strategy:
automated_backup: true
backup_frequency: "매시간"
backup_retention: "7일"
manual_backup:
before_maintenance: true
before_major_release: true
# 복구 목표
recovery_objectives:
rto: "15분" # Recovery Time Objective
rpo: "5분" # Recovery Point Objective
# 복구 절차
recovery_procedures:
automated_failover: true
manual_failover_approval: false # 운영환경에서는 자동 처리
health_check_interval: "30초"
10. 보안 강화 설정
10.1 Azure Key Vault 통합
key_vault_integration:
vault_name: "phonebill-prod-kv"
# 저장할 시크릿
secrets:
- name: "redis-primary-key"
description: "Redis 기본 액세스 키"
rotation_period: "30일"
- name: "redis-secondary-key"
description: "Redis 보조 액세스 키"
rotation_period: "30일"
- name: "redis-connection-string"
description: "Redis 연결 문자열"
auto_update: true
10.2 네트워크 보안 정책
network_security:
# Private Endpoint 보안
private_endpoint_security:
network_access_policy: "Private endpoints only"
public_network_access: "Disabled"
# Network Security Group 규칙
nsg_rules:
- name: "Allow-Redis-From-AKS"
priority: 100
direction: "Inbound"
access: "Allow"
protocol: "TCP"
source_port_ranges: "*"
destination_port_ranges: "6379-6380"
source_address_prefix: "10.0.1.0/24"
- name: "Deny-All-Other"
priority: 1000
direction: "Inbound"
access: "Deny"
protocol: "*"
source_port_ranges: "*"
destination_port_ranges: "*"
source_address_prefix: "*"
11. 성능 최적화 설정
11.1 클러스터 최적화
cluster_optimization:
# 클러스터 설정 최적화
cluster_configuration:
cluster_enabled: true
cluster_config_file: "nodes.conf"
cluster_node_timeout: 15000
cluster_slave_validity_factor: 10
# 메모리 최적화
memory_optimization:
maxmemory: "5gb" # P2 계층 6GB 중 5GB 사용
maxmemory_policy: "allkeys-lru"
maxmemory_samples: 5
# 네트워크 최적화
network_optimization:
tcp_keepalive: 300
timeout: 0
tcp_backlog: 511
11.2 클라이언트 최적화
client_optimization:
# 연결 풀 최적화
connection_pool:
max_total: 20
max_idle: 10
min_idle: 5
max_wait_millis: 5000
test_on_borrow: true
test_on_return: false
test_while_idle: true
# 파이프라이닝 설정
pipelining:
enabled: true
batch_size: 100
timeout: 1000
12. 설치 실행 계획
12.1 설치 단계
installation_phases:
phase_1_preparation:
duration: "1일"
tasks:
- "Azure 리소스 그룹 준비"
- "Virtual Network 구성 확인"
- "서브넷 및 NSG 설정"
- "Key Vault 시크릿 준비"
phase_2_deployment:
duration: "2일"
tasks:
- "Azure Cache for Redis 생성"
- "클러스터링 구성"
- "Private Endpoint 설정"
- "방화벽 규칙 적용"
phase_3_configuration:
duration: "1일"
tasks:
- "백업 설정 구성"
- "모니터링 설정"
- "알림 규칙 생성"
- "대시보드 구성"
phase_4_testing:
duration: "2일"
tasks:
- "연결 테스트"
- "성능 테스트"
- "장애조치 테스트"
- "보안 검증"
12.2 사전 준비사항
prerequisites:
azure_resources:
- "Azure 구독 및 권한 확인"
- "Resource Group 생성: phonebill-prod-rg"
- "Virtual Network: phonebill-prod-vnet"
- "Key Vault: phonebill-prod-kv"
network_configuration:
- "Cache Subnet (10.0.3.0/24) 생성"
- "Network Security Group 규칙 준비"
- "Private DNS Zone 설정"
security_preparation:
- "Service Principal 생성 및 권한 부여"
- "SSL 인증서 준비"
- "액세스 키 생성 정책 수립"
12.3 검증 체크리스트
validation_checklist:
connectivity_tests:
- [ ] "AKS 클러스터에서 Redis 연결 테스트"
- [ ] "각 서비스에서 캐시 읽기/쓰기 테스트"
- [ ] "클러스터 모드 연결 확인"
- [ ] "SSL/TLS 암호화 통신 확인"
performance_tests:
- [ ] "응답 시간 < 5ms 확인"
- [ ] "초당 10,000 요청 처리 확인"
- [ ] "메모리 사용량 최적화 확인"
- [ ] "캐시 히트율 > 90% 달성"
security_tests:
- [ ] "외부 접근 차단 확인"
- [ ] "인증 및 권한 확인"
- [ ] "데이터 암호화 확인"
- [ ] "감사 로그 기록 확인"
availability_tests:
- [ ] "Zone 장애 시뮬레이션"
- [ ] "노드 장애 복구 테스트"
- [ ] "자동 장애조치 확인"
- [ ] "백업 및 복원 테스트"
13. 운영 및 유지보수
13.1 일상 운영 절차
daily_operations:
monitoring_checks:
- [ ] "Redis 클러스터 상태 확인"
- [ ] "메모리 사용률 점검"
- [ ] "캐시 히트율 확인"
- [ ] "에러 로그 검토"
weekly_operations:
- [ ] "성능 메트릭 리포트 생성"
- [ ] "백업 상태 확인"
- [ ] "보안 패치 적용 검토"
- [ ] "용량 계획 검토"
13.2 성능 튜닝 가이드
performance_tuning:
memory_optimization:
- "키 만료 정책 최적화"
- "메모리 사용 패턴 분석"
- "불필요한 키 정리"
network_optimization:
- "연결 풀 크기 조정"
- "타임아웃 값 튜닝"
- "파이프라이닝 활용"
application_optimization:
- "캐시 키 설계 개선"
- "TTL 값 최적화"
- "배치 처리 활용"
14. 비용 최적화
14.1 예상 비용 (월간, USD)
monthly_cost_estimation:
azure_cache_redis:
tier: "Premium P2"
capacity: "6GB"
estimated_cost: "$350"
network_costs:
private_endpoint: "$15"
data_transfer: "$20"
backup_storage:
storage_account: "$10"
total_monthly_cost: "$395"
14.2 비용 최적화 전략
cost_optimization:
rightsizing:
- "실제 메모리 사용량 기반 계층 조정"
- "사용량 패턴 분석 후 스케일링"
efficiency_improvements:
- "TTL 최적화로 불필요한 데이터 정리"
- "압축 알고리즘 활용"
- "캐시 히트율 향상"
reserved_capacity:
- "1년 예약 인스턴스 (20% 할인)"
- "3년 예약 인스턴스 (40% 할인)"
15. 설치 완료 확인
15.1 설치 성공 기준
- ✅ Azure Cache for Redis Premium 정상 생성
- ✅ Zone Redundancy 및 클러스터링 활성화
- ✅ Private Endpoint를 통한 VNet 통합 완료
- ✅ 모든 서비스에서 캐시 연결 성공
- ✅ 모니터링 및 알림 체계 구축
- ✅ 백업 및 재해복구 설정 완료
15.2 성과 목표 달성 확인
- 🎯 가용성: 99.99% 이상 (Zone Redundancy)
- 🎯 성능: 응답시간 < 5ms, 초당 10,000+ 요청 처리
- 🎯 보안: Private Endpoint, 암호화 통신 적용
- 🎯 확장성: 클러스터링을 통한 수평 확장 준비
- 🎯 모니터링: 실시간 메트릭 수집 및 알림 체계
계획서 작성일: 2025-09-08
작성자: 데옵스 (최운영)
검토자: 백엔더 (이개발), 아키텍트 (김기획)
승인자: 기획자 (김기획)
이 Redis 캐시 설치 계획서는 통신요금 관리 서비스의 운영환경에 최적화되어 있으며, Azure Cache for Redis Premium을 활용한 고가용성 및 고성능 캐시 서비스를 제공합니다.