부트 스트랩이란 무엇입니까?


636

응용 프로그램 개발에 대한 논의에서 "부트 스트래핑"이 계속 나타납니다. 널리 퍼져있는 것처럼 보이지만 실제로 부트 스트랩이 무엇인지에 대한 잘못된 설명조차 나오지 않았습니다. 오히려 모든 사람들이 그것이 의미하는 바를 알고있는 것처럼 보입니다. 그래도 난 아니야 내가 알 수 있듯이 시작시 응용 프로그램에 필요한 초기화 작업과 관련이 있지만 완전히 틀릴 수 있습니다. 누구 든지이 아이디어를 이해하도록 도울 수 있습니까?


8
- 위키 백과에 따르면, 관련하여 단어 "부트 스트랩"의 네 가지 용도 컴퓨팅에있다 en.wikipedia.org/wiki/Bootstrapping#Computing
토마스 오웬스

1
방금 HeDinges 게시물을 업데이트했습니다. Alex가 어떤 형태의 부트 스트랩을보고 있는지에 대한 설명을 찾고있었습니다.
Thomas Owens

소프트웨어 개발에서 이는보다 복잡하고 빠른 프로그래밍 환경의 개발을 의미합니다.
Lucky

.NET 소프트웨어 개발에서 필자는 이해하거나 등록하거나로드해야하는 서비스와 같이 응용 프로그램이 실행될 환경의 설정을 말합니다.
Neo

답변:


318

"부트 스트랩 (bootstrapping)"은 "자신의 부트 스트랩으로 자신을 끌어 당기는"이라는 용어에서 비롯됩니다. Wikipedia 에서 얻을 수있는 많은 것들 .

컴퓨팅에서 부트 스트랩 로더는 기계가 시작될 때 실행되는 첫 번째 코드이며 나머지 운영 체제를로드합니다. 현대 컴퓨터에서는 ROM에 저장되어 있지만 PDP-11의 부트 스트랩 프로세스를 기억합니다. 여기서 전면 패널 스위치를 통해 비트를 찔러 특정 디스크 세그먼트를 메모리에로드 한 다음 실행합니다. 말할 필요도없이, 부트 스트랩 로더는 일반적으로 매우 작습니다.

"부트 스트래핑"은 자체 또는보다 정확하게는 이전 버전을 사용하여 시스템을 구축하는 용어로도 사용됩니다. 예를 들어, ANTLR 버전 3은 ANTLR 버전 2에서 개발 된 파서를 사용하여 작성됩니다.


8
와우, 나는 PDP의 전면 패널 스위치에 대해 거의 잊었다. 추억 주셔서 감사합니다 !!
Jeff Hornby

7
내가 틀렸다면 나를 바로 잡으십시오. 이 답변은 부트 스트랩 핑에 대한 기술적 세부 사항을 설명하지만 질문의 맥락에서 원래의 질문에 대답하지 않았습니다.
jayscript

5
@jayscript-이 질문에 어떻게 대답 하시겠습니까? 관용구는 관용적 표현이며, 관용구는 일반적으로 관용구를 사용하는 사회 집단에 의해 잘 이해되고 있으며 그 외부에서는 이해할 수 없습니다. 나는 관용구를 번역하려는 몇 가지 방법 중 하나라고 생각하는 예를 들어 대답하려고 노력했다.

3
@ kdgregory 나는 대답을 찾기 위해 여기에 왔을 때이 질문에 대답 할 수 없었습니다. 부트 스트래핑 자체라는 단어는 느슨하게 관련된 여러 가지 다른 기술 개념에 대한 은유이며 혼란의 원인이 될 수 있습니다.
jayscript

2
PDP 11 ?! 나는 우리가 여기에 노인이 있다는 것을 몰랐다. : P
John Red

255

부트 스트랩의 예는 일부 웹 프레임 워크에 있습니다. index.php (부트 래퍼)를 호출 한 다음 프레임 워크 헬퍼, 모델, 구성을로드 한 다음 컨트롤러를로드하고 제어를 전달합니다.

보시다시피, 큰 프로세스를 시작하는 간단한 파일입니다.


50
웹 개발 측면에서 (원래 질문의 맥락이었습니다) 이것이 최선의 대답이라고 생각합니다.
cartbeforehorse 18시 52 분

Laravel과 관련이있는 것처럼 보이지만 Laravel은 2009 년에도 아직 존재하지 않았습니다.
LppEdd

@Wajdan Ali 아니오, 이것은 받아 들여질만한 대답이 아닙니다. 이것은 부트 스트래핑이라는 용어의 새로운 사용에 대한 미시적 견해로, 일부는 실제로 훨씬 더 이른 용어의 오용이라고 주장합니다. "부트 스트랩"은 부트 스트랩으로 자신을 끌어 올리는 것, 즉 무언가의 힘을 사용하여 자신을 활용하는 것을 말합니다. "컴퓨터 부팅"이라는 용어의 기원입니다. 웹 개발에서 현재의 팝 사용은 단어의 유일한 (또는 원래) 사용이 아닙니다. 다른 많은 답변들이 이것을 적절하게 해결합니다.
Kallaste

3
@Kallaste, 좋습니다. 그러나 이것은 제가 찾은 답변이며, 원래 질문의 맥락 ( "응용 프로그램 개발")을 바탕으로 이미 지적한 것 중 가장 적절한 답변 인 것 같습니다.
bynary

@ aaron.bynum, 아니요. 주어진 답변은 웹 개발 프레임 워크에 적용되며 응용 프로그램 개발에는 적용되지 않습니다. 답은 실제로 부트 스트랩이 무엇이고 어디에서 왔는지에 대한 일반적인 오해에 의존하기 때문에 오도되고 결함이 있습니다. 잘못된 정보가 퍼지고 있습니다. 그것이 당신이 여기에 왔으면 좋았지 만, 전체적으로 올바른 정보는 가치가 있습니다. 따라서 내 의견.
Kallaste

51

부트 스트랩 에 관한 Wikipedia 기사를 참조하십시오 .

Computing의 의미를 설명하는 섹션과 링크가 있습니다 . 이 분야에서 네 가지 용도로 사용됩니다.

여기 인용문이 있지만 자세한 설명과 대체 의미에 대해서는 위의 링크를 참조하십시오.

"... 간단한 컴퓨터 프로그램이보다 복잡한 프로그램 시스템을 활성화시키는 기술입니다."

"부트 스트래핑이라는 용어의 다른 용도는 컴파일러를 사용하여 자체 언어를 컴파일하는 것입니다. 먼저 새로운 언어로 작성된 새로운 컴파일러의 더 많은 프로그램을 컴파일하기 위해 기존 언어로 새로운 프로그래밍 언어의 컴파일러의 작은 부분을 작성합니다."


6
독자들이 답변을 얻기 위해 여러 웹 사이트를 순회 할 필요가 없도록 인용문이나 문구를 말씀해 주시겠습니까?
Kurt W. Leucht

5
"소프트웨어 산업 : 표준 이하의 제품을 합법적으로 판매하고 업그레이드 비용을 청구하는 독특한 사업."
Stein Åsmul

컴파일러에서 Bootstrapping에 대한 답변을 찾고있었습니다 . 도움이되었습니다.
Siraj Alam

48

"부트 스트래핑 (bootstrapping)"이라는 용어는 일반적으로 시스템 자체가 닭과 달걀 문제에 의존하기 시작하는 상황에 적용됩니다.

예를 들어 :

  • C로 작성된 C 컴파일러는 어떻게 컴파일합니까?
  • 아직 OS를 실행하고 있지 않은 경우 어떻게 OS 초기화 프로세스를 시작합니까?
  • 클라이언트가 시스템의 새로운 피어를 찾기 위해 현재 알려진 피어에 의존하는 분산 (피어 투 피어) 시스템을 어떻게 시작합니까?

이 경우 부트 스트래핑은 일반적으로 외부 엔티티의 도움으로 순환 종속성을 깨는 방법을 의미합니다.

  • 다른 C 컴파일러를 사용하여 자체 컴파일러를 컴파일 (부트 스트랩) 한 다음이를 사용하여 자체 컴파일 할 수 있습니다.
  • OS에서 제공하는 기능에 의존하지 않고 초기 프로세스를 설정하는 별도의 코드를 사용합니다.
  • 하드 코드 된 초기 피어 목록 또는 피어 목록을 제공하는 하드 코드 된 추적기 URL을 사용합니다.

기타


4
이것은 실제로 질문의 핵심에 도달합니다. 다른 두 가지 대답은 완전히 그리워하십시오.
Arturo Hernandez

1
이 설명은 일반적으로 소프트웨어 개발과 가장 관련이 있다고 생각합니다. 정말 나를 위해 개념을 집으로 가져
밴스 팔라시오에게

23

응용 프로그램 개발과 관련하여 "부트 스트래핑"은 일반적으로 모듈 식 및 / 또는 자동 업데이트 가능한 소프트웨어에 대해 이야기 할 때 나타납니다.

사용자는 필요하지 않은 기능을 포함하여 전체 앱을 다운로드하고 업데이트가있을 때마다 다시 다운로드하고 수동으로 업데이트하는 대신 작은 "부트 스트랩"실행 파일 만 다운로드하여 시작합니다. 사용자가 필요로하는 응용 프로그램의 일부 또한 부트 스트랩 구성 요소는 업데이트를 찾아 시작할 때마다 설치할 수 있습니다.


4
나는 그 특정한 맥락에서“부트 스트래핑”이라는 용어를들은 적이 없다.
Bombe

PHP 애플리케이션과 관련하여 일반적으로 사용됩니다 (예 : Composer를 사용하여이를 수행)
AturSams

15

알렉스, 부팅 할 때 컴퓨터가하는 일과 거의 비슷합니다. ( '부팅'은 실제로 부트 스트랩이라는 단어에서 나옵니다)

처음에는 BIOS의 작은 프로그램이 실행됩니다. 여기에는 더 크고 복잡한 프로그램을로드하고 실행하기에 충분한 머신 코드가 포함됩니다.

이 두 번째 프로그램은 NTLDR (Windows) 또는 LILO (Linux)와 같은 것으로 나머지 운영 체제를 실행하고로드 한 다음 실행할 수 있습니다.


2
비록 모든 해답을 읽었지만 (이 용어에 대해서는 잘 투표했고, 일부 투표했습니다.)이 간단한 "부팅"(일명 "부트 스트래핑") 비교를 통해 다른 모든 사람들이 점을 연결하기 위해 읽을 수있는 최고의 동기를 얻었습니다. 어리석은 것은 5 살짜리에게 복잡한 주제를 설명하는 것과 같았습니다. 감사.
Chris22

14

완전성을 위해 리샘플링 / 시뮬레이션을 사용하여 표본에서 모집단 속성을 추론하는 통계에서 다소 중요하고 비교적 새로운 방법입니다. 부트 스트래핑 (통계)에 관한Wikipedia 기사가 있습니다.


1
비교적 새로운? 그것은 적어도 15 년 전에 나의 통계 교육의 일부였습니다.
Toon Krijthe

6
이것이 내가 '상대적으로'말한 이유입니다. Efron의 초기 기사는 1960 년대의 견고성 문헌의 시작과는 반대로 1980 년대 초의 기사입니다.
Dirk Eddelbuettel

4

사전 의미를 부여하는 부팅은 최소 리소스로 시작하는 것입니다. OS 컨텍스트에서 POST (Power On Self Test)가 CPU를 깨우기 위해 안전하다고 판단하면 OS를 신속하게로드 할 수 있어야합니다. 부팅 스트랩 코드는 BIOS에서 실행됩니다. BIOS는 작은 크기의 ROM입니다. 일반적으로 이것은 운영 체제를 RAM에로드하는 명령 세트로의 점프 명령입니다. 점프 대상은 하드 디스크의 부트 섹터입니다. 바이오스 프로그램이 확인되면 저장된 OS의 시작 주소를 포함하는 유효한 부팅 섹터, 즉 유효한 MBR (마스터 부팅 레코드)인지 여부입니다. 유효한 MBR이면 OS가 OS의 메모리 (RAM)로 복사되어 메모리 및 프로세스 관리를 처리합니다.



2

부트 스트랩은 강화 학습 과 관련 하여 소프트웨어 개발 (예 : kdgregory 등의 대부분의 답변 ) 및 Dirk Eddelbuettel에서 논의한 통계에서의 사용과 더불어 개발자에게도 유용 할 수있는 또 다른 의미를 갖습니다 .

에서 서튼과 바토 :

Widrow, Gupta 및 Maitra (1973)는 Widrow and Hoff (1960)의 LMS (Least-Mean-Square) 알고리즘을 수정하여 교육 예제 대신 성공 및 실패 신호에서 학습 할 수있는 강화 학습 규칙을 생성했습니다. 그들은 이런 형태의 학습을“ 선택적 부트 스트랩 적응 ”이라고하며“교사와의 학습”대신“비평가와의 학습”이라고 설명했다. 그들은이 규칙을 분석하고 블랙 잭 연주법을 배울 수있었습니다. 이것은 Widrow의 강화 학습에 대한 격리 된 계획으로, 감독 학습에 대한 기여는 훨씬 더 영향력이있었습니다.

이 책은 목표 값이 이전 근사를 기반으로 부트 스트랩 방법을 기반으로하는 다양한 강화 알고리즘을 설명합니다.

마지막으로 DP [Dynamic Programming] 방법의 마지막 특수 속성 중 하나에 주목합니다. 그들 모두는 후속 상태 값의 추정치에 기초하여 상태 값의 추정치를 갱신한다. 즉, 다른 추정치에 따라 추정치를 갱신합니다. 우리는이 일반적인 아이디어를 부트 스트랩 이라고 부릅니다 . 많은 강화 학습 방법은 부트 스트랩을 수행하지만 DP가 요구하는 완전하고 정확한 환경 모델을 필요로하지 않는 부트 스트랩을 수행합니다.

이것은 부트 스트랩의 위키 백과 페이지 에 언급 된 부트 스트랩 집계 및 인텔리전스 폭발과 다릅니다 .


1

대중적인 Twitter 부트 스트랩을 사용하는 것과 관련 하여이 유형의 부트 스트랩은 모듈 식 구성 요소가 필요할 때까지 참조하거나 참조 할 때까지 웹 응용 프로그램이 웹 응용 프로그램에 모듈 식 구성 요소를 통합하지 않고 모듈 식 구성 요소를 웹 응용 프로그램에 통합하는 동작이라고 생각합니다 .

개발자는 CSS 트위터 부트 스트랩 테마의 기본 복사본을 웹 응용 프로그램에로드 (참조)함으로써 완벽하게 통합 할 수 있습니다. 부 올라! 그런 다음 이러한 변경 사항 중 일부를 재정의해야 할 수도 있지만 리소스 / 구성 요소를 건드리지 않고 완전히 재사용 할 수있는 방식으로 그렇게 할 수 있습니다.

동일한 개념은 Web Devs가 jQuery API 등을 구현하는 방법이지만 실제로 Devs는 부트 스트랩 자체로 표현하지 않습니다. 그것이하는 것은 유연성과 재사용 성을 향상시키면서 앱의 서로 다른 컴포넌트 / 리소스를 격리하는 것이 동일한 서버 또는 CDN에 자유롭게 상주 할 수있게하는 것입니다.

참고 : 부트 스트랩을 계산할 때 MBR을 처리하고 UNIX에서는 OS를 RAM으로로드하는 ROM의 작은 프로그램 인 특수 부트 로더 또는 관리자가 필요합니다. 그것에 대해 생각하면 부트 스트랩 로더가 MBR을 확인 하고이 테이블을 기반으로 OS를로드하는 동작에서 동일한 개념이 발생합니다.


0

부팅 프로그램을 시작하기 위해 스위치를 뒤집은 세대에 속합니다. 1980 년대 초, ECIL (Electronics Corporation of India Ltd)이 개발 한 Micro-78이라는 마이크로 컴퓨터를 연구했습니다. Altair 8800의 일종의 복제품이었습니다. 토글 스위치를 사용하여 작은 부팅 프로그램을 입력하고 버튼을 눌러 실행하면 어떤 일이 발생하는지 분명히 기억합니다. 프로그램은 플로피 디스크의 첫 번째 트랙에 포함 된 두 번째 부팅 프로그램을 읽고 두 번째 부팅 프로그램이 디스크 운영 체제를로드하기 위해 실행을 시작하는 방식으로 자체적으로 덮어 씁니다. "부트 스트랩"이라는 용어는 첫 번째 부트 프로그램이 두 번째 부트 프로그램의 추가 기능으로 "풀업"되는 방식으로 두 번째 부트 프로그램을 읽고 덮어 쓰는이 프로세스를 의미한다고 생각합니다.


-3

프로그래밍 세계에서 겸손한 초보자로서,이 단어가 다른 곳에서 약간 다른 방식으로 많이 사용 된 것을 본 후 여기에있는 모든 대답을 훑어 보면서 Bootstrapping의 Wikipedia 페이지를 읽었습니다. 처음 에는이 단어의 사용상의 차이점 을 이해하는 것이 유익합니다 . 극히 드문 경우 일 수 있을까요 ... 그래도 Wikipedia에서 담당자를 가져올 수 있습니까?

나에게 그것은 가능한 모든 의미가있는 것 같습니다 : 가능한 한 간단한 것으로 시작 Thing1, Thing2와 약간 더 복잡한 것을 만드십시오. 이제 Thing2를 사용하여 할 수있는 것보다 더 효율적이고 신속하게 어떤 종류의 작업을 수행 할 수 있습니다 원래 Thing1을 사용했습니다. 그런 다음 Thing2에서 Thing 3 ad infinitum까지 반복하십시오.

나는 생물학적 진화와 '추상 계층 (Layers of Abstraction)'(나와 같은 초보자, 아헴, 위키피디아, 기침)과 밀접한 관련이있는 것으로 본다. 스위치, 머신 코드, 어셈블리, C, 파이썬, AI를 갖춘 1940 년대 컴퓨터의 진화 "% 4 ^ % 저녁 식사를 내 기본 & ^ $ % 요구 사항으로 만들고 바닥을 청소하십시오. % $ £"@ : ~ "술 취한 영어 또는 아마존 부족 방언으로 '예외 없음' '(초보자에게는 다시 ... 당신은 짐작했습니다)-단순한 무지로 인해 많은 링크가 누락되었습니다.

그런 다음 특정 소프트웨어에서 의미 : 의미 1 : Thing1은 최신 버전의 Thing2를로드하는 데 사용됩니다 (물론 Thing2가 Thing2보다 크면 Thing2가 Thing1보다 커지기 때문입니다).

의미 2 : Thing1은 Thing2의 상위 언어를 약간 쓰는 데 사용되는 print ( "Hello,", user.name)보다 1001011100 .... 011001에 가까운 하위 언어입니다. Thing2의이 작은 비트는 Thing2 자체를 베이비 어휘 수준에서 성인 어휘 수준으로 확장하는 데 사용됩니다 (Thing2는 자체 버전의 아기 버전에 의해 처리되기 시작하거나 올바른 기술 용어 '컴파일'을 사용합니다 (영리한 아기입니다)) 그 자체는 물론 Thing1에 의해서만 컴파일 될 수 있고, 존재하기 전에 존재하지 않을 수 있습니다!), Thing2의 하위 버전은 Thing2의 Surly Teenager 버전을 컴파일합니다.이 시점에서 프로그래밍 커뮤니티는 Surly Teenager의 '문제'를 결정합니다 ( 소프트웨어 용어와 은유 용어!)는 장기적으로 받아 들일 수있는 충분한 시간을 소비 할 가치가 있습니다.또는 그들을 포기하기 위해 (여기서 비유 할 곳이 확실하지 않음)

그렇다면, Thing2는 어린 시절부터 성인까지 '부트 스트랩'된 것 같습니다 (아마도 그 아이는 그 남자의 아버지입니다). .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.