엔지니어링의 꽃 ‘디버깅’

By | 2002-11-06

예전에 연구개발 현장에서 일할 당시 필자의 주된 업무는 하드웨어 개발이었다. 물론 펌웨어(Firmware) 개발을 맡을 인력도 별도로 없었기 때문에 그것도 하드웨어 개발자의 몫이었다. 프로젝트 자체가 복잡한 제품을 개발하는 것이 아닌데다가 또 하드웨어 중심일 경우에는 하드웨어 개발자가 모니터링 툴같은 소프트웨어까지 거의 도맡다시피 했기 때문에 경우에 따라선 1인 프로젝트를 수행하기도 했다.

사실 사회 생활을 시작하면서 수행했던 최초의 업무는 디지털이 아닌 순수 아날로그 기술인 CRT 모니터 개발이었는데, 그것이 그후 디지털 관련 업무 수행에도 많은 도움이 된 게 사실이다. 디지털도 자세히 들여다보면 결국은 아날로그 기술이 바탕이기 때문이다.

아날로그 전자제품 설계는 그렇게 어려운 일은 아니다. 이론적으로 어느 정도 바탕만 있다면 개발자의 개성을 집어넣은 회로를 디지털보다 훨씬 자유롭게 구성할 수 있다. 문제는 기본 회로를 구성한 뒤의 일이다. 디지털보다 더 힘겨운 작업 과정이 필요하게 된다.

일단 얼기설기 만들어 놓거나 혹은 보드에 조립한 다음 전원을 넣고 스위치를 올렸을 때, 아날로그 회로는 디지털과는 달리 쉽게 뭔가 반응을 보인다. 문제는 그 내용이다. 간단한 예로, 가령 라디오를 하나 만들어 놓고 스위치를 올렸을 경우 보통 무슨 소리든 들리게 마련이다.

그게 방송이 제대로 잡힌 것일 수도 있고, 그저 직직거리는 잡음일 수도 있다. 그것도 아니면 아예 부품이 타버리는 등의 심각한 반응일 수도 있다. 그때부터 시작해서 정상적인 동작을 하게 만들 때까지는 정말로 힘겨운 싸움을 벌여야 한다. 작은 부품 하나의 상태에 따라, 전선 하나가 길고 짧음에 따라서도 동작이 달라질 수 있다.

디지털은 1 아니면 0의 논리이지만, 라디오에서는 소리가 나거나 (1), 말거나 (0)의 여부로 결론지을 수는 없기 때문이다. 이렇게 회로와 벌이는 전쟁을 현장에서는 “회로를 쑤신다”라는 별로 아름답지 못한 말로 표현하기도 했었지만, 정식으로는 트러블슈팅(Troubleshooting)이라고 불렀다. 필자를 비롯한 수많은 엔지니어들을 꽤나 괴롭힌 작업이 그것이다.

업무가 디지털 개발로 전환된 뒤로도 한동안 트러블슈팅이란 용어를 사용했지만, 컴퓨터의 일반화가 이뤄진 뒤로는 표현의 전환이 일어났다. 원래 프로그래밍을 할 때 코딩 과정에서 오류를 찾아내고 수정하는 반복 작업을 가리켜 디버깅(Debugging)이라고 불렀는데, 이게 소프트웨어나 펌웨어에서만 사용된 것이 아니라 디지털 하드웨어로 파급되더니 이제는 아날로그 회로의 개발에서도 ‘디버깅을 한다’라는 표현을 많이 사용하게 된 것 같다.

물론 필자와 같은 고리타분한 전직 개발자들은 여전히 디버깅보다는 트러블슈팅이라는 표현을 좋아하지만 말이다. 하드웨어 설계를 CAD를 이용하지 않고 일일이 사람의 손으로 수행하던 시절에는 2층은 물론 4층짜리 회로 보드(PCB)를 설계하는 것도 100% 손으로 했다.

제도용 트레이싱 페이퍼 위에서 작은 칼과 검정 테이프를 가지고 말이다. 그런 작업을 보드 아트워크(Artwork)라고 불렀다. 반면에 요즘은 다들 PCB CAD라고 부르는 것 같다. 어쨌든 세상은 바뀌었고 디버깅은 디버깅이다.

갑자기 웬 트러블슈팅과 디버깅 타령이냐 하면, 며칠 전에 받은 지인의 메일 때문이다. 그 친구는 한국에 있을 때는 주전산기 개발 프로젝트를 했고 지금은 미국의 어느 대학에서 그런 종류의 공부를 하며 박사과정을 밟고 있는데, 디버깅에 대한 언급이 잠깐 있었다. 그대로 옮기자면 다음과 같다.

“603/604/620 셋을 아울러서 G2라고 칭하는 모양이더군요. 이중 620의 경우 상당히 야심찬 프로젝트였던 모양인데 멀티프로세서 디버깅 하다가 출시 시기를 놓쳐서 결국 취소됐다고 합니다. 저도 예전에 주전산기 개발할 때는 이 놈의 멀티프로세서 디버깅이 한 2년 걸리길래 우리만 바보라서 그런 줄 알았는데 알고 보니 원래 어려운 거라고들 하네요. 비슷한 예로 펜티엄 4의 하이퍼 스레딩도 그 피쳐 자체는 98년 정도에 이미 구현이 끝났는데 오랜 디버깅 끝에 이제서야 정식으로 일반에게 제공되는 걸 보면 말이죠. (…… 중략……) G1 601의 경우 당시 애플은 모토롤라의 RISC CPU 88110에 기반한 시스템을 개발하고 있었는데 그러다가 하루 아침에 AIM(애플, IBM, 모토롤라) 컨소시엄이 생기면서 IBM POWER 인스트럭션 셋에 시스템 버스는 88110을 같다 붙인 날림 디자인으로 탄생한 것이 바로 601이었죠. 당시 저도 88110을 좀 들여다 보고 있었는데 모토롤라 쪽에서 601쪽으로 유도하려고 갖은 수를 다하던 기억이 납니다 그려. 88110은 펜티엄이 갓 나온 시점에서 이미 3년후에야 나올 펜티엄 프로(및 펜티엄 2, 3)급의 시스템 버스를 갖춘 물건이었습니다만 역시 디버깅이 늦어져서 결국 사장된 비운의 칩이 돼버렸습니다. 디버깅…… 진정한 엔지니어링은 바로 여기에 있지 않을까 싶습니다.”

돌이켜 보면 예전에 실무 자리에서 하드웨어를 디버깅하던 시절은 참으로 몸과 마음이 힘든 나날이었다. 그래서 그땐 정말 트러블슈팅 혹은 디버깅이란 말을 쓰고 싶지 않았고 그냥 ‘쑤신다’라고 내뱉기도 했었나 보다. 흔히들 지나간 일들은 어쨌든 아름답다라고 말을 하곤 하는데 지금에 와서 그 당시를 돌아보면 그래도 난 그때 하고 싶은 일을 했었구나 라는 생각이 든다.

항상 그런 것은 아니었지만 제대로 ‘트러블슈팅’을 해서 프로젝트가 성공하기도 했고, 그래서 보람을 느끼기도 했으니 말이다. 지금도 현업에서 하드웨어나 소프트웨어의 디버깅을 하며 밤을 지새고 있을지 모르는 독자들은 그 느낌이 잘 안올지도 모르지만, 필자는 여러분이 지금 그렇게 하고 있는 일이 아름다운 일이라고 생각한다.

결국 자신이 현재 최선을 다하고 있는 일이 그렇다는 것이다. 그런 마음가짐으로 우리 생활도 디버깅하면 어떨까?

One thought on “엔지니어링의 꽃 ‘디버깅’

  1. jesusloves you

    맞습니다.. 좋은 말씀 감사합니다 ^^ j8wnj@naver.com 저도 it인입니다
    상담해주세요 ㅎㅎ 선배님

Leave a Reply

Your email address will not be published.