개발자

SW 버그 지옥에서 탈출하는 3가지 질문

Susan Bradley | Computerworld 2023.03.03
거의 매일 다양한 소프트웨어의 업데이트가 쏟아진다. 운영체제부터 안티바이러스 소프트웨어, 클라우드, 하드웨어 디바이스에 이르기까지 우리가 사용하는 기술 중 변화 없이 정적인 기술은 사실상 없다. 그런데 모든 업데이트에는 부작용과 문제가 있기 마련이고, 때로는 이를 수정하는 데 긴 시간이 걸린다.
 
ⓒ Getty Image Bank

필자는 최근 렉스마크(Lexmark) 복합기 프린터에서 흥미로운 버그 하나를 발견했는데, 프린터를 구매한 시점에는 잘 알려지지 않은 버그였다. 설치 과정에서 최신 프린터 드라이버를 다운로드하기 위해 온라인에 접속했다(최신 소프트웨어에는 당연히 최신 수정 사항이 포함되므로 필자는 항상 업체 웹사이트를 방문해 최신 드라이버를 받을 것을 권장한다). 설치 후 프린터의 인쇄, 스캔, 전자 팩스 기능 모두 이상 없이 작동하는 것을 확인하고 하루를 마무리했다.

재미있는 부분은 그다음에 시작됐다. 필자는 일상적으로 원격 데스크톱을 사용해 다양한 컴퓨터에 연결한다. 보통은 아무 문제 없이 안정적이다. 적어도 새 프린터를 사용하기 전까지는 그랬다. 프린터를 설치한 후 갑자기 원격 연결이 끊어지기 시작했다. 어느 부분이 잘못됐는지 알려주는 오류 메시지도 없었다.

여기서 디버그의 첫 번째 규칙이 적용된다. 모든 부분이 정상적으로 작동했던 시점을 떠올리며 그사이 무엇이 바뀌었는지를 떠올리는 것이다. 설치한 프린터 드라이버의 어느 부분에 문제가 있을 가능성이 높은데 어떻게 확신할 수 있을까? 일반적으로 컴퓨터 시스템이 작동을 멈추면 어딘가에는 문제를 가리키는 이벤트 로그가 있다. 대체로 앱 충돌은 애플리케이션 이벤트 로그에 나타나지만 애플리케이션이 특수한 하위 디렉터리를 사용해 오류를 추적하고 저장해 놓는 경우도 있다.

윈도우의 경우 검색을 클릭하고 “이벤트 뷰어(Event Viewer )”라고 입력해서 이벤트 뷰어를 열 수 있다. 여기서 ‘윈도우 로그’ 섹션을 확장해서 ‘응용 프로그램’ 로그 파일을 살펴본다.

이벤트 뷰어를 본 적이 있는 사람은 누구나 알겠지만 로그는 매우 유용할 때도 있고, 극도로 혼란스러울 때도 있다. 이벤트 중에서 상당수는 무시해도 되는 이벤트다. 그러나 가끔은 문제의 근본 원인을 찾는 데 도움이 된다. 필자는 원격 데스크톱 문제를 해결하기 위해 이벤트 로그에서 단서를 탐색했고 실제로 찾았다. 원격 세션을 실행하려고 할 때마다 오작동하는 애플리케이션을 가리키는 오류 메시지를 발견했다.

정말 재밌는 것은 여기서부터다. 사용하는 애플리케이션의 이름과 이벤트 로그에 나타나는 이름이 다른 경우가 종종 있다. 구체적인 실행 파일 이름을 사용하는 경우가 많으므로 애플리케이션의 공식적인 이름이 아니라 “소프트웨어 이름”을 알아야 한다. 필자의 경우 원격 데스크톱의 실행 파일 이름은 mstsc.exe다. 마이크로소프트 터미널 서비스 클라이언트(Microsoft Terminal Service Client)의 줄임말이다. 오류는 다음과 같다.
 
Faulting application name: mstsc.exe, version: 10.0.19041.2075, time stamp: 0x63f96292 
Faulting module name: LMFX1N4Z.DLL, version: 0.0.1.0, time stamp: 0x61b8cf09 
Exception code: 0xc0000005 
Fault offset: 0x0000000000038ac3 
Faulting process id: 0x2b30 
Faulting application start time: 0x01d948e5ef27f462 
Faulting application path: C:\WINDOWS\system32\mstsc.exe 
Faulting module path: C:\WINDOWS\system32\spool\DRIVERS\x64\3\LMFX1N4Z.DLL 
Report Id: 5b058189-0b5a-4284-a62d-c583bbe5a7da 
Faulting package full name: 
Faulting package-relative application ID: 

이 이벤트에 필자에게 필요한 단서가 포함돼 있었다. 이벤트 충돌은 렉스마크 드라이버인 LMFX1N4Z.DLL을 가리켰다. 온라인에서 검색해 보니 다른 사용자도 비슷한 문제를 겪고 있었는데 차이점은 원격 데스크톱 클라이언트가 아닌 가상머신에서 발생한다는 것이었다. 프린터 공유 또는 원격 인쇄와 LMFX1N4Z.dll 드라이버 간의 충돌이 확실했다. 근본적인 문제는 설치한 팩스 드라이버와 관련됐을 것으로 추측했다. 필자는 꽤 오래된 이 문제를 수정하도록 렉스마크를 종용하는 것보다는 필요한 기능을 보존하면서 직접 프린터 소프트웨어의 한 부분만 제거하는 것이 최선의 방법이라고 판단했다.

만약 필자가 근본 원인을 찾지 못했다면 어땠을까? 다른 우회적 해결책이 존재하는 경우도 있다. 원격 데스크톱의 경우 마이크로소프트 스토어를 통해 새로운 원격 데스크톱 앱을 받을 수 있다. 그 방법도 실패한다면 대안으로 사용할 만한 툴을 찾아보는 방법이 있다. 버그에 대한 수정이 나올 때까지 대안 툴이 유일한 임시 해결책이 되기도 한다.

많은 경우 오작동하는 시스템 진단의 첫 단계는 다른 사람들도 같은 문제를 겪고 있는지 확인하는 것이다. 필자는 업데이트를 적용한 후 온라인에서 여러 곳을 다니며 문제의 버그가 필자에게서만 발생하는지, 다른 사람들도 겪고 있는지를 확인한다. 먼저 윈도우 릴리스 상태 대시보드를 방문해서 알려진 문제를 확인하고, 그다음 레딧(Reddit)의 윈도우 10윈도우 11 포럼이나 에스크우디(Askwoody) 포럼을 방문해서 특이한 문제에 대한 보고가 있는지 확인한다.

최근에는 서버 관리자가 이번 달 업데이트 중 하나를 설치하지 못하는 문제가 발생했다. 이 문제는 마이크로소프트에 의한 버그로, 특정 윈도우 서버 SKU(에센셜)의 업데이트 수신이 잘못 차단된 것이 원인이었다. 또 다른 게시자는 윈도우 2012 R2 데이터 서버의 문제가 이와 비슷하다고 생각했고 로그 파일을 검토하는 과정에서 서비스 스택 업데이트가 누락돼 있음을 발견했다.

버그는 항상 발생하지만 모든 버그가 마이크로소프트의 부실한 패치 탓에 발생하는 것은 아니다. 많은 경우 새로운 어떤 것이 추가될 때 버그가 시작된다. 따라서 항상 ‘무엇이 바뀌었지? 로그 파일이 있나? 다른 사람들도 나와 같은 문제를 겪고 있나?’와 같은 질문을 던져야 한다. 이러한 기본적인 질문에 대한 답을 찾으면 결국 버그 없는 시스템에 도달하게 된다.
editor@itworld.co.kr

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.