어원에 대하여

브라이언 W. 커니핸이 말하는 부트스트래핑

CPU는 컴퓨터에 파워가 켜졌을 때 영구 기억 장치에 저장된 약간의 명령어를 실행해서 작동을 시작하도록 구성되어 있다. 다음에는 그 명령어들이 디스크상의 알려진 위치, USB 메모리, 또는 네트워크 연결로부터 더 많은 명령어를 읽기에 충분한 코드를 포함하고 있는 작은 플래시 메모리에서 명령어를 읽고, 그 명령어는 최종적으로 유용한 작업을 하기에 충분한 코드가 로딩될 때까지 더욱더 많은 명령어를 읽는다. 이렇게 시작하는 과정은 원래 "자력으로 해내다(pulling oneself up by one's bootstraps)"라는 오래된 표현에서 나온 "부트스트래핑(bootstrapping)"이라고 불렸는데, 지금은 그냥 부팅(booting)이라고 한다.

  • 커니핸 교수의 Hello, Digital World - 126 ~ 127쪽에서 인용.

뮌하우젠 남작의 모험

한편 뮌하우젠 남작의 모험은 한국어로 번역되어 출판되었다.

  • "허풍선이 남작의 모험"이라는 제목이다.

책을 아직 읽고 있는 중인데 해당 장면은 아직 찾지 못했다. 대신 좀 다르지만 비슷한 느낌의 이야기는 하나 찾아냈다.

완성된 동아줄을 달의 한쪽 끝에 단단히 묶어 놓고서 밧줄의 다른 쪽 끝까지 미끄러져 내려갔습니다. 왼손으로 줄을 잡아 몸을 단단히 지탱하고, 오른손에 쥔 은도끼로 이제는 소용없어져 버린 위쪽 긴 줄을 잘라내서 아래쪽 끝에다 이어 붙였습니다. 그러곤 그 줄을 타고 또다시 얼마간 아래로 내려갔습니다.

  • 허풍선이 남작의 모험 1권 6장에서 인용.

밧줄을 타고 내려가는데 줄이 너무 짧아서 내려갈 수가 없자, 위쪽의 줄을 잘라 아래쪽에 붙이면서 내려갔다는 내용이다.

"클릭을 발명한 괴짜들"에 나온 뮌하우젠 남작과 부트스트래핑

처음 엥글바트의 머리에 떠오른 것은 남의 도움을 받지 않고 스스로 일을 시작하는 것을 뜻하는 '부트스트랩(bootstrap)'이라는 단어였다. 이 말은 영어 속담 "장화 끈을 잡고 자신을 끌어올리다(to pull oneself up by one's bootstraps)"에서 유래했다. 여기서 부트스트랩은 우리가 보통 말하는 구두끈이 아니라, 부츠를 신을 때 잡아당길 수 있도록 부츠의 목 옆에나 뒤에 고리처럼 붙여놓은 가죽 띠를 말한다. 그런데 생각해보면 도무지 말이 되지 않는다. 자기가 신고 있는 장화를 잡아당겨서 자신을 끌어 올리다니… 그럴 수밖에 없는 것이, 이 문장의 출처가 18세기의 황당무계한 이야기 책, [뮌히하우젠 남작의 모험(The Adventures of Baron Münchhausen)]이기 때문이다.

(중략)
부트스트랩이라는 말은 조금 역설적이고 자기 모순적인 의미를 지니고 있다. 어떤 것을 시작하려면 그 어떤 것이 약간 필요하다는 말이기 때문이다. 예전에 집집마다 마당에 있던 수동 펌프가 꼭 그랬다. 펌프라는 게 물을 퍼올리기 위한 것인데, 그걸 작동시키려면 먼저 그 안에 물을 조금 채워 넣어야 했다. 이런 물을 무리말로 마중물이라고 한다. 컴퓨터를 처음 켤 때 쓰는 '부트(boot)' 또는 '부팅' 이라는 말도 이 부트스트랩이 줄어서 된 말이다. 운영 프로그램이 돌아가는 환경을 만들기 위해서, 운영 프로그램의 한 조각으로 먼저 컴퓨터를 가동한다는 뜻이다.

  • "클릭을 발명한 괴짜들" 3장에서 인용.

"해커스"에 나온 부트스트래핑

프레드 무어와 고든 프렌치가 시작한 작은 모임은 상상을 초월하는 규모로 자라났다. 홈브루는 자신들의 힘으로 새로운 업계를 '부트스트랩'해나가는 하드웨어 해커 종족의 선봉대였다. 그들은 당연히 새로운 업계가 이전 업계와 다르리라 믿었다. 마이크로컴퓨터 업계는 해커 윤리가 지배하리라 ('부트스트랩'이라는 용어는 해커들이 사용하는 대표적인 새 기술 은어였다. 글자 그대로, 컴퓨터가 처음으로 켜졌을 때 혹은 부팅될 때 프로그램이 자신을 컴퓨터로 올리는 과정을 뜻했다. 프로그램 일부가 코드를 컴퓨터로 올리면 바로 그 코드가 컴퓨터를 돌려 나머지 코드를 가져온다. 자기 신발 끈을 당겨 자신을 끌어올리는 셈이었다. 바로 이것이 홈브루 사람들이 하려는 일이었다. 작은 컴퓨터 시스템 세계에 틈새를 만든 후 깊이깊이 파고들어 틈새를 동굴로, 즉 영구적인 정착지로 만든다).

  • 해커스 세상을 바꾼 컴퓨터 천재들 10장 '홈브루 컴퓨터 클럽'에서 인용.

"TCP/IP 완벽 가이드"에서 말하는 부트스트래핑

14장. 역순 주소 결정과 TCP/IP 역순 주소 결정 프로토콜

여기서 해결해야 할 문제를 컴퓨터 분야에서는 부트스트래핑이라고 부른다. 부트스트래핑이란 아무것도 없는 상태에서 어떤 것을 시작하는 것을 가리킨다. 겉으로 보기에 이것은 불가능한 것처럼 보인다. 왜냐하면 TCP/IP 통신에 필요한 IP 주소를 얻기 위해 TCP/IP를 사용하는 것이 모순이기 때문이다.

From: 한 권으로 읽는 컴퓨터 구조와 프로그래밍

초창기 프로그래머들은 불가능한 일을 해야만 했다. 맨 처음 컴퓨터가 만들어졌을 때는 어셈블러도 없었다. 그래서 개발자들은 어려운 방식, 즉 직접 손으로 모든 비트를 알아내는 방법으로 최초의 어셈블러를 작성해야 했다. 첫 번째 어셈블러는 아주 원시적이었지만 제대로 작동하는 어셈블러가 생겼기 때문에 이 어셈블러에서 작동하는 어셈블리 언어를 사용해 더 나은(더 많은 의사명령어와 기능을 제공하는) 어셈블러를 어셈블리 언어로 작성할 수 있었고, 개선된 의사명령어와 기능을 활용하는 어셈블리 언어로 다시 더 많은 기능을 제공하는 어셈블러를 만들 수 있었으며, 이런 식의 개선을 계속할 수 있었다.

부트스트랩bootstrap이라는 말이 그래서 생겨났다. 종종 이 말을 부트boot라고 줄여서 부르기도 한다. 컴퓨터를 부팅하는 과정은 롬 등에 들어 있는 작은 프로그램을 메모리로 읽어오는 것부터 시작한다. 이 프로그램은 필요한 초기화를 진행한 후 더 큰 프로그램을 (보통은 하드 디스크, USB 등 대용량 저장장치에서) 읽어오고, 이 프로그램은 더 큰 운영체제 등을 불러올 수 있다. 초기 컴퓨터에서는 사람이 직접 전면 패널의 스위치를 사용해 최초 부트스트랩 프로그램을 입력해야만 했다.

– 한 권으로 읽는 컴퓨터 구조와 프로그래밍. 8장. 320쪽.

1950년대 메인프레임 IBM 701과 관련된 글

기술 컴퓨팅국의 기계는 첫 고객에게 기계가 인도되기 약 6개월 전에 설치되었다. 그래서 고객 측 프로그래머들은 기계를 받기 전부터 701에 익숙해질 수 있었다. 701이 설치된 곳의 프로그래머 대부분은 IBM이 주관하는 프로그래밍 기본 과정을 수강했다(수백 명이 이 과정을 졸업했다). 그리고 경험 많고 능력 있는 프로그래머들에게는 기술 컴퓨팅국에 있는 컴퓨터로 직접 응용 프로그램을 개발해보라고 권장했다. 그렇게 하면 기계가 회사에 도착하자마자 바로 생산성을 발휘할 수 있을 터였다. 기술 컴퓨팅국의 직원들은 고객이 프로그램을 개발하고 디버깅할 수 있게 도왔다. 첫해에 고객 71곳을 위해 약 100개의 응용 프로그램이 개발되었다. 고객의 응용 프로그램뿐만 아니라 자체적으로도 30개가 넘는 "유틸리티"들을 개발했다. 펀치카드에 있는 프로그램을 메모리로 올려주는 "부트스트랩" 루틴이라든가, 카드나 자기 테이프에 있는 데이터를 전송하고 인쇄하는 루틴 등이 있었다.

미국에서 이제 처음 나타난 작은 프로그래밍 세상에서 IBM의 기술 컴퓨팅국은 중요한 구동력이었고 소속 직원들은 초기 소프트웨어 세계를 만들어갈 수 있는 좋은 위치에 있었다. 직원들 중에서 존 배커스와 에드거 커드는 후에 각각 포트란 프로그래밍 언어와 관계형 데이터베이스라는 선구 적인 작업을 했다.

– 소프트웨어는 어떻게 밥벌이가 되었나. 2장. 59쪽.

IBM 701은 1952년에 출시되었으므로, 1950년대에도 컴퓨터 관련 용어로 부트스트랩이 쓰였다는 것을 알 수 있다.

이 글의 흥미로운 점은 John Warner Backus, Edgar F. Codd 두 사람이 언급되었다는 것.

컨피그 우선 부트스트랩과 디스커버리 우선 부트스트랩

클라이언트 측에 부트스트랩 접근 방식 사용

예제 솔루션에서 모든 애플리케이션은 반드시 컨피규레이션 서버의 네트워크 위치를 가지고 있어야 한다. 서비스 디스커버리의 네트워크 위치도 속성으로 저장돼 있다. 여기서 흥미로운 문제에 직면한다. 마이크로서비스가 컨피그 서버의 네트워크 주소를 알게 해야 할지에 관한 문제가 그것이다. 이전 논의에서 모든 서비스의 네트워크 위치의 주 저장소는 서비스 디스커버리 서버라는 데 동의했다. 컨피규레이션 서버는 다른 마이크로서비스처럼 스프링 부트 애플리케이션이므로 이론상 스프링 클라우드 컨피그 서버로부터 데이터를 가져오는 다른 서비스의 자동화된 디스커버리 메커니즘을 사용하기 위해 자신 역시 유레카에 등록해야 한다. 이렇게 하려면 spring.cloud.config.url 속성을 사용하는 대신 bootstrap.yml에 서비스 디스커버리 속성을 설정한다.

이 두 가지 접근 방식 중 하나를 선택하는 것은 시스템 아키텍처를 디자인할 때 결정해야 할 사항 중 하나다. 이는 하나가 다른 것보다 더 나은 솔루션이라는 뜻이 아니다. Spring-cloud-config-client 아티팩트를 사용하는 애플리케이션의 기본 행동을 스프링 클라우드의 명명 규칙에 따라 컨피그 우선 부트스트랩(Config First Bootstrap)이라고 부른다. 컨피그 클라이언트가 시작할 때 컨피그 서버에 연결해 원격 속성을 사용해서 컨텍스트를 초기화한다. 이 방식은 이 장의 첫 예제에서 보여줬다. 두 번째 솔루션은 컨피그 서버가 서비스 디스커버리 서비스에 등록되고 모든 애플리케이션이 DiscoveryClient를 사용해 컨피그 서버를 찾는 것이다. 이 방식을 디스커버리 우선 부트스트랩 (Discovery First Bootstrap)이라고 한다.

– 마스터링 스프링 클라우드. 5장. 88쪽.

참고문헌

  • TCP/IP 완벽 가이드 / 찰스 M. 코지에록 저/강유, 김진혁, 민병호, 박선재 역 / 에이콘출판사 / 2007년 01월 25일 / 원제 : The TCP/IP Guide: A Comprehensive, Illustrated Internet Protocols Reference
  • 마스터링 스프링 클라우드 / 피요트르 민코프스키 저/김민석 역 / 위키북스 / 초판발행 2018년 11월 07일 / 원제: Mastering Spring Cloud
  • 소프트웨어는 어떻게 밥벌이가 되었나 / 마틴 캠벨-켈리 저/이재범 역 / 지식함지 / 초판 1쇄 2021년 06월 22일 / 원제: From Airline Reservations to Sonic the Hedgehog: A History of the Software Industry by Martin Campbell-Kelly
  • 커니핸 교수의 Hello, Digital World / 브라이언 W. 커니핸 저 / 하성창 역 / 제이펍 / 2017년 08월 08일 / 원제: Understanding the Digital World: What You Need to Know about Computers, the Internet, Privacy, and Security
  • 클릭을 발명한 괴짜들 / 강태훈 저 / 궁리출판 / 2005년 03월 15일
  • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 / 조너선 스타인하트 저/오현석 역 / 책만 / 2021년 04월 08일 초판 1쇄 / 원서 : The Secret Life of Programs: Understand Computers – Craft Better Code
  • 해커스 세상을 바꾼 컴퓨터 천재들 [무삭제판] / 스티븐 레비 저 / 박재호, 이혜영 공역 / 한빛미디어 / 2013년 08월 20일
  • 허풍선이 남작의 모험 / 루돌프 에리히 라스페 저 / 이매진 역 / 황금가지 / 2018년 10월 19일