spring boot 3

WebClient로 외부 서비스에 요청

대량의 요청을 타입별로 분배를 했습니다. 그렇다면 이 분배된 요청을 발송 요청 서비스로 보내야합니다.이때 사용한 것이 WebClient입니다. WebClient비동기·논블로킹(Non-Blocking) 방식의 HTTP 클라이언트논블로킹 방식이기 때문에 발송 요청 후 응답을 기다리지 않고 다른 작업 수행이 가능GET, POST, PUT, DELETE 등 모든 HTTP 메서드 지원헤더, 쿠키, 인증 등 다양한 요청 설정 가능@Configurationpublic class WebClientConfig { @Value("${api.url}") private String url; @Bean public WebClient webClient(WebClient.Builder builder) { return build..

Thread Pool로 대용량 트래픽 처리

Thread Pool이란?미리 일정 개수의 스레드를 생성해 두고 재사용하는 구조요청이 들어오면 풀에 있는 스레드가 작업을 수행작업이 끝나면 스레드를 종료하지 않고 풀에 반환하여 다음 요청에서 재사용@Configuration@EnableAsync // @Async 활성화public class AsyncConfig { @Bean(name = "taskExecutor") public ThreadPoolTaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); // 기본 스레드 수 executor.se..

@Async를 이용한 비동기 처리

비동기 처리에 대해 설명하기전에 받은 요청을 어떻게 처리했는지 먼저 설명드리겠습니다. 대량의 요청을 동시에 받으면 이 요청을 처리하기 까지 담아둘 곳이 필요합니다.이를 위해 ConcurrentLinkedQueue를 static으로 선언하여 전역에서 사용가능하게 하였고, 생성한 Queue에 요청 데이터를 담았습니다. ConcurrentLinkedQueue : 멀티스레드 환경에서 사용되는 안전한 큐 구현체데이터를 처리하기 위해 초마다 Queue 값을 읽어오는 스케줄러를 사용했습니다. 이 스케줄러는 요청 데이터를 읽어와서 발송 요청 서비스로 전달하는 역할을 합니다. 이때 요청데이터를 발송 요청 서비스로 보내기 위해 사용한 개념이 비동기 처리입니다.비동기 : 요청을 보내고 즉시 다음 작업 수행동기 : 요청 후..