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

259 lines
8.7 KiB
Markdown

# 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 기반 성능 최적화
### 📊 응답 구조 표준화
```yaml
# 성공 응답
{
"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**: 대체 응답 또는 캐시된 데이터 제공
- **모니터링**: 연동 상태 실시간 추적
---
## 검증 결과
### 🔍 문법 검증 완료
```bash
✅ 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매니저)