1969년 7월 20일 오후, 달 착륙선 이글호가 표면까지 780미터를 남겨둔 순간 조종석 경보등이 켜졌다. 화면에는 낯선 숫자 "1202"가 떠올랐고, 우주비행사 버즈 올드린의 목소리가 관제센터로 날아들었다. 착륙을 계속할지, 임무를 중단할지 결정할 시간은 채 30초가 주어지지 않았다.
이 순간을 결정지은 것은 우주비행사의 조종 실력이 아니라, 지상 관제실 한켠에 앉아 있던 20대 엔지니어의 판단이었다. 그리고 그 판단의 근거는 아폴로 유도 컴퓨터(AGC, Apollo Guidance Computer)라는 당시로서는 파격적인 소프트웨어 설계 철학에 있었다.
착륙 780초 전, 관제센터에 뜬 낯선 숫자
착륙 시퀀스가 시작되고 얼마 지나지 않아 1202 알람이 세 차례 연속으로 발생했다. 관제센터의 유도항법 담당관 스티브 베일스는 즉시 후방 지원실의 소프트웨어 전문가 잭 가먼에게 상황 판단을 요청했다. 가먼의 대답은 "GO"였고, 베일스는 이를 그대로 비행 감독관에게 전달했다.
이 결정이 내려지기까지 걸린 시간은 채 12초 남짓이었던 것으로 알려져 있다. 훈련 시뮬레이션에서 유사한 알람을 경험했던 것이 실전에서 빠른 판단으로 이어졌다는 이야기가 전해지는데, 이는 당시 참여자들의 회고를 통해 널리 알려진 서사이며 공식 임무 기록으로 세부 시간까지 확정된 수치는 아니다.
"1202"는 정확히 무엇을 의미했나
1202 알람은 하드웨어 고장 신호가 아니었다. 이는 AGC 내부 소프트웨어가 스스로 과부하 상태를 인지하고 보낸 자기 진단 신호였다. 이 지점을 이해하려면 AGC라는 컴퓨터가 어떤 방식으로 설계되었는지를 먼저 짚어야 한다.
AGC(아폴로 유도 컴퓨터)와 코어 로프 메모리
![]() |
| 달착륙 직전 알람 1202 출처. kidzNet |
AGC는 자기 코어를 물리적으로 배선해 프로그램을 저장하는 코어 로프 메모리(전선을 자석 고리에 꿰어 데이터를 영구 저장하는 방식) 기반 컴퓨터였다. 오늘날 기준으로는 수 킬로바이트 수준의 극히 제한된 메모리와 연산 능력만을 가지고 있었으며, 이 제약이 이후 벌어질 사건의 근본 배경이 된다.
익젝큐티브와 우선순위 기반 스케줄링 구조
AGC의 핵심은 익젝큐티브(Executive, 여러 작업의 실행 순서를 관리하는 운영 체제 성격의 프로그램)라는 소프트웨어 계층이었다. 이 시스템은 여러 작업을 동시에 처리하는 것처럼 보이게 하되, 실제로는 정해진 시간 단위로 작업을 쪼개 순서대로 처리하는 협력형 스케줄링을 채택했다. 여기서 결정적인 설계 요소가 우선순위 개념이다. 메모리가 부족해질 경우, AGC는 낮은 우선순위 작업을 스스로 포기하고 착륙에 필수적인 작업만 남기도록 설계되어 있었다.
핵심 요약: 1202 알람은 고장이 아니라 AGC가 처리 용량 초과를 감지하고 낮은 우선순위 작업을 자동으로 정리한 뒤 보낸 정상적인 자기 보호 신호였습니다. 이 설계 덕분에 착륙에 필수적인 유도·항법 연산은 중단 없이 계속될 수 있었습니다.
오버플로우는 왜, 어디서 발생했나
과부하의 원인은 소프트웨어 결함이 아니라 절차상의 실수에서 비롯되었다. 착륙선의 레이더 시스템 설정이 원인 제공자였다.
랑데부 레이더 스위치의 결정적 실수
착륙 절차서에는 명시되어 있지 않았지만, 랑데부 레이더(궤도 복귀 시 모선과의 도킹을 위한 레이더) 스위치가 켜진 상태로 남아 있었다. 이 레이더는 착륙 자체에는 필요하지 않은 장치였음에도 계속 데이터를 AGC에 전송하고 있었고, 이 신호가 착륙 유도 컴퓨터의 연산 주기와 미묘하게 어긋나는 타이밍 문제를 일으켰다.
VAC(가변 카운터)와 큐 오버플로우 메커니즘
불필요한 레이더 데이터가 계속 유입되면서 VAC(Vector Accumulator Counter, 반복 연산을 처리하는 카운터 회로)에 과도한 인터럽트 요청이 쌓였다. 처리되지 못한 작업이 큐에 누적되며 결국 정해진 처리 한도를 넘어섰고, 이 상태를 익젝큐티브가 감지해 1202, 이어서 1201 알람을 순차적으로 발생시킨 것이다.
| 구분 항목 | 정상 작동 상태 | 1202 알람 발생 상태 |
|---|---|---|
| 처리 대상 작업 | 착륙 필수 유도·항법 연산 중심 | 불필요한 레이더 데이터 유입으로 큐 적체 |
| 익젝큐티브 대응 | 정상 순환 스케줄링 유지 | 낮은 우선순위 작업 강제 중단 및 재부팅형 복구 |
| 착륙 유도 연산 | 지속 처리 | 영향 없이 지속 처리(핵심 설계 목적) |
| 승무원 화면 표시 | 정상 수치 표시 | 1202/1201 알람 코드 표시 |
"GO"를 외친 27세 엔지니어들
기술적 원인이 규명되기까지는 시간이 걸렸지만, 그 순간의 판단은 즉각 내려져야 했다. 이를 가능하게 한 것은 사전 준비였다.
잭 가먼의 알람 코드 리스트와 마고 계획
![]() |
| 잭 가먼 당시 NASA엔지니어(왼쪽) 출처. collectspace.com |
임무 몇 주 전, 소프트웨어 엔지니어 잭 가먼은 시뮬레이션 훈련 도중 유사한 알람을 겪은 뒤, 발생 가능한 알람 코드별 대응 지침을 손으로 정리한 목록을 작성해 콘솔 옆에 붙여두었다. 이 개인적인 준비가 실제 임무 당시 즉각적인 "GO" 판단의 근거가 되었다는 설명이 여러 관계자 회고를 통해 전해진다.
스티브 베일스, 그리고 닐 암스트롱의 12초
베일스는 가먼의 판단을 신뢰하고 곧바로 비행 감독관 진 크란츠에게 전달했으며, 이는 다시 우주비행사에게 이어졌다. 착륙선 조종을 맡고 있던 닐 암스트롱은 이 짧은 교신 사이에도 수동 조종으로 착륙 지점을 조정하고 있었다. 임무 이후 스티브 베일스는 이 공로를 인정받아 대통령 자유훈장을 비행사들과 함께 수여받았다.
참고: 1202 알람과 별개로 착륙 직전에는 1201 알람도 추가로 발생했습니다. 두 알람 모두 동일한 원인(레이더 데이터로 인한 큐 과부하)에서 비롯된 것으로, 익젝큐티브의 동일한 복구 로직이 적용되었습니다.
이 사건이 소프트웨어 공학에 남긴 것
1202 알람 사건은 단순한 일화로 소비되기에는 소프트웨어 공학사에 남긴 함의가 크다. 이후 세대의 실시간 시스템 설계자들에게 두 가지 개념을 각인시켰다.
우선순위 기반 선점형 스케줄링의 원형
AGC의 익젝큐티브 구조는 오늘날 항공전자·의료기기·자동차 제어 시스템 등에서 표준으로 쓰이는 실시간 운영체제(RTOS)의 우선순위 기반 스케줄링 개념과 맞닿아 있다. 시스템이 과부하 상태에서도 핵심 기능을 최우선으로 지켜내는 설계 철학은, 이 사건을 계기로 항공우주 소프트웨어 업계 전반에서 더욱 중요하게 다뤄지기 시작했다는 평가를 받는다.
마진 설계(여유 용량을 두는 설계 방식)라는 개념의 재조명
![]() |
| 아폴로11호 승무원 암스트롱 , 마이클 콜린스 , 올드린 주니어 출처. 위키미디어 |
동시에 이 사건은 하드웨어 자원에 여유를 두는 마진 설계의 중요성을 보여준 사례로도 자주 인용된다. 다만 AGC가 극도로 제한된 메모리 환경에서도 정상 작동을 이어갈 수 있었던 것은 여유 자원 덕분이라기보다, 우선순위에 따라 스스로 작업을 포기하는 소프트웨어적 방어 설계 덕분이었다는 해석이 더 정확하다는 지적도 있다.
주의: "가먼이 목록을 미리 준비해두지 않았다면 임무가 중단됐을 것"이라는 식의 극적인 서술은 여러 대중 매체에서 반복되어 왔으나, 실제로는 익젝큐티브의 우선순위 복구 로직 자체가 근본적인 안전장치였습니다. 개인의 기지와 시스템 설계, 두 요소가 함께 작용한 결과로 이해하는 편이 사실에 가깝습니다.
![]() |
| 인류가 달에 남긴 첫 발자국 출처. 위키미디어 |
결국 1202 알람이 남긴 가장 중요한 교훈은, 완벽한 무결점 시스템을 만드는 대신 "실패를 예상하고 우아하게 대응하는 시스템"을 설계하는 것이 더 실용적인 접근이라는 점이다. 이는 이후 우주왕복선 프로그램은 물론, 현대 임베디드 시스템 설계 원칙에도 이어지고 있는 사고방식으로 평가받는다.




