CS 공부 & 기초 지식

[Spring Boot] 스레드(Thread)

Coding-Su 2024. 11. 15. 17:24
728x90

스레드란?

스레드란 프로그램에서 실행되는 작업의 최소 단위입니다.

 

예를 들어 API를 호출하면 Spring에서 스레드가 요청을 처리합니다.

여기 한 식당이 있습니다. 그 식당에는 종업원(Thread) 이 있습니다. 각각의 종업원은 손님(Client)
들에게 주문(request)을 받고 주방(Spring MVC) 에서 음식(response) 이 완성이되면 음식을 손님에게
음식을 전달해 줍니다.

 

 

 

성능이 좋은 서버란?

1. 하나의 스레드를 극한의 효율로 사용하기(싱글 스레드), 비동기 방식과 non-blocking방식을 사용 -> Node.js

2. 스레드를 여러개 사용하기(멀티 스레드), 비공기 방식과 non-blocking 방식을 사용 -> Spring

 

 

동기와 비동기

동기: 동기 방식에서는 작업이 순차적으로 진행됩니다. 즉, 하나의 작업이 끝나야 다음 작업이 실행됩니다.

예시: 함수 A가 함수B를 호출하고, 함수 B의 실행이 완료될 때까지 함수 A가 기다리는 경우, 이는 동기 호출입니다.

 

비동기: 비동기 방식에서는 작업이 시작된 후, 해당 작업의 완료를 기다리지 않고 다음 작업을 즉시 수행합니다.

예시: 파일을 읽는 비동기 작업을 시작한 후, 파일 읽기가 완료되기를 기다리지 않고 다음 작업을 계속 수행합니다. 파일 읽기가 완료되면, 설정된 콜백 함수가 실행되어 결과를 처리합니다.

 

Blocking과 Non-Blocking

Blocking: 블로킹은 특정 작업이 완료될 때까지 현재 스레드의 실행을 멈추는 것을 의미합니다. 블로킹 호출에서는 현재 작업이 완료될 때까지 프로그램의 다른 작업이나 이벤트가 실행되지 않습니다.

 

Non-Blocking: 논블로킹 방식에서는 작업을 수행하는 동안 해당 작업이 완료될 때까지 기다리지 않고, 즉시 제어권을 반환합니다. 논블로킹 호출은 결과가 즉시 반환하거나 작업이 아직 완료되지 않았음을 의미합니다.

 

 

 

스레드 풀이란?

Spring에서 미리 사용할 스레드를 여러 개 생성해서 저장해두는 개념입니다.

 

스레드를 미리 생성하는 이유는 스레드를 생성하고 제거하는 작업에는 비용이 많이 소요됩니다.

스레드를 생성할 때 시스템 자원을 할당하고 제거할 때는 자원을 해제해야 하는데 많은 스레드를 생성하고 제거하는 경우에는 성능 저하가 발생할 수 있기 때문에 스레드 풀에 스레드를 미리 생성하고 재사용합니다.

 

 

내용 정리

API요청이 들어오면

1. 가장 머너저 서블릿 컨테이너에 들어옵니다.

2. 스레드 풀에서 스레드가 할당됩니다.

3. 할당된 스레드는 필터 페인에 등록된 필터를 순서대로 통과합니다.

4. 필터를 통화한 스레드는 DispatcherServlet을 호출하여 어떤 Servlet을 사용할 것인지 결정합니다.

5. Spring 3 Layer 계층을 통과합니다.

 

728x90