Today
-
Yesterday
-
Total
-
  • 문제가 발생하면 근본 원인 찾아라.
    Programmer/Programming 2017. 3. 6. 22:10

    문제가 발생하면 근본 원인 찾아라.[각주:1]
    근본 원인을 찾지 않고 성급하게 해결하는 것은 나쁘다.

    대표적인 사례가 핵(hack)이다.
    핵은 원인을 고치지 않고 드러나는 문제만을 처리한다.
    근본 원인 파악 없이 방어 코드로 해결한다.


    [표면적인 문제만 해결하려는 우리들의 모습]


    자동차의 시동을 두세번 시도해야 비로서 작동하는 문제가 있다고 가정해보자.
    핵를 쓰는 엔지니어는 시동 걸릴 때까지 자동으로 반복해주는 기능을 추가한다.
    여러 가능성이 있는 원인을 조사하지 않고 표면적인 문제만을 처리하였다.[각주:2]

    그러나, 이러한 방식은 문제를 감추었을 뿐 근본이 해결되었는지 알 수 없다.
    숨겨진 문제가 언제 드러날지 누구도 알 수 없다.
    게다가, 이렇게 원인이 해결 안 된 문제들이 숨겨지면서 누적된다는 것이 더 심각하다.


    시동이 잘 안걸렸던 이유가 배터리가 망가지고 있었기 때문일 수도 있다.
    만약 그렇다면, 핵으로 진짜 문제를 숨겨준 셈이다.
    외딴 곳에 있을 때 배터리가 완전히 망가진다면
    또는 고속도로 주행 중에 시동이 꺼진다면
    아주 큰 문제에 직면하게 된다.
    실력있는 엔지니어는 진짜 원인을 찾아내어 이런 사태를 사전에 예방했을 것이다.


    더불어, 핵을 자주 사용하면 개인의 실력 향상에도 좋지 않다.
    문제를 정의하고 원인을 파악하는 능력은 문제 해결에서 매우 중요하다.
    핵은 이 능력을 길러주지 않는다.


    핵을 쓸 수 밖에 없는 피치 못할 상황도 있긴 하다.
    예를 들면, 긴급하게 처리해야 하는 상황,
    우리가 수정할 수 없는 외부 라이브러리 등의 이유가 있겠다.
    이러한 경우, 코드에 반드시 핵을 썼다는 사실과 이유 등을 주석을 남겨야한다.[각주:3]
    나중에 이런 부분을 찾아서 반드시 제대로 고쳐야 한다.


    1. 가능성 있는 진짜 원인을 찾아가는 도구 중에 5 Whys라는 것이 꽤 유용하다. [본문으로]
    2. 문제를 빨리 해결하여 마치 실력자처럼 보일 수도 있다. 이런 착시 때문에, 일부 프로그래머는 자신의 무능함을 감추고자 핵을 자주 이용한다. [본문으로]
    3. 관례적으로 주석의 시작에 "HACK" 또는 "XXX"라고 붙이다. [본문으로]

    댓글

Designed by Tistory.