diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/apim/obp/ObpGwMetricService.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/apim/obp/ObpGwMetricService.java index da1d6ef..4c2b803 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/onl/apim/obp/ObpGwMetricService.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/apim/obp/ObpGwMetricService.java @@ -2,6 +2,9 @@ package com.eactive.eai.rms.data.entity.onl.apim.obp; import com.eactive.apim.portal.obp.entity.ObpGwMetric; import com.eactive.apim.portal.obp.repository.ObpGwMetricRepository; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -50,6 +53,24 @@ public class ObpGwMetricService { return repository.findByTimesliceGreaterThanEqual(timeslice); } + /** + * 특정 시간대 이후의 GwMetric 데이터 조회 (row 수 제한) + * + * @param timeslice 조회 시작 시간대 + * @param limit 최대 조회 건수 (0이면 무제한) + * @return 조회된 지표 목록 (timeslice ASC 정렬) + */ + public List findByTimesliceGreaterThanEqual(LocalDateTime timeslice, int limit) { + if (limit <= 0) { + // 무제한 조회 (기존 동작 유지) + return repository.findByTimesliceGreaterThanEqual(timeslice); + } else { + // 제한적 조회 (timeslice ASC 정렬 + limit) + Pageable pageable = PageRequest.of(0, limit, Sort.by(Sort.Order.asc("timeslice"))); + return repository.findByTimesliceGreaterThanEqual(timeslice, pageable); + } + } + /** * 엔티티 저장 (INSERT 또는 UPDATE) */ diff --git a/src/main/java/com/eactive/eai/rms/onl/apim/obp/ObpGwMetricController.java b/src/main/java/com/eactive/eai/rms/onl/apim/obp/ObpGwMetricController.java index 7acd524..5f93a4c 100644 --- a/src/main/java/com/eactive/eai/rms/onl/apim/obp/ObpGwMetricController.java +++ b/src/main/java/com/eactive/eai/rms/onl/apim/obp/ObpGwMetricController.java @@ -55,7 +55,7 @@ public class ObpGwMetricController extends BaseRestController { produces = JSON_CONTENT_TYPE ) @ResponseBody - public String getGwMetricsAfterTimesliceV2( + public String getGwMetricsAfterTimeslice( @PathVariable("timeslice") String timeslice, @PathVariable("providerCode") String providerCode, @RequestParam(value = "pretty", required = false) Boolean pretty) { diff --git a/src/main/java/com/eactive/eai/rms/onl/apim/obp/ObpGwMetricManService.java b/src/main/java/com/eactive/eai/rms/onl/apim/obp/ObpGwMetricManService.java index 72e5c65..a815b2c 100644 --- a/src/main/java/com/eactive/eai/rms/onl/apim/obp/ObpGwMetricManService.java +++ b/src/main/java/com/eactive/eai/rms/onl/apim/obp/ObpGwMetricManService.java @@ -10,6 +10,7 @@ import com.eactive.eai.rms.common.util.CommonUtil; import com.eactive.eai.rms.data.entity.onl.apim.obp.ObpGwMetricJpaDAO; import com.eactive.eai.rms.data.entity.onl.apim.obp.ObpGwMetricService; import com.eactive.eai.rms.data.entity.onl.apim.obp.ObpGwMetricVO; +import com.eactive.ext.kjb.common.KjbPropertyHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.DataIntegrityViolationException; @@ -314,12 +315,27 @@ public class ObpGwMetricManService extends BaseService { /** * 특정 시간대 이후의 GwMetric 데이터 조회 (REST API용) * after-timeslice 엔드포인트에서 사용 + * + *

조회 범위 제한:

+ * */ public List findByTimesliceAfter(LocalDateTime timeslice) { DataSourceContextHolder.setDataSourceType( DataSourceTypeManager.getDataSourceType(DataSourceTypeManager.MONITORING)); - List entities = obpGwMetricService.findByTimesliceGreaterThanEqual(timeslice); + // KjbProperty에서 pageSize 읽기 + Integer pageSize = KjbPropertyHolder.get().getApiGwMetricPageSize(); + if (pageSize == null) { + pageSize = 10000; // 기본값 (null 안전 처리) + } + + // Service 호출 (limit 적용) + List entities = obpGwMetricService.findByTimesliceGreaterThanEqual(timeslice, pageSize); + return entities.stream() .map(ObpGwMetricDTO::from) .collect(Collectors.toList());