홈 › 고급 › 09 / 10

CompletableFuture 심화와 가상 스레드 실전

어느 스레드에서, 어떤 풀로, 실패하면 어떻게
섹션 7진행 0 / 10

CompletableFuture 심화와 가상 스레드 실전: 어느 스레드에서, 어떤 풀로, 실패하면 어떻게

고급 02 에서 CompletableFuture 와 가상 스레드의 문법을 배웠습니다. 이번 레슨은 그것을 운영 코드에 넣었을 때 터지는 문제를 다룹니다. "왜 갑자기 느려졌지", "예외가 사라졌다", "타임아웃을 걸었는데 서버가 계속 바쁘다", "가상 스레드로 바꿨는데 빨라지지 않는다" 의 원인을 전부 실행으로 재현합니다.

1. 왜 배우는가

비동기 코드의 버그는 스택 트레이스가 끊겨 있어 찾기 어렵습니다. 어느 스레드에서 실행됐는지, 예외가 어느 단계에서 삼켜졌는지를 모르면 로그만 보고는 알 수 없습니다. 실행 규칙을 알아야 로그가 읽힙니다.

가상 스레드는 "스레드를 무한히 만들 수 있다" 로 소개되지만, 실무에서는 세 가지 벽에 부딪힙니다. synchronized 안에서 블로킹하면 캐리어가 묶이는 피닝, 커넥션 풀 크기라는 진짜 병목, 그리고 ThreadLocal 비용입니다. 셋 다 이 레슨에서 숫자로 확인합니다.

Spring Boot 3.2 부터는 설정 한 줄로 Tomcat 요청 처리를 가상 스레드로 바꿀 수 있습니다. 바꾸기 전에 무엇을 점검해야 하는지가 이 레슨의 결론입니다.