3. HTTP Server
Java ServerSocket
Blocking vs Non-Blocking
Java ServerSocket은 Java 언어로 구현된 네트워크 소켓 서버의 구현을 단순화하는 클래스입니다. Java ServerSocket을 사용하면 네트워크 클라이언트에서 소켓 연결 요청을 수신하고, 이에 대한 응답으로 데이터를 보내거나 받을 수 있습니다.
Blocking과 Non-Blocking은 네트워크 통신에서 I/O 작업에 대한 처리 방식을 나타내는 개념입니다. Blocking은 I/O 작업을 수행하는 동안 해당 스레드가 블로킹되어 다른 작업을 수행할 수 없는 반면, Non-Blocking은 I/O 작업을 수행하는 동안 스레드가 블로킹되지 않으므로 다른 작업을 수행할 수 있습니다.
Java ServerSocket은 기본적으로 Blocking 모드로 작동합니다. 즉, 소켓 연결 요청이 수신될 때까지 스레드가 블로킹되며, 연결이 수립된 후에야 데이터를 송수신할 수 있습니다. 그러나 Java NIO(Non-blocking I/O) 패키지를 사용하면 Non-Blocking 모드로 작동하는 네트워크 서버를 구현할 수 있습니다. 이 경우 소켓 연결 요청을 받는 스레드는 블로킹되지 않고, 연결 수립 후 데이터를 송수신하는 스레드는 별도로 생성하여 처리합니다. 이를 통해 하나의 스레드가 여러 클라이언트의 요청을 동시에 처리할 수 있어서 더욱 효율적인 네트워크 서버를 구현할 수 있습니다.
Last updated