Sync VS Async
Sync
- 하나의 Thread가 프로그램의 코드를 순차적으로 실행하는 것.
- 한순간에 반드시 하나의 코드만 실행, 이전코드의 실행이 완료되어야함.
Async
- 하나의 Thread가 특정코드의 실행을 다른 Thread에 요청.
- 여어 Thread에 의해 동시에 여러개의 코드가 실행
Sync와 Async 은 Thread, Blocking & Non-Blocking 은 기다림.
(면접 자주 나옴)
JAVA에서의 비동기
- Thread, Runnable
- ExecutorService (Thread Pool)
- Callable & Future
- Virtual Thread
SpringBoot APP 이 HTTP요청을 처리하는 과정

- 기본적으로 SpringBoot 는
Multi Thread 기반으로 동작.
- 요청 1: Thread 1 단위로 전담함. (Thread per Request Model)
- Thread 수 이상의 트래픽이 발생한다면?
- 작업 대기 Queue 에 인원들이 대기하게된다.
- SpringBoot의 APP Code 는 여러 Thread에 의해 동시에 실행되는것을 가정해야함
- Worker Thread : MainThread 내에서 비동기처리를 위한 새로운 Thread 생성
언제 비동기를 떠올릴수 있는가?
- HTTP 응답이 나갈때 바로 동작할 필요가 없는 동작.
- 사용자 알림 전송 등 (비즈니스 로직이 영향을 주지않는 동작)
- 처리시간이 오래걸려 HTTP 응갑시간에 영향을 줄수 있는 동작
- 결합도가 낮고 결과적 일관성이 보장되는걸로 충분한 동작
전체적으로 Flow에서 영향 과 작업에 대한 시간의 영향을 받지않는 작업들
Event
심화
- 리소스효율성 측면에서 Non-blocking 한 방식이 필요한 이유는무엇일까?
