image.png

package com.loadtest.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class VirtualThreadController {

    // <http://localhost:8081/ai/recommend>

    @GetMapping("/ai/recommend")
    public String recommend() throws InterruptedException {
        System.out.println("테스트 날라왔다");
        Thread.sleep(5000); // 5초 대기
        return "recommend";
    }

    @PostMapping("/ai/recommend")
    public String recommendPost() throws InterruptedException {
        System.out.println("테스트 날라왔다");
        Thread.sleep(5000); // 5초 대기
        return "recommend";
    }
}

라고 했더니 에러 뜸

2024-12-20T10:57:07.543+09:00  WARN 5472 --- [cpplab] [at-handler-1230] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.544+09:00  WARN 5472 --- [cpplab] [at-handler-1218] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.544+09:00  WARN 5472 --- [cpplab] [at-handler-1105] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.553+09:00  WARN 5472 --- [cpplab] [at-handler-1209] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.554+09:00  WARN 5472 --- [cpplab] [at-handler-1204] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.555+09:00  WARN 5472 --- [cpplab] [at-handler-1077] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.556+09:00  WARN 5472 --- [cpplab] [at-handler-1203] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.557+09:00  WARN 5472 --- [cpplab] [at-handler-1198] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.558+09:00  WARN 5472 --- [cpplab] [at-handler-1136] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.559+09:00  WARN 5472 --- [cpplab] [at-handler-1177] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.560+09:00  WARN 5472 --- [cpplab] [at-handler-1210] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.561+09:00  WARN 5472 --- [cpplab] [at-handler-1118] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.562+09:00  WARN 5472 --- [cpplab] [at-handler-1213] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.562+09:00  WARN 5472 --- [cpplab] [at-handler-1227] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.563+09:00  WARN 5472 --- [cpplab] [at-handler-1229] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.564+09:00  WARN 5472 --- [cpplab] [at-handler-1197] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.565+09:00  WARN 5472 --- [cpplab] [at-handler-1207] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.566+09:00  WARN 5472 --- [cpplab] [at-handler-1216] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.566+09:00  WARN 5472 --- [cpplab] [at-handler-1199] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe
2024-12-20T10:57:07.567+09:00  WARN 5472 --- [cpplab] [at-handler-1214] c.c.g.common.exception.ExceptionAdvice   : Response already committed. Ignoring: org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe

클라이언트가 서버의 응답을 기다리는 도중 연결을 종료한 경우 발생.

서버가 아직 응답을 처리 중인데 클라이언트가 더 이상 기다리지 못하고 연결을 끊으면, Broken pipe 예외를 던집니다.

image.png

image.png


300개 - 동기

image.png

300개 - 비동기

image.png