코딩을 하다 보면 여러가지 어려움에 봉착하게 된다. 특히 시스템 자원을 조금만, 짧은 시간 동안만 사용한다면 테스트 시에 그 결함이 잘 드러나지 않으나 대규모의 시스템 자원을 사용하고, 그것도 러닝타임이 엄청 길다면 문제가 많아 진다.
요즘 만들고 있는 테스트 툴이 딱 그렇다. 서버에 붙어 수많은 클라이언트 들이 붙은 것 처럼 에뮬레이팅을 해야하고 한 두시간 테스트가 아니라 최소 일, 이 주 이상의 테스를 필요로 한다. 서버는 문제가 없는데 테스트 클라이언트가 먼저 죽어버려서 테스트가 안된다면 그것이야 말로 말도 안되는 이야기다.
최초에 테스트 프로그램이니까 대충 대충 하지..라는 생각은 이미 물건너 가고 프로젝트 스케줄의 병목이 되어가고 있는 내 프로그램을 보면서 내가 과연 이걸로 밥벌이를 제대로 할 수 있을까 하는 고민이 든다.
이번 프로젝트를 하면서 느끼는 점들을 아래에 간단하게 적어 보겠다.
1. 자원 누수를 항상 체크하자.
각 시스템별로 현재 프로세스가 사용하고 있는 자원에 대한 정보를 보여 주는 여러가지 유용한 툴들이 있다. 윈도우에는 작업관리자가 있고, 리눅스에는 top, vmstat, ps 등이 있다. 이 툴들로 항상 프로세스를 모니터링 하여야한다. 혹시나 지속적으로 자원이 늘어난다면 오픈소스로 공개되어 있는 프로파일러 등을 사용하여 자원의 할당과 해제를 추척해서 자원의 누수가 없도록 해야 한다. 만일 오픈소스로 사용하기 힘든 것이라면 간단히 자신만의 프로파일러를 만들어서 사용해도 좋다.
2. 클래스를 사용한다면 소멸자에서 모든 자원에 대한 해제를 호출 하도록 하자.
프로그램을 하다 보면 자원이 필요한 시점에서 자원을 할당하고, 모든 사용이 끝나는 시점에서 자원을 바로 해제하는 사람이 있다. 아주 당연한 일이다. 하지만 사람이라는 생물이 완전하지 않은지라 이런식으로 자원의 할당과 해제를 반복하다 보면 자기도 모르게 자원의 해제를 놓치는 경우가 간혹 발생 하기도 한다. 이런식으로 놓치는 자원들은 자기도 모르게 놓친 것인 만큼, 찾기도 어렵다.
만일 클래스등을 이용한다면 소멸자에 클래스 내에서 할당한 자원을 모두 삭제 하게 하는 것도 괜찮은 방법이다. 다만 이런 방법을 사용하려면 이미 자원이 해제 된것이 아닌지 확인 하는 선행 작업이 필수적이고, 그러려면 당연히 자원을 해제 하고 난뒤엔 다시 초기화 시키는 초기화 작업이 필요하다. 물론, 처음 시작할때 생성자등에서 초기화를 호출해주는 것도 잊어서는 안된다. 될 수 있다면 생성자에서 모든 자원에 대한 초기화를 하고, 소멸자에서는 모든 자원에 대한 해제를 요청 하도록 하는 코드를 작성하도록 하자.
3. 디버거를 잘 사용하도록 하자.
아무리 완벽한 프로그래머라고 하더라도 신이 아닌 이상은 메모리 참조 오류라던지 기타등등 쉽게 알수 없는 오류를 만들어 내곤한다. 하지만 이럴때 우리를 도와주는 영원한 우리의 친구 '디버거'가 있다. 리눅스에서 코딩을 하던, 윈도우에서 코딩을 하던 상관 없이 printf 신공 보다는 디버거와 보다 친해 질 수 있도록 하자.
특히, 윈도우쪽 개발자들은 디버거에 있어서 만은 축복받은 환경에서 살고 있다고 해도 과언이 아니다.
위와 같이 대충 내가 이런저런 일을 하면서 느낀점을 간단히 적어 보았다.
이번에는 그냥 이런식으로 코딩을 하면 좋겠다라고 적었지만, 프로젝트가 끝이나고 시간이 조금 남게 된다면 예를 들어가면서 좀 더 자세한 이야기를 적고 싶다.
넋두리있다