Day6
소켓 API를 사용해서 간단한 채팅 프로그램을 만들어 보았다. 채팅 프로그램의 특성상 소켓의 no-delay옵션(버퍼에 데이터를 모으지 않고 바로 보내버리는 방식)을 적용해야 했는데, 관련된 내용들을 찾아보고 공부하는데 조금 시간이 걸렸다.
- 소켓의 모드에는 blocking 과 non-blocking 모드가 있는데, 기본적으로 아무런 옵션도 주지 않으면 blocking으로 소켓이 열린다. blocking모드에서는 recv를 할때, 소켓 디스크립터에 아무런 정보가 없으면 block되어 send를 통해서 데이터가 전송되기를 대기하게 된다. 반면 non-blocking 모드에서는 대기하는 상황 없이 없으면 없는대로 넘어가 버린다.
- 소켓에 no-delay 옵션을 주려면, setsockopt() 함수에 인자로 TCP_NODELAY 를 설정한다. 관련 내용을 찾아보면, TCO_NODELAY 옵션은 Nagle 알고리즘을 disable 한다고 설명이 나와있다. 궁금해서 nagle 알고리즘을 알아보았는데, 더불어서 패킷에 대한 내용도 공부할 수 있었다. 네트워크 통신에서 데이터를 주고받을 때는 패킷이라는 단위로 전송하게 되는데 여기에는 각종 네트워크 통신에 필요한 정보들이 담겨있다. nagle 알고리즘은 이 패킷의 양을 줄이기 위한 방법이다. 데이터를 하나하나 전송하는 것이 아니라, 버퍼에 모았다가, 하나의 패킷으로 한번에 전송하는 것이라고 이해할 수 있었다.
- 작은 네트워크 프로그램을 직접 구현해보면서, 평소에 생각없이 사용하던 네트워크 통신이 실제로 어떻게 이루어지는지에 대해서 아주 조금은 그림이 그려졌다. 데이터의 교환이라는 측면에서 처음에는 생각했던 것 보다 쉽게 느껴졌지만, 알면 알수록 생각해야할 것들이 더 많다고 느꼈다. 네트워크라는 새로운 내용을 공부하면서, 친구들과 함께 고민하면서 알아가는 과정이 즐거웠던 것 같다.