diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index a2387c5..33b702b 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -91,4 +91,5 @@ jobs: -e API_NAVER_CLIENT_ID="${{ secrets.API_NAVER_CLIENT_ID }}" \ -e API_NAVER_CLIENT_SECRET="${{ secrets.API_NAVER_CLIENT_SECRET }}" \ -e API_CLOVA_KEY="${{ secrets.API_CLOVA_KEY }}" \ + -e API_CLOVA_URL="${{ secrets.API_CLOVA_URL }}" \ ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}:latest diff --git a/BEconfig b/BEconfig index 198cc8f..081a38c 160000 --- a/BEconfig +++ b/BEconfig @@ -1 +1 @@ -Subproject commit 198cc8f806bafc29d63db921e6b2ac31b655fc60 +Subproject commit 081a38c402a8e74287b678e3702c7641e0ab5c06 diff --git a/src/main/java/com/perfact/be/domain/alt/service/ClovaApiServiceImpl.java b/src/main/java/com/perfact/be/domain/alt/service/ClovaApiServiceImpl.java index 7af651d..a169ee9 100644 --- a/src/main/java/com/perfact/be/domain/alt/service/ClovaApiServiceImpl.java +++ b/src/main/java/com/perfact/be/domain/alt/service/ClovaApiServiceImpl.java @@ -56,7 +56,7 @@ public String generateSearchQuery(String articleContent) { .build())) .topP(0.8) .topK(0) - .maxTokens(100) + .maxTokens(1024) .temperature(0.5) .repeatPenalty(5.0) .stopBefore(new ArrayList<>()) diff --git a/src/main/java/com/perfact/be/domain/report/service/ReportServiceImpl.java b/src/main/java/com/perfact/be/domain/report/service/ReportServiceImpl.java index 5763328..85f1ce3 100644 --- a/src/main/java/com/perfact/be/domain/report/service/ReportServiceImpl.java +++ b/src/main/java/com/perfact/be/domain/report/service/ReportServiceImpl.java @@ -1,6 +1,7 @@ package com.perfact.be.domain.report.service; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.ObjectMapper; import com.perfact.be.domain.news.dto.NewsArticleResponse; import com.perfact.be.domain.news.service.NewsService; @@ -30,6 +31,7 @@ import org.springframework.web.client.RestTemplate; import java.util.ArrayList; +import java.nio.charset.StandardCharsets; import java.util.List; @Slf4j @@ -256,12 +258,12 @@ private Object parseJsonResponse(String analysisResult) { // JSON 파싱하여 객체로 변환 (더 강력한 인코딩 처리) ObjectMapper mapper = new ObjectMapper(); - mapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); - mapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); - mapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true); + mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); + mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); + mapper.configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true); // UTF-8로 명시적 인코딩하여 파싱 - Object jsonObject = mapper.readValue(jsonContent.getBytes("UTF-8"), Object.class); + Object jsonObject = mapper.readValue(jsonContent.getBytes(StandardCharsets.UTF_8), Object.class); log.debug("JSON 파싱 성공"); return jsonObject; @@ -301,6 +303,7 @@ private ClovaResponseDTO callClovaAPI(ClovaRequestDTO request) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setBearerAuth(CLOVA_API_KEY); + headers.set("X-NCP-CLOVASTUDIO-REQUEST-ID", generateRequestId()); String requestBody = objectMapper.writeValueAsString(request); HttpEntity entity = new HttpEntity<>(requestBody, headers); @@ -326,4 +329,9 @@ private ClovaResponseDTO callClovaAPI(ClovaRequestDTO request) { throw new ReportHandler(ReportErrorStatus.CLOVA_API_CALL_FAILED); } } -} \ No newline at end of file + + // 요청 ID 생성, 옵셔널한 파라미터라 일단 생성은 하지만 추후 필요하다고 판단 시 저장하여 로깅 작업 추가 + private String generateRequestId() { + return java.util.UUID.randomUUID().toString().replace("-", ""); + } +}