responseEntity =
- restClient
- .method(method)
- .uri(fullUrl)
- .contentType(MediaType.APPLICATION_JSON)
- .headers(
- headers -> {
- String traceId = MDC.get("traceId");
- if (traceId != null) {
- headers.set("X-Request-ID", traceId);
- log.debug("TraceID 헤더 추가: {}", traceId);
- }
- })
- .body(requestBody)
- .retrieve()
- .toEntity(String.class);
-
+ restTemplate.exchange(fullUrl, method, requestEntity, String.class);
String responseBody = responseEntity.getBody();
log.debug("FastAPI 응답: Status={}, Body={}", responseEntity.getStatusCode(), responseBody);
return responseBody;
diff --git a/apps/user-service/src/main/java/site/icebang/global/config/WebConfig.java b/apps/user-service/src/main/java/site/icebang/global/config/WebConfig.java
index 9e7a13dc..9369f887 100644
--- a/apps/user-service/src/main/java/site/icebang/global/config/WebConfig.java
+++ b/apps/user-service/src/main/java/site/icebang/global/config/WebConfig.java
@@ -3,11 +3,12 @@
import java.time.Duration;
import java.util.TimeZone;
+import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
-import org.springframework.web.client.RestClient;
+import org.springframework.web.client.RestTemplate;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
@@ -16,13 +17,13 @@
/**
* 애플리케이션의 웹 관련 설정을 담당하는 Java 기반 설정 클래스입니다.
*
- * 이 클래스는 애플리케이션 전역에서 사용될 웹 관련 빈(Bean)들을 생성하고 구성합니다. 현재는 외부 API 통신을 위한 {@code RestClient} 빈을 중앙에서
- * 관리하는 역할을 합니다.
+ *
이 클래스는 애플리케이션 전역에서 사용될 웹 관련 빈(Bean)들을 생성하고 구성합니다. 현재는 외부 API 통신을 위한 {@code RestTemplate} 빈을
+ * 중앙에서 관리하는 역할을 합니다.
*
*
주요 기능:
*
*
- * - 커넥션 및 읽기 타임아웃이 설정된 RestClient 빈 생성
+ *
- 커넥션 및 읽기 타임아웃이 설정된 RestTemplate 빈 생성
*
*
* @author jihu0210@naver.com
@@ -32,21 +33,29 @@
public class WebConfig {
/**
- * 외부 API 통신을 위한 RestClient 빈을 생성하여 스프링 컨테이너에 등록합니다.
+ * 외부 API 통신을 위한 RestTemplate 빈을 생성하여 스프링 컨테이너에 등록합니다.
*
- * 커넥션 및 읽기 타임아웃을 각각 30초로 설정한 {@code SimpleClientHttpRequestFactory}를 사용하여 RestClient를 구성합니다.
- * 이렇게 생성된 RestClient 빈은 애플리케이션의 다른 컴포넌트에서 주입받아 외부 시스템과의 HTTP 통신에 사용됩니다.
+ *
기본 {@code RestTemplateBuilder}를 사용하되, 커넥션 및 읽기 타임아웃을 각각 30초로 명시적으로 설정하기 위해 {@code
+ * SimpleClientHttpRequestFactory}를 구성하여 주입합니다. 이렇게 생성된 RestTemplate 빈은 애플리케이션의 다른 컴포넌트에서 주입받아 외부
+ * 시스템과의 HTTP 통신에 사용됩니다.
*
- * @return 타임아웃이 설정된 RestClient 인스턴스
+ * @param builder Spring Boot가 자동으로 구성해주는 RestTemplateBuilder 객체
+ * @return 타임아웃이 설정된 RestTemplate 인스턴스
+ * @see RestTemplate
+ * @see RestTemplateBuilder
* @since v0.1.0
*/
@Bean
- public RestClient restClient() {
+ public RestTemplate restTemplate(RestTemplateBuilder builder) {
+ // 1. SimpleClientHttpRequestFactory 객체를 직접 생성
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
- requestFactory.setConnectTimeout(Duration.ofSeconds(30));
- requestFactory.setReadTimeout(Duration.ofSeconds(30));
- return RestClient.builder().requestFactory(requestFactory).build();
+ // 2. 타임아웃 설정 (이 메서드들은 deprecated 아님)
+ requestFactory.setConnectTimeout(Duration.ofSeconds(30000));
+ requestFactory.setReadTimeout(Duration.ofSeconds(30000));
+
+ // 3. 빌더에 직접 생성한 requestFactory를 설정
+ return builder.requestFactory(() -> requestFactory).build();
}
/**
diff --git a/apps/user-service/src/test/java/site/icebang/e2e/scenario/ContextLoadE2eTests.java b/apps/user-service/src/test/java/site/icebang/e2e/scenario/ContextLoadE2eTests.java
index 8ddda74d..29e5857c 100644
--- a/apps/user-service/src/test/java/site/icebang/e2e/scenario/ContextLoadE2eTests.java
+++ b/apps/user-service/src/test/java/site/icebang/e2e/scenario/ContextLoadE2eTests.java
@@ -2,10 +2,8 @@
import org.junit.jupiter.api.Test;
-import site.icebang.e2e.setup.annotation.E2eTest;
import site.icebang.e2e.setup.support.E2eTestSupport;
-@E2eTest
class ContextLoadE2eTests extends E2eTestSupport {
@Test
diff --git a/apps/user-service/src/test/java/site/icebang/e2e/scenario/ScheduleManagementE2eTest.java b/apps/user-service/src/test/java/site/icebang/e2e/scenario/ScheduleManagementE2eTest.java
index eeb49627..afdff08c 100644
--- a/apps/user-service/src/test/java/site/icebang/e2e/scenario/ScheduleManagementE2eTest.java
+++ b/apps/user-service/src/test/java/site/icebang/e2e/scenario/ScheduleManagementE2eTest.java
@@ -14,6 +14,11 @@
import site.icebang.e2e.setup.annotation.E2eTest;
import site.icebang.e2e.setup.support.E2eTestSupport;
+/**
+ * 스케줄 관련 E2E 시나리오 테스트
+ *
+ *
ScheduleService 기능을 API 플로우 관점에서 검증
+ */
@Sql(
value = {
"classpath:sql/data/00-truncate.sql",
@@ -41,15 +46,11 @@ void createSchedule_success() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
+ HttpEntity