비동기 프로그래밍이란
- async 한 통신 (작업이 다 끝나기 전까지 기다리지 않음)
- 실시간성 응답을 필요로 하지 않는 상황에서 사용
- ex) notification, email 전송, push 알림
- 개발자 답게 표현해 보자면 Main thread 가 task 를 처리하는 게 아니라 sub thread 에게 task 를 위임하는 행위
Spring Framework 에서 비동기 프로그래밍
Thread Pool : 비동기 작업을 효율적으로 관리하기 위해 제공되는 스레드 관리 메커니즘. 스프링에서는 @Async와 같은 비동기 처리나, 스케줄링 작업을 효율적으로 처리하기 위해 스레드 풀을 활용
스레드 풀 생성 옵션
1. CorePoolSize : 최소 스레드 개수
2. MaxPoolSize : 최대 스레드 개수
3. WorkQueue : 어떤 요청이 들어오면 모든 스레드들이 바로 바로 처리하는 것은 불가능 ! 때문에 먼저 들어온 요청을 먼저 처리할 수 있는 자료구조인 큐를 이용하여 워크큐 라는 곳에 요청을 담아 넣고 지금 작업하고 있는 스레드들이 현재 스레드가 마무리 되면
다음 작업을 가져오는 곳
4. KeepAliveTime : 만들어진 스레드들이 특정 시간 동안 일을 하지 않으면 소멸하게끔 정해둔 시간
스레드 생성 순서
(중요!)
처음에는 코어풀 사이즈 만큼 스레드를 생성 > 코어풀 사이즈 보다 리퀘스트가 더 많을 경우 스레드를 더 생성 하는 것이 아닌 새로운 요청들을 워크 큐에 담음 > 워크 큐 사이즈만큼 요청이 쌓이게 되면 맥시멈 풀 사이즈 만큼 스레드를 생성
스레드 생성 시 주의할 점
(1) corePoolSize 값을 너무 크게 설정할 경우
코어풀 사이즈 같은 경우 그 수만큼은 무조건 자원을 점유하게됨. 그러나 코어풀 사이즈를 너무 크게 설정했을 경우 그 만큼은 스레드가 필요없음에도 불구하고 많은 스레드가 자원을 점유하게 될 가능성이 있기에 적절하게 값을 조절할 필요가 있음
(2) Illegal Argument Exception 이 발생하지 않도록 한다

'Spring🌱' 카테고리의 다른 글
| JWT 토큰 분석 extractClaim() 함수로 payload 추출 (1) | 2024.11.18 |
|---|---|
| 쿠키 vs 세션 vs JWT 토큰 방식의 개념에 대해 알아보자 (0) | 2024.11.18 |
| [spring boot] swagger API 문서 자동화 하는 방법 (1) | 2024.10.18 |
| [spring boot] let's encrypt 를 활용하여 SSL 무료 인증서 발급받기 (putty, WinSCP) (0) | 2024.10.18 |