# 통신요금 관리 서비스 - 유저스토리

- [통신요금 관리 서비스 - 유저스토리](#통신요금-관리-서비스---유저스토리)
  - [마이크로서비스 구성](#마이크로서비스-구성)
  - [유저스토리](#유저스토리)

---

## 마이크로서비스 구성
1. **Auth** - 사용자 인증 및 인가 관리
2. **Bill-Inquiry** - 요금 조회 서비스
3. **Product-Change** - 상품 변경 서비스

---

## 유저스토리

```
1. Auth 서비스
1) 사용자 인증 및 인가
UFR-AUTH-010: [사용자 로그인] MVNO 고객으로서 | 나는 통신요금을 관리하기 위해 | 안전하게 로그인하고 싶다.
- 시나리오: 고객 로그인
  MVNO 서비스에 접근한 상황에서 | ID와 Password를 입력하여 로그인 요청을 하면 | 인증이 완료되고 메인 화면이 표시된다.
  
  [입력 요구사항]
  - 인증 정보 ID: 고객 식별자 입력
  - Password: 계정 비밀번호 입력
  - 자동 로그인: 선택 옵션 제공
  
  [인증 처리]
  - 성공: 메인 서비스 화면으로 이동
  - 실패: "ID 또는 비밀번호를 확인해주세요" 메시지
  - 5회 연속 실패: 30분간 계정 잠금 안내
  
  [검증 요구사항]
  - 계정이 있어야 함
  - 인증 정보의 정확성 검증
  - 세션 보안 처리
  
- M/5

---

UFR-AUTH-020: [사용자 인가] 인증된 고객으로서 | 나는 서비스별 접근 권한을 확인받기 위해 | 화면에 대한 접근권한이 부여되기를 원한다.
- 시나리오: 서비스 접근 권한 확인
  로그인 완료 후 특정 서비스 화면에 접근한 상황에서 | 해당 서비스 이용 권한을 확인하면 | 권한이 있는 경우 서비스 화면이 표시된다.
  
  [접근 권한 확인]
  - 요금 조회 서비스 접근권한 확인
  - 상품 변경 서비스 접근권한 확인
  - 권한별 메뉴 표시/숨김 처리
  
  [권한 검증]
  - 성공: 해당 서비스 화면 제공
  - 실패: "서비스 이용 권한이 없습니다" 메시지 표시
  - 접근 권한이 부여되어 있어야 함
  
- M/3

---

2. Bill-Inquiry 서비스
1) 요금 조회
UFR-BILL-010: [요금조회 메뉴 접근] MVNO 고객으로서 | 나는 내 통신요금을 확인하기 위해 | 요금 조회 메뉴를 요청하고 싶다.
- 시나리오: 요금조회 메뉴 표시
  인증된 상태에서 | 요금 조회 메뉴를 요청하면 | 요금조회 메뉴가 화면에 표시된다.
  
  [메뉴 표시 요구사항]
  - 요금 조회 메뉴 화면 제공
  - 고객 회선번호 표시
  - 조회월 선택 옵션 제공
  - 요금 조회 신청 버튼 활성화
  
  [접근 권한]
  - 요금 조회에 대한 접근권한이 부여되어 있어야 함
  - mvno AP server를 통한 화면 제공
  
  [오류 처리]
  - 메뉴 로딩 실패 시: "요금 조회 메뉴 로딩에 실패하였습니다" 메시지
  
- M/5

---

UFR-BILL-020: [요금조회 신청] MVNO 고객으로서 | 나는 특정 월의 통신요금을 확인하기 위해 | 조회월을 선택하여 요금 조회를 신청하고 싶다.
- 시나리오 1: 조회월 미선택 (기본 조회)
  요금조회 메뉴에서 | 조회월을 입력하지 않고 조회를 신청하면 | 조회시점 기준 당월 청구요금이 조회된다.
  
  [기본 조회 처리]
  - 입력 데이터: 회선번호
  - 조회 대상: 현재 월 청구요금
  - 결과 확인: 조회시점 기준 당월 청구요금을 확인했다
  
- 시나리오 2: 조회월 선택 조회
  요금조회 메뉴에서 | 특정 조회월을 선택하고 조회를 신청하면 | 해당 조회월의 청구요금이 조회된다.
  
  [선택 조회 처리]
  - 입력 데이터: 회선번호, 조회월
  - 조회 대상: 선택한 월의 청구요금
  - 결과 확인: 조회월의 청구요금을 확인했다
  
  [조회 선택 옵션]
  - 조회월을 선택한다: 특정 월 선택하여 조회
  - 조회월을 선택하지 않는다: 당월 기준으로 조회
  
  [처리 결과]
  - 성공: 요금 조회가 신청되었다
  - 실패: "요금 조회 신청에 실패하였습니다" 메시지
  
- M/8

---

UFR-BILL-030: [KOS 요금조회 서비스 연동] 시스템으로서 | 나는 정확한 요금 정보를 제공하기 위해 | KOS의 요금 조회 서비스를 호출하고 응답을 처리하고 싶다.
- 시나리오: KOS 요금조회 API 호출
  요금 조회 요청을 받은 상황에서 | 요금 조회 API를 호출하면 | KOS 요금 조회 서비스의 응답을 받아 처리한다.
  
  [API 호출 요구사항]
  - 입력 데이터: 회선번호, 조회월 (선택)
  - 호출 대상: KOS-Order 시스템
  - 호출 규격: KOS 요금조회 서비스가 요구하는 규격에 맞게 호출
  - 응답 처리: KOS 요금 조회 서비스의 응답을 받았다
  
  [응답 데이터]
  - 요금조회 결과 정보
    - 상품명: 현재 이용 중인 요금제
    - 약정정보: 계약 약정 조건
    - 청구월: 요금 청구 월
    - 요금: 청구 요금 금액
    - 할인정보: 적용된 할인 내역
    - 사용량: 통화, 데이터 사용량
    - 예상해지비용: 중도 해지 시 비용
    - 단말기할부금: 단말기 할부 잔액
    - 청구/납부정보: 요금 청구 및 납부 상태
  
  [처리 결과]
  - 성공: 요금 조회 API 호출에 성공하였다
  - 실패: 요금 조회 API 호출에 실패하였다
  
- M/13

---

UFR-BILL-040: [요금조회 결과 전송] 시스템으로서 | 나는 조회된 요금 정보를 고객에게 제공하기 위해 | MVNO AP로 조회 결과를 전송하고 연동 이력을 저장하고 싶다.
- 시나리오: 요금조회 결과 화면 출력
  KOS에서 요금조회 결과를 받은 상황에서 | MVNO AP로 결과를 전송하면 | 요금조회 결과가 화면에 출력되고 전송 이력이 기록된다.
  
  [결과 전송 처리]
  - 전송 대상: mvno AP server
  - 전송 데이터: 요금조회 결과 정보 (상품명, 청구월, 요금 등 전체)
  - 화면 출력: 요금조회 결과를 화면에 출력한다
  - 이력 기록: 요금 조회 결과를 전송하고, 전송이력을 기록했다
  
  [처리 이력 관리]
  - 요금 조회 요청 이력: MVNO → MP
    - 요청일시, 회선번호, 조회월
  - 요금 조회 처리 이력: MP → KOS
    - 조회요청일시, 조회처리일시, 처리결과
    - 요청한 회선번호와 조회월 정보
  
- M/8

---

3. Product-Change 서비스
1) 상품 변경
UFR-PROD-010: [상품변경 메뉴 접근] MVNO 고객으로서 | 나는 내 요금제를 변경하기 위해 | 상품 변경 요청 메뉴를 요청하고 싶다.
- 시나리오: 상품변경 메뉴 표시
  인증된 상태에서 | 상품 변경 요청 메뉴를 요청하면 | 상품변경 메뉴가 화면에 표시된다.
  
  [메뉴 표시 요구사항]
  - 상품 변경 요청 메뉴 화면 제공
  - 고객 정보 표시 (회선번호, 고객ID)
  - 현재 상품 정보 표시
  - 변경 가능한 상품 목록 제공
  
  [접근 권한]
  - 화면에 대한 접근권한이 부여되어 있어야 함
  - mvno AP server를 통한 화면 제공
  
  [오류 처리]
  - 메뉴 로딩 실패 시: "상품 변경 요청 메뉴 로딩에 실패하였습니다" 메시지
  
- M/5

---

UFR-PROD-020: [상품변경 화면 접근] MVNO 고객으로서 | 나는 상품을 선택하고 변경하기 위해 | 상품 변경 화면을 요청하고 싶다.
- 시나리오: 상품변경 화면 표시
  상품변경 메뉴에서 | 상품 변경 화면을 요청하면 | 상품 선택 및 변경 요청이 가능한 화면이 표시된다.
  
  [화면 표시 요구사항]
  - 고객정보 및 상품정보 조회 및 표시
  - 현재 이용 상품 정보 표시
  - 변경 가능한 상품 목록 제공
  - 상품 선택 및 변경 요청 기능
  
  [데이터 조회]
  - 고객정보 요청: KOS-Order 시스템에서 고객 정보 조회
  - 상품정보 요청: KOS-Order 시스템에서 상품 정보 조회
  - 조회 결과: 고객정보가 취득되었다, 상품 정보가 취득되었다
  
  [처리 결과]
  - 성공: 상품 변경 화면이 보였다
  - 실패: "상품 변경 화면 접속에 실패하였습니다" 메시지
  
- M/8

---

UFR-PROD-030: [상품변경 요청] MVNO 고객으로서 | 나는 더 나은 요금제로 변경하기 위해 | 원하는 상품을 선택하여 변경을 요청하고 싶다.
- 시나리오: 상품 선택 및 변경 요청
  상품변경 화면에서 | 상품(요금제)을 선택 후 상품 변경 요청을 하면 | 변경 요청이 접수되고 사전 체크가 진행된다.
  
  [변경 요청 입력]
  - 회선번호: 고객 회선 식별자
  - 변경 전 상품코드: 현재 이용 중인 상품
  - 변경 후 상품코드: 변경하려는 상품
  - 생성일시: 요청 일시
  
  [상품 변경 사전 체크]
  - 사전 체크 조건
    - 현재 판매중인 상품이어야 함
    - 변경 요청한 사업자에서 판매중인 상품이어야 함
    - 변경 요청 회선은 사용 중인 상태여야 함 (정지 상태가 아니어야 함)
  - 사전체크 결과에서 정상(변경가능)으로 응답처리 되어야 함
  
  [처리 결과]
  - 성공: 상품 변경이 진행되었다, 상품 사전 체크에 성공하였다
  - 실패: 상품 사전 체크에 실패하였다
  
- M/13

---

UFR-PROD-040: [상품변경 처리] 시스템으로서 | 나는 승인된 상품 변경 요청을 완료하기 위해 | KOS 시스템과 연동하여 상품 변경을 처리하고 싶다.
- 시나리오 1: 상품 변경 성공 처리
  사전 체크가 통과된 상황에서 | KOS에 상품 변경 처리를 요청하면 | 상품 변경이 완료되고 완료 결과가 전송된다.
  
  [성공 처리]
  - 상품 변경 완료: 상품 변경이 완료되었다
  - 처리 결과 전송: 변경 후 상품 코드, 상품 변경 처리 결과(정상), 메시지
  - 화면 출력: 상품 변경 완료 문구를 화면에 출력한다
  - 이력 기록: 상품 변경 처리하고 연동 이력을 기록한다
  
- 시나리오 2: 상품 변경 실패 처리
  사전 체크는 통과했으나 실제 변경 처리 중 문제가 발생한 상황에서 | 변경 처리가 실패하면 | 실패 사유에 따른 안내 메시지가 표시된다.
  
  [실패 처리]
  - 변경 실패: 상품 변경이 실패했다, 상품 변경 요청을 실패하였다
  - 처리 결과 전송: 변경 후 상품 코드, 상품 변경 처리 결과(실패), 실패 메시지
  - 화면 출력: 상품 변경에 실패하여 실패 사유에 따라 문구를 화면에 출력한다
  - 이력 기록: 상품 변경 실패 처리하고 실패 이력을 기록한다
  
  [처리 이력 관리]
  - 상품 변경 요청 이력: MVNO → MP
    - 회선번호, 변경 전 상품코드, 변경 후 상품코드, 생성일시
  - 상품 변경 처리 이력: MP → KOS
    - 회선번호, 변경 전/후 상품코드, 처리 결과, 처리 메시지
  
- M/21

---

```

## 데이터 관계
```
고객 (1) : (N) 요금조회
고객 (1) : (N) 상품변경
고객정보 - 고객ID, 회선번호, 상품정보
상품정보 - 상품코드, 상품명, 가격 정보
요청이력 - 요청일시, 처리일시, 처리결과
처리이력 - 연동 시스템, 요청/응답 데이터, 처리결과
```

## 주요 기술 고려사항

### 외부 시스템 연동
- **KOS-Order 시스템**: 실제 통신사 백엔드 시스템과의 안정적 연동 필요
- **MVNO AP Server**: 프론트엔드 시스템과의 실시간 통신 처리
- **Circuit Breaker**: 외부 시스템 장애 시 서비스 가용성 확보

### 보안 및 인증
- **인증/인가**: 고객 정보 보호를 위한 강력한 인증 체계
- **데이터 암호화**: 민감한 고객 정보 및 요금 정보 암호화
- **세션 관리**: 안전한 세션 처리 및 타임아웃 관리

### 성능 및 안정성
- **응답 시간**: KOS 연동 API의 안정적 응답 시간 확보
- **이력 관리**: 모든 요청/처리 이력의 정확한 기록 및 추적
- **오류 처리**: 각 단계별 명확한 오류 메시지 및 복구 방안

### 데이터 일관성
- **트랜잭션 처리**: 상품 변경 시 데이터 일관성 보장
- **이력 동기화**: 요청/처리 이력의 정확한 동기화
- **상태 관리**: 각 요청의 상태 추적 및 관리