[IT강의실] 사용자를 당황하게 만드는 컴퓨터 프로그램의 오류 - 버그

김영우 pengo@itdonga.com

[용어로 보는 IT 2015년 개정판] PC(개인용 컴퓨터)나 스마트폰, 비디오게임기와 같은 컴퓨터 기기를 통해 각종 소프트웨어를 이용하는 과정에서 이유 없이 오류 메시지가 출력되거나 기기가 오작동하는 경우를 종종 볼 수 있다. 이런 현상은 단순한 기기 고장 때문에 일어나기도 하지만 이보다는 사용하는 하드웨어나 소프트웨어 자체의 결함에 의한 경우도 많다. 해당 하드웨어와 소프트웨어를 구성하고 있는 프로그램의 내용 중에 잘못된 코드가 들어있다는 의미다. 이렇게 프로그램 상의 결함에 의해 컴퓨터 오류나 오작동이 일어나는 현상을 버그(Bug)라고 한다. 버그는 일반적으로는 소프트웨어의 결함을 지칭하는 경우가 많지만, 본래는 하드웨어의 경우도 포함한다.

버그
버그

<버그는 프로그램 상 결함에 의해 컴퓨터 및 소프트웨어가 오류나 오작동이 일어나는 현상을 말한다. 2000년을 맞으며 전세계적인 주목을 받았던 밀레니엄 버그 역시 버그의 예다>

'나방 한 마리' 때문에 일어난 최초의 버그

본래 ‘벌레’라는 뜻을 가진 버그라는 단어가 컴퓨터 용어로 자리잡게 된 것은 1947년부터라고 알려져 있다. 당시 초창기 컴퓨터 개발자 중 한명인 그레이스 하퍼(Grace Murray Hopper, 1906~1992)가 운용 중이던 '하버드 마크 II(Harvard Mark II)' 컴퓨터의 고장 원인을 조사하던 중, 회로 사이에 나방 한 마리가 끼어있는 것을 발견했다. 이 벌레(Bug) 한 마리 때문에 접촉불량이 일어나 마크 II가 고장 난 것이다. 이후부터 컴퓨터에 어떠한 문제가 생길경우, 그것을 버그라고부르게 되었다고한다.어쨌건 마크 II에서 발견된 나방은공식적으로 보고된 최초의 컴퓨터 ‘버그’로, 해당 보고서와 나방은 지금도 미국 스미스소니언 박물관에 보관, 전시되어있다.

버그
버그

<1947년에 최초로 공식적인 ‘버그’를 일으킨 나방은 스미스소니언 박물관에 보관중이다>

다만, 기계의 오류를 버그라고 표현하는 관행은 이보다 훨씬 오래되었다는 주장도 있다. 미국의 발명가인 토머스 에디슨(Thomas Alva Edison, 1847~1931)이 1878년에 친구에게 보낸 편지의 내용 중에 기계의 오류를 ‘버그’라고 표현한 바 있어, 버그가 당시 기술자들 사이에서 널리 쓰이던 은어 중 하나가 아니었는가 추측하기도 한다.

단순한 해프닝부터 재앙 수준까지, 다양한 버그

버그가 일어나는 원인은 다양하지만 프로그램의 설계 자체가 잘못되었거나 프로그램 코드를 작성하던 도중의 실수로 인한 경우가 대부분이다. 설계 상의 오류라면 프로그램이 작동 중에 무한 루프 상태에 빠져 결과물을 출력하지 못하거나 해당 컴퓨터의 한계 능력을 넘는 연산을 요구해 컴퓨터가 과부하를 일으켜 동작이 정지되는 경우가 종종발생한다. 이에 비해 코드 작성 중의 실수는 존재하지 않는 프로그램을 참조하도록 하는 구문을 집어넣거나 수치를 잘못 입력하는 사례가 대표적인데, 이 경우에는 오류 메시지가 출력되거나 의도하지 않은 엉뚱한 결과물이 출력되곤 한다.

일반 사용자가 가장 흔히 접할 수 있는 버그는 컴퓨터 게임에서 일어나는 오류 현상이다. 예를 들어 1991년에 출시되어 큰 인기를 끈 대전격투게임인 [스트리트 파이터 II(Street Fighter II)]의 경우, 등장 캐릭터 중 한 명인 ‘가일’로 플레이 할 때 특정 방향키와 버튼을 누르면 상대의 공격에 전혀 피해를 입지 않게 되거나, 상대방의 상태와 상관 없이 무조건 던지기 공격을 가할 수 있게 되는 등의 버그가 발생해게이머들 사이에서 논란이 되곤 했다.

버그
버그

<격투게임 [스트리트파이터 II]의 '가일' 캐릭터는 유난히 많은 버그를 가진 것으로 유명했다>

버그
버그

<펜티엄 CPU(1993년)의 부동 소수점 연산 버그 사건은 인텔에 큰 손실을 끼쳤다>

다만, 이런 오락용 프로그램에서 일어나는 버그는 단순히 웃고 넘어가는 해프닝 수준에 그치는 경우가 많은 반면, 일부 프로그램의 버그는 해당 기업, 혹은 사회 전반에 큰 피해를 끼치는 경우도 있다. 대표적인 예가 1993년에 인텔에서 출시한 펜티엄(Pentium) CPU(중앙처리장치)의 버그 문제다. 인텔의 야심작이었던 펜티엄 CPU는 출시와 동시에 폭발적인 인기를 끌었으나 출시 1년 후, 부동 소수점 연산과정에서 오류를 일으킬 수 있다는 것이 확인되었다. 이 때문에 인텔은 버그가 있는 펜티엄 CPU의 전체를 리콜(recall) 해야 했고, 총 4억 달러의 이상의 손해를 봤다.

이와 함께, 1990년대 말에는 밀레니엄 버그(millenium bug), 이른바 Y2K 문제가 전 세계적인 주목을 낳으며 심각한 우려를 자아냈다. 이는 초창기 컴퓨터 프로그램에서 메모리 공간을 아끼기 위해 연도의 표시를 '1999'와 같은 4자리가 아닌 '99'와 같이 2자리로 입력, 표기하는 것이 관행처럼 자리잡았기 때문이었다. 이러한 상태에서 만약 2000년이 되어 해당 컴퓨터의 연도가 '00'으로 표기될 경우, 프로그램에서는 이를 1900년으로 잘못 인식, 해당 컴퓨터로 통제되는 발전소가 정지하거나 의료 기기가 오작동하는 등의 심각한 문제가 발생할 수 있다고 지적되곤 했다. 이 때문에 1990년대 말에는 전 세계적으로 PC 및 운영체제, 응용 프로그램 등의 교체 및 수정 작업을 하는 붐이 일어나기도 했다. Y2K 문제에 대한 우려는 컸으나, 다행히도 2000년 1월 1일이 된 후에도 예상한 만큼의 큰 문제는 일어나지 않았다.

알파 버전, 베타 버전 거치며 이루어지는 '디버깅' 작업

어떤 프로그램을 막론하고, 이제 막 만들어진 프로그램은 대부분 버그의 소지를 가지고 있다. 때문에 만들어진 프로그램을 테스트하고 버그를 고치는 디버깅(Debugging) 작업이 필수적이다. 실제로 대부분의 개발사들은 프로그램 제작 기간과 맞먹는, 혹은 그 이상의 기간을 디버깅 작업에 소요한다.

기능적으로 아직 완성이덜 되었고 디버깅 과정도 거의 이루어지지 않은 프로그램을 '프리 알파(Pre-Alpha)' 버전이라고 한다. 여기에서 기능이 거의 완성되어 개발사 내부에서 기능 테스트 및 디버깅 작업을 거치고 있는 프로그램은 '알파(Alpha)' 버전이라 불리게 된다.

버그
버그

<윈도우 8 베타 버전의 바탕화면에는 '베타' 품종 물고기가 그려져 있었다>

그리고 알파 버전이 개발사 내부의 테스트 과정을 마치고 외부 사용자들에게 버그 및 각종 기능에 관한 의견을 받을 목적으로 배포되는 프로그램을 '베타(Beta)' 버전이라고 한다. 베타 버전 중에는 개발사에서 허용한 소수의 인원들에게만 테스트 권한을 주는 '클로즈드 베타(Closed Beta)' 버전과 아무나 테스트에 참여할 수 있는 '오픈 베타(Open Beta)' 버전으로 나뉜다. 클로즈드 베타를 시작해 오픈 베타를 거치는 경우가 많지만, 프로그램의 성격이나 개발사의 사정에 의해 오픈 베타를 하지 않는 경우도 많다. 베타 버전의 경우, 기능적으로는 완성판과 큰 차이가 없기 때문에 베타 버전이 외부로 유출되면 완성판의 판매에 영향을 미치기도 하기 때문이다.

그리고 베타 테스트가 끝나면 출시 직전 버전인 'RC(Release candidate: 출시 후보)' 버전이 배포되어 최종 점검을 받게 되며, RC 버전이 별 이상이 없다고 판단되면 첫 번째 정식 출시 제품인 'RTM(Release to manufacture)' 버전이 나오게 된다. RTM 버전은 완성판과 같은 의미를 갖지만, RTM 버전 역시 출시 후에 예상하지 못했던 버그가 발견되곤 한다. 이러한 이유로 상당수 개발사에서는 얼마 후에 RTM 버전에서 디버깅 작업을 더한 'GA(General Availability)' 버전을 추가로 내놓기도 한다. 이 때문에 GA 버전을 '최종 안정화' 버전이라 부르기도 한다.

버그가 없는 프로그램은 존재하지 않는다?

모든 컴퓨터용 하드웨어나 소프트웨어는 모두 사람이 설계하는 것인 만큼, 버그가 전혀 없는 완벽한 제품은 없다고 봐도 무방하다. 알파와 베타 테스트 과정을 거쳐 출시된 제품이라도 버그가 발견되는 경우는 대단히 많다. 프로그래머들 사이에서도 "버그가 없다고 알려진 프로그램들도 실은 내부적으로는 상당 수의 버그가 있으며, 단지 발견이 되지 않았을 뿐"이라는 이야기가 정설처럼돌 정도다.

몇몇 개발사 중에는 제품의 출시 일을 앞당기기 위해 디버깅을 제대로 마치지 않은 알파 버전이나 베타 버전 수준의 제품을 그대로 출시하는 경우도 있어 소비자들의 지탄을 받기도 한다. 버그로 인해 사용자들이 심각한 피해를 보는 경우도 종종 발생하는 만큼, 개발사 및 프로그래머들은 제품을 출시하기 전에 철저한 디버깅으로 버그 발생을 최소화할 의무가 있다.

글 / IT동아 김영우(pengo@itdonga.com)

본 기사는 네이버캐스트(http://navercast.naver.com/)의 '용어로 보는 IT' 코너에도 함께 연재됩니다.

*마이크로소프트와 IT동아가 함께하는 윈도우10 오프라인 무료 강의, 윈도우10 100% 활용하기에 초대합니다. - http://onoffmix.com/event/51802*

IT동아의 모든 콘텐츠(기사)는 Creative commons 저작자표시-비영리-변경금지 라이선스에 따라 이용할 수 있습니다.
의견은 IT동아(게임동아) 페이스북에서 덧글 또는 메신저로 남겨주세요.