채팅처럼 서버 1 : 클라이언트 N 구조로 지금 설계가 되어 있고, 서버와 클라이언트가 제어 메시지랑 데이터 메시지를 계속 주고받으면서 처리하는 시스템입니다. 이를 위해서 서버에는 TCP 소켓으로 통신을 제어하는 쓰레드를 람다 함수를 이용해서 생성하고, IP + Port를 키값으로 하여 쓰레드 정보를 담을 수 있도록 Dictionary 자료구조를 정의해서 쓰고 있는데요.
현재 문제가 되는 부분이 잘 될 때는 종료할 때까지 매끄럽게 쭉 진행이 되는데, 어쩌다 한 번씩 클라이언트에서 발송한 메시지를 서버에서 수신을 못하고 멈춰버리는 증상이 있습니다. 그런데 이 상태에서 재실행을 하기 위해 전체 리셋하면 그제서야 서버쪽에서 아까 받았어야 될 메시지를 수신했다고 로그를 찍어줍니다.
처음에는 제가 무선 네트워크로 연결해서 발생하는 문제인가 했는데 유선으로 해도 똑같은 증상이 있더군요. 문제를 일으키는 정형화된 패턴이 있으면 저도 속 시원하게 원인 파악하고 해결할텐데 그건 또 아니라서 골치 아프네요.
일단 현재 제가 생각하기로는 수작업으로 어플리케이션 레벨에서 수신확인 및 재전송을 구현해야 될 것으로 판단하고 있습니다. 그런데 다른 해법이 있을 것 같은데 이걸 굳이 이렇게 해야되나란 생각이 들어서 좀 조언을 구해보고자 합니다.