# API Gateway 통계 화면

## 개요

API Gateway의 분단위/시간별/일별/월별/연도별 처리 통계를 조회하는 관리 화면입니다.

## 파일 구조

```
com.eactive.ext.kjb.statistics/
├── ApiStatsMinuteController.java    # 분단위 통계 Controller
├── ApiStatsHourController.java      # 시간별 통계 Controller
├── ApiStatsDayController.java       # 일별 통계 Controller
├── ApiStatsMonthController.java     # 월별 통계 Controller
├── ApiStatsYearController.java      # 연도별 통계 Controller
├── ApiStatsAggregationController.java  # 통계 집계 수동 실행 Controller
├── service/
│   └── ApiStatsExcelExportService.java  # Excel 내보내기 Service
├── entity/
│   ├── ApiStatsMinute.java          # 분단위 통계 Entity
│   ├── ApiStatsMinuteId.java        # 분단위 통계 복합키
│   ├── ApiStatsHour.java            # 시간별 통계 Entity
│   ├── ApiStatsHourId.java          # 시간별 통계 복합키
│   ├── ApiStatsDay.java             # 일별 통계 Entity
│   ├── ApiStatsDayId.java           # 일별 통계 복합키
│   ├── ApiStatsMonth.java           # 월별 통계 Entity
│   ├── ApiStatsMonthId.java         # 월별 통계 복합키
│   ├── ApiStatsYear.java            # 연도별 통계 Entity
│   └── ApiStatsYearId.java          # 연도별 통계 복합키
├── repository/
│   ├── ApiStatsMinuteRepository.java
│   ├── ApiStatsHourRepository.java
│   ├── ApiStatsDayRepository.java
│   ├── ApiStatsMonthRepository.java
│   └── ApiStatsYearRepository.java
├── ui/
│   ├── ApiStatsUI.java              # 통계 UI DTO
│   ├── ApiStatsSearch.java          # 검색조건 DTO
│   └── ApiStatsChartUI.java         # 차트 UI DTO
├── mapping/
│   └── ApiStatsUIMapper.java        # Entity ↔ UI 매핑
└── README.md

JSP 화면:
WebContent/jsp/kjb/statistics/
├── apiStatsMinuteMan.jsp            # 분단위 통계 화면
├── apiStatsHourMan.jsp              # 시간별 통계 화면
├── apiStatsDayMan.jsp               # 일별 통계 화면
├── apiStatsMonthMan.jsp             # 월별 통계 화면
├── apiStatsYearMan.jsp              # 연도별 통계 화면
└── apiStatsAggregationMan.jsp       # 통계 집계 수동 실행 화면
```

## URL

| 화면 | URL |
|------|-----|
| 분단위 통계 | `/kjb/statistics/apiStatsMinuteMan.view` |
| 시간별 통계 | `/kjb/statistics/apiStatsHourMan.view` |
| 일별 통계 | `/kjb/statistics/apiStatsDayMan.view` |
| 월별 통계 | `/kjb/statistics/apiStatsMonthMan.view` |
| 연도별 통계 | `/kjb/statistics/apiStatsYearMan.view` |
| 통계 집계 실행 | `/kjb/statistics/apiStatsAggregationMan.view` |

## 테이블

| 테이블명 | 설명 |
|----------|------|
| API_STATS_MINUTE | 분단위 통계 |
| API_STATS_HOUR | 시간별 통계 |
| API_STATS_DAY | 일별 통계 |
| API_STATS_MONTH | 월별 통계 (STAT_TIME: YYYYMM 형식) |
| API_STATS_YEAR | 연도별 통계 (STAT_TIME: YYYY 형식) |

> 상세 테이블 스키마는 [statistics_table.md](statistics_table.md) 참조

## 복합키 구성

- statTime (통계 시간)
- apiName (API명)
- gwInstanceId (Gateway 인스턴스 ID)
- bizDivCode (업무구분코드)
- clientId (클라이언트 ID)
- inboundAdapter (Inbound Adapter)
- outboundAdapter (Outbound Adapter)

## 메트릭

### 건수 메트릭
- totalCnt: 총 처리 건수
- successCnt: 성공 건수
- timeoutCnt: Timeout 오류 건수
- systemErrCnt: 시스템 오류 건수
- bizErrCnt: 업무 오류 건수
- seq900TimeoutCnt: 로그시퀀스900 Timeout 건수
- seq900SystemErrCnt: 로그시퀀스900 시스템 오류 건수
- seq900BizErrCnt: 로그시퀀스900 업무 오류 건수

### 응답시간 메트릭 (ms)
- avgRespTime: 평균 응답시간
- minRespTime: 최소 응답시간
- maxRespTime: 최대 응답시간
- p50RespTime: 50 백분위 응답시간
- p95RespTime: 95 백분위 응답시간

## Multi-tenancy

API Gateway 통계는 `APIGW` 스키마에 저장됩니다.
Controller에서 `DataSourceContextHolder`를 사용하여 스키마를 전환합니다.

```java
DataSourceContextHolder.setDataSourceType(
    DataSourceTypeManager.getDataSourceType(DataSourceTypeManager.APIGW));
```

## 검색 조건

- 조회기간 (시작~종료)
- API명 (like 검색)
- Gateway 인스턴스 ID
- 업무구분코드 (like 검색)
- 클라이언트 ID (like 검색)

## 주요 기능

- 통계 데이터 조회 (분/시간/일/월/년 단위)
- Excel 내보내기
- 차트 데이터 제공 (ApiStatsChartUI)
- 통계 집계 수동 실행 (시간→일, 일→월, 월→년)

## 통계 집계 수동 실행

통계 데이터는 스케줄러에 의해 자동으로 집계되지만, 누락된 기간이나 재집계가 필요한 경우 수동 실행할 수 있습니다.

### 집계 실행 화면 (apiStatsAggregationMan.jsp)

**접근 URL**: `/kjb/statistics/apiStatsAggregationMan.view`

한 화면에서 3가지 집계 작업을 모두 수동으로 실행할 수 있습니다:

1. **시간별 → 일별 집계**
   - API 엔드포인트: `POST /onl/kjb/statistics/apiStatsDayMan.json?cmd=AGGREGATION`
   - 파라미터: `targetDate` (yyyyMMdd 형식, 예: 20250120)
   - 기본값: 전일 날짜

2. **일별 → 월별 집계**
   - API 엔드포인트: `POST /onl/kjb/statistics/apiStatsMonthMan.json?cmd=AGGREGATION`
   - 파라미터: `targetMonth` (yyyyMM 형식, 예: 202501)
   - 기본값: 전월

3. **월별 → 연별 집계**
   - API 엔드포인트: `POST /onl/kjb/statistics/apiStatsYearMan.json?cmd=AGGREGATION`
   - 파라미터: `targetYear` (yyyy 형식, 예: 2024)
   - 기본값: 전년

**주의사항**:
- 집계 대상 기간의 원본 데이터가 존재해야 정상 집계됩니다.
- 입력값을 비워두면 기본값(전일/전월/전년)으로 실행됩니다.
- 실행 결과는 처리 건수와 함께 화면에 표시됩니다.

## 기술 스택

- JPA + QueryDSL
- MapStruct (Entity ↔ UI 매핑)
- Spring MVC (ResponseEntity)
- jqGrid (목록 화면)
- Apache POI (Excel 내보내기)
