TECH 으로 돌아가기
TECH HACKER NEWS 오늘 5분 읽기 41 READS

4KB 램으로 달에 착륙한 코드 — GitHub에 공개된 아폴로 11호 유도 컴퓨터 소스

4KB 램으로 달에 착륙한 코드 — GitHub에 공개된 아폴로 11호 유도 컴퓨터 소스

1969년 7월, 인류를 달에 데려다준 컴퓨터가 있었어요. 아폴로 가이던스 컴퓨터(AGC)라고 부르는데요. 이 컴퓨터의 소스코드 전체가 GitHub에 올라와 있다는 사실, 알고 계셨나요? 사령선에 실렸던 Comanche와 달착륙선에 실렸던 Luminary 코드가 그대로 공개돼 있어서, 지금 브라우저만 열면 57년 전 엔지니어들이 한 줄 한 줄 손으로 짠 어셈블리 코드를 읽을 수 있어요. 원본은 종이 출력물로만 남아 있던 걸 Virtual AGC 프로젝트 사람들이 일일이 타이핑해서 디지털화했고, 이걸 2016년에 한 개발자가 GitHub 저장소로 올리면서 누구나 볼 수 있게 됐죠.

4KB 램으로 달에 간 컴퓨터

AGC의 스펙을 보면 입이 떡 벌어져요. 램은 약 4KB, 프로그램이 담긴 롬은 약 72KB, 클럭은 2MHz 남짓이었거든요. 지금 여러분 손목에 있는 스마트워치가 이것보다 수십만 배는 강력해요. 게다가 롬은 '코어 로프 메모리'라는 물건이었는데요, 이게 뭐냐면 가느다란 구리선을 자석 고리에 실로 꿰듯 엮어서 0과 1을 기록하는 방식이에요. 선이 고리를 통과하면 1, 비껴가면 0. 그래서 프로그램을 '짠다'는 게 은유가 아니라 말 그대로 직물을 짜는 일이었고, 숙련된 작업자들이 몇 달에 걸쳐 손으로 엮었어요. 한 번 짜면 수정이 불가능하니, 배포 전에 버그를 다 잡아야 했던 거죠. 요즘처럼 '일단 배포하고 핫픽스'가 통하지 않는 세계였어요.

코드 속 유머와 인간미

코드를 열어보면 웃음이 나는 부분이 많아요. 엔진 점화 루틴 파일 이름이 BURN_BABY_BURN--MASTER_IGNITION_ROUTINE이고, 조종사가 쓰는 키패드와 디스플레이(DSKY)를 다루는 파일은 PINBALL_GAME_BUTTONS_AND_LIGHTS예요. 주석에는 'TEMPORARY, I HOPE HOPE HOPE(임시 코드입니다, 제발 제발 제발)'라고 적힌 곳도 있고요. 마감에 쫓기며 임시 코드를 넣고 기도하는 마음, 57년이 지나도 개발자는 똑같구나 싶죠. 이 소프트웨어 개발을 이끈 사람이 당시 20대의 마거릿 해밀턴인데, '소프트웨어 엔지니어링'이라는 말을 만들어 퍼뜨린 주인공으로도 유명해요.

착륙 직전 울린 1202 알람, 그리고 설계의 승리

이 코드의 백미는 우선순위 기반 스케줄링이에요. 실제로 아폴로 11호가 달에 내려가던 중 컴퓨터에 과부하가 걸려 '1202 알람'이 울렸거든요. 랑데부 레이더가 켜져 있는 바람에 불필요한 인터럽트가 쏟아져서 CPU 처리 용량이 넘쳐버린 상황이었어요. 보통 시스템이라면 그대로 멈췄겠지만, AGC는 달랐어요. 중요도가 낮은 작업을 버리고 착륙에 필수적인 작업만 남기도록 스스로 재시작하게 설계돼 있었거든요. 덕분에 알람이 울리는 와중에도 착륙 유도는 계속 돌아갔고, 암스트롱은 무사히 착륙할 수 있었죠. 요즘 말로 하면 '우아한 성능 저하(graceful degradation)'를 1960년대에 구현한 거예요.

지금 우리가 배울 점

이 코드가 주는 교훈은 의외로 현대적이에요. 자원이 극도로 제한된 환경에서의 설계, 실패를 전제로 한 방어적 프로그래밍, 우선순위 기반 복구 전략. 요즘 임베디드 개발이나 고가용성 서버 설계에서 고민하는 문제들과 본질이 같거든요. 저장소에는 코드를 실제로 빌드해서 시뮬레이터로 돌려보는 방법도 안내돼 있으니, 주말에 한번 열어보면서 반세기 전 엔지니어들의 사고방식을 따라가 보는 것도 색다른 공부가 될 거예요.

한 줄 정리: 4KB 램으로 달에 간 이 코드는, 제약이 클수록 설계가 빛난다는 걸 보여주는 살아 있는 교과서예요. 여러분이 겪어본 가장 혹독한 자원 제약 환경은 어디였나요? 그때 어떤 트릭으로 살아남으셨는지 궁금하네요.


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/chrislgarry/Apollo-11
SHARE
처리 중...