평화로웠던 마지막 릴리즈의 밤
2009년, 피처폰 개발이 한창이던 시절의 이야기입니다. "오늘 마지막 릴리즈입니다. 수정사항 확인하고 각자 파트 검증 확실히 부탁합니다." PL을 맡으신 이사님의 신신당부와 함께 프로젝트의 끝이 보이는 듯했습니다.
이미 내 파트의 이슈는 모두 해결된 상태였고, 특별한 이슈가 없던 동료들과 홀가분한 마음으로 주점으로 향했습니다. 다음 날은 휴일이었기에 늦잠을 잘 생각으로 기분 좋게 술잔을 기울였죠. 하지만 그 평화는 다음 날 아침, 이사님의 전화 한 통으로 산산조각 났습니다.

1. 재현되지 않는 유령 버그와의 싸움
급히 출근한 사무실 분위기는 싸늘했습니다. 이사님은 누군가와 심각하게 통화 중이셨고, 제게 떨어진 미션은 버그 트래킹 시스템의 이슈 확인이었습니다.
[Issue Report]
- 현상: 모바일 메신저 입력 도중 프로그램 갑자기 종료됨.
이해가 되지 않았습니다. 이번 릴리즈에 제 파트 수정사항은 전혀 없었고, 수만 번 테스트했던 항목이었으니까요. 사무실에서 10분을 매달려도 재현되지 않았습니다. "이사님, 재현이 안 됩니다."라고 보고하려는 찰나, 거짓말처럼 테스트 중이던 단말기의 메신저 화면이 사라졌습니다.
2. 기이한 재현 경로: "메뉴 누르고 1번을 누르세요"
정신을 집중해 다시 재현을 시도했습니다. 그리고 마침내 규칙을 찾아냈습니다.
- 재현 경로: 메신저 실행 → 메뉴 진입 → 숫자 '1' 화면 증발
- 복구 경로: 메뉴버튼 → 숫자 '2' 클릭 시 화면 복귀
더 심각한 것은 이 문제가 메신저뿐만 아니라 메시지, MP3 플레이어, 웹 브라우저 등 단말기의 핵심 기능 모두에서 동일하게 발생한다는 것이었습니다. 이 앱들의 공통점은 바로 WIPI(위피) 플랫폼 기반이라는 점이었습니다. 플랫폼 전체를 흔드는 치명적인 결함이었습니다.

3. SCM 커밋 로그가 말해주는 진실
발주처 일정이 급했기에 원인을 바로 찾아야 했습니다. 나는 SCM(Source Control Management) 툴을 열고 커밋 로그를 샅샅이 뒤졌습니다. WIPI 플랫폼 자체 수정 내역은 없었지만, 수상한 로그 하나가 눈에 들어왔습니다.
로그 메시지: "Multilayer test code"
의심을 품고 해당 코드를 분석했습니다. 정확한 변수명은 기억나지 않지만 로직은 대략 이랬습니다.
// 문제가 된 테스트 코드 추정 로직
if(1 == menu_index) {
// 특정 레이어를 강제로 숨기는 테스트 코드
}
else if(2 == menu_index) {
// 레이어를 다시 보여주는 테스트 코드
}
담당자에게 수차례 전화를 했지만 받지 않았습니다. 이사님께 이 코드를 보여드리자, 평소 온화하시던 분의 입에서 처음이자 마지막으로 거친 욕설이 터져 나왔습니다. 개인적인 테스트를 위해 넣어둔 임시 코드가 검증 없이 릴리즈 본에 포함된 것이었습니다.
4. "허허허" 웃음 뒤에 남은 씁쓸함
긴급히 해당 코드를 제거하고, 휴일에 릴리즈 담당자를 호출해 수습을 마쳤습니다. 오후 늦게야 문제의 코드 담당자가 출근했습니다. 담배를 피우러 나간 자리에서 그를 만났습니다.
"그 코드는 뭔가요?" 라는 제 물음에 그는 멋쩍은 듯 대답했습니다.
"어? 그 코드가 왜 거기 들어가 있지? 이해가 안 되네, 허허허."
"웃음이 나오세요? 상황이 얼마나 심각한지는 모르세요?"
나보도 연배는 높았지만, 그의 웃음소리를 저는 도저히 이해할 수 없었습니다. 프로젝트 전체가 엎어질 뻔한 절체절명의 순간이었음에도, 본인의 실수가 가져온 파장을 전혀 인지하지 못하는 듯한 표정이 아직도 잊히지 않습니다
.

마치며: 개발자에게 '검증'이란 무엇인가
2009년의 이 사건은 제게 큰 교훈을 남겼습니다.
- 아무리 사소한 테스트 코드라도 메인 브랜치(Mainline)에 함부로 커밋해서는 안 된다는 것.
- "허허허" 웃음으로 넘기기엔 개발자의 책임감이 너무나 무겁다는 것.
임베디드 개발자로 살아가며 수많은 버그를 만났지만, 이때만큼 황당하고 긴박했던 순간은 없었던 것 같습니다. 여러분도 혹시 동료의 '테스트 코드' 때문에 주말을 반납했던 기억이 있으신가요?
'개발 삽질의 기록(Dev Digging Log)' 카테고리의 다른 글
| 기존 코드의 함정과 급박한 수정이 부른 NullPointerException 대참사: 2013년 개발 잔혹사 (0) | 2026.05.06 |
|---|---|
| 경력 2년 차 신입의 기적(?)... 버그 고치랬더니 기능을 삭제해 버린 사연 (0) | 2026.05.04 |