메인프레임부터 VPS까지: 컴퓨팅 시분할의 역사
1960년대 CTSS와 IBM VM/370에서 시작된 시분할 기술이 현대의 VPS로 어떻게 진화했는지 분석합니다. Unix와 KVM을 거쳐온 컴퓨팅 자원 격리와 스케줄링의 핵심 원리를 통해 클라우드 환경의 근본적인 작동 방식을 이해할 수 있습니다.
VPS의 기원
메인프레임에서 클라우드로 이어지는 컴퓨팅의 역사는 아이디어를 더 저렴하게 구현해 온 과정입니다. 그 핵심 아이디어는 시분할(time-sharing)입니다. 고가의 장비 한 대를 여러 사람이 동시에 사용하게 하고, 각자에게 독립적인 환경을 제공하는 것입니다. 이 기술은 컴퓨터 비용이 이를 사용하는 사람들의 인건비보다 비쌌던 1960년대 무렵에 발명되었습니다. 오늘날 대여하는 VPS의 모든 구성 요소는 바로 이 문제를 해결하기 위해 만들어졌습니다. 사용자 간의 격리, CPU 시간을 배분하는 스케줄러, 하이퍼바이저, 그리고 사용 시간을 측정하는 과금 체계가 모두 여기에 해당합니다. 이 문제는 사라진 적이 없습니다. 하드웨어가 저렴해짐에 따라, 과거에는 연구 보조금이 필요했던 컴퓨팅 자원을 이제는 한 달에 몇 달러 수준으로 사용할 수 있게 되었을 뿐입니다.
1959년에서 1961년: 시분할 시스템이 발명된 이유
1950년대의 컴퓨터는 일괄 처리(batch) 방식으로 작동했습니다. 프로그래머는 프로그램을 카드에 펀칭하여 운영자에게 전달한 뒤, 나중에 출력물을 받으러 돌아와야 했습니다. 오타 하나 때문에 하루를 허비해야 했습니다. IBM 7090과 같은 기계는 수백만 달러에 달했기에 기계를 쉬지 않고 돌리는 것이 핵심이었으며, 기다리는 사람들의 시간은 청구서에 포함되지 않았습니다.
1959년 1월, John McCarthy는 MIT에서 작성한 메모를 통해 정반대의 주장을 펼쳤습니다. 기계가 사람을 기다려야 한다는 것이었습니다. Christopher Strachey는 같은 해 UNESCO 회의에서 시분할의 한 형태를 설명했으나, 이는 여러 사람이 동시에 타이핑하는 방식이 아니라 다른 작업이 실행되는 동안 한 명의 프로그래머가 디버깅하는 방식을 의미했습니다. 1961년 MIT 100주년 기념 행사에서 McCarthy는 한 걸음 더 나아가, 컴퓨팅을 전기처럼 계량하여 공공 유틸리티로 판매할 수 있다고 주장했습니다.
당시의 반론은 시분할이 기계 자원을 낭비한다는 것이었습니다. 사용자 간 전환에는 CPU 사이클이 소모되는데, 당시에는 이 사이클이 가장 비싼 자원이었기 때문입니다. 이 반론은 사실이었으나, 시간이 흐르면서 중요하지 않게 되었습니다. 지난 60년간 CPU 사이클의 가격은 하락한 반면, 인간의 노동 시간 가치는 하락하지 않았기 때문입니다.
CTSS가 발명해야 했던 것들
MIT Computation Center의 Fernando Corbató 연구팀은 이 논쟁을 해결하기 위해 Compatible Time-Sharing System(CTSS)을 구축했습니다. 이 시스템은 1961년 11월 IBM 709에서 처음 시연되었으며, 4명의 사용자를 지원하고 각 사용자의 작업을 개별 자기 테이프 드라이브로 스왑(swapping)하는 방식을 사용했습니다. "Compatible(호환 가능한)"이라는 명칭은 기존의 배치 시스템을 하부에서 여전히 실행할 수 있음을 의미했습니다. 새로운 기능만 수행하는 컴퓨터를 구매하려는 사람은 없었기 때문입니다.
4명의 사용자는 적은 수입니다. 하지만 이 숫자에 도달하기 위해 해결해야 했던 문제들의 목록은 결코 작지 않으며, 이는 현재 여러분의 커널이 처리하고 있는 목록과 동일합니다. CTSS는 하나의 긴 작업이 다른 모든 터미널을 멈추게 하지 않도록 스케줄러가 필요했습니다. 또한 프로그램이 충돌하더라도 시스템 전체가 아닌 해당 사용자만 영향을 받도록 메모리 보호 기능이 필요했습니다. 로그아웃 후에도 데이터가 유지되는 저장소가 필요했기에, CTSS는 현대 사용자가 인식할 수 있는 최초의 파일 시스템 중 하나를 갖추게 되었습니다. 마지막으로 한 사용자가 다른 사용자의 파일을 읽을 수 없도록 비밀번호가 필요했습니다.
이 구성 요소들의 이름을 바꾸면 곧 리눅스 박스가 됩니다. 스케줄러는 리눅스 6.6에서 CFS를 대체한 EEVDF입니다. 메모리 보호는 각 프로세스에 고유한 가상 주소 공간을 제공하는 MMU(memory management unit)입니다. 로그아웃 후에도 유지되는 저장소는 여러분의 홈 디렉터리입니다. 비밀번호 파일은 여전히 /etc/passwd라고 불립니다.
Multics와 컴퓨터 유틸리티
MIT의 차세대 시스템은 McCarthy가 설명했던 유틸리티를 지향했습니다. 1963년에 시작된 Project MAC은 1964년 8월 General Electric GE-645 도입 계약을 체결했고, 1965년에 첫 Multics 논문을 발표했습니다. 이름 자체에 그 목적이 담겨 있습니다. Multiplexed Information and Computing Service(다중화 정보 및 컴퓨팅 서비스)가 그것입니다. 여기서 서비스란 시간 단위로 구매하는 대상을 의미합니다.
Multics는 계획보다 훨씬 오랜 시간이 걸렸습니다. 프로토타입 GE-645 장비는 1967년 1월 MIT와 Bell Labs에 도착했습니다. Bell Labs는 1969년 4월 프로젝트에서 철수했습니다. Multics는 1969년 10월 1일 MIT 정보 처리 센터 고객들에게 공개되었으며, 이후 31년간 운영 환경에서 가동되었습니다. 노바스코샤주 핼리팩스에 있는 캐나다 국방부에서 운영하던 마지막 Multics 시스템은 2000년 10월 30일에 종료되었습니다.
Multics는 출시가 늦었고 속도가 느렸다는 이유로 종종 실패한 프로젝트로 분류됩니다. 하지만 그 유산은 다르게 말합니다. 이 시스템은 디렉터리 안에 디렉터리가 존재하는 계층적 파일 시스템, 각 파일에 대한 접근 제어 목록(ACL), 프로그램을 메모리처럼 파일에 접근하게 해주는 세그먼트 가상 메모리, 그리고 코드의 신뢰 수준을 등급화하는 보호 링(protection rings) 개념을 도입했습니다. 링 구조는 지금 여러분 앞의 실리콘 칩 내부에도 여전히 존재합니다. 커널을 위한 ring 0와 사용자 코드를 위한 ring 3는 Multics의 용어입니다. 이후 하드웨어 가상화가 도입되면서 하이퍼바이저를 위해 ring 0 아래에 모드가 추가되었고, 사람들은 이를 비공식적으로 ring -1이라 부릅니다.
Unix: 감당 가능한 비용으로 구현한 시분할 시스템
Multics 프로젝트를 떠난 Ken Thompson은 Bell Labs에서 자신이 사용하고 싶은 시스템을 잃게 되었습니다. 1969년, 그는 폐기된 PDP-7 장비에서 훨씬 규모가 작은 시스템을 개발하기 시작했습니다. 최초의 Unix Programmer's Manual은 1971년 11월에 작성되었으며, 이 시점에는 이미 PDP-11로 작업 환경이 이전된 상태였습니다. 1973년, Thompson과 Dennis Ritchie는 커널을 C 언어로 재작성했습니다. 덕분에 시스템은 수작업으로 다시 작성할 필요 없이 새로운 하드웨어로 이식될 수 있었습니다.
이것이 바로 여러분이 Multics의 후예가 아닌 Unix의 후예를 사용하는 이유입니다. Multics는 오직 Multics를 위해 설계된 하드웨어가 필요했습니다. 반면 Unix는 저렴하고 구하기 쉬운 하드웨어라면 어디서든 실행되었고, 바로 이 점이 성공을 결정짓는 핵심 요소가 되었습니다.
Ritchie와 Thompson이 집필한 "The UNIX Time-Sharing System"은 1974년 7월 Communications of the ACM에 게재되었습니다. 이 논문은 여러분이 사용하는 VPS의 특징을 설명합니다. 프로세스, 단일 계층 파일 시스템, 단순 바이트 스트림 형태의 파일, fork, 권한 비트를 가진 사용자와 그룹, 그리고 커널의 일부가 아닌 일반 프로그램으로 동작하는 셸이 그것입니다. 52년이 지난 지금도 그 인터페이스는 확장되었을 뿐, 결코 대체되지 않았습니다.
1972년에 메인프레임에서 실제로 가상 머신이 구동되었습니까?
네, 그렇습니다. 이는 많은 사람이 간과하는 이야기의 핵심입니다. MIT가 Multics를 구축하는 동안, IBM의 Cambridge Scientific Center는 같은 목표를 다른 관점에서 접근했습니다. 하나의 운영 체제가 여러 사용자를 서비스하는 대신, Robert Creasy와 Les Comeau는 각 사용자에게 완전한 시뮬레이션 컴퓨터를 제공하는 제어 프로그램을 만들었습니다. CP-40은 1967년 1월에 생산 단계에 들어갔습니다. 모든 사용자는 가상의 System/360을 할당받았고, 그 안에서 소규모 단일 사용자 운영 체제인 CMS를 구동했습니다.
CP-40은 1968년 System/360-67에서 CP-67이 되었으며, IBM은 1972년 8월 2일에 VM/370을 발표했습니다. 이는 50여 년 전에 유료 고객에게 판매된 상용 하이퍼바이저입니다. 제어 프로그램은 실제 하드웨어를 다중화했고, 게스트 운영 체제는 자신이 기기를 완전히 소유하고 있다고 믿는 가상 머신 내부에서 수정 없이 구동되었습니다.
이 이론은 2년 후, Unix 논문이 실렸던 1974년 7월호 Communications of the ACM에 등장했습니다. Gerald Popek과 Robert Goldberg의 "Formal Requirements for Virtualizable Third Generation Architectures"는 프로세서가 가상화 가능하기 위해 갖추어야 할 요건을 제시했습니다. 핵심 규칙은 간단합니다. 기기 상태를 읽거나 변경할 수 있는 모든 명령어는 게스트가 커널 모드 외부에서 실행할 때 트랩(trap)을 발생시켜야 합니다. 그래야 하이퍼바이저가 제어권을 가져와 해당 게스트만의 고유한 상태 버전으로 응답할 수 있기 때문입니다. 이를 trap and emulate라고 합니다. IBM의 하드웨어는 이 규칙을 준수했습니다.
미니컴퓨터가 기존 모델을 무너뜨린 이유
DEC는 1965년 3월 22일, 1965년 당시 가격으로 약 18,000달러인 PDP-8을 출시했습니다. 이는 20,000달러 미만으로 판매된 최초의 미니컴퓨터였으며, 이후 50,000대 이상 판매되었습니다. 그 후 마이크로프로세서의 등장으로 가격은 다시 한번 하락했습니다. 부서 단위로 자체 장비를 구매할 수 있게 되고, 나중에는 개인도 구매가 가능해지면서 중앙 컴퓨터를 공유하는 방식은 더 이상 해결할 필요가 없는 과거의 문제처럼 보였습니다. 1980년대와 1990년대를 거치며 컴퓨팅 환경은 개인의 책상 위와 소형 x86 서버 랙으로 이동했습니다.
자원 낭비는 다른 형태로 되돌아왔습니다. 서버당 애플리케이션을 하나씩만 운영하는 방식은 구조를 파악하기는 쉽지만, 하드웨어 대부분을 유휴 상태로 방치하면서도 전력과 랙 공간 비용은 온전히 지불해야 했습니다. 이는 새로운 규모로 재현된 CTSS 문제이며, 이제는 프로세서가 아닌 공간과 전력이 고가의 자원이 되었습니다. 이에 대한 해답은 과거와 동일했습니다. 바로 장비를 공유하는 것입니다.
x86 가상화가 어려웠던 이유는 무엇입니까?
x86 아키텍처는 Popek과 Goldberg의 규칙을 위반했기 때문입니다. 2000년 8월 제9회 USENIX 보안 심포지엄에서 John Scott Robin과 Cynthia Irvine은 Pentium 명령어 세트를 분석하여, 사용자 모드 코드에서 실행될 때 오류를 발생시키지 않고 특권 상태를 읽거나 변경하는 17개의 명령어를 발견했습니다. popf가 대표적인 사례입니다. 사용자 모드에서 이 명령어를 실행하면 프로세서는 트랩을 발생시키는 대신 프로그램이 설정할 권한이 없는 비트를 조용히 무시합니다. 따라서 트랩 및 에뮬레이션(trap and emulate) 방식으로 구축된 하이퍼바이저는 게스트가 시도한 작업을 전혀 감지하지 못합니다.
하드웨어가 수정되기 전까지 두 가지 해결책이 등장했습니다. 1998년 스탠퍼드 대학의 Disco 연구를 바탕으로 설립된 VMware는 게스트 커널 코드를 검사하고 문제가 되는 명령어를 실행하기 전에 재작성하는 바이너리 변환(binary translation) 기술을 사용했습니다. 케임브리지 대학 컴퓨터 연구소의 Xen은 대신 게스트를 수정했습니다. 2003년 10월 SOSP에서 발표된 "Xen and the Art of Virtualization" 논문은 반가상화(paravirtualisation)를 설명합니다. 수정된 게스트 커널은 하이퍼바이저가 가로챌 수 없는 명령어를 실행하는 대신, 하이퍼바이저를 의도적으로 호출합니다.
그 후 1960년대 IBM이 해결했던 방식대로 하드웨어가 수정되었습니다. Intel은 2005년 11월 14일 두 가지 Pentium 4 모델에서 VT-x를 출시했고, AMD는 2006년 5월 AMD-V를 출시했습니다. 두 기술 모두 게스트 커널보다 낮은 프로세서 모드를 추가하여, 게스트가 자체 커널을 최고 속도로 실행하는 동안 하이퍼바이저가 필요한 이벤트에 대한 제어권을 유지할 수 있게 했습니다. 이로써 하이퍼바이저는 일반 운영 체제 내부에서 실행될 만큼 작아졌고, Qumranet의 Avi Kivity가 개발한 KVM이 바로 이를 구현했습니다. KVM은 Linux 커널 자체를 하이퍼바이저로 변환했습니다. KVM은 2007년 2월에 릴리스된 Linux 2.6.20에 병합되었으며, 오늘날 대다수의 VPS 호스트가 이를 사용하고 있습니다.
VPS라는 명칭의 유래
2000년대 초반, 두 가지 흐름이 하나로 합쳐졌습니다. 하나는 x86 기반의 완전한 가상 머신으로, 게스트가 자체 커널을 부팅하는 방식입니다. 다른 하나는 운영체제 수준의 가상화로, 하나의 공유 Linux 커널을 분리된 환경으로 나누어 각 환경마다 고유한 root 사용자와 프로세스 테이블을 갖게 하는 방식입니다. Linux-VServer와 SWsoft의 Virtuozzo가 모두 2001년에 등장했으며, SWsoft는 2005년에 Virtuozzo의 일부를 오픈 소스인 OpenVZ로 공개했습니다. "virtual private server"라는 용어는 가상 사설망(virtual private network)과의 유추를 통해 이 계보에서 파생되었습니다.
Amazon은 이 임대 방식을 API 호출로 전환했습니다. 2006년 3월 14일에 S3가 출시되었고, 2006년 8월 25일에는 Xen 기반의 단일 인스턴스 유형으로 EC2가 제한적 공개 베타 서비스를 시작했습니다. 컴퓨팅 자원을 구매하는 행위는 서비스 업체와의 계약에서 1분 만에 응답을 받는 요청으로 변화했습니다.
두 흐름은 모두 살아남았으며, 이 구분은 여전히 임대한 서버로 무엇을 할 수 있는지를 결정합니다. KVM VPS는 자체 커널을 부팅하므로 커널 모듈을 로드하거나 심지어 VPS 내부에서 하이퍼바이저를 실행할 수도 있습니다. 반면 컨테이너 기반 플랜은 호스트 커널을 공유하므로 이러한 작업이 불가능합니다. 가격 페이지에 적힌 한 줄의 문구 뒤에는 60년의 역사가 담겨 있습니다. 그렇기 때문에 상품을 선택하기 전에 VPS, VM, VPC의 차이점을 이해하는 것이 중요합니다.
메인프레임에서 VPS로 넘어오며 변한 것과 변하지 않은 것
네 가지가 변했습니다. 기계가 당신의 건물 안에 있지 않습니다. 터미널은 가구의 일부가 아니라 프로그램이 되었습니다. 당신이 임대하는 단위는 타인의 운영체제에 있는 계정이 아니라, 자체 커널을 가진 온전한 컴퓨터입니다. 그리고 가격은 조달 절차를 거칠 필요 없이 카드 결제로 구매할 수 있을 만큼 충분히 낮아졌습니다.
메커니즘은 전혀 변하지 않았습니다.
- 당신의 ssh 세션은 시분할 터미널입니다. 당신은 로그인과 셸을 얻고, 스케줄러가 당신의 프로세스가 언제 실행될지 결정합니다.
- 격리는 여전히 하드웨어에 의해 강제됩니다. MMU와 프로세서의 권한 수준이 그 역할을 수행하며, 이는 1967년 CP-40이 필요로 했던 방식과 정확히 같습니다.
- 당신은 여전히 서비스국이 접속 시간에 대해 요금을 청구했던 방식처럼, 경과 시간에 따라 기계의 점유 지분에 대한 요금을 지불합니다.
- 당신은 여전히 다른 입주자의 존재를 느낍니다. 호스트가 과도하게 할당되면 당신의 게스트는 물리 CPU를 기다리게 되며, Linux는 그 대기 시간을 시끄러운 이웃으로 인한 CPU steal time으로 보고합니다.
마지막 지점은 전체 역사를 정직하게 요약한 것입니다. 기계를 공유하는 것은 거래입니다. 1961년에는 컴퓨터가 사람보다 비쌌기 때문에 이 거래가 수용되었고, 2026년에는 서버를 10퍼센트의 가동률로 운영하는 것은 돈을 태우는 것과 같기에 여전히 수용됩니다. 만약 당신이 그 거래의 운영자 측에 서고 싶다면, 직접 소유한 하드웨어에서 Proxmox를 운영하는 것이 하이퍼바이저와 운영자의 문제를 동시에 안겨줄 것입니다.
비율을 염두에 두십시오. CTSS는 1961년 달러로 수백만 달러의 비용이 들고 방 하나를 가득 채우는 기계에서 4명의 사용자를 서비스했습니다. 2026년 월 몇 달러 수준인 당신의 VPS는 Corbató 팀이 배급하던 컴퓨터보다 훨씬 뛰어난 컴퓨터이며, 당신은 그것을 독점적으로 사용합니다. 당신이 그것을 임대할 수 있는 이유는 65년 된 아이디어가 마침내 저렴한 하드웨어를 만났기 때문입니다. 그 위에 무엇을 올릴지 고민 중이라면, VPS가 실제로 제공하는 것부터 시작하여 사람들이 VPS에서 운영하는 것을 살펴보십시오.
FAQ
최초의 시분할 컴퓨터 시스템은 무엇입니까?
MIT 계산 센터의 Fernando Corbató 그룹이 구축한 CTSS(Compatible Time-Sharing System)입니다. 1961년 11월 IBM 709에서 처음 시연되었으며, 각 사용자를 별도의 테이프 드라이브로 스왑하는 방식으로 4명의 사용자를 지원했습니다. 전체 커뮤니티를 위한 최초의 시분할 서비스는 Dartmouth Time-Sharing System입니다. 1964년 5월 1일, John Kemeny와 한 학생 프로그래머가 2대의 터미널에서 동시에 BASIC 프로그램을 실행했고, 두 사람 모두 정확한 결과를 얻었습니다.
가상 머신은 정말 1960년대에 발명되었습니까?
그렇습니다. IBM의 Cambridge Scientific Center는 1967년 1월 CP-40을 운영 환경에 도입했습니다. 이 시스템은 각 사용자에게 CMS 운영 체제가 실행되는 완전한 가상 System/360 환경을 제공했습니다. 1968년에는 System/360-67에서 CP-67이 뒤를 이었고, 1972년 8월 2일 IBM은 VM/370을 발표했습니다. 이는 x86 하드웨어가 동일한 기능을 수행하기 수십 년 전부터 상용으로 판매된, 수정되지 않은 게스트 운영 체제를 실행하는 실제 하이퍼바이저였습니다.
메인프레임과 달리 x86은 왜 가상화가 어려웠습니까?
1974년 Popek과 Goldberg의 규칙에 따르면, 기계 상태를 읽거나 변경할 수 있는 모든 명령어는 게스트가 커널 모드 외부에서 실행할 때 트랩(trap)을 발생시켜야 합니다. x86은 이 규칙을 위반했습니다. Robin과 Irvine은 사용자 모드에서 트랩을 발생시키지 않고 조용히 실패하는 17개의 Pentium 명령어를 확인했습니다. 따라서 고전적인 트랩 앤 에뮬레이트(trap-and-emulate) 방식의 하이퍼바이저는 이를 감지할 수 없으며, popf가 그 대표적인 예입니다. VMware는 바이너리 변환으로, Xen은 반가상화(paravirtualisation)로 이를 우회했습니다. 이후 2005년 11월 Intel VT-x와 2006년 5월 AMD-V가 하이퍼바이저를 위한 하드웨어 모드를 추가하면서 해결되었습니다.
VPS를 임대하는 것은 시분할 계정을 가지는 것과 같습니까?
과금 모델과 격리 문제는 동일하지만, 단위가 다릅니다. 시분할 사용자는 다른 모든 사람과 공유하는 운영 체제의 계정을 할당받았으므로, 관리자는 컴퓨터 센터의 담당자였습니다. KVM VPS는 사용자에게 고유한 커널과 root 계정을 가진 가상 머신을 제공하므로, 관리자는 사용자 본인입니다. 컨테이너 기반 VPS는 호스트 커널을 공유하면서도 사용자 환경 내에서 root 권한을 제공하므로 그 중간 형태라고 볼 수 있습니다.