SHIELDEX File 6.0 - 시간대별 detailCode 통계 API 명세서 (GET /statistics/detail-code)
# SHIELDEX File 6.0 - 시간대별 detailCode 통계 API 명세서 (GET /statistics/detail-code)
조회 기간(
from~to) 동안 발생한 무해화 결과를 1시간 단위로 그룹핑하여, 각 시간대의detailCode별 건수(count0~count3,count-1)를 JSON Array 로 반환하는 고객 연동용 통계 API 명세입니다.
| 항목 | 값 |
|---|---|
| 문서 버전 | 6.2026.0813.01 |
| 관련 문서 | 역할 |
|---|---|
| 무해화 결과 응답 명세서 (detailCode) | detailCode 정의·산출 규칙의 SSOT |
| 무해화 로그리즌 표 | logReason / 결과 code 정의의 SSOT |
안내 본 API 의
detailCode산출 규칙은 위 결과 응답 명세서(§6)와 완전히 동일합니다. 본 문서는 그detailCode를 시간대별로 집계하여 제공하는 통계 엔드포인트만 정의합니다.
1. 요청 사양 (Request)
| 항목 | 값 |
|---|---|
| Method | GET |
| Path | /statistics/detail-code |
| 실제 호출 URL | http://{서버IP}:8060/statistics/detail-code (포트 8060) |
| 인증 | 무토큰 (서버 간 연동) |
| Content-Type | 없음 (GET, 쿼리스트링) |
고객 시스템은 포트 8060 으로 호출합니다. Context-Path 는 없습니다.
1.1 요청 파라미터
| 이름 | 타입 | 필수 | 형식 | 설명 |
|---|---|---|---|---|
from | String | 필수 | yyyyMMddHHmmss (14자리) | 조회 시작일시 (해당 시각 포함) |
to | String | 필수 | yyyyMMddHHmmss (14자리) | 조회 종료일시 (해당 시각 포함) |
| 항목 | 규칙 |
|---|---|
| 형식 | from / to 는 14자리 숫자 |
| 오류 | 유효한 일시가 아니거나 from > to 이면 400 |
| 조회 기준 | 무해화 요청 시각 |
1.2 요청 예시
GET /statistics/detail-code?from=20260727090000&to=20260727105959
| 항목 | 값 |
|---|---|
| 의미 | 2026-07-27 09:00:00 ~ 10:59:59 기간의 통계 |
2. 응답 사양 (Response)
조회 기간 내의 데이터를 1시간 단위(yyyyMMddHH0000) 로 묶고, 각 시간대별로 detailCode 의 발생 건수를 반환합니다.
| 항목 | 값 |
|---|---|
| 응답 포맷 | JSON Array |
| HTTP Status | 200 OK |
2.1 필드 설명
| KEY | TYPE | 설명 |
|---|---|---|
date | String | 해당 시간대의 기준 시각 (yyyyMMddHH0000) |
count0 | Number | detailCode = 0 (위험요소 없음/안전) 건수 |
count1 | Number | detailCode = 1 (위험요소 있음) 건수 |
count2 | Number | detailCode = 2 (백신 검출) 건수 |
count3 | Number | detailCode = 3 (미지원/예외·차단) 건수 |
count-1 | Number | detailCode = -1 (오류) 건수 |
| 항목 | 규칙 |
|---|---|
| 필드명 | count + detailCode 값 (0→count0 … 3→count3, -1→count-1) |
| 오류 집계 | detailCode = -1 → count-1. count4 는 사용하지 않음 |
| JSON 접근 | count-1 은 obj["count-1"] (점 접근 obj.count-1 불가) |
| 없는 코드 | 해당 시간대에 없으면 0 |
| 빈 시간대 | 요청이 없어도 응답에 포함, 모든 count 는 0 |
| 정렬 | date 오름차순 |
2.2 응답 예시
[
{
"date": "20260727090000",
"count0": 100,
"count1": 1,
"count2": 2,
"count3": 0,
"count-1": 0
},
{
"date": "20260727100000",
"count0": 100,
"count1": 2,
"count2": 5,
"count3": 0,
"count-1": 1
}
]
| 시간대 | 의미 |
|---|---|
20260727090000 (09시) | 안전 100건, 위험요소 있음 1건, 백신 검출 2건 |
20260727100000 (10시) | 안전 100건, 위험요소 있음 2건, 백신 검출 5건, 오류 1건 (count-1) |
3. detailCode → count 매핑
detailCode 의 의미와 산출 규칙은 무해화 결과 응답 명세서 §6 와 동일하며, 본 API 는 그 값을 아래와 같이 count 버킷으로 집계합니다.
| detailCode | 의미 | 집계 버킷 |
|---|---|---|
0 | 위험요소 없음 (안전) | count0 |
1 | 위험요소 있음 (의심·경고·위험·위변조) | count1 |
2 | 백신(바이러스) 검출 | count2 |
3 | 미지원 파일 (예외·차단) | count3 |
-1 | 오류 | count-1 |
| 항목 | 규칙 |
|---|---|
| 키 명명 | count + detailCode (-1 → count-1) |
| 사용하지 않음 | count4 (코드 값이 다름). 응답에 포함하지 않음 |
3.1 산출 규칙 요약 (결과 명세서와 동일)
먼저 매칭되는 규칙을 적용합니다.
| 우선순위 | 조건 | 결과 |
|---|---|---|
| 1 | 명시적 로그리즌 | 아래 로그리즌 표 |
| 2 | 재구성 완료 (200000, 200001) | 아래 위험도 표 |
| 3 | 오류 | detailCode = -1 → count-1 |
| 4 | 그 외 | detailCode = 0 → count0 |
로그리즌 → detailCode
| 로그리즌 | detailCode | 집계 |
|---|---|---|
200004 | 0 | count0 |
200005, 200006, 200007, 220355, 230133, 240355 | 1 | count1 |
990003 | 2 | count2 |
210211, 230213, 240215 | 3 | count3 |
재구성 완료 시 위험도 → detailCode (200000, 200001)
위험도 (threatLevelCode) | 의미 | detailCode | 집계 |
|---|---|---|---|
1 | 안전 | 0 | count0 |
2, 3, 4, 6 | 의심·경고·위험·위변조 | 1 | count1 |
5 | 심각 | 2 | count2 |
4. 집계 로직
| 항목 | 규칙 |
|---|---|
| 시간대 그룹핑 | 무해화 요청 시각을 yyyyMMddHH0000 으로 절삭. 예) 09:00:00 ~ 09:59:59 → 20260727090000 |
| 집계 대상 | 완료된 결과만 (code ∈ {0, 1, 2}). 진행 중(code = 3)은 제외 |
| 빈 시간대 | 고객이 준 from / to 를 그대로 사용. 해당 구간의 모든 시간대를 응답에 포함. 요청이 없으면 count 는 전부 0. 과거·현재·미래를 잘라내지 않음 |
| 정렬 | date(시간대) 오름차순 |
| 집계 스코프 | 조회 기간 내 전체 무해화 결과 |
5. 오류 응답
| HTTP | 조건 | Body 예시 |
|---|---|---|
400 Bad Request | from/to 누락·형식 오류(14자리 아님·잘못된 일시)·from > to | { "code": 400, "message": "'from' is required (yyyyMMddHHmmss)" } |
502 Bad Gateway | 서버 내부 처리 실패 | { "code": 502, "message": "statistics call failed: ..." } |
{
"code": 400,
"message": "'from' must be 14 digits (yyyyMMddHHmmss): 202607270900"
}