Skip to content

Commit 0ba09d6

Browse files
committed
fix: OpenAIReviewClient에서 open ai의 url과 key 값을 읽지 못하고 있던 문제 해결
- 개발 중 IntelliJ 환경변수 사용하던 값을 수정하지 않은 것으로 보임 - application.properties 파일에서 해당 값을 정상적으로 읽어올 수 있도록 수정함 - 그리고 open ai 계정에 API key가 발급되있지 않은 상태였음. 지금까지는 어떻게 동작했는지는 의문...
1 parent c300273 commit 0ba09d6

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

src/main/java/org/ezcode/codetest/infrastructure/openai/OpenAIReviewClient.java

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.ezcode.codetest.domain.submission.exception.code.CodeReviewExceptionCode;
1515
import org.springframework.beans.factory.annotation.Value;
1616
import org.springframework.http.HttpHeaders;
17+
import org.springframework.http.HttpStatusCode;
1718
import org.springframework.http.MediaType;
1819
import org.springframework.stereotype.Component;
1920
import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -30,10 +31,10 @@
3031
@RequiredArgsConstructor
3132
public class OpenAIReviewClient implements ReviewClient {
3233

33-
@Value("${OPEN_API_URL}")
34+
@Value("${openai.api.url}")
3435
private String openApiUrl;
3536

36-
@Value("${OPEN_API_KEY}")
37+
@Value("${openai.api.key}")
3738
private String openApiKey;
3839
private WebClient webClient;
3940
private final OpenAIMessageBuilder openAiMessageBuilder;
@@ -77,7 +78,6 @@ public ReviewResult requestReview(ReviewPayload reviewPayload) {
7778
}
7879

7980
private String callChatApi(Map<String, Object> requestBody) {
80-
8181
OpenAIResponse response = webClient.post()
8282
.uri("/v1/chat/completions")
8383
.bodyValue(requestBody)
@@ -87,14 +87,29 @@ private String callChatApi(Map<String, Object> requestBody) {
8787
.retryWhen(
8888
Retry.backoff(3, Duration.ofSeconds(1))
8989
.maxBackoff(Duration.ofSeconds(5))
90-
.filter(ex -> ex instanceof WebClientResponseException
91-
|| ex instanceof TimeoutException)
90+
.filter(ex -> {
91+
if (ex instanceof TimeoutException) {
92+
return true;
93+
}
94+
if (ex instanceof WebClientResponseException) {
95+
HttpStatusCode statusCode = ((WebClientResponseException) ex).getStatusCode();
96+
// 5xx 서버 오류만 재시도 (502, 503 등)
97+
return statusCode.is5xxServerError();
98+
}
99+
return false;
100+
})
92101
.onRetryExhaustedThrow((spec, signal) -> signal.failure())
93102
)
94-
.onErrorMap(WebClientResponseException.class,
95-
ex -> new CodeReviewException(CodeReviewExceptionCode.REVIEW_SERVER_ERROR))
96-
.onErrorMap(TimeoutException.class,
97-
ex -> new CodeReviewException(CodeReviewExceptionCode.REVIEW_TIMEOUT))
103+
.onErrorMap(WebClientResponseException.class, ex -> {
104+
HttpStatusCode statusCode = ex.getStatusCode();
105+
String responseBody = ex.getResponseBodyAsString();
106+
log.error("OpenAI API 호출 실패 - Status: {}, Response Body: {}", statusCode, responseBody, ex);
107+
return new CodeReviewException(CodeReviewExceptionCode.REVIEW_SERVER_ERROR);
108+
})
109+
.onErrorMap(TimeoutException.class, ex -> {
110+
log.error("OpenAI API 호출 타임아웃", ex);
111+
return new CodeReviewException(CodeReviewExceptionCode.REVIEW_TIMEOUT);
112+
})
98113
.block();
99114

100115
return Objects.requireNonNull(response).getReviewContent();

0 commit comments

Comments
 (0)