메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

독자리뷰

잡힐듯 잡히지 않는 디버깅 너란 녀석

mydrea***

|

2017-06-25

이펙티브 디버깅

소프트웨어의 완성은 디버깅!

  • 저자 : 디오미디스 스피넬리스
  • 번역 : 남기혁
  • 출간 : 2017-05-20

안그래도 믿고 보는 Effective 시리즈인데 그 주제가 디버깅이라니!

직업 개발자로서 구현보다 훨씬 더 많은 시간을 디버깅에 투자(a.k.a 삽질)하는것이 일반적인데, 이미 제목만으로도 이 책을 읽지 않은 개발자는 직무유기의 나태한 존재가 되어버리리라.

다른 Effective 시리즈가 완독 후에는 해당 언어의 숙련자가 된 것만 같은 느낌을 준 것처럼, 이 책을 끝내고나면 개발 자체의 고수가 된 듯한 느낌을 받게 되지 않을까?

책 커버부터 매끈하면서도 꺼끌한 것이 이 안에 대단한 내용이 있을 것만 같은 기대감을 불러 일으킨다.

부푼 마음으로 평소엔 가볍게 지나쳤을법한 ‘들어가며’와 같은 서문도 꼼꼼히 읽어나간다.


들어가며

역시나 기대를 저버리지 않고 이 책은 경험이 풍부한 개발자를 위한 것임을 명확히 밝히고 있다. 죽이 되든 밥이 되든 이 책을 이해할 때까지 붙잡고 있는다면, 고급 개발자에 한 걸음 다가서 있을 것이다.

Chapter 1 — 고차원 전략

공감가는 내용들이 많다. 특히 가장 첫번째 주제인 모든 문제를 이슈 추적 시스템으로 관리한다는 부분에서 저자와 나의 코드가 잘 맞는다고 생각했다.

한편으로는 웹에서 적절한 검색어를 사용하기, 중요한 문제에 집중하기와 같은 당연한 내용까지 굳이 하나의 주제로 다루어져야 하는가 하는 의문이 남았지만, 고수일수록 기본기가 중요하다는 사실을 잊고있었던 것은 아닌가 하는 반성을 하게 되었다.

Chapter 2 — 범용적인 디버깅 기법

개발 언어, 플랫폼을 막론하고 꼭 필요한 디버깅 대원칙들이 잘 정리되어있다. 그중에서도 어려운 문제를 만나면 잠을 자는 방법을 소개한 부분에서 저자에 대한 신뢰감은 급격히 상승했다.

디버깅 데이터를 한 눈에 보기 위해 좋은 그래픽카드와 모니터를 사용하거나 인쇄해서 보라는 부분에서 잠시 고개를 갸우뚱하긴 했지만 역시 기본이 중요하다는 생각을 곱씹게 되었다.

Chapter 3 — 범용 도구를 활용한 기법

유닉스 계열 커맨드라인에서 디버깅을 위해 사용 가능한 명령어의 조합, 환경변수 셋팅 등을 소개한 부분은 꽤나 유용했다.

반면 특정 제품을 소개할 때는 너무 다양한 플랫폼을 다루려다 보니 상대적으로 내용이 부실해져서 그다지 도움이 된다는 느낌을 받진 못했다.

Chapter 4 — 디버거 활용법

C, C++ 환경에서 gdb를 활용하는 예제가 대부분이다. 비쥬얼 스튜디오, 이클립스와 같은 플랫폼도 소개는 하나 단편적이다.

JVM 환경에서 IntelliJ를 주로 활용하는 내게는 크게 와닿지 않는 부분이었다.

Chapter 5 — 프로그래밍 기법

가장 훌륭한 디버깅은 버그가 적은 가독성 높은 코드를 작성하는 것이라는 기본을 상기시켜준다.

Chapter 6, 7 — 컴파일 타임/런타임 기법

정적/동적 검사 도구를 소개하는데 역시 C, C++ 환경에 특화된 내용이 많다.

코드 레벨 디버깅을 넘어 성능, 리소스 모니터링까지 다룬다. 중요한 내용임에는 틀림없으나 영역 자체의 방대함에 비해 짤막한 분량인지라 아쉬움이 남는다.

Chapter 8 — 멀티스레드 코드 디버깅하기

멀티 스레드를 사용하는 코드에서 디버깅하는데 필요한 코딩 습관, 분석 도구, 이론적 배경 등을 설명한다.

멀티 스레드 관련 디버깅은 문제를 재현하기도 수정하기도 쉽지 않기 때문에 마치 아무 문제 없는 것처럼 쉽게 넘어가곤 하는데, 이런 실수를 방지하고 일종의 가이드라인처럼 따라하기에 좋은 내용이 담겨있다.


여타 Effective 시리즈와는 다르게 아하! 하는 순간이 많지는 않았다. 또 보통 Effective 시리즈를 다 읽고나면 잠시 명상의 시간을 가진 뒤 더 성장해서 다시 한번 이 책을 들춰보리라는 생각이 들곤 했지만, 이 책을 다시 보게 될 것 같지는 않다. (C, C++ 환경에서 작업하는 개발자가 된다면 혹시 모르겠다.)

40년 내공의 저자를 온전히 이해하기엔 나의 내공이 많이 부족했을 수도 있다.

하지만 그보다는 역시 디버깅이라는 것 자체가 하나의 범주 안에 구조화되기엔 플랫폼과 환경에 특화된 암묵지의 영향이 크기 때문이 아닐까 싶다.

그리고 좀더 근본적으로 생각해본다면, 더 나은 코드를 작성할 수록 디버깅의 중요성은 감소하기 때문에 테스트하기 쉽고 가독성이 좋은 코드를 작성하는데 더 큰 노력을 들이는 것이 훨씬 더 중요하다고 생각한다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?