From 4397e7fe0fa3d8105fa6de2a9e169862aaec26bd Mon Sep 17 00:00:00 2001 From: daekuk Date: Tue, 6 Jan 2026 10:32:37 +0900 Subject: [PATCH] =?UTF-8?q?=ED=86=B5=EA=B3=84=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/kjb/statistics/통계테이블_설계.md | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/main/java/com/eactive/ext/kjb/statistics/통계테이블_설계.md diff --git a/src/main/java/com/eactive/ext/kjb/statistics/통계테이블_설계.md b/src/main/java/com/eactive/ext/kjb/statistics/통계테이블_설계.md new file mode 100644 index 0000000..3fb40b5 --- /dev/null +++ b/src/main/java/com/eactive/ext/kjb/statistics/통계테이블_설계.md @@ -0,0 +1,83 @@ +# API Gateway 통계 테이블 설계 + +## 요구사항 정리 + +### 수집 차원 +- **시간 단위**: 분 단위 +- **분류 차원**: API명, API Gateway Instance, ClientId, Scope, 업무구분코드 (값이 없을 경우 'NONE' 으로 대체) + +### 메트릭 +- **처리 건수**: + - 총 건수 + - 성공 건수 + - 오류 건수 (Timeout / System Error / Business Error) +- **응답시간 통계**: + - 평균 응답시간 + - 최소 응답시간 + - 최대 응답시간 +- **추가 검토사항**: + - P50, P95 백분위 응답시간 + +### 집계 방식 +- **집계 주기**: 매분 배치 집계 +- **백분위 계산**: HdrHistogram 라이브러리 사용 (근사값, 메모리 효율적) + +--- + +## 테이블 DDL + +```sql +-- API Gateway 분단위 통계 테이블 +CREATE TABLE API_STATS_MINUTE ( + STAT_TIME TIMESTAMP(0) NOT NULL, -- 통계 시간 (분 단위, 초는 00) + API_NAME VARCHAR2(100) NOT NULL, -- API명 + GW_INSTANCE_ID VARCHAR2(50) NOT NULL, -- API Gateway 인스턴스 ID + CLIENT_ID VARCHAR2(100) NOT NULL, -- 클라이언트 ID + SCOPE VARCHAR2(100) DEFAULT 'NONE' NOT NULL, -- 스코프 + BIZ_DIV_CODE VARCHAR2(50) DEFAULT 'NONE' NOT NULL, -- 업무구분코드 + + -- 건수 메트릭 + TOTAL_CNT NUMBER(12) DEFAULT 0 NOT NULL, + SUCCESS_CNT NUMBER(12) DEFAULT 0 NOT NULL, + TIMEOUT_CNT NUMBER(12) DEFAULT 0 NOT NULL, + SYSTEM_ERR_CNT NUMBER(12) DEFAULT 0 NOT NULL, + BIZ_ERR_CNT NUMBER(12) DEFAULT 0 NOT NULL, + + -- 응답시간 메트릭 (ms, 소수점 3자리) + AVG_RESP_TIME NUMBER(10,3) DEFAULT 0, + MIN_RESP_TIME NUMBER(10,3) DEFAULT 0, + MAX_RESP_TIME NUMBER(10,3) DEFAULT 0, + P50_RESP_TIME NUMBER(10,3) DEFAULT 0, + P95_RESP_TIME NUMBER(10,3) DEFAULT 0, + + -- 관리 정보 + REG_DTIME TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL, + UPD_DTIME TIMESTAMP DEFAULT SYSTIMESTAMP, + + CONSTRAINT PK_API_STATS_MINUTE PRIMARY KEY ( + STAT_TIME, API_NAME, GW_INSTANCE_ID, CLIENT_ID, SCOPE, BIZ_DIV_CODE + ) +); + +-- 코멘트 +COMMENT ON TABLE API_STATS_MINUTE IS 'API Gateway 분단위 처리 통계'; +COMMENT ON COLUMN API_STATS_MINUTE.STAT_TIME IS '통계시간(분단위, 초는 00초로 절사)'; +COMMENT ON COLUMN API_STATS_MINUTE.API_NAME IS 'API 명칭'; +COMMENT ON COLUMN API_STATS_MINUTE.GW_INSTANCE_ID IS 'API Gateway 인스턴스 ID'; +COMMENT ON COLUMN API_STATS_MINUTE.CLIENT_ID IS '클라이언트 ID'; +COMMENT ON COLUMN API_STATS_MINUTE.SCOPE IS '스코프 (없으면 NONE)'; +COMMENT ON COLUMN API_STATS_MINUTE.BIZ_DIV_CODE IS '업무구분코드 (없으면 NONE)'; +COMMENT ON COLUMN API_STATS_MINUTE.TOTAL_CNT IS '총 처리 건수'; +COMMENT ON COLUMN API_STATS_MINUTE.SUCCESS_CNT IS '성공 건수'; +COMMENT ON COLUMN API_STATS_MINUTE.TIMEOUT_CNT IS 'Timeout 오류 건수'; +COMMENT ON COLUMN API_STATS_MINUTE.SYSTEM_ERR_CNT IS '시스템 오류 건수'; +COMMENT ON COLUMN API_STATS_MINUTE.BIZ_ERR_CNT IS '업무 오류 건수'; +COMMENT ON COLUMN API_STATS_MINUTE.AVG_RESP_TIME IS '평균 응답시간(ms)'; +COMMENT ON COLUMN API_STATS_MINUTE.MIN_RESP_TIME IS '최소 응답시간(ms)'; +COMMENT ON COLUMN API_STATS_MINUTE.MAX_RESP_TIME IS '최대 응답시간(ms)'; +COMMENT ON COLUMN API_STATS_MINUTE.P50_RESP_TIME IS '50 백분위 응답시간(ms)'; +COMMENT ON COLUMN API_STATS_MINUTE.P95_RESP_TIME IS '95 백분위 응답시간(ms)'; +``` + +--- +