# 아폴로 11 온보드 소프트웨어가 실시간 과부하를 극복한 비밀 – 마가렛 해밀턴의 혁신적인 설계 원리

*SEO 키워드: 아폴로 11, 마가렛 해밀턴, 실시간 소프트웨어*

---

# # 서론 – “우주선이 멈추면 인류는 멈춘다”

1969년 7월 20일, 인류는 처음으로 달에 발을 디뎠다. 하지만 그 순간, 달 착륙선 **아폴로 11**의 온보드 컴퓨터인 **AGC(아폴로 유도 컴퓨터)** 가 갑작스러운 과부하에 직면했다는 사실을 아시나요?

컴퓨터는 “1202”, “1201”이라는 프로그램 알람을 내보냈고, 이는 곧 시스템이 **실시간으로 과부하** 상태에 놓였다는 경고였다. 만약 이 알람을 무시하고 시스템이 멈추었다면, 달 착륙은 물론 전체 미션이 좌절됐을 것입니다.

이 위기를 극복한 핵심은 바로 **마가렛 해밀턴**이 설계한 “우선순위 기반 스케줄링”과 **태스크 드롭(task dropping)** 메커니즘이었습니다. 이번 글에서는 그 원리를 초보자도 이해하기 쉽게 풀어보고, 오늘날 실시간 소프트웨어 개발에 적용할 수 있는 교훈을 정리합니다.

---

# # 1️⃣ 아폴로 11 온보드 컴퓨터, 그 구조와 한계

| 요소 | 설명 |

|------|------|

| **CPU** | 2 MHz, 16 비트 워드(15 비트 데이터 + 1 비트 짝수/홀수) |

| **메모리** | 72 KB ROM, 4 KB RAM |

| **운영 체제** | 비선점형 **코어 루프**(interrupt‑driven) |

| **프로그램** | **프라임**(항법)와 **로버**(제어) 두 개의 독립된 소프트웨어 모듈 |

당시 기술 수준을 생각하면, 이 사양은 **극히 제한적**이었습니다. 특히, 동시에 여러 센서와 엔진을 제어해야 하는 달 착륙 단계에서는 CPU가 매 초마다 수천 번의 연산을 수행해야 했습니다.

---

# # 2️⃣ 과부하 상황과 프로그램 알람이 의미하는 것

착륙 직전, 달 모듈이 **데이터 버스 충돌**(데이터 전송이 겹쳐서 오류 발생) 로 인해 AGC는 **‘1202’**와 **‘1201’** 알람을 발생시켰습니다.

- **1202 알람**: “오버플로우 – 인터럽트가 처리되지 못함”

- **1201 알람**: “오버플로우 – 메모리 접근 오류”

즉, **CPU가 할당된 시간 안에 모든 작업을 끝내지 못했다**는 뜻이었습니다.

---

# # 3️⃣ 마가렛 해밀턴이 만든 “우선순위 기반 스케줄링”

## # 3.1 태스크에 우선순위 부여

해밀턴은 모든 프로그램을 **우선순위 레벨(1~4)** 로 나누었습니다.

| 레벨 | 담당 작업 | 설명 |

|------|----------|------|

| 1 | 비상 제어 | 엔진 점화, 고도 유지 등 생존에 직결 |

| 2 | 항법 계산 | 위치·속도 추정 |

| 3 | 데이터 수집 | 센서값 읽기 |

| 4 | 로깅·디버그 | 부가적인 기록 |

CPU는 매 사이클마다 **가장 높은 우선순위**의 작업을 먼저 실행하고, 시간이 부족하면 **낮은 우선순위** 작업을 **버립니다**(task dropping).

## # 3.2 인터럽트와 비동기 처리

AGC는 **인터럽트**가 발생하면 현재 실행 중인 작업을 **중단**하고, 인터럽트 처리 루틴을 실행합니다. 이때도 우선순위가 적용돼, 비상 제어 인터럽트는 언제든지 즉시 처리됩니다.

---

# # 4️⃣ 실제 착륙 시 “태스크 드롭”이 어떻게 작동했나?

착륙 중에 발생한 과부하는 **‘데이터 버스 충돌’** 로 인해 인터럽트가 급증한 것이 원인이었습니다.

1. **우선순위 1**(엔진 제어) 작업은 절대로 중단되지 않았습니다.

2. **우선순위 2·3** 작업은 일정 시간 동안 CPU가 바빠지면 **스킵**되었습니다.

3. **우선순위 4**(로깅) 작업은 가장 먼저 버려졌고, 이는 알람이 발생해도 시스템이 멈추지 않은 핵심 이유였습니다.

결과적으로, **핵심 제어 로직은 계속 실행**되었고, 착륙선은 안전하게 달 표면에 내려앉을 수 있었습니다.

---

# # 5️⃣ 오늘날 실시간 소프트웨어에 주는 교훈

| 교훈 | 현대 적용 예시 |

|------|----------------|

| **우선순위 기반 스케줄링** | 자동차 ECU, 항공기 플라이트 컨트롤 |

| **태스크 드롭 설계** | IoT 디바이스의 전력 관리, 로봇 실시간 제어 |

| **명확한 인터럽트 계층** | 실시간 OS(RTOS)에서 ISR 우선순위 설정 |

특히 **실시간 소프트웨어**를 개발할 때는 “**무조건 모든 작업을 수행한다**”는 사고보다 “**핵심 작업을 보장하고 부수 작업은 포기한다**”는 사고가 더 안전합니다.

---

# # 결론 – 당신도 오늘부터 적용해 보세요!

아폴로 11의 성공은 단순히 하드웨어가 뛰어났기 때문이 아니라, **마가렛 해밀턴**이 만든 **우선순위 기반 스케줄링**과 **태스크 드롭**이라는 소프트웨어 설계 철학 덕분이었습니다.

1. 프로젝트에 **우선순위 레벨**을 정의하고, 핵심 로직을 명확히 구분하세요.

2. 실시간 시스템에서는 **비상 상황**을 위한 인터럽트와 **태스크 포기 전략**을 미리 구현해 두세요.

3. 기존 코드에 **우선순위 기반 스케줄러**를 적용해 보며, 과부하 테스트를 반드시 진행하세요.

> **당신의 다음 프로젝트**가 “달에 착륙”하는 순간이 될 수도 있습니다. 지금 바로 **우선순위 설계**를 시작해 보세요!

---

*이 글이 도움이 되었다면, 댓글과 공유로 더 많은 사람에게 알려 주세요. 그리고 최신 실시간 소프트웨어 개발 팁을 놓치지 않으려면 구독 버튼을 눌러 주세요!*
