mirror of
https://github.com/cna-bootcamp/phonebill.git
synced 2025-12-06 16:16:23 +00:00
259 lines
8.7 KiB
Markdown
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매니저) |