
윈도우에 최초의 GUI가 등장한 이후로 우리는 진행률 표시줄과 함께 살아왔습니다. 진행률 표시줄은 마치 미루는 습관이 있는 친구처럼 "거의 다 됐어!"라고 말하지만, 실제로는 끝에서 한참 멀리 있는 경우가 많죠. 5분째 계속 "1초 남았습니다"라고 말하면서 정작 진행률은 "99%"에 머물러 있을 때 느껴지는 답답함이란 이루 말할 수 없습니다. 여러분의 그 답답한 마음을 잘 알기에, 오늘은 이런 일이 왜 벌어지는지 정확히 설명해 드리려고 합니다.
먼저, 진행률 표시줄의 작동 방식부터 살펴보자
진행률 표시줄은 기본적으로 대화상자(dialog) 안에 막대(bar)를 넣어 만듭니다. 이 막대는 작업 완료 진행률에 따라 채워지는데, 그래서 이름도 '진행률(progress) 표시줄'인 것이죠. 프로그래머는 작업 과정 중 특정 지점(마일스톤)에 백분율을 할당하는 방식으로 진행률 표시줄을 움직입니다. 예를 들어 100개 단계로 이루어진 작업 중 세 번째 단계까지 완료되면, 진행률 표시줄은 자신을 3%만큼만 채우면 된다는 것을 알게 됩니다.
때로는 프로그래머가 진행률 표시줄에 타이머를 추가하기도 합니다. 이 타이머는 특정 작업이 끝날 때까지 남은 시간을 예측해 보여주지만, (언제나처럼) 정확하지 않습니다. 앞선 예시를 다시 사용해 볼까요? 100단계 작업 중 처음 3단계를 3초에 완료했다면, 남은 시간은 1분 37초(총 97초)가 되는 식으로 계산됩니다. 하지만 이런 방식은 완벽한 세계에서만 통합니다. 자세한 내용은 아래에서 설명하겠습니다.
진행률이 멈춰 버리는 이유
진행률 표시줄은 특정 지점에서 멈춰 버리는 것으로 악명이 높습니다. 무척 짜증 나는 일이지만, 이 모든 현상에는 나름의 이유가 있습니다. 진행률 표시줄이 작업 진행 상황을 측정할 때는 특정 기준을 사용합니다. 예를 들어 1,000개의 파일을 복사한다고 가정해 보겠습니다. 각 파일의 크기는 제각각일 겁니다. 어떤 개발자는 1,000을 100으로 나누어 계산하기도 하는데, 깔끔하게 들리지만 파일 크기의 차이는 전혀 반영되지 않습니다. 어떤 파일은 몇 MB에 불과한 반면, 어떤 파일은 10GB에 달할 수도 있으니까요!

모든 파일의 총 크기를 100으로 나누는 방법도 있습니다. 실용적이고 더 정확해 보이지만, 역시 완벽하지 않습니다. 이 방식은 서로 다른 종류의 파일을 복사할 때 하드 드라이브에서 발생하는 속도 변동이나, 복사 도중 다른 짧은 작업을 함께 수행할 때의 영향을 고려하지 못합니다. 결국 화면에 남는 것은 얼마나 진행했는지만 보여줄 뿐, 작업이 끝나기까지 얼마나 기다려야 하는지는 알려주지 않는 막대 하나입니다.
하드 드라이브는 작은 파일들(혹은 물리적으로 조각난 큰 파일들)을 한 번에 큰 덩어리의 데이터를 복사할 때보다 더 느리게 처리하는 경향이 있습니다. 큰 파일 두 개의 조각을 찾아내는 것보다 100개의 작은 파일에 접근할 때 물리적 플래터 안에서 새로운 세그먼트를 찾는(seek) 과정이 훨씬 번거롭기 때문입니다. 레지스트리 항목도 마찬가지입니다. 길이와 복잡성이 천차만별이니까요.
마무리 생각
컴퓨터의 거의 모든 작업에는 수많은 변수가 얽혀 있어서, 진행률을 정확하게 판단하는 것은 사실상 불가능합니다. 결국 여러분 앞에 남는 것은 폭발하지 않도록 달래 주기 위한, 사실상 무용지물인 막대 하나뿐이죠. 이 싸움은 이미 끝났습니다. 고집 센 컴퓨터는 원래라면 제시간에 끝났을 작업조차 정확히 예측하려는 모든 시도를 이길 수밖에 없습니다. 진행률 표시줄에 대해 할 수 있는 것은 없지만, 적어도 왜 그렇게 답답하게 굴었는지는 이제 이해하게 되셨을 겁니다!
아, 그리고 진행률 표시줄과 관련된 재미있는 게임도 있습니다. 바로 Progress Wars입니다.
작업을 더 정확하게 예측할 수 있는 방법을 생각해 낸다면, 아래 댓글로 알려주세요!
이미지 출처: BigStockPhoto