버그란 무엇인가 - 버그에 대한 고찰

2019. 3. 1. 16:26IT/SW

버그란 무엇인가 - 버그에 대한 고찰



개발이든, 시스템 운영이든, 꼭 IT 업계가 아니더라도,

각종 기기를 사용하다 보면 이유 없이 알 수 없는 메시지가 발생되거나 오작동하는 경우를 볼 수 있다.

이럴 때 우리는 "버그가 발생했다"라고 이야기를 한다.

(원하는 결과가 나오지 않았을 때 이거 버그아냐? 라고 말하는 경우도 많다)

여기서 말하는 버그란 무엇일까?


버그 (Bug)

프로그램 상의 결함에 의해 하드웨어나 소프트웨어가 오작동을 하는 현상


영어로 "벌레"를 뜻하는 "버그"는 "글리치(glitch, 작은 문제)"라고도 불리는데,

글리치는 하드웨어 상의 오류를 나타내고 버그는 소프트웨어 상의 오류를 나타내지만, 모두 버그라고 지칭하는 것이 일반적이다.


"버그"라는 단어는 컴퓨터가 발전하기 전부터 사용해왔는데

1878년 전기발명가로 유명한 "토마스 에디슨"이 동료에게 다음과 같은 편지를 보냈다고 한다.

this thing gives out and [it is] then that "Bugs"—as such little faults and difficulties are called—show themselves and months of intense watching

"버그" - 작은 결함과 어려움을 나타내는


실제로 기계에서 오작동이 발생하였을 때 벌레가 원인이 된 사건도 있었다.

[출처 : 위키백과]

위 사진은 1945년 9월 9일 Mark.II 라고 불리우는 컴퓨터가 합선을 일으키자 원인을 파악한 결과

컴퓨터 회로에 나방이 들어간 것을 확인하였다.

이 나방은 미 해군에서 여러 해 동안 전시했다고 하며, 현재 미국 워싱턴에 있는 스미소니언 박물관에서 소장 중이라고 한다.



버그가 단순하게 오류메시지만 출력한다고 생각하면 오산이다.

1980년, 방사선 치료를 목적으로 만들어진 기계의 버그로 인해 치료 받던 환자의 죽음을 직접적으로 초래한 사건도 있으며,

1996년, 유럽 우주국에서 만든 10억 달러(약 1조 1,200억원)에 달하는 로켓이 발사 10분 만에 폭발하였고

최근 논란이 되고 있는 자동차 급발진 사고 역시 버그에 의한 것이다.


이런 버그를 찾아서 고치는 것을 "디버깅(debugging)"이라고 한다.

상황에 따라 프로그램을 만드는 것 보다 디버깅하는데 시간이 더 오래 걸리기도 한다.

버그의 종류는 굉장히 많은데, 논리적 오류(Logical Error)가 바로 이런 경우이다.

개발하면서 오류가 없다고 생각했는데 동작이 정상적으로 되지 않을 때 자칫 잘못하면 설계부터 다시 해야 하는 경우가 생기기 때문이다.


[출처 : 구글 이미지 검색]

컴퓨터공학도들에게 엄청난 공감을 자아내는 짤이다.

(웬만한 컴퓨터공학전공자들은 과제를 하면서 많이 겪어본 상황이닼ㅋㅋㅋ 필자 역시 학부 때도, 지금도 겪는 상황)

왜 동작이 안 되는 거지..?

왜 동작이 잘 되는 거지..?



위에서도 언급했듯이, 버그의 종류는 엄청나게 많다.

사소한 변수 오탈자 부터 대규모 인명피해의 원인이 될 수 있는 버그까지, 센다는 것이 불가능 할 것이다.

 

특히 요즘 같이 소프트웨어의 Size와 Complexity가 증가하고

하드웨어에서 소프트웨어 중심으로 변화 중인 IT생태계는 더욱 해결하기 힘든 복합적 버그가 발생할 수 있다.


빠르게 발전하는 IT업계의 경쟁력은 타 제조사, 개발사 보다 최신 트렌트를 접목한 HW, SW를 출시하는 것이라 할 수 있다.

여기서 우리는 큰 실수를 범하고 있다.

바로 개발한 결과물을 안정성을 위해 스트 하는 시간에 투자하기 보다 개발에 집중이 되고 있다는 점이다.

이는 대규모 사이버 재해의 원인이 될 가능성이 존재한다.


최근 인공지능, 자율주행, 무인화 등 여러 산업에서 자동화가 이루어지고 있다.

우리 사회가 점점 더 Cyber화 되어 갈 수록 앞서 말한 대규모 재해에 대한 대비책이 필요하다.

이 대비책을 마련하게 해주는 것, 그 근간이 되는 것이 바로

버그(Bug)

인 것이다.


이를 완벽하게 고치는 것은 불가능하다.


오죽하면 버그가 없는다는 것은 버그가 없을 정도로 단순하거나, 버그가 있는 것을 모를 정도로 복잡다는 것 이라는 말이 있을 정도이다.

심지어 외국의 대규모 벤더사인 오라클(Oracle), 인텔(Intel) 등도 피해갈 수 없다.

(인텔은 작년 스펙터라는 큰 이슈가 있었다.)

본인 역시, 시스템을 운영하며 주기적으로 각 벤더에서 권고하는 Bugfix Patch를 하고 있다.


하드웨어나 소프트웨어를 개발하는 데에는 돈이 들어가며, 결과물을 테스트하는 품질관리(QA)에도 엄청난 비용과 시간이 소요된다.

기술을 개발하는 것은 중요하지만, 그와 함께 버그를 통한 "안정성"에 대해서 생각해보아야 하지 않을까?


"버그"는 계속해서 우리에게 "Cyber Disaster"를 미리 방지하라고 이야기 하고 있다.





'IT > SW' 카테고리의 다른 글

타이젠 스튜디오 설치  (0) 2020.12.20
JVM 크래시 - java core dump의 원인 및 해결방법  (0) 2018.08.12
Spring Integration 정리  (0) 2018.08.05
Apache Camel 정리  (0) 2018.08.05