소프트웨어 버그가 발생해도 괜찮은 때는 없겠지만, 우주 탐사 같은 경우에는 특히 절대로 발생해서는 안될 것이다. 그러나 모든 우주선들은 임무 달성을 위해 소프트웨어에 크게 의존하고 있으며, 기초적인 인간의 코드 작성 실수 때문에 단숨에 끝장나버리기도 한다. 오버바(overbar) 생략에서부터 오버플로 오류 검사 코드를 빼먹는 것 등의 실수들이 수억 달러의 예산, 수년의 작업시간, 유인탐사의 경우 인명까지 앗아가게 된다. 인류가 우주 탐사를 시작한 이래, 우주선 소프트웨어에 발생한 버그 사건들을 공개한다. ciokr@idg.co.kr
CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
1962: 오버바를 하나 빼먹어서 마리너 1호를 잃다
1962년 7월 22일, 마리너 1호(Mariner 1) 우주선은 플로리다 케이프 카나베랄(Cape Canaveral)에서 금성 탐사 임무를 가지고 발사됐다. 그러나 마리너 1호의 선상 비행 안내 소프트웨어는 엔지니어들이 알지 못하는 치명적인 결함을 안고 있었다. 오버바(overbar)나 오버라인(overline) 한 개를 펀치카드로 옮겨질때 공식에서 빼먹었던 것이다.
이로 인해 비행 안내 컴퓨터가 발사 직후 우주선의 일상적인 움직임을 잘못 보정하는 바람에 293초만에 공중폭파 되어야 했다. 다행스러운 점은, 그 버그가 마리너 2호 탐험에서는 수정돼 6개월 후 성공적으로 금성 탐사를 마쳤다는 점이다.
1988: 글자 하나 빼먹어서 포보스 1호를 잃다
포보스 1호(Phobos 1)는 화성과 화성의 위성인 포보스(Phobos)와 데미오스(Demios)를 탐사하기 위해 소련에서 1988년 7월 발사한 두 개의 무인우주탐사선 중 하나다. 그러나 소프트웨어 시험 루틴의 돌발적 실행으로 인해 포보스 1호는 화성에 도달하지 못했다.
그해 8월 29일, 소프트웨어 업로드에서 글자 하나를 빠트려서, 돌발적으로 조향 시험의 루틴을 실행시켰고, 그 때문에 우주선의 자세제어 분사기가 가동을 멈췄다. 결과적으로 이 탐사선은 태양전지판을 태양을 향하게 하지 못했으며 이로 인해 배터리가 차차 바닥 나버렸다. 프로브 1호와의 교신은 9월 2일을 마지막으로 두절되었다. 화성을 향해 출발한 또 하나의 탐사선 프로브 2호 역시 실패했는데, 이번엔 하드웨어 불량이 그 원인이었다.
1996: 정수오버플로우 오류가 클러스터 자동파괴를 초래하다
마리너 1호 폭파 사건이 있은지 34년 후, 선상 비행 안내 소프트웨어상의 또 하나의 소프트웨어 버그가 4개의 인공위성과 그를 탑재한 아리안 5호(Ariane 5) 로켓을 폭파시키는 사태가 벌어졌다.
발사 직후, 안내 소프트웨어는 예상을 초과했던 수평 속도를 64비트 부동 소수점수에서 16비트 부호 붙임 정수로 전환하려 했는데, 여기서 오버플로우 오류가 유발되었다. 그 오류를 방지할 수 있었던 소프트웨어 확인은 의도적으로 생략되었다.
비행 안내 시스템(과 그와 동일한 버그를 가진 백업 시스템)이 작동을 정지했고, 로켓은 경로를 이탈하여 1996년 7월 4일 발사 30초 후 스스로 폭파되었다. 대체 인공위성들은 4년 후 러시아산 로켓에 탑재되어 성공적으로 발사되었다.
1999: 밀스타 인공위성이 버그 때문에 예정 궤도에 도달하지 못하다
밀스타(Milstar)는 1994년에서 2003년 사이에 발사된 5개의 정지궤도 인공위성들로, 미국 공군이 미국방부에 보안 통신을 제공하기위해 운영되고 있다. 그 5개 외에도 1999년 4월 30일에 발사된 인공위성이 있지만, 인공위성이 탑재된 타이탄 4호 (Titan IV) 로켓 제어 시스템의 소프트웨어 오류때문에 적정 궤도 진입에 실패했었다. 그 인공위성은 제대로된 궤도에 오르지 못하고 발사 10일 만에 운영이 중단되었다.
1999: 단위 문제로 화성 기후 탐사선이 파괴되다
화성 기후 탐사선(Mars Climate Orbiter)은 화성 극지 착륙선(Mars Polar Lander)과 함께 화성 탐사선 ‘98(Mars Surveyor ’98) 프로그램의 양대축이었다. 화성 기후 탐사선의 임무는 화성 궤도에 도착하여 날씨와 기후를 조사하고, 궁극적으로 착륙선의 통신을 담당하는 것이었다.
탐사선은 1998년 12월 11일 발사되었지만, 지상 시스템의 소프트웨어 버그 때문에 궤도에 도달하지 못했다. 1999년 9월 23일 화성 궤도에 진입을 시도할때, 탐사선은 예상 고도보다 낮게 진입하는 바람에 도중에 파괴됐던 것이다. 그 원인은 지상 기반 소프트웨어가 추력 제어를 영미식 단위(파운드-포스:pound-force)로 보냈지만, 선상 소프트웨어는 미터법 단위(뉴턴:Newtons)로 받아들였기 때문이다. 이런.
1999: 섣부른 착륙 착각으로 화성 극지 착륙선을 잃다
화성 탐사선 ’98 프로그램의 또다른 한축이었던 화성 극지 착륙선 역시 불행히도 소프트웨어 문제로 실패했다. 1999년 1월 3일 발사된 이 착륙선은 그해 12월 3일 화성 표면에 착륙을 시도하다가 지면과 충돌했다.
그 궁극적인 원인은 착륙선의 다리 3개에 달린 센서를 통해 착륙선이 지면과 닿으면 하강 엔진을 끄는 소프트웨어에 있었다. 하강 중 착륙선의 다리 어느곳의 진동이 착륙으로 잘못 인식되어 화성 지면 40미터 상공에서 엔진이 정지하게 되었고, 착륙선은 바닥과 충돌해 치명적으로 손상됐다.
2004: 플래시 메모리 오류가 화성 스피릿호의 발목을 잡을 뻔하다
큐리오시티(Curiosity) 로버가 화성에 착륙하기 오래 전, 쌍둥이 탐사선 스피릿호(Spirit)와 오퍼투니티호(Opportunity)는 화성 표면을 돌아다니기 시작했다. 오퍼투니티는 9년이 지난 지금까지도 탐사작업을 수행 중이지만, 스피릿은 플래시 메모리 관리 변칙 문제로 인해 탐사 시작 2주 만에 임무를 중단할 뻔 했다.
도스-관리 파일 시스템의 설계 결함이 플래시 메모리를 가득 채워, 스피릿을 2004년 1월 21일부터 끝없는 리부팅 사이클로 빠지게 만들어 배터리가 고갈되고 과열로 인해 로버가 망가질 위험에 처하게 만들었다. 다행히도, 엔지니어들이 이 문제를 해결하여 플래시 메모리를 재포맷하여 스피릿호를 2004년 2월 6일 다시 임무로 복귀시켰다. 스피릿은 그 후 예상되었던 90 태양일을 초과해 6년 동안이나 탐사활동을 수행했다.
2006: 메모리 배치 결함이 화성 전역 조사선의 연장 임무를 끝내다
화성 전역 조사선(Mars Global Surveyor)은 1996년 11월 7일 발사되어 화성 지표면을 저고도 궤도에서 연구하는 일년 간의 임무를 수행했다. 조사선은 그후로 2006년 11월 2일 소프트웨어 버그로 인해 나사(NASA)와의 교신이 중단되기 전까지거의 10년 가까이 연장 임무를 수행했다.
이는 2006년 6월 데이터가 부정확한 메모리 주소로 쓰여질 수 있는 가능성을 허용했던 소프트웨어 업데이트가 원인인 것으로 드러났다. 이 메모리 결함은 11월초에 유발되어 조사선의 태양광 패널 조정을 불가능하게 하여, 궁극적으로 조사선 동체가 태양방향을 마주하게 되어 배터리를 태양광에 노출시켜 배터리를 점차적인 과열을 초래했다.