CONTEST: Mock TCP 서버

TCP 클라이언트가 보내는 메시지와 커넥션을 모니터링하는 서버를 만들어 TCP Listen이 정상인지, 어떠한 메시지를 주고 받는지 상세히 들여다 보면서 디버깅 할 수 있도록 한다.

2014년 12월 3일 초안 작성
2010년 6월 6일 구글 코드 커밋

서론

memcached 클라이언트가 오동작을 하는데 원인을 알 수가 없었다. 클라이언트가 어떤 명령을 전달하는지, 커넥션 풀링은 제대로 되는지 궁금했는데 확인할 길이 없었다. memcached 의 디버그 옵션도 뒤져보고 여러 오픈소스도 검토해보다가 결국 목업 서버(그래서 기본 포트도 memcached 의 11211 에서 +1 인 11212)를 만들어 어떤 요청이 들어오는지 테스트 해서 문제를 해결했고, 잘 사용한뒤 구글 코드에 올렸다. 2010년의 일이다.

개선

더 이상 개선할 일은 없을 줄 알았는데 얼마전 쓸 일이 있어 다시 빌드해보니 버그도 있고 메모리 릭도 있었다. 간만에 쓸려니 토이(toy) 수준이라 그냥 쓰기도 좀 그랬다. vim으로 만들고 svn으로 올리던 그때와 달리 지금은 GitHub도 있고 CLion도 있고 상황이 많이 좋아졌다. 결국 조금만 고쳐야지 하다가 완전히 리팩토링 했다.

기본적으로 TCP 요청을 받아 pthread_create() 를 이용, 소켓을 새 쓰레드에 할당하는 구조는 변함이 없다. 이 구조를 기본으로, 코드 정리와 변수명 정리, 목적별 코드 분리, Makefile 개선, 상수값 튜닝, C99 컴파일 오류 수정, 설명 추가 등을 진행했다.

프로젝트명은 A Very Simple TCP CONnection TESTer를 줄여서 CONTEST로 정했다. TCP 클라이언트가 보내는 메시지와 커넥션을 소켓이 수신하는 패킷 날 것 그대로 모니터링하는 Mock TCP Server다.

데모

크롬으로 접속 했을때의 화면이다. 크롬은 기본적으로 2개의 커넥션을 동시에 요청한다는걸 알 수 있고, 크롬이 보내는 HTTP 헤더 정보도 확인할 수 있다. 이처럼 목업 서버로 동작해 클라이언트의 요청 메시지, 커넥션 점검에 매우 유용하게 활용할 수 있다.

참고

C로 작성했으며, 소스코드는 아래에서 확인할 수 있다.

is a collection of Papers I have written.
© 2000 - Sang-Kil Park Except where otherwise noted, content on this site is licensed under a CC BY-NC 4.0.
This site design was brought from Distill.