스프레드시트의 시작점, VisiCalc
오늘날 개발자라면 누구나 Excel이나 Google Sheets를 한 번쯤은 써봤을 것입니다. 데이터 정리부터 간단한 계산, 심지어 프로젝트 관리까지 스프레드시트는 우리 업무의 기본 도구가 되었죠. 그런데 이 모든 것의 시작이 된 프로그램, VisiCalc을 기억하시나요? 1979년 Dan Bricklin과 Bob Frankston이 만든 VisiCalc은 세계 최초의 스프레드시트 프로그램으로, Apple II 컴퓨터를 단순한 취미용 기기에서 비즈니스 도구로 탈바꿈시킨 역사적인 소프트웨어입니다. 최근 개발자 Serge Zaitsev가 이 VisiCalc을 현대 환경에서 완전히 복원(reconstruct)하는 프로젝트를 공개했습니다.
왜 '복원'인가
여기서 말하는 복원은 단순히 에뮬레이터 위에서 옛날 바이너리를 돌리는 것이 아닙니다. Zaitsev는 VisiCalc의 원본 6502 어셈블리 코드를 분석하고, 그 동작을 현대적인 코드로 한 줄 한 줄 재구현했습니다. 이 작업이 특별한 이유는 원본의 동작 방식을 최대한 충실하게 재현하면서도, 현대 개발자가 읽고 이해할 수 있는 형태로 만들었다는 점입니다.
VisiCalc의 원본 코드는 약 12,000줄의 6502 어셈블리로 작성되어 있었습니다. 6502는 Apple II의 CPU로, 오늘날 기준으로는 극도로 제한적인 프로세서입니다. 클럭 속도 1MHz, 주소 공간 64KB라는 환경에서 스프레드시트라는 개념 자체를 처음 구현했다는 것은 상당한 엔지니어링 성취였습니다. 셀 간의 의존성 계산, 화면 렌더링, 사용자 입력 처리를 이 작은 공간 안에서 모두 해결해야 했으니까요.
기술적으로 들여다보기
VisiCalc의 내부 구조는 오늘날의 스프레드시트 엔진과 비교하면 놀라울 정도로 단순하면서도 영리합니다. 셀 데이터는 메모리에 연결 리스트(linked list) 형태로 저장되었습니다. 각 셀은 자신의 행과 열 좌표, 값, 그리고 수식 정보를 담고 있었죠. 빈 셀은 아예 메모리에 존재하지 않았는데, 이는 64KB라는 극한의 메모리 제약 아래에서 내린 합리적인 설계 결정이었습니다.
수식 계산 방식도 흥미롭습니다. 현대 스프레드시트들은 보통 셀 의존성 그래프(dependency graph)를 만들어 위상 정렬(topological sort)로 계산 순서를 결정합니다. 하지만 VisiCalc은 더 단순한 접근을 택했습니다. 기본적으로 시트를 왼쪽 위에서 오른쪽 아래로 순회하면서 각 셀의 수식을 평가하는 방식이었죠. 이 방식은 특정 패턴의 순환 참조에서 문제가 생길 수 있었지만, 당시 사용 환경에서는 충분히 실용적이었습니다.
Zaitsev의 복원 프로젝트에서 특히 주목할 부분은 화면 렌더링 로직입니다. VisiCalc은 Apple II의 텍스트 모드 화면(40열 × 24행)에 스프레드시트를 표시해야 했습니다. 오늘날 우리가 수천 개의 열과 행을 자유롭게 스크롤하는 것과 달리, 화면에 보여줄 수 있는 정보가 극도로 제한적이었기 때문에 어떤 정보를 보여주고 어떤 정보를 숨길지에 대한 세밀한 판단이 코드 곳곳에 녹아 있었습니다.
레트로 컴퓨팅 복원의 가치
이런 복원 프로젝트는 단순한 노스탤지어 이상의 가치가 있습니다. 첫째, 극한의 제약 조건에서 탄생한 설계 결정들을 공부할 수 있습니다. 메모리가 넉넉하고 CPU가 빠른 오늘날에는 자원 효율성에 대해 깊이 고민할 기회가 드뭅니다. 하지만 임베디드 시스템이나 엣지 컴퓨팅처럼 자원이 제한된 환경은 여전히 존재하고, VisiCalc의 설계 철학에서 배울 점이 있습니다.
둘째, 소프트웨어 보존(software preservation)이라는 관점에서 중요합니다. 원본 바이너리를 에뮬레이터로 돌리는 것과 소스 코드를 이해하고 재구현하는 것은 완전히 다른 차원의 보존입니다. 전자는 "실행할 수 있다"에 머무르지만, 후자는 "이해할 수 있다"까지 나아갑니다. 특히 프로그래밍 역사에서 이정표가 되는 소프트웨어의 설계 사상이 문서화되지 않고 사라지는 것을 막아줍니다.
비슷한 복원 프로젝트들
이런 종류의 코드 고고학(code archaeology)은 최근 꾸준히 이어지고 있습니다. 대표적으로 Apollo 11의 항법 컴퓨터 소스 코드가 GitHub에 공개된 사례가 있고, 초기 Unix의 소스 코드를 현대적으로 분석한 프로젝트들도 있습니다. 게임 분야에서는 슈퍼마리오 64의 디컴파일 프로젝트가 유명하죠. VisiCalc 복원은 이 흐름의 연장선에 있으면서, 비즈니스 소프트웨어 역사의 빈 공간을 채운다는 점에서 독자적인 의미를 가집니다.
한국 개발자에게 주는 시사점
실무에서 당장 써먹을 수 있는 프로젝트는 아닙니다. 하지만 주니어 개발자라면 이 복원 코드를 읽어보는 것만으로도 훌륭한 학습이 될 수 있습니다. 자료구조 선택의 이유, 메모리 레이아웃 설계, 제한된 환경에서의 UX 결정 등 교과서에서는 배우기 어려운 실전 엔지니어링 감각을 엿볼 수 있기 때문입니다. 시니어 개발자라면 오늘날 당연하게 쓰고 있는 스프레드시트의 기본 개념들이 어떻게 처음 만들어졌는지 추적해보는 것이 기술적 시야를 넓히는 데 도움이 될 것입니다.
마무리
47년 전 64KB 메모리 안에서 탄생한 스프레드시트의 원형이 현대 코드로 되살아났습니다. 제약이 만들어낸 창의적인 설계는 시간이 지나도 여전히 배울 것이 있다는 점을 보여줍니다. 여러분이 만약 레거시 코드를 읽어야 하는 상황이 온다면, 그 코드가 쓰여진 시대의 제약 조건을 먼저 이해하려고 하시나요, 아니면 현재 기준으로만 판단하시나요?
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공