-
디버그 코드를 SVN에 체크인하지 마세요.Object & Test 2011. 7. 22. 09:29제가 처음으로 회사에 취직해서 개발을 시작할 무렵은 EJB의 시대였습니다. EJB 스펙을 구현한 웹로직, 웹스피어, Jboss같은 웹 애플리케이션 서버가 웹앱 시장을 장악하고 있었고 EJB 코딩이가능한 자바 개발자를 찾는 구인 광고가 넘쳐났습니다.
처음 사회에 나온 어리버리한 신입사원이었던 저는 EJB아니면 엔터프라이즈웹 웨플리케이션을 작성할 수 없는 줄 알았습니다. 그렇게 몇 년을 세션빈, 엔티티 빈에 묻혀 살면서 수많은 EJB 코드를 작성했습니다. 사실 EJB 스펙에 맞게만 코딩을 하면 트랜젹션 관리, 데이터소스 관리 같은 직접 구현하기 어려운 기능을 알아서 해주는 건 상당히 매력적이긴 했습니다.
하지만 그 시절은 저에게 개발하기가 무척 어려웠던 시절로 기억됩니다. 잘 알지도 못하는 DD(Deployment Descriptor)를 작성해야 하는 게 고역이었고, 어렵게 작성해서 배포를 했는데 어디엔가 오타라도 하나 있으면 서버가 아예 뜨질 않았습니다. 게다가 어디가 잘못됐는지 원인을 찾는 것도 여간 힘든 일이 아니었습니다. 테스트를 위해 로컬 컴퓨터에 무거운 WAS를 설치하는 것도, 여러가지 설정 하는 것도 어려웠습니다.
무엇보다도 저를 괴롭혔던 건 디버그 하기가 너무 어려웠다는 사실입니다. 코드를작성해서 테스트하려면 만든 컴포넌트를 WAS에 배포한 후 서버를 띄워 직접 테스트를 해야 했고, 기능이 제대로 동작하지 않을 경우 디버그를 위한 코드를 잔뜩 넣어 콘솔에 찍히는 메시지를 보면서 디버그를 하곤했습니다.
그래서 그때는 Log4j가 제가 가장 애용하는 디버그 도구였습니다. 대게 뭐 이런 식의 코드였습니다.If(logger.isDebugEnabled()) {
logger.debug(“이런적 처음인데..왜 안돼지..”);
}
그 시절 제가 만든 코드에는 비즈니스 로직을 구성하는 코드와 디버그 코드가 짬뽕돼 들어 있어 사실상 개발이 끝나도 제거하기가 힘들었습니다. 그러니 나중에 심각한 문제가 일어나곤 했습니다. 소스를 읽기 힘들다라는 것 정도야 애교로 봐줄 수 있는 정도의 문제였습니다. 로그 레벨을 높여 실서버에 배포했는데 잘 돌아가던 코드가 안 돌아가는 문제도 발생하기도 했고, 실 서버에 문제가 생겨서 원인을 찾으려고 로그 레벨을 낮췄다가 미친 듯이 쏟아지는 로그에 서비스가 뻗기도 했습니다.
지금 생각하면 부끄럽지만 사실 그때는 디버그 코드는 코드가 아니라는 사실을 잘 몰랐습니다. 디버그 코드는 버그를 잡고/수정하기 위한 코드니까 정상 코드가 아니라는 이야기입니다. 따라서 소스 형상관리 서버에 들어갈 자격이 없습니다. 소스형상관리 서버에는 디버그 할 코드가 아닌 디버그 된 코드가 들어가야한다는 단순한 사실을 몰랐기 때문입니다.
그러다가 jUnit을 이용해 단위테스트를 작성하는 법을 알게 됐고 TDD(Test Driven Developement)하는 법도 알게 됐습니다. 이건 뭐 완전 신세계더군요. WAS를 띄우지 않아도 내 코드를 테스트할 수 있는 방법이 있으니 얼마나 편했는지 모릅니다. 내가 짠 코드를 바로 검증할 수 있어서 개발 속도도 빨라졌습니다. 그야말로 디버그된 코드를 만들게 된 겁니다.
또, Spring, iBatis 같은 경량 프레임워크를 도입한 이후로는 문제가 발생하더라도 IDE에서 바로 서버를 띄우고 실시간으로 디버깅 하는 게 가능해 더 이상 디버그 코드를 넣지 않고도 코드의 문제를 찾는 게 가능해졌습니다.
그렇게 단위테스트와 경량 프레임워크을 적극적으로 이용하면서 저는 슬프지만(?) log4j와 이별했습니다. 요즘은 멍하니 콘솔을 쳐다보지도 않습니다.:)
혹시 아직도 마치 영화 매트릭스에 나오는 네오처럼 모든걸 이해한다는 눈빛으로 엄청나게 쏟아지는 콘솔 정보를 쳐다보고있다면, SVN같은 소스형상관리 관리 서버가 디버그 코드로 가득 차 있다면 새로운 방법을 찾아보세요.'Object & Test' 카테고리의 다른 글
DBUnit 사용시 테스트 데이터 INSERT 문제 (0) 2011.10.12 소프트웨어의 품질 (0) 2011.08.31 단위 테스트용 테스트 데이터베이스 싱크하기 (2) 2011.07.07 Mock Object 탄생 비화(1) (0) 2011.06.27 조합테스트기법 - 모든 단일 값 찾기 (0) 2010.12.07