2024/06/29
-
Java Virtual Thread (13), 병목 현상(bottleneck)프로그래밍/Java 2024. 6. 29. 12:46
Virtual Thread를 적용했을 때 운영적인 측면에 대해 생각해보자. 1) tomcat-biz 가 하나의 spring boot application이다. 즉 두 개의 서버가 있고, 하나의 db가 있다.2) client 요청이 오면 톰켓이 받고 biz 로직에 따라 db 쿼리를 처리한다. 여기에 virtual thread를 사용하여 성능을 높일 수 있다. 그리고 서버 한 대를 줄이는 것을 고민하였다. 이 경우 아무런 이슈가 생기지 않을까? tomcat 은 200개의 요청이 400개로 늘어났다. 다만 virtual thread이기 때문에 thread의 개수 제한이 거의 없다고 볼 수 있기 때문에 이는 문제가 되지 않는다. 생각해야할 지점은 DB이다. 기존은 HikariCP를 이용해 Co..
-
Java Virtual Thread (12), custom Executor, Scheduler프로그래밍/Java 2024. 6. 29. 12:15
하나의 Spring Boot Application 인데, 이 안에 주문과 배송 등이 구현되어 있다고 가정해보자. 이 때 주문은 Virtual Thread를 사용하고, 다른 비즈니스에서는 CPU를 많이 사용하기 때문에 Platform Thread 를 사용하면서 사용할 수 있다. 만약, yml에 spring-virtual-enable-true로 설정한다면 virtual thread 로 바뀌기 때문에 Platform thread를 사용할 수 없다. @Configuration@Slf4jpublic class SchedulerConfig { @Bean public ThreadPoolTaskScheduler threadPoolTaskScheduler() { ThreadPoolTaskS..
-
Java Virtual Thread (11), @scheduled 어노테이션프로그래밍/Java 2024. 6. 29. 11:23
스케줄러에서 virtual thread가 잘 종료되는지 확인해보자. import lombok.extern.slf4j.Slf4j;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Service;@Service@Slf4jpublic class VirtualScheduler { @Scheduled(fixedRate = 5000) public void fixedRate() { log.info("fixedRate. thread: {}", Thread.currentThread()); }}import org.springframework.boot.SpringAppli..
-
Java Virtual Thread (10), @async 어노테이션프로그래밍/Java 2024. 6. 29. 10:51
Controller.java@GetMapping("/async")public void async() { log.info("1) async. thread: {}", Thread.currentThread()); virtualService.async(); log.info("2) async. thread: {}", Thread.currentThread());} Service.javaimport lombok.extern.slf4j.Slf4j;import org.springframework.scheduling.annotation.Async;import org.springframework.stereotype.Service;@Service@Slf4jpublic class VirtualService ..