"뭐가 좀 나왔나요?"
호출을 받고 달려온 유식의 첫 물음이었다. 유식은 사태를 그다지 심각하게 생각하지 않고 있었다. 버그 없는 시스템이란 상상할 수 없었고, 모든 버그는 해결 가능한 것이었다. 유식이 보기에, 버그는 '재미있는 것' 이지 '심각한 것'이 아니었다. 하지만 허동수의 표정은 심각했다.
"보이소. 내가 담당한 부분이 아니라서 뭐라고 말을 못하겠네예."
공통 라이브러리에 해당하는 코드 담당자는 유식과 대수였다. 유식은 고개를 끄덕였다.
"제가 맡은 부분이니 제가 봐야겠죠. 그런데 문제가...?"
허동수는 모니터를 가리켰다. 허동수가 가리킨 그곳에는, 소스코드가 변경되었음을 알리는 diff 문자열이 찍혀 있었다. diff는 거짓말을 하지 않았다. 이미 십수년간, 수많은 개발자들이 어루만지고 개선한 프로그램이었다. 그리고 diff는, 유식이 담당한 코드를 누군가 수정했음을 알리고 있었다.
"어떻게 바뀐 것 같습니꺼?"
어느새 선화와 대수도 유식 뒤에 와 있었다.
"함수 인자 형이 바뀌었고, 코멘트가 한줄 추가되었군요."
"그건 저도 압니더. 내가 알고 싶은거는, 이렇게 바꾸고 나면 시스템에 어떤 영향이 있느냐는 겁니더."
"PolicyAgent는 Agent의 하위 클래스이니까..."
유식은 생각했다. PolicyAgent는 Agent의 하위 클래스이다. 상위 클래스에는, 하위 클래스 구현을 편리하게 해 주는 코드가 들어가 있게 마련이다. 또한, 하위 클래스에서 바꿀 필요가 없는 공통의 프로그램 로직이 들어가 있게 마련이다. 하위 클래스에서 상위 클래스의 동작 방식을 변경하고자 할 때에는, 변경할 메소드만 골라 내어 오버라이딩(overriding)한다. 오버라이딩 된 '같은 이름의' 메소드는, 상위 클래스에 존재하는 '같은 이름의' 메소드를 대체한다.
유식은 생각했다.
'pass_policy라는 메소드가 상위 클래스에 있었나?'
상위 클래스에 없었다면 문제될 것이 없지만, 상위 클래스에 있는 메소드였다면 문제가 심각해지기 때문이었다. 가령 pass_policy라는 메소드가 하위 클래스에만 있는 메소드였다면, 그 인자의 형(type)에서 const가 탈락되더라도 크게 문제될 것은 없었다. 하지만 상위 클래스에도 있는 메소드라면, 상위 클래스의 pass_policy와 하위 클래스 pass_policy는 순간 다른 메소드가 되어 버린다. 그러니 하위 클래스 메소드의 인자형을 바꿔버리는 순간, 하위 클래스 pass_policy 대신 상위 클래스 pass_policy가 호출되도록 프로그램은 바뀌어 버릴 것이다.
"잠깐 키보드 좀 쓸께요."
유식은 동수로부터 키보드를 넘겨받고 소스코드를 확인했다.
"어떻습니꺼?"
몇 글자 쳐 넣지도 않았는데 허동수가 결과를 물었다.
"잠시만요. 급하시긴..."
"급한 일이니까 그렇지예. 유식씨는 별로 안 심각한갑네."
"서두른다고 빨리 해결 될 일이면 저도 서두르죠."
서두른다고 타이핑 속도가 늘어나는 것도 아니고, 서두른다고 생각의 속도가 달라지는 것도 아니지 않나. 유식의 생각은 그랬다. 오히려 중요한 것은 숨고르기였다. 문제가 드러났을 때 서두르면, 코드는 망가지게 되어 있었다. 천천히 생각하고 또 생각해야, 문제를 교정한답시고 더 많은 버그를 만들어 내는 어리석음을 피할 수 있었다. 지금 말썽을 부리고 있는 저 부분이, 필요 없어 보인다는 판단에 아무 생각없이 const를 걷어내서 생긴 버그가 아니라고 누가 장담할 수 있겠는가.
"문제가 뭔지 알았습니다."
"뭔가요?"
대수가 물었다.
"그 원인은 즉슨..."
유식이 설명하자 모두 고개를 끄덕였다. 그런데, 뭔가 찜찜한 것이 있었다. 대수가 물었다.
"그런데, 저 코멘트는 뭘까요?"
"12, 라고 적힌 저 주석(comment)?"
"네. // 대신 /// 를 붙여 놓은 것도 웬지 독특해보이는데 말이죠. 대체 무슨 뜻의 주석일까요?"
"글쎄요..."
그것까지는 유식도 추측할 수 없었다. 주석에 적힌 내용을 분석해서 프로그램에서 사용한 클래스에 대한 문서를 만들어주는 시스템 가운데에는, '///'와 같은 특별한 주석 형식을 사용하는 것도 있긴 했다. 하지만 12와 주석 형식과는 특별한 관련성이 없어 보였다. 아니, 어떤 연관성을 찾아내기에 12라는 숫자가 갖는 상징성은 너무 왜소해보였다.
"어쨌든, 저 부분을 원래대로 되돌려 놓고 테스트를 한 번 해 보죠."
허동수는 대수를 데리고 자기 자리로 돌아갔다. 대수는 유식의 말대로 소스코드를 고쳤고, 허동수는 백업 시스템과 빌드(build) 시스템을 점검한 후 다시 회귀 테스트를 시작했다.
- 위이잉
그 순간 하드디스크가 굉음을 내며 돌아가기 시작했다, 고 느낀 것은 아마 허동수의 착각이었을 것이다. 그는 긴장하고 있었다. 또 실패하면 어떻게 하나. 그 때는 정말로 뒤질 백업도 없는데. 그 때는 정말 팀장에게도 할 말이 없는데.
'Thoughts' 카테고리의 다른 글
| 프로그래머 3부 (04) (6) | 2012/02/10 |
|---|---|
| 프로그래머 3부 (03) (0) | 2012/02/06 |
| 프로그래머 3부 (02) (4) | 2012/02/01 |
| 프로그래머 3부 (01) (2) | 2012/01/30 |
| 프로그래머 2부 (0) | 2012/01/30 |
| 개발자, 면접 대비는 어떻게? (5) | 2012/01/17 |
댓글을 달아 주세요