일반적인 Client-Server Socket 통신은 Sync 구조이다.
대부분 Server에서는 Client가 연결을 요청한 후 데이터를 보내기만을 기다린다.
따라서, 한번 Connection이 맺어지고 Client의 요청으로 들어온 데이터를 읽고 처리한 이후에는
Server에서는 Client에서 동일한 Connection으로 데이터를 보내도 알 수가 없다.
이것을 처리하기 위해서는 Server에서 Connection의 InputStream에 데이터가 있는지 없는지를 알기 위해 InputStream.available()을 통해 무한루프를 돌면서 감시하고 있어야 한다.
그 결과 컴퓨터의 CPU 리소스를 엄청 잡아 먹는다.
오늘날에야 멀티코어가 대세로 자리잡아서 코어 하나를 Connection을 유지하는 Thread하나에 할당해주면 된다지만, 분명 한계는 있다.
그래서 Connection의 InputStream으로 데이터가 들어올 때, Event로 데이터가 들어왔음을 알려주고, 그 이후 서버에서 InputStream을 읽어서 처리하도록 하기 위해서 Java NIO(Non-blocking I/O)를 이용하여 Socket Server 프로그램을 작성해 보았다.
로컬에 있는 Virtual Machine에서 테스트를 했기에 크게 의미 있는 데이터는 아니지만, 놀랍게도 5배 정도의 성능 향상을 보였다.
누군가는 Java NIO를 따로 공부하느니, Node.js를 사용하여 Socket Server를 만드는 것이 더 쉽다고 이야기하는 분들도 있지만, 처음 접하는 사람이라면 Node.js도 공부해야 한다.(-.-)
여하튼, 앞으로 프로그래밍의 대세는 Asyncronous한 Event Driven Approach인 것은 분명해 보인다.
트랙백 주소 :: http://www.yongbi.net/trackback/563
트랙백 RSS :: http://www.yongbi.net/rss/trackback/563
댓글을 달아 주세요
댓글 RSS 주소 : http://www.yongbi.net/rss/comment/565