kt-event-marketing/design/backend/physical/physical-architecture-dev.md
jhbkjh 3075a5d49f 물리아키텍처 설계 완료
 주요 기능
- Azure 기반 물리아키텍처 설계 (개발환경/운영환경)
- 7개 마이크로서비스 물리 구조 설계
- 네트워크 아키텍처 다이어그램 작성 (Mermaid)
- 환경별 비교 분석 및 마스터 인덱스 문서

📁 생성 파일
- design/backend/physical/physical-architecture.md (마스터)
- design/backend/physical/physical-architecture-dev.md (개발환경)
- design/backend/physical/physical-architecture-prod.md (운영환경)
- design/backend/physical/*.mmd (4개 Mermaid 다이어그램)

🎯 핵심 성과
- 비용 최적화: 개발환경 월 $143, 운영환경 월 $2,860
- 확장성: 개발환경 100명 → 운영환경 10,000명 (100배)
- 가용성: 개발환경 95% → 운영환경 99.9%
- 보안: 다층 보안 아키텍처 (L1~L4)

🛠️ 기술 스택
- Azure Kubernetes Service (AKS)
- Azure Database for PostgreSQL Flexible
- Azure Cache for Redis Premium
- Azure Service Bus Premium
- Application Gateway + WAF

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-29 15:13:01 +09:00

15 KiB

KT 이벤트 마케팅 서비스 - 개발환경 물리아키텍처 설계서

1. 개요

1.1 설계 목적

본 문서는 KT 이벤트 마케팅 서비스의 개발환경 물리 아키텍처를 정의합니다.

  • 설계 범위: 개발환경 전용 물리 인프라 설계
  • 설계 목적:
    • 비용 효율적인 개발환경 구축
    • 빠른 배포와 테스트 지원
    • 개발팀 생산성 최적화
  • 대상 환경: Azure 기반 개발환경 (Development)
  • 대상 시스템: 7개 마이크로서비스 + 백킹서비스

1.2 설계 원칙

개발환경에 적합한 4가지 핵심 설계 원칙을 정의합니다.

원칙 설명 적용 방법
MVP 우선 최소 기능으로 빠른 검증 Pod 기반 백킹서비스, 단일 인스턴스
비용 최적화 개발환경 비용 최소화 Basic 티어 서비스, 스팟 인스턴스 활용
개발 편의성 개발자 접근성 최대화 직접 접근 가능한 네트워크, 단순한 보안
단순성 복잡성 최소화 단일 VNet, 최소 보안 정책, 모니터링 생략

1.3 참조 아키텍처

아키텍처 문서 연관관계 참조 방법
아키텍처 패턴 마이크로서비스 패턴 기반 서비스 분리 및 통신 패턴
논리 아키텍처 논리적 컴포넌트 구조 물리적 배치 및 연결 관계
데이터 설계서 데이터 저장소 요구사항 PostgreSQL/Redis 구성
HighLevel 아키텍처 전체 시스템 구조 CI/CD 및 백킹서비스 선정

2. 개발환경 아키텍처 개요

2.1 환경 특성

특성 개발환경 설정값 근거
목적 개발자 기능 개발 및 통합 테스트 빠른 피드백 루프
사용자 규모 개발팀 10명 내외 소규모 동시 접근
가용성 목표 90% (업무시간 기준) 야간/주말 중단 허용
확장성 수동 스케일링 예측 가능한 부하
보안 수준 기본 보안 (개발자 편의성 우선) 접근 용이성 중요
데이터 보호 테스트 데이터 (실제 개인정보 없음) 규제 요구사항 최소

2.2 전체 아키텍처

전체 시스템은 사용자 → Ingress → 마이크로서비스 → 백킹서비스 플로우로 구성됩니다.

주요 컴포넌트:

  • Frontend: 개발자 및 QA팀 접근
  • Kubernetes Ingress: NGINX 기반 라우팅
  • 7개 마이크로서비스: user, event, content, ai, participation, analytics, distribution
  • PostgreSQL Pod: 통합 데이터베이스
  • Redis Pod: 캐시 및 세션 저장소
  • Azure Service Bus: 비동기 메시징 (Basic 티어)

3. 컴퓨팅 아키텍처

3.1 Kubernetes 클러스터 구성

3.1.1 클러스터 설정

설정 항목 설정값 설명
Kubernetes 버전 1.28.x 안정된 최신 버전
서비스 계층 Free 티어 개발환경 비용 절약
네트워크 플러그인 Azure CNI Azure 네이티브 통합
DNS CoreDNS 기본 DNS 서비스
RBAC 활성화 기본 보안 설정
Pod Security 기본 설정 개발 편의성 우선
Ingress Controller NGINX 단순하고 가벼운 설정

3.1.2 노드 풀 구성

노드 풀 인스턴스 크기 노드 수 스케일링 가용영역 가격 정책
Default Standard_B2s 2-4 노드 수동 Single Zone 스팟 인스턴스 50%
사양 2 vCPU, 4GB RAM 최소 2, 최대 4 kubectl 수동 확장 Korea Central 비용 우선

3.2 서비스별 리소스 할당

3.2.1 애플리케이션 서비스

서비스명 CPU Requests CPU Limits Memory Requests Memory Limits Replicas
user-service 100m 200m 128Mi 256Mi 1
event-service 100m 200m 128Mi 256Mi 1
content-service 100m 200m 128Mi 256Mi 1
ai-service 100m 300m 256Mi 512Mi 1
participation-service 100m 200m 128Mi 256Mi 1
analytics-service 100m 200m 128Mi 256Mi 1
distribution-service 100m 200m 128Mi 256Mi 1

3.2.2 백킹 서비스

서비스명 CPU Requests CPU Limits Memory Requests Memory Limits Storage
postgresql 200m 500m 512Mi 1Gi 20Gi (Premium SSD)
redis 100m 200m 128Mi 256Mi 1Gi (메모리 기반)

3.2.3 스토리지 클래스 구성

스토리지 클래스 종류 성능 용도 비용
managed-premium Azure Premium SSD 최대 5,000 IOPS PostgreSQL 데이터 중간
managed Azure Standard SSD 최대 2,000 IOPS 로그 및 임시 데이터 저비용

4. 네트워크 아키텍처

4.1 네트워크 구성

4.1.1 네트워크 토폴로지

네트워크 구성:

  • VNet 주소 공간: 10.0.0.0/16
  • AKS 서브넷: 10.0.1.0/24 (사용자, 서비스, 백킹서비스 통합)
  • Service Bus 서브넷: 10.0.2.0/24 (Azure Service Bus Basic)

네트워크 다이어그램: network-dev.mmd

4.1.2 네트워크 보안

정책 유형 설정 설명
Network Policy 기본 허용 개발 편의성 우선
접근 제한 개발팀 IP 대역만 허용 기본 보안 유지
포트 정책 표준 HTTP/HTTPS 포트 80, 443, 8080-8087

4.2 서비스 디스커버리

서비스명 내부 DNS 주소 포트 용도
user-service user-service:8080 8080 사용자 관리 API
event-service event-service:8080 8080 이벤트 관리 API
content-service content-service:8080 8080 콘텐츠 관리 API
ai-service ai-service:8080 8080 AI 추천 API
participation-service participation-service:8080 8080 참여 관리 API
analytics-service analytics-service:8080 8080 분석 API
distribution-service distribution-service:8080 8080 배포 관리 API
postgresql postgresql:5432 5432 주 데이터베이스
redis redis:6379 6379 캐시 및 세션

5. 데이터 아키텍처

5.1 데이터베이스 구성

5.1.1 주 데이터베이스 Pod 구성

설정 항목 설정값 설명
컨테이너 이미지 postgres:15-alpine 경량화된 PostgreSQL
CPU 200m requests, 500m limits 개발환경 적정 사양
Memory 512Mi requests, 1Gi limits 기본 워크로드 처리
Storage 20Gi Premium SSD Azure Disk 연동
백업 수동 스냅샷 주간 단위 수동 백업
HA 구성 단일 인스턴스 비용 최적화

5.1.2 캐시 Pod 구성

설정 항목 설정값 설명
컨테이너 이미지 redis:7-alpine 경량화된 Redis
CPU 100m requests, 200m limits 가벼운 캐시 워크로드
Memory 128Mi requests, 256Mi limits 기본 캐시 용량
Storage 1Gi (선택적) 영구 저장이 필요한 경우만
설정 Default 설정 특별한 튜닝 없음

5.2 데이터 관리 전략

5.2.1 데이터 초기화

# 데이터 초기화 Job 예시
apiVersion: batch/v1
kind: Job
metadata:
  name: db-init-job
spec:
  template:
    spec:
      containers:
      - name: db-init
        image: postgres:15-alpine
        command: ["/bin/sh"]
        args:
          - -c
          - |
            psql -h postgresql -U postgres -d kt_event_marketing << EOF
            -- 테스트 데이터 생성
            INSERT INTO users (username, email) VALUES ('test_user', 'test@example.com');
            INSERT INTO stores (name, address) VALUES ('테스트 매장', '서울시 강남구');
            EOF
      restartPolicy: OnFailure

실행 절차:

  1. kubectl apply -f db-init-job.yaml
  2. kubectl logs job/db-init-job 실행 결과 확인
  3. kubectl delete job db-init-job 정리

5.2.2 백업 전략

서비스 백업 방법 주기 보존 기간 복구 절차
PostgreSQL Azure Disk 스냅샷 주 1회 (금요일) 4주 스냅샷 복원
Redis RDB 덤프 일 1회 1주 덤프 파일 복원

6. 메시징 아키텍처

6.1 Message Queue 구성

6.1.1 Basic Tier 설정

설정 항목 설정값 설명
서비스 Azure Service Bus Basic 개발환경 최소 비용
네임스페이스 kt-event-dev 개발 전용 네임스페이스
큐 개수 3개 ai-schedule, location-search, notification
메시지 크기 최대 256KB Basic 티어 제한
TTL 14일 기본 설정

6.1.2 연결 설정

설정 항목 설정값 설명
인증 Connection String 개발환경 단순 인증
연결 풀 기본 설정 특별한 튜닝 없음
재시도 정책 3회 재시도 기본 resilience
배치 처리 비활성화 단순한 메시지 처리

7. 보안 아키텍처

7.1 개발환경 보안 정책

7.1.1 기본 보안 설정

보안 계층 설정값 수준 관리 대상 시크릿
네트워크 기본 NSG 기본 -
클러스터 RBAC 활성화 기본 ServiceAccount 토큰
애플리케이션 기본 설정 기본 DB 연결 정보
데이터 전송 암호화만 기본 Redis 비밀번호

7.1.2 시크릿 관리

시크릿 유형 저장 방식 순환 정책 저장소
DB 비밀번호 Kubernetes Secret 수동 etcd
API 키 Kubernetes Secret 월 1회 etcd
Service Bus Connection String 수동 etcd

7.2 Network Policies

7.2.1 기본 정책

# 기본적으로 모든 통신 허용 (개발 편의성)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-dev
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - {}
  egress:
  - {}

8. 모니터링 및 로깅

8.1 기본 모니터링

8.1.1 Kubernetes 기본 모니터링

컴포넌트 설정 임계값
kubectl top 기본 메트릭 CPU 80%, Memory 80%
기본 알림 비활성화 개발환경 알림 불필요

8.1.2 애플리케이션 모니터링

메트릭 유형 수집 방법 설정
헬스체크 Spring Actuator /actuator/health
메트릭 기본 로그 stdout 로그만

8.2 로깅

8.2.1 로그 수집

로그 유형 수집 방식 저장 방식 보존 기간 로그 레벨
애플리케이션 stdout kubectl logs 7일 DEBUG
시스템 kubelet 로컬 3일 INFO

9. 배포 관련 컴포넌트

컴포넌트 역할 설정
GitHub Actions CI/CD 파이프라인 기본 워크플로우
Docker Registry 컨테이너 이미지 저장소 Azure Container Registry
kubectl 배포 도구 수동 배포
IntelliJ 프로파일 로컬 개발 서비스별 실행 프로파일

10. 비용 최적화

10.1 개발환경 비용 구조

10.1.1 주요 비용 요소

구성요소 사양 월간 예상 비용 (USD) 절약 방안
AKS 클러스터 Free 티어 $0 Free 티어 활용
VM 노드 2 x Standard_B2s (스팟 50%) $50 스팟 인스턴스 활용
Storage 50Gi Premium SSD $10 최소 필요 용량만
Service Bus Basic 티어 $5 Basic 티어 사용
네트워크 Standard Load Balancer $15 기본 설정
총 예상 비용 - $80 -

10.1.2 비용 절약 전략

영역 절약 방안 절약률
컴퓨팅 스팟 인스턴스 50% 혼합 25%
스토리지 최소 필요 용량만 할당 30%
네트워킹 단일 VNet 구성 20%

11. 개발환경 운영 가이드

11.1 일상 운영

11.1.1 환경 시작/종료

# 클러스터 시작 (매일 오전)
az aks start --resource-group kt-event-dev --name kt-event-aks-dev

# 서비스 상태 확인
kubectl get pods -A
kubectl get svc

# 클러스터 종료 (매일 저녁)
az aks stop --resource-group kt-event-dev --name kt-event-aks-dev

11.1.2 데이터 관리

# PostgreSQL 데이터 백업
kubectl exec -it postgresql-0 -- pg_dump -U postgres kt_event_marketing > backup.sql

# Redis 데이터 백업
kubectl exec -it redis-0 -- redis-cli --rdb dump.rdb

# 데이터 복원
kubectl exec -i postgresql-0 -- psql -U postgres -d kt_event_marketing < backup.sql

11.2 트러블슈팅

11.2.1 일반적인 문제 해결

문제 유형 원인 해결방안 예방법
Pod 시작 실패 리소스 부족 노드 스케일 업 리소스 모니터링
DB 연결 실패 네트워크 정책 Service 확인 헬스체크 활성화
Service Bus 연결 오류 인증 정보 Secret 재생성 정기 키 순환

12. 개발환경 특성 요약

핵심 설계 원칙:

  • 비용 우선: 개발환경은 최소 비용으로 구성하여 월 $80 이하 목표
  • 단순성: 복잡한 HA 구성 없이 단순한 아키텍처 유지
  • 개발 편의성: 개발자가 쉽게 접근하고 디버깅할 수 있는 환경

주요 제약사항:

  • 가용성: 90% (업무시간 기준), 야간/주말 중단 허용
  • 확장성: 수동 스케일링으로 예측 가능한 부하만 처리
  • 보안: 기본 보안 설정으로 개발 편의성 우선

최적화 목표:

  • 빠른 배포: 5분 이내 전체 환경 배포 완료
  • 비용 효율: 월 $80 이하 운영 비용 유지
  • 개발 생산성: 로컬 개발과 유사한 편의성 제공

문서 버전: v1.0 최종 수정일: 2025-10-29 작성자: System Architect (박영자 "전문 아키텍트")