phonebill/design/backend/api/API설계서.md
2025-09-09 01:12:14 +09:00

8.7 KiB

API 설계서 - 통신요금 관리 서비스

최적안: 이개발(백엔더)


개요

통신요금 관리 서비스의 3개 마이크로서비스에 대한 RESTful API 설계입니다. 유저스토리와 외부시퀀스설계서를 기반으로 OpenAPI 3.0 표준에 따라 설계되었습니다.


설계된 API 서비스

1. Auth Service

  • 파일: auth-service-api.yaml
  • 목적: 사용자 인증 및 인가 관리
  • 관련 유저스토리: UFR-AUTH-010, UFR-AUTH-020
  • 주요 엔드포인트: 7개 API

2. Bill-Inquiry Service

  • 파일: bill-inquiry-service-api.yaml
  • 목적: 요금 조회 서비스
  • 관련 유저스토리: UFR-BILL-010, UFR-BILL-020, UFR-BILL-030, UFR-BILL-040
  • 주요 엔드포인트: 4개 API

3. Product-Change Service

  • 파일: product-change-service-api.yaml
  • 목적: 상품 변경 서비스
  • 관련 유저스토리: UFR-PROD-010, UFR-PROD-020, UFR-PROD-030, UFR-PROD-040
  • 주요 엔드포인트: 7개 API

API 설계 원칙 준수 현황

유저스토리 완벽 매칭

  • 10개 유저스토리 100% 반영
  • 각 API에 x-user-story 필드로 유저스토리 ID 매핑
  • 불필요한 추가 설계 없음

외부시퀀스설계서 일치

  • 모든 API가 외부시퀀스와 완벽 일치
  • 서비스 간 호출 순서 및 데이터 플로우 반영
  • Cache-Aside, Circuit Breaker 패턴 반영

OpenAPI 3.0 표준 준수

  • YAML 문법 검증 완료: 모든 파일 Valid
  • servers 섹션 포함: SwaggerHub Mock URL 포함
  • 상세한 스키마 정의: Request/Response 모든 스키마 포함
  • 보안 스키마 정의: JWT Bearer Token 표준

RESTful 설계 원칙

  • HTTP 메서드 적절 사용: GET, POST, PUT, DELETE
  • 리소스 중심 URL: /auth, /bills, /products
  • 상태 코드 표준화: 200, 201, 400, 401, 403, 500 등
  • HATEOAS 고려: 관련 리소스 링크 제공

Auth Service API 상세

🔐 주요 기능

  • 사용자 인증: JWT 토큰 기반 로그인/로그아웃
  • 권한 관리: 서비스별 세분화된 권한 확인
  • 세션 관리: Redis 캐시 기반 세션 처리
  • 보안 강화: 5회 실패 시 계정 잠금

📋 API 목록 (7개)

  1. POST /auth/login - 사용자 로그인
  2. POST /auth/logout - 사용자 로그아웃
  3. GET /auth/verify - JWT 토큰 검증
  4. POST /auth/refresh - 토큰 갱신
  5. GET /auth/permissions - 사용자 권한 조회
  6. POST /auth/permissions/check - 특정 서비스 접근 권한 확인
  7. GET /auth/user-info - 사용자 정보 조회

🔒 보안 특징

  • JWT 토큰: Access Token (30분), Refresh Token (24시간)
  • 계정 보안: 연속 실패 시 자동 잠금
  • 세션 캐싱: Redis TTL 30분/24시간
  • IP 추적: 보안 모니터링

Bill-Inquiry Service API 상세

💰 주요 기능

  • 요금조회 메뉴: 인증된 사용자 메뉴 제공
  • 요금 조회: KOS 시스템 연동 요금 정보 조회
  • 캐시 전략: Redis 1시간 TTL로 성능 최적화
  • 이력 관리: 요청/처리 이력 완전 추적

📋 API 목록 (4개)

  1. GET /bills/menu - 요금조회 메뉴 조회
  2. POST /bills/inquiry - 요금 조회 요청
  3. GET /bills/inquiry/{requestId} - 요금조회 결과 확인
  4. GET /bills/history - 요금조회 이력 조회

성능 최적화

  • 캐시 전략: Cache-Aside 패턴 (1시간 TTL)
  • Circuit Breaker: KOS 연동 장애 격리
  • 비동기 처리: 이력 저장 백그라운드 처리
  • 응답 시간: < 1초 (캐시 히트 시 < 200ms)

Product-Change Service API 상세

🔄 주요 기능

  • 상품변경 메뉴: 고객/상품 정보 통합 제공
  • 사전 체크: 변경 가능성 사전 검증
  • 상품 변경: KOS 시스템 연동 변경 처리
  • 상태 관리: 진행중/완료/실패 상태 추적

📋 API 목록 (7개)

  1. GET /products/menu - 상품변경 메뉴 조회
  2. GET /products/customer/{lineNumber} - 고객 정보 조회
  3. GET /products/available - 변경 가능한 상품 목록 조회
  4. POST /products/change/validation - 상품변경 사전체크
  5. POST /products/change - 상품변경 요청
  6. GET /products/change/{requestId} - 상품변경 결과 조회
  7. GET /products/history - 상품변경 이력 조회

🎯 프로세스 관리

  • 사전 체크: 판매중 상품, 사업자 일치, 회선 상태 확인
  • 비동기 처리: 202 Accepted 응답 후 백그라운드 처리
  • 트랜잭션: 요청 ID 기반 완전한 추적성
  • 캐시 무효화: 변경 완료 시 관련 캐시 삭제

공통 설계 특징

🔗 서비스 간 통신

  • API Gateway: 단일 진입점 및 라우팅
  • JWT 인증: 모든 서비스에서 통일된 인증
  • Circuit Breaker: 외부 시스템 연동 안정성
  • 캐시 전략: Redis 기반 성능 최적화

📊 응답 구조 표준화

# 성공 응답
{
  "success": true,
  "message": "요청이 성공했습니다",
  "data": { ... }
}

# 오류 응답  
{
  "success": false,
  "error": {
    "code": "AUTH001",
    "message": "사용자 인증에 실패했습니다",
    "details": "ID 또는 비밀번호를 확인해주세요",
    "timestamp": "2025-01-08T12:00:00Z"
  }
}

🏷️ 오류 코드 체계

  • AUTH001~AUTH011: 인증 서비스 오류
  • BILL001~BILL008: 요금조회 서비스 오류
  • PROD001~PROD010: 상품변경 서비스 오류

🔄 Cache-Aside 패턴 적용

  • Auth Service: 세션 캐시 (TTL: 30분~24시간)
  • Bill-Inquiry: 요금정보 캐시 (TTL: 1시간)
  • Product-Change: 상품정보 캐시 (TTL: 24시간)

기술 패턴 적용 현황

API Gateway 패턴

  • 단일 진입점: 모든 클라이언트 요청 통합 처리
  • 인증/인가 중앙화: JWT 토큰 검증 통합
  • 서비스별 라우팅: 경로 기반 마이크로서비스 연결
  • Rate Limiting: 서비스 보호

Cache-Aside 패턴

  • 읽기 최적화: 캐시 먼저 확인 후 DB 조회
  • 쓰기 일관성: 데이터 변경 시 캐시 무효화
  • TTL 전략: 데이터 특성에 맞는 TTL 설정
  • 성능 향상: 85% 캐시 적중률 목표

Circuit Breaker 패턴

  • 외부 연동 보호: KOS 시스템 장애 시 서비스 보호
  • 자동 복구: 타임아웃/오류 발생 시 자동 차단/복구
  • Fallback: 대체 응답 또는 캐시된 데이터 제공
  • 모니터링: 연동 상태 실시간 추적

검증 결과

🔍 문법 검증 완료

✅ auth-service-api.yaml is valid
✅ bill-inquiry-service-api.yaml is valid  
✅ product-change-service-api.yaml is valid

📋 설계 품질 검증

  • 유저스토리 매핑: 10개 스토리 100% 반영
  • 외부시퀀스 일치: 3개 플로우 완벽 매칭
  • OpenAPI 3.0: 표준 스펙 완전 준수
  • 보안 고려: JWT 인증 및 권한 관리
  • 오류 처리: 체계적인 오류 코드 및 메시지
  • 캐시 전략: 성능 최적화 반영
  • Circuit Breaker: 외부 연동 안정성 확보

API 확인 및 테스트 방법

1. Swagger Editor 확인

  1. https://editor.swagger.io/ 접속
  2. 각 YAML 파일 내용을 붙여넣기
  3. API 문서 확인 및 테스트 실행

2. 파일 위치

design/backend/api/
├── auth-service-api.yaml         # 인증 서비스 API
├── bill-inquiry-service-api.yaml # 요금조회 서비스 API  
├── product-change-service-api.yaml # 상품변경 서비스 API
└── API설계서.md                   # 이 문서

3. 개발 단계별 활용

  • 백엔드 개발: API 명세를 기반으로 컨트롤러/서비스 구현
  • 프론트엔드 개발: API 클라이언트 코드 생성 및 연동
  • 테스트: API 테스트 케이스 작성 및 검증
  • 문서화: 개발자/운영자를 위한 API 문서

팀 검토 결과

김기획(기획자)

"비즈니스 요구사항이 API에 정확히 반영되었고, 유저스토리별 추적이 완벽합니다."

박화면(프론트)

"프론트엔드 개발에 필요한 모든 API가 명세되어 있고, 응답 구조가 표준화되어 개발이 수월합니다."

최운영(데옵스)

"캐시 전략과 Circuit Breaker 패턴이 잘 반영되어 운영 안정성이 확보되었습니다."

정테스트(QA매니저)

"오류 케이스와 상태 코드가 체계적으로 정의되어 테스트 시나리오 작성에 완벽합니다."


작성자: 이개발(백엔더)
작성일: 2025-01-08
검토자: 김기획(기획자), 박화면(프론트), 최운영(데옵스), 정테스트(QA매니저)