99import org .springframework .beans .factory .annotation .Value ;
1010import org .springframework .http .HttpEntity ;
1111import org .springframework .http .HttpHeaders ;
12- import org .springframework .http .HttpMethod ;
1312import org .springframework .http .MediaType ;
14- import org .springframework .http .ResponseEntity ;
1513import org .springframework .stereotype .Service ;
16- import org .springframework .web .client .RestTemplate ;
1714import org .springframework .web .reactive .function .client .WebClient ;
1815import org .springframework .web .servlet .mvc .method .annotation .SseEmitter ;
1916
3633@ RequiredArgsConstructor
3734public class ChatbotServiceImpl implements ChatbotService {
3835
39- private final RestTemplate restTemplate = new RestTemplate ();
4036 private final ObjectMapper objectMapper ;
4137 private final WebClient webClient ;
4238
@@ -54,16 +50,17 @@ public SessionResponseDTO createSession(Long userId, SessionRequestDTO request)
5450 Map <String , Object > requestBody = Map .of ("title" , request .getTitle ());
5551 HttpEntity <Map <String , Object >> requestEntity = new HttpEntity <>(requestBody , headers );
5652
57- ResponseEntity <String > response = restTemplate .exchange (
58- url ,
59- HttpMethod .POST ,
60- requestEntity ,
61- String .class
62- );
53+ String response = webClient .post ()
54+ .uri (url )
55+ .contentType (MediaType .APPLICATION_JSON )
56+ .bodyValue (requestBody )
57+ .retrieve ()
58+ .bodyToMono (String .class )
59+ .block ();
6360
64- log .info ("AI 서버 응답: {}" , response . getBody () );
61+ log .info ("AI 서버 응답: {}" , response );
6562
66- String sessionId = extractSessionId (response . getBody () );
63+ String sessionId = extractSessionId (response );
6764
6865 return SessionResponseDTO .builder ()
6966 .sessionId (sessionId )
@@ -94,19 +91,16 @@ public List<SessionListResponseDTO> getSessions(Long userId, int limit, int offs
9491 String url = String .format ("%s/chat/sessions?user_id=%d&limit=%d&offset=%d" , aiChatUrl , userId , limit ,
9592 offset );
9693
97- HttpHeaders headers = new HttpHeaders ();
98- headers .setContentType (MediaType .APPLICATION_JSON );
99-
100- ResponseEntity <String > response = restTemplate .exchange (
101- url ,
102- HttpMethod .GET ,
103- new HttpEntity <>(headers ),
104- String .class
105- );
94+ String response = webClient .get ()
95+ .uri (url )
96+ .accept (MediaType .APPLICATION_JSON )
97+ .retrieve ()
98+ .bodyToMono (String .class )
99+ .block ();
106100
107- log .info ("AI 서버 세션 목록 응답: {}" , response . getBody () );
101+ log .info ("AI 서버 세션 목록 응답: {}" , response );
108102
109- return parseSessionsFromResponse (response . getBody () );
103+ return parseSessionsFromResponse (response );
110104
111105 } catch (Exception e ) {
112106 log .error ("세션 목록 조회 중 오류 발생" , e );
@@ -166,13 +160,13 @@ public SseEmitter chatStream(Long userId, ChatRequestDTO request) {
166160 .subscribe (
167161 chunk -> {
168162 try {
169-
163+ log . info ( "Received chunk: {}" , chunk );
170164 if (!chunk .isBlank ()) {
171165 if (chunk .startsWith ("data: " )) {
172166 chunk = chunk .substring (6 );
173167 }
174168 emitter .send (SseEmitter .event ()
175- .data (chunk , MediaType . APPLICATION_JSON_UTF8 ));
169+ .data (chunk ));
176170 }
177171 } catch (Exception e ) {
178172 log .error ("SSE 전송 중 오류" , e );
@@ -208,16 +202,16 @@ public List<CharResponseDTO> getSessionMessages(Long userId, String sessionId) {
208202 HttpHeaders headers = new HttpHeaders ();
209203 headers .setContentType (MediaType .APPLICATION_JSON );
210204
211- ResponseEntity < String > response = restTemplate . exchange (
212- url ,
213- HttpMethod . GET ,
214- new HttpEntity <>( headers ),
215- String .class
216- );
205+ String response = webClient . get ()
206+ . uri ( url )
207+ . accept ( MediaType . APPLICATION_JSON )
208+ . retrieve ()
209+ . bodyToMono ( String .class )
210+ . block ( );
217211
218- log .info ("AI 서버 메시지 응답: {}" , response . getBody () );
212+ log .info ("AI 서버 메시지 응답: {}" , response );
219213
220- JsonNode root = objectMapper .readTree (response . getBody () );
214+ JsonNode root = objectMapper .readTree (response );
221215 JsonNode data = root .path ("data" );
222216
223217 String receivedSessionId = getText (data , "session_id" );
0 commit comments