도구스개발

B-트리 삽입·분할 계산기

차수 m인 B-트리에 키를 차례로 넣으며 노드가 가득 찰 때 가운데 키를 부모로 올려 보내는 분할 과정을 단계별로 보여 줍니다. 트리가 뿌리 분할에서만 자라 모든 잎의 깊이가 같아지는 것을 직접 확인할 수 있습니다.

키 3개 · 자식 4개까지

0이면 전부 넣습니다

80개까지 · 같은 키는 한 번만 들어갑니다

트리 높이

2층

노드 5개 · 키 12개 · 갈라진 횟수 3회 (그중 뿌리 1회)

61020
135
7
1217
253040

위가 뿌리입니다. 파란 테두리가 안쪽 노드, 회색이 잎입니다. 방금 넣은 키를 진하게 칠했습니다

높이2
노드 수5
키 수12
노드당 키 개수 규칙1 ~ 3
채워진 비율80%
모든 잎의 깊이가 같은가
키 개수 규칙을 지키는가
중위 순회가 오름차순인가
넣은 키올라간 키왼쪽오른쪽높이
6105 620한 층 자람
172012 1730그대로
363 57그대로

가운데 키가 부모로 올라가며 노드가 둘로 나뉩니다

계산 근거차수 m = 4 · 노드당 키 1 ~ 3개 · 자식 최대 4중위 순회: 1 3 5 6 7 10 12 17 20 25 30 40키는 언제나 잎에 넣고, 넘치면 가운데 키를 부모로 올려 보내며 둘로 갈라집니다. 가운데 키는 왼쪽에도 오른쪽에도 남지 않고 부모에서 두 자식을 가르는 칸막이가 됩니다.
트리가 깊어지는 것은 뿌리가 갈라질 때뿐입니다. 지금까지 1번 그런 일이 있었고, 각각 6을(를) 넣을 때였습니다. 그때는 모든 잎이 한꺼번에 한 칸씩 깊어지므로 잎의 깊이가 언제나 같습니다. 어느 키를 찾든 읽는 블록 수가 같다는 뜻이고, 디스크 인덱스가 이 자료구조를 쓰는 이유입니다. «몇 개까지 넣을지»를 하나씩 올려 보면 높이가 언제 늘어나는지 보입니다.
오름차순으로 넣어도 한쪽으로 기울지 않습니다. 이진 탐색 트리는 정렬된 키를 차례로 넣으면 한 줄로 늘어져 높이가 키 개수만큼 되어 버리지만, B-트리는 넘칠 때마다 갈라져 균형이 저절로 유지됩니다. 키 칸에 «1 2 3 4 5 6 7 8 9 10»을 넣어 보면 확인할 수 있습니다.
B+트리는 값이 잎에만 있습니다. 실제 데이터베이스 인덱스는 거의 B+트리인데, 위 층이 길잡이 키만 갖고 있어 한 블록에 키를 더 많이 담을 수 있어 높이가 낮아지고, 잎끼리 옆으로 이어져 있어 범위 훑기가 빠르기 때문입니다. 여기서 다루는 것은 값이 모든 층에 있는 원래의 B-트리입니다.
차수를 키우면 트리가 낮아지는 대신 노드 하나가 커집니다. 디스크에서는 블록 하나를 읽는 값이 크고 그 안에서 키를 찾는 값은 거의 공짜라, 노드 하나를 블록 크기에 맞추고 차수를 수백까지 올립니다. 그러면 수백만 건짜리 인덱스도 높이가 서너 층에 그칩니다. 위에서 차수를 3에서 8로 올려 보면 같은 키로도 층수와 갈라진 횟수가 줄어듭니다.

사용 방법

  1. 1차수 m을 정합니다. 노드 하나에 키가 최대 m−1개, 자식이 최대 m개 들어갑니다.
  2. 2넣을 키를 쉼표나 공백으로 구분해 적습니다.
  3. 3«몇 개까지 넣을지»를 1부터 하나씩 올리며 트리가 자라는 과정을 봅니다.
  4. 4아래 «갈라진 자리» 표에서 어느 키를 넣을 때 무엇이 위로 올라갔는지 확인합니다.
  5. 5«1 2 3 4 5 …»처럼 정렬된 키를 넣어도 트리가 기울지 않는 것을 확인해 보십시오.

자주 묻는 질문

트리가 깊어지는 것이 뿌리가 갈라질 때뿐이기 때문입니다. 키는 언제나 잎에 들어가고, 잎이 넘치면 가운데 키를 부모로 올려 보내며 둘로 갈라집니다. 이것이 위로 번져 뿌리까지 넘치면 그때 새 뿌리가 생기는데, 그러면 모든 잎이 한꺼번에 한 칸씩 깊어집니다. 그래서 어느 키를 찾든 읽는 블록 수가 같습니다.

어느 쪽으로도 가지 않고 부모로 올라갑니다. 부모에서 두 자식을 가르는 칸막이 노릇을 하기 때문입니다. 키가 m−1개인 노드가 하나 더 받아 m개가 되면 가운데 하나를 빼고 남은 m−1개가 절반씩 나뉘며, 양쪽 모두 최소 키 개수 ⌈m/2⌉−1을 채웁니다.

디스크 블록 하나에 노드가 딱 들어가도록 정합니다. 디스크에서는 블록 하나를 읽는 값이 크고 그 안에서 키를 찾는 값은 거의 공짜라, 노드를 블록 크기에 맞추고 차수를 수백까지 올립니다. 그러면 수백만 건짜리 인덱스도 높이가 서너 층에 그칩니다. 이 계산기는 눈으로 따라갈 수 있도록 3~8까지만 다룹니다.

균형이 저절로 유지되고, 노드 하나에 키가 여러 개 들어갑니다. 이진 탐색 트리는 정렬된 키를 차례로 넣으면 한 줄로 늘어져 높이가 키 개수만큼 되어 버리지만, B-트리는 넘칠 때마다 갈라져 높이가 로그로 유지됩니다. 이 계산기에 «1 2 3 4 5 …»를 넣어 확인해 보십시오.

B+트리는 값이 잎에만 있고 위 층은 길잡이 키만 갖습니다. 위 층에 값이 없어 한 블록에 키를 더 많이 담을 수 있어 높이가 낮아지고, 잎끼리 옆으로 이어져 있어 범위 훑기가 빠릅니다. 실제 데이터베이스 인덱스는 거의 B+트리이며, 이 계산기가 다루는 것은 값이 모든 층에 있는 원래의 B-트리입니다.

결과 트리가 조금 다를 수 있습니다. 이 계산기는 먼저 잎에 넣고 넘치면 위로 올려 보내는 방식을 쓰는데, 내려가는 길에 가득 찬 노드를 미리 갈라 두는 방식(CLRS)도 널리 쓰입니다. 어느 쪽이든 «모든 잎의 깊이가 같다», «키 개수가 ⌈m/2⌉−1 이상 m−1 이하다», «중위 순회가 정렬 순서다»라는 세 조건은 똑같이 지켜집니다.

두 번째부터는 넣지 않고 걸러 냅니다. 결과 표에 걸러진 키를 따로 보여 주며, 실제 인덱스에서는 중복 키를 허용하는 구현도 있고 금지하는 구현도 있습니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어지며 입력한 키는 이 기기에만 남습니다.

알아두면 좋은 점

  • 삭제는 다루지 않습니다. 삭제는 키가 최소 개수 아래로 내려갈 때 형제에게서 빌리거나 합치는 과정이 따로 있어 훨씬 복잡합니다.
  • 차수는 3~8, 키는 80개까지 다룹니다. 그보다 크면 그림이 화면을 넘어갑니다.
  • 그림은 층별로 노드를 늘어놓고 같은 부모를 둔 노드끼리 붙여 놓은 것입니다. 부모와 자식을 잇는 선은 그리지 않습니다.
  • 여기서 말하는 차수 m은 «자식 수의 최댓값»입니다. 자료에 따라 최소 자식 수나 키 개수로 차수를 세기도 하므로 다른 설명과 견줄 때 확인해야 합니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.