Skip to Content
Suffering builds character
아카이브13.프로세스,스레드특징소켓, 스레드4.요청당 스레드 모델

4.요청당 스레드 모델

1. 요청당 스레드 모델, Thread Per Request

요청이란 클라이언트가 서버로의 소켓 연결 요청을 의미,

요청당 스레드 모델은 말 그대로 서버는 하나의 클라이언트 요청마다 소켓 통신을 수행할 개별 스레드들을 각각 생성하여 해당 클라이언트와 매칭하여 통신할 수 있도록 스레드를 생성하는 방식을 말함

클라이언트가 서버에 접속하면 서버 소켓의 accept()를 통해 연결된 클라이언트 소켓을 얻어옴

이때 블로킹 소켓은 I/O 처리에 블로킹이 발생하기 때문에 새로운 스레드를 하나 생성하고 그 스레드에게 클라이언트 소켓에 대한 I/O 처리를 넘겨주게 됨

그래서 서버 소켓이 동작하는 스레드는 다음 클라이언트의 연결을 처리할 수 있게 됨

2. 요청당 스레드 모델의 단점

2-1. 병목 지점 발생, Bottleneck

첫 번째 단점은 서버 소켓의 accept()가 병목 지점이 된다는 것으로,

만약 여러 클라이언트들이 동시에 접속 요청을 하게 되면
accept()의 블로킹 시간 동안 대기 시간이 길어지는 문제가 있음

제한된 리소스 내에서 이러한 문제를 해소하는 방법으로는 스레드가 차단되지 않는 논블로킹 메커니즘이 있음(JDK4~ java.nio 패키지)

2-2. 메모리 용량 초과, Out of Memory

서버에 접속하는 클라이언트의 수가 증가하면 애플리케이션 서버의 스레드 수도 그만큼 증가하게 되는데,

이러다 보면 결국 자바의 힙 메모리 부족으로 인한 OOM(Out of Memory) 문제가 발생할 수 있고, 결국 서비스 불가 상태까지 이어질 수 있음

Last updated on