Windows Socket

다중 접속 서버 모델

코카(Coca) 2021. 11. 16. 03:38

이전 포스팅에서는 echoServer를 통해 상호간의 통신을 하는 서버와 클라이언트를 구현해보았다.
다만 이전의 서버는 하나의 서버프로세스는 하나의 클라이언트의 처리만 진행하였다.
하지만 실제 서버는 여러개의 클라이언트를 동시다발적으로 처리해야한다.
때문에 이번 포스팅에서는 다중 접속 서버의 모델들의 종류에 대해 설명을 한다.

1) 멀티 프로세스 서버
부모 프로세스가 클라이언트의 접속이 오면, 해당 클라이언트와 데이터를 송수신할 담당할 자식 프로세스를 생성한다.
자식 프로세스는 클라이언트와의 연결이 종료되면 종료된다.
하나의 프로세스가 클라이언트에 대해 통신을 전담하기에 대용량의 데이터를 전송하기에 유리하지만, 프로세스의 생성은 큰 비용이 들기때문에 시스템 자원을 크게 사용한다는 단점이 있다.

 

2) 멀티 플렉싱 서버
여러개의 클라이언트로 부터 오는 입출력 정보를 하나의 전송로에 묶어서 한꺼번에 데이터를 송수신한다.
송수신하는 데이터의 크기가 작은 경우에 용이하며, 멀티 프로세스 서버보다 다수의 클라이언트를 처리하는데 유리하다.
하지만 멀티스레드 방식에 비해 많은 접속을 받지 못하며 접속자가 많을수록 클라이언트의 데이터를 체크하기위한 작업에 소요되는 시간이 길어져 부하가 생기는 단점이 있다.
 멀티 플렉싱 서버는 다수의 클라이언트 정보를 배열로 묶어 관리하는 select함수를 이용하여 구현할 수 있다. 이 부분은 다음 포스팅에서 다뤄보겠다.

 

 

3) 멀티 스레드 서버

하나의 프로세스에서 각 클라이언트의 송수신을 담당하는 스레드(thread)를 생성한다. 스레드는 프로세스에 비해 생성비용이 적어 멀티 프로세스 방식의 서버보다 더 많은 클라이언트의 접속을 처리하는데 용이하다.
하지만 스레드간의 교착상태나 race컨디션 등의 위험이 있다.