[개발자 아빠의 교육실험]⑧ 소프트웨어 속 '벌레' 알려주기

2019.04.23 18:00
버그는 예측치 못한 소프트웨어의 오동작을 의미한다. 공식적으로 보고된 최초의 컴퓨터 버그는 나방 한 마리가 컴퓨터 부품 사이에 끼여 발생했다. 일지에는 그 원인이 기록됐는데, “Bug”가 발견됐다는 말과 함께 실제 나방도 투명 테이프로 붙여 놓았다. 착실하게도 말이다. 이 일지는 현재 스미스소니언 박물관에 소장 중이다.
버그는 예측치 못한 소프트웨어의 오동작을 의미한다. 공식적으로 보고된 최초의 컴퓨터 버그는 나방 한 마리가 컴퓨터 부품 사이에 끼여 발생했다. 일지에는 그 원인이 기록됐는데, “Bug”가 발견됐다는 말과 함께 실제 나방도 투명 테이프로 붙여 놓았다. 착실하게도 말이다. 이 일지는 현재 스미스소니언 박물관에 소장 중이다.

“버그(Bug) 없는 소프트웨어는 없다.”

 

개발자 생활을 하며 가장 많이 인용한 문장 중 하나다. 오작동이 발견된 제품에 대해 품질 부서와 협의를 해야 하는 상황이라면 더욱 그러하다. 제품 출시 전에 문제가 발견된 것이 오히려 다행이라고 너스레라도 떨며 상황을 모면해야 한다. 이 논리를 뒷받침하기에 이보다 좋은 말을 아직까지 찾을 수 없다. 대신 그날은 밤샐 각오 정도는 해야 한다. 동틀 녘 국밥 한 그릇으로 쓰린 속을 달래는 것은 덤이다. 오늘도 개발자들에게 장엄한 일출의 광경을 선사하는, 회사 앞 해장국 가게 매출의 원천이자 개발자의 숙적, 버그(Bug)에 대한 이야기를 해볼까 한다.

 

 

신호 주고받기를 한 시간 더 진행하기로 했다. 엔트리에서 코드 흐름은 신호를 이용해 제어되는 경우가 많은데, 한 시간만 하고 넘어가기에는 아무래도 부족하다는 생각에서였다. 여기에 판단문에 대한 소개를 덧붙였다. 순차적인 흐름을 단순히 신호로 바꾼 것이 지난 시간의 내용이었다면, 특수한 조건이 될 때 신호 주고받기를 하는 것으로 이번 시간은 구성했다. 사건(Event) 발생과 이에 따른 신호 주고받기라는 본래의 의미로 보다 다가섰다고 볼 수 있다.

 

불규칙하게 날아다니는 나비와 이를 잡으러 다니는 개구리로 이야기를 구성했다. 나비를 잡으면 개구리는 신호를 보내고, 신호를 받은 나비는 크기와 색깔을 잠시 바꾸는 식이다. 나비를 잡았는지 판단하는 방법만 알려준다면 아이가 구현하기에도 그리 어렵지 않은 과정이다. 교안과 함께 예제를 작성하고 실행까지 해 보았다. 당연히 문제는 없었다.

 

정상적인 화면(왼쪽)과 버그가 드러난 상황에서의 화면(오른쪽). 신호가 연달아 도착하며 오동작을 일으켰다.
정상적인 화면(왼쪽)과 버그가 드러난 상황에서의 화면(오른쪽). 신호가 연달아 도착하며 오동작을 일으켰다.

아이가 귀가하기 전 교육 환경을 구성하고 다시 실행해 보았다. 버그가 보였다. 개구리에게 잡혔을 때 나비가 멈추지 않고 커지기만 했다. 조금만 커지고 다시 원래 크기로 돌아오는 것이 의도한 바다. 코드는 바뀌지 않았다. 그런데도 결과가 다른 것이다. 보통 이럴 때 의심해봐야 하는 것은 실행 환경의 변화 여부다.

 

예제 작성 때와 변한 것이라고는 실행하는 컴퓨터가 바뀐 것 밖에 없다. 예제 작성 시 사용한 노트북 컴퓨터와 교육에 사용하는 태블릿 컴퓨터 사이에는 아무래도 CPU의 성능 차이가 심하다. 받은 신호에 대해 빨리 처리하고 돌아와야 하는데 성능이 느리다 보니 또 다른 신호가 연속으로 도착하여 계속 커지기만 한 것이다. 빠른 컴퓨터에서는 결코 일어나지 않는 일이다. 보통 이런 경우를 '데모(Demo)의 법칙'이라고 하는데, 환경에 차이에 따라 버그가 드러나는 경우를 일컫는다.

 

보통 윗사람이나 클라이언트에게 동작을 시연할 때 개발했던 곳과 환경이 상이한 경우가 많다. 이때 발생하는 버그만큼 난감한 상황도 없다. 순식간에 거짓말쟁이로 떨어지는 순간이다. 아침까지 분명히 동작하는 것을 확인했다고 말해봤자 겸연쩍기는 마찬가지고 무너진 신뢰를 회복하기에도 역부족이다.

 

클라이언트에게 새로운 프로그램 시연을 할 때 버그가 생기면 그만큼 난감한 상황도 없다. 사진 게티이미지뱅크
클라이언트에게 새로운 프로그램 시연을 할 때 버그가 생기면 그만큼 난감한 상황도 없다. 사진 게티이미지뱅크

아이가 오기 전 재빠르게 코드를 수정했다. 신호가 처리되기 전에 신호를 보내지 않으면 된다. 다행히 엔트리에 “신호 보내고 기다리기” 블록이 따로 있다. 신호 처리가 끝나기 전에 신호를 다시 보내지 않는 것이다. 블록을 바꾼 후 다시 실행해 보았다. 정상적으로 동작했다. 아이 앞에서 당할 수 있는 망신을 피했다는 생각에 가슴을 쓸어내렸으나 이내 또 다른 생각이 들었다. 자연스럽게 아이가 버그를 경험하는 기회일 수도 있다는 생각 말이다. 교안과 실습 지침, 예제 코드를 수정하지 않고 아이에게 보여주기로 했다.

 

지난 번과 마찬가지로 실습 지침을 보고 직접 작성토록 했다. 물론 그 이전에 판단과 관련된 블록 사용법은 예제 코드를 보여주며 가르쳤다. 아이는 곧잘 따라했고, 완성하는 데까지는 그리 오랜 시간이 필요하지 않았다. 작성 완료 후 아이는 시키지 않았는데 스스로 바로 실행을 했다. 개구리가 마우스를 따라다니는 것만으로도 아이는 매우 즐거워했다. 화면과 즉각적인 상호 작용은 본능적으로 사람을 당기는 힘이 있다. 게임에 빠져드는 이유 중 하나이지만, 지금과 같이 긍정적인 면을 이용하면 문제될 것이 없다.

 

버그를 느끼게 할 차례다. 아이에게 개구리를 나비에 계속 붙여보라고 했다. 역시나 나비는 커지기만 했다. 이상하지 않냐는 질문에는 아랑곳하지 않고 아이는 깔깔거리며 좋아하기만 했다. 아이에게도 비정상적으로 보였겠지만 그 엉뚱함이 더 신기할 따름인 듯했다. 아직 아이는 이유를 따지며 심각해지기보다는 즉자적인 즐거움이 중요한 그런 나이인 게다.

 

버그로 인해 나비가 계속 커지면서 비정상적인 모습을 보이는데도 아이는 깔깔거리며 좋아하기만 했다. 사진 게티이미지뱅크
버그로 인해 나비가 계속 커지면서 비정상적인 모습을 보이는데도 아이는 깔깔거리며 좋아하기만 했다. 사진 게티이미지뱅크

아이의 웃음이 사그라진 후 문제가 있다는 사실을 다시 얘기했다. 이게 버그라 불린다는 것도 추가했다. 아이는 버그가 고장난 것이냐고 반문했다. 고장은 맞지만, 장난감 고장과는 달리 코드는 쉽게 고칠 수 있다는 점을 강조했다. 반신반의하는 아이에게 “신호 보내고 기다리기” 블록을 교체하고 다시 실행해 보라고 했다. 기다리기 개념에 대한 설명도 빠뜨리지 않았다. 바꾼 코드는 당연히 의도한 바대로 동작했다. 그런데 아이의 반응은 예상과 달랐다. 아까 만들었던 게 더 재미있단다. 아… 여기서부터는 더이상 할 말이 없다. 아직 아이는 그런 나이인 게다. 앞으로 “신호 보내고 기다리기” 블록만 사용하라는 것을 짚어주며 마무리할 수밖에.

 

교육을 얼추 마치고 티브이와의 케이블을 제거하던 중 윈도 블루 스크린이 발생했다. 아이는 이것도 버그인지 물었다. 버그 맞다고 답했다. 사람이 만드는 건 모두 버그를 가지고 있다는 것도 귀띔했다. 그러자 아이는 아빠가 고치면 되겠다고 반문했다. 이럴 때는 껐다 켜기만 해도 고쳐진다고 거짓말을 살짝 했다. 그러면서 속으로 이렇게 되뇌였다. 얘야. 아빠가 이걸 바로 고칠 수 있으면 지금의 연봉의 몇 곱절 받으며 마이크로소프트에서 일하고 있을 게야.

 

도움자료

1) 5일 차 교안을 공유합니다.

https://drive.google.com/drive/folders/1LQq8ZZD0SrNk3c9H0iFMi1St6RBHWBLN

2) 아이와 만드는 코드도 공유합니다. 엔트리 메인화면의 공유하기에서 “chloe10”을 검색하세요.

 

※필자소개

김기산(calculmount@gmail.com) 기업에서 IT 디바이스 소프트웨어 개발자로 일하고 있다. 대학에서 전자공학을 전공하고 20년 가까이 리눅스 개발자로 지내다가 뜻밖의 계기로 육아휴직을 냈다. 지난해 한층 강화된 '아빠의 달' 제도의 수혜자로, 9살 아이와 스킨십을 늘리며 복지 확대의 긍정적인 면을 몸소 깨닫고 있다.

 

메일로 더 많은 기사를 받아보세요!

댓글 0

작성하기

    의견쓰기 폼
    0/150