Booil Jung

R-tree

현대 정보화 사회에서 데이터의 양은 기하급수적으로 증가하고 있으며, 그중 상당수는 위치 정보를 포함하는 공간 데이터(spatial data)의 형태를 띤다. 지리 정보 시스템(GIS)에서 사용되는 지도 데이터, 컴퓨터 지원 설계(CAD)의 부품 모델, 자율주행 자동차의 센서 데이터, 멀티미디어 데이터베이스의 이미지 특징 벡터 등은 모두 다차원 공간에 존재하는 객체들이다.1 이러한 대용량 공간 데이터를 효율적으로 저장, 관리하고 신속하게 검색하는 기술은 현대 데이터베이스 시스템의 핵심적인 요구사항으로 자리 잡았다.

전통적인 데이터베이스 인덱싱 기술은 주로 B-트리(B-tree)와 그 변형들에 기반을 두어왔다. B-트리는 1차원의 정렬 가능한 데이터(예: 정수, 문자열)에 대해 로그 시간 복잡도의 검색 성능을 보장하는 매우 효율적인 자료구조이다.3 그러나 B-트리의 핵심 원리인 ‘키 값의 선형적 순서(linear order)’는 다차원 공간 데이터에 직접 적용될 수 없다는 근본적인 한계를 가진다. 예를 들어, 2차원 좌표

$(x, y)$는 명확한 선형 순서를 정의하기 어렵다. 좌표 $(2, 5)$가 $(5, 2)$보다 ‘큰지’ 혹은 ‘작은지’를 일관되게 결정할 기준이 없기 때문이다.5 이러한 한계로 인해 B-트리를 다차원 데이터에 적용하려는 시도는 공간 채움 곡선(space-filling curve)을 이용해 다차원 데이터를 1차원으로 변환하는 등 간접적인 방법에 의존해야 했으며, 이는 데이터의 공간적 근접성(spatial proximity)을 왜곡시켜 검색 효율을 저하시키는 문제를 야기했다.

이러한 배경 속에서 1984년 안토닌 구트만(Antonin Guttman)은 B-트리의 개념을 다차원 공간으로 자연스럽게 확장한 R-트리(R-tree)를 제안하며 공간 인덱싱 분야에 새로운 지평을 열었다.6 R-트리의 ‘R’은 사각형(Rectangle)을 의미하며, 그 이름에서 알 수 있듯이 점, 선, 다각형과 같은 복잡한 형태의 공간 객체를 그것을 감싸는 가장 작은 축-평행 사각형, 즉 최소 경계 사각형(Minimum Bounding Rectangle, MBR)으로 근사하여 표현한다.7 R-트리는 이러한 MBR들을 계층적으로 그룹화하여 B-트리와 유사한 높이 균형 트리(height-balanced tree) 구조를 형성한다.7 이 구조는 기존 인덱싱 패러다임의 근본적인 전환을 의미한다. ‘값의 정렬’에 기반한 B-트리와 달리, R-트리는 ‘공간적 포함 관계(spatial containment)’라는 새로운 원리를 도입했다. 상위 노드의 MBR은 그 자식 노드들의 모든 MBR을 완전히 포함하며, 이러한 계층적 포함 관계가 탐색의 기본 원리가 된다. 이로 인해 탐색, 삽입, 삭제 등 모든 연산의 특성과 복잡성이 B-트리와는 근본적으로 달라지게 되었다. 특히, MBR 간의 ‘중첩(overlap)’ 허용은 탐색 시 단일 경로를 보장할 수 없게 만드는 원인이자, R-트리 연구의 가장 핵심적인 과제가 되었다.

본 보고서는 공간 데이터베이스의 핵심 인덱싱 구조인 R-트리에 대한 포괄적이고 심도 있는 고찰을 목적으로 한다. 먼저 R-트리의 근간을 이루는 MBR과 계층적 균형 트리 구조를 상세히 설명하고, B-트리와의 구조적 차이점을 명확히 분석한다. 이어서 범위 질의, 최근접 이웃 질의를 포함한 탐색 연산과 삽입, 삭제 연산의 알고리즘을 단계별로 심층 분석한다. R-트리 성능의 핵심인 노드 분할 전략에 대해서는 선형 및 이차 알고리즘을 중심으로 원리와 성능 트레이드오프를 비교 고찰한다. 나아가, 원본 R-트리의 한계를 극복하기 위해 등장한 주요 변형들, 즉 R+-트리, R*-트리, 힐베르트 R-트리의 진화 과정을 추적하며 각 구조의 특징과 장단점을 규명한다. 또한, 쿼드트리(Quadtree), $k$-d 트리(k-d tree)와 같은 다른 주요 공간 인덱싱 구조와의 비교를 통해 R-트리의 상대적 위치와 유용성을 평가한다. 마지막으로, R-트리가 직면한 ‘차원의 저주’ 문제, 다중 사용자 환경을 위한 동시성 제어 기법, 그리고 학습 기반 인덱싱과 같은 최신 연구 동향까지 아우름으로써, R-트리의 과거와 현재, 그리고 미래를 조망하는 통합적인 시각을 제공하고자 한다.

R-트리는 다차원 공간 데이터를 효율적으로 인덱싱하기 위해 설계된 계층적 자료구조이다. 그 구조적 특성은 B-트리의 장점을 계승하면서도 다차원 데이터의 고유한 성질을 처리하기 위한 독창적인 개념들을 포함한다.

R-트리의 가장 근본적인 구성 요소는 최소 경계 사각형(Minimum Bounding Rectangle, MBR)이다.8 MBR은 임의의 형태를 가진 n$-차원 공간 객체(예: 점, 선, 다각형)를 포함하는, 각 축에 평행한 가장 작은 $n$-차원 직사각형(hyperrectangle)으로 정의된다.10 복잡한 기하학적 연산을 단순한 사각형 간의 연산으로 대체함으로써, R-트리는 계산 비용을 획기적으로 줄이고 인덱싱 과정을 단순화한다.

R-트리 내에서 MBR은 두 가지 형태로 존재한다.

  1. 객체 MBR (Object MBR): 리프 노드(leaf node)에 저장되며, 실제 데이터 객체(예: 지도 위의 공원, CAD 도면의 부품) 하나를 직접 감싸는 MBR이다. 리프 노드의 각 엔트리는 이 객체 MBR과 해당 객체가 저장된 위치를 가리키는 포인터(tuple-identifier)로 구성된다.9
  2. 디렉터리 MBR (Directory MBR): 비-리프 노드(non-leaf node) 또는 내부 노드(internal node)에 저장된다. 이 MBR은 해당 노드의 자식 노드에 포함된 모든 MBR들을 완전히 포함하는 더 큰 MBR이다. 비-리프 노드의 각 엔트리는 이 디렉터리 MBR과 해당 자식 노드를 가리키는 포인터(child-pointer)로 구성된다.7

이러한 MBR 기반의 계층 구조는 ‘필터-정제(Filter and Refine)’라는 중요한 검색 원칙을 물리적으로 구현한 것으로 볼 수 있다.7 탐색 과정에서 상위 레벨의 비-리프 노드들은 거친 수준의 ‘필터’ 역할을 수행한다. 즉, 질의 영역과 겹치지 않는 디렉터리 MBR을 가진 노드와 그 하위 트리는 탐색 대상에서 신속하게 제외(pruning)된다.1 이 필터링 단계를 통해 방대한 양의 무관한 데이터를 검사하지 않고도 검색 범위를 효과적으로 좁힐 수 있다. 최종적으로 탐색이 리프 노드에 도달하면, 리프 노드에 저장된 실제 객체 MBR을 대상으로 정밀한 검사를 수행하는 ‘정제’ 단계가 이루어진다.7 이 구조의 효율성은 필터의 성능에 크게 좌우된다. 만약 비-리프 노드의 MBR들이 서로 많이 겹치거나(high overlap), 실제 데이터가 없는 빈 공간(dead space)을 많이 포함한다면(low coverage), 필터의 성능은 저하된다. 중첩이 많으면 하나의 질의 영역이 여러 MBR과 겹칠 확률이 높아져 불필요하게 많은 하위 트리를 방문해야 하며, 데드 스페이스가 크면 실제 데이터가 없음에도 불구하고 해당 노드를 방문해야 하는 비효율이 발생한다.2 따라서 R-트리의 모든 구성 및 관리 알고리즘은 MBR의 중첩과 커버리지를 최소화하는 것을 핵심 목표로 삼는다.11

R-트리는 B-트리의 핵심적인 장점 중 하나인 높이 균형(height-balanced) 구조를 채택했다.6 이는 트리의 루트(root) 노드에서 모든 리프 노드에 이르는 경로의 길이가 동일함을 의미한다.13 이 특성은 디스크 기반의 대용량 데이터베이스 환경에서 매우 중요하다. 트리의 높이가 데이터의 수에 대해 로그(logarithmic) 스케일로 증가하기 때문에, 특정 데이터를 찾기 위한 디스크 접근 횟수가 예측 가능하며 안정적으로 유지된다.

트리는 루트 노드에서 시작하여 하위 레벨로 내려갈수록 점차 더 작은 MBR들로 공간을 세분화하는 계층적 구조를 가진다.10 루트 노드의 MBR은 전체 데이터 공간을 포함하며, 그 자식 노드들의 MBR은 루트 MBR을 분할한 영역을 나타낸다. 이러한 계층적 분할은 데이터셋을 점점 더 세밀하게 근사하는 과정으로 해석할 수 있으며, 탐색 시 점진적으로 검색 범위를 좁혀나가는 효율적인 메커니즘을 제공한다.7

R-트리의 각 노드는 일반적으로 운영체제의 디스크 페이지(page) 하나에 대응되도록 설계된다.7 각 노드는 가변적인 수의 엔트리(entry)를 포함할 수 있으며, 이는 다음과 같은 제약 조건을 따른다.12

이러한 제약 조건들은 R-트리가 동적인 데이터의 삽입과 삭제에도 불구하고 항상 균형 잡힌 상태를 유지하고, 디스크 I/O 측면에서 효율적인 구조를 갖도록 보장하는 핵심적인 규칙이다.

R-트리는 B-트리에서 영감을 받아 설계되었지만, 다차원 데이터를 다루기 위해 근본적으로 다른 원리를 채택했다. 두 자료구조의 구조적 공통점과 차이점을 비교하면 R-트리의 본질을 더 명확하게 이해할 수 있다.

Table 1: R-tree와 B-tree의 핵심 특징 비교

특징 구분 B-트리 (B-tree) R-트리 (R-tree)
데이터 유형 1차원 스칼라 값 (정수, 문자열 등) 다차원 공간 객체 (점, 선, 다각형 등)
정렬 여부 데이터가 선형적으로 정렬 가능함 데이터가 선형적으로 정렬 불가능함
핵심 원리 값의 순서 관계 (Ordering Relation) 공간적 포함 관계 (Containment Relation)
노드 내 관계 키 값들 사이(in-between)에 자식 포인터가 위치함 MBR 내부(containing)에 자식 포인터가 위치함
탐색 경로 루트에서 리프까지 유일한 경로를 보장함 질의 영역에 따라 다중 경로 탐색이 가능함 (중첩 허용)
저장 방식 키 값 자체를 노드에 저장함 객체를 근사한 MBR의 좌표를 저장함
주요 장점 예측 가능한 최악의 경우 성능 보장 ($O(\log n)$) 유연한 공간 데이터 표현 및 다양한 공간 질의 지원
주요 단점 다차원 데이터에 직접 적용 불가 MBR 중첩으로 인한 최악의 경우 성능 저하 ($O(n)$)

출처: 4

가장 본질적인 차이는 노드 내 엔트리 간의 관계에서 비롯된다. B-트리에서 노드 내 키 값들은 정렬되어 있으며, 자식 노드를 가리키는 포인터는 두 키 값 ‘사이’에 위치하여 특정 값의 범위(range)를 담당한다. 이로 인해 임의의 키 값에 대한 탐색 경로는 항상 유일하게 결정된다.5 반면, R-트리의 노드 내 MBR들은 어떠한 선형적 순서도 갖지 않는 집합으로 볼 수 있다. 각 MBR은 자신의 자식 노드가 차지하는 공간 영역을 ‘포함’하며, 이 MBR들은 서로 겹칠 수 있다. 따라서 하나의 질의 영역이 여러 MBR과 겹칠 수 있고, 이는 탐색 시 여러 하위 트리를 방문해야 하는 다중 경로 탐색으로 이어진다. 이 ‘중첩’의 허용이 R-트리에 유연성을 부여하는 동시에, 성능 예측을 어렵게 만드는 양날의 검으로 작용한다.

R-트리는 동적인 데이터 환경을 지원하기 위해 탐색(Search), 삽입(Insertion), 삭제(Deletion) 연산을 정의한다. 이들 알고리즘은 B-트리의 연산과 유사한 골격을 가지지만, 다차원 공간 데이터의 특성을 처리하기 위한 독특한 휴리스틱을 포함한다.

R-트리의 탐색 연산은 크게 범위 질의와 최근접 이웃 질의로 나뉜다. 두 연산 모두 루트 노드에서 시작하여 질의 조건과 겹치는 MBR을 따라 하위 노드로 재귀적으로 탐색을 진행하는 방식을 사용한다.

범위 질의는 주어진 질의 사각형(Query Box)과 공간적으로 겹치는 모든 객체를 찾는 가장 기본적인 연산이다.1 알고리즘은 다음과 같은 재귀적 절차를 따른다.7

  1. 초기화: 탐색은 트리의 루트 노드에서 시작한다.
  2. 노드 탐색: 현재 노드가 비-리프 노드인 경우, 노드 내의 모든 엔트리(디렉터리 MBR)에 대해 질의 사각형과 겹치는지(overlap) 여부를 검사한다.
  3. 가지치기 (Pruning): 만약 특정 엔트리의 MBR이 질의 사각형과 겹치지 않는다면, 해당 엔트리가 가리키는 자식 노드와 그 모든 하위 트리는 질의 결과와 무관하므로 탐색 대상에서 제외한다. 이것이 R-트리 탐색 효율의 핵심인 가지치기 과정이다.1
  4. 재귀 호출: 질의 사각형과 겹치는 MBR을 가진 엔트리에 대해서만, 해당 엔트리가 가리키는 자식 노드를 대상으로 탐색 알고리즘을 재귀적으로 호출한다.
  5. 리프 노드 처리: 현재 노드가 리프 노드인 경우, 노드 내의 모든 엔트리(객체 MBR)에 대해 MBR이 질의 사각형과 겹치는지(또는 완전히 포함되는지) 검사한다. 조건을 만족하는 엔트리에 해당하는 실제 데이터 객체를 최종 결과 집합에 추가한다.7

이 과정에서 MBR 간의 중첩으로 인해 하나의 질의 사각형이 여러 개의 디렉터리 MBR과 겹칠 수 있으며, 이 경우 여러 하위 트리를 모두 방문해야 한다. 이는 R-트리 탐색이 B-트리와 달리 최악의 경우 성능을 보장할 수 없는 주된 이유이다.12

최근접 이웃($k$-NN) 질의는 주어진 질의 지점(또는 사각형)에서 가장 가까운 $k$개의 객체를 찾는 연산이다.1 이 질의는 일반적으로 우선순위 큐(priority queue)를 활용한 분기 한정(branch-and-bound) 전략을 통해 효율적으로 수행된다.7

  1. 초기화: 우선순위 큐를 생성하고, 질의 지점과 루트 노드의 각 엔트리(MBR)까지의 거리를 계산하여 (거리, 엔트리 포인터) 쌍을 큐에 삽입한다. 거리는 우선순위의 기준이 된다.

  2. 반복 탐색: 큐가 비거나 $k$개의 결과를 찾을 때까지 다음 과정을 반복한다.

    a. 큐에서 거리가 가장 가까운 엔트리를 하나 꺼낸다.

    b. 만약 꺼낸 엔트리가 실제 데이터 객체(리프 노드의 엔트리)라면, 결과 집합에 추가한다. 결과 집합의 크기가 $k$가 되면, 현재까지 찾은 $k$번째 객체까지의 거리를 한계 거리(threshold distance)로 설정하고, 큐에서 이 한계 거리보다 더 먼 거리를 가진 엔트리들은 모두 제거할 수 있다.

    c. 만약 꺼낸 엔트리가 하위 트리를 가리키는 포인터(비-리프 노드의 엔트리)라면, 해당 자식 노드를 방문한다. 자식 노드 내의 모든 엔트리들에 대해 질의 지점까지의 거리를 계산하여 다시 우선순위 큐에 삽입한다.

  3. 종료: 큐가 비거나, 큐에 남아있는 모든 엔트리까지의 거리가 현재까지 찾은 $k$번째 결과까지의 거리보다 멀어지면 탐색을 종료한다.

이 알고리즘은 유클리드 거리($L_2$-norm)뿐만 아니라 맨해튼 거리($L_1$-norm) 등 다양한 $L_p$-norm 거리 척도와 지리적 데이터에 사용되는 대권 거리(great-circle distance)에도 적용할 수 있는 유연성을 가진다.7

새로운 데이터 객체를 R-트리에 삽입하는 과정은 적절한 리프 노드를 선택하고, 필요시 노드를 분할하여 트리의 균형을 유지하는 과정으로 이루어진다. 이 과정은 B-트리와 유사하지만, 삽입 경로가 유일하지 않다는 점에서 결정적인 차이를 보인다.17

  1. 리프 노드 선택 (ChooseLeaf): 삽입할 새로운 객체의 MBR을 어떤 리프 노드에 추가할지 결정하는 단계이다. 루트 노드에서 시작하여 리프 노드에 도달할 때까지 각 레벨에서 최적의 자식 노드를 선택하는 과정을 반복한다. B-트리와 달리 다차원 공간에서는 삽입 경로가 유일하게 정해지지 않으므로, 휴리스틱(heuristic)에 기반한 선택이 이루어진다. 가장 널리 사용되는 휴리스틱은 ‘최소 면적 증가(least area enlargement)’ 원칙이다.12 즉, 현재 노드의 자식 MBR들 중에서 새로운 객체의 MBR을 포함시키기 위해 면적을 가장 적게 확장해야 하는 MBR을 선택한다. 만약 면적 증가량이 동일한 MBR이 여러 개 있다면, 그중에서 원래 면적이 가장 작은 MBR을 선택하는 2차 기준을 적용한다.12 이 탐욕적인(greedy) 접근 방식은 각 단계에서 MBR의 불필요한 확장을 최소화하여 트리를 최대한 조밀하게 유지하려는 목적을 가진다.17
  2. 엔트리 추가 및 오버플로 처리: 선택된 리프 노드에 아직 공간이 있다면(엔트리 수가 $M$보다 작다면), 새로운 엔트리를 추가하고 삽입 절차를 종료한다. 만약 리프 노드가 이미 가득 차 있다면(엔트리 수가 $M$개), 노드 오버플로(node overflow)가 발생하며, 노드 분할(node split) 알고리즘을 호출해야 한다.
  3. 분할 및 변경 전파 (AdjustTree): 오버플로가 발생한 노드는 기존의 $M$개 엔트리와 새로운 엔트리 하나를 합친 총 $M+1$개의 엔트리를 두 개의 새로운 노드로 분배한다. (분할 알고리즘의 상세 내용은 IV장에서 다룬다.) 분할이 발생하면, 상위 노드의 해당 엔트리는 수정되고(기존 MBR 업데이트), 새로운 노드에 대한 엔트리가 추가된다. 이로 인해 상위 노드에서도 오버플로가 발생할 수 있으며, 이러한 분할은 필요에 따라 루트 노드까지 연쇄적으로 전파(propagate)될 수 있다.12
  4. 트리 높이 증가: 만약 루트 노드에서 분할이 발생하면, 새로운 루트 노드가 생성되고 기존의 분할된 두 노드가 새로운 루트의 자식이 된다. 이 경우 트리의 전체 높이가 1 증가한다.12

삭제 연산은 먼저 삭제할 객체를 찾은 뒤, 해당 엔트리를 제거하고, 이로 인해 발생할 수 있는 노드 언더플로(node underflow)를 처리하는 과정으로 구성된다. R-트리의 언더플로 처리 방식은 B-트리의 병합/재분배 방식과 다른 독특한 ‘재삽입(re-insertion)’ 전략을 사용한다.

  1. 대상 탐색 (FindLeaf): 삭제할 객체를 포함하는 리프 노드를 찾는다. 이는 범위 질의와 유사한 방식으로 수행될 수 있다.

  2. 엔트리 제거: 해당 리프 노드에서 객체 엔트리를 제거한다.

  3. 언더플로 처리 (CondenseTree): 엔트리 제거 후, 해당 노드의 엔트리 수가 최소값 $m$보다 작아지면 언더플로가 발생한다. 이 경우, R-트리는 다음과 같은 재귀적인 CondenseTree 알고리즘을 수행한다.20

    a. 언더플로된 노드 $N$을 트리에서 제거하고, 그 부모 노드에서 $N$을 가리키던 엔트리도 삭제한다.

    b. $N$에 남아있던 모든 엔트리들을 임시 목록에 저장한다.

    c. 부모 노드 또한 언더플로가 발생했는지 확인하고, 그렇다면 이 과정을 루트 방향으로 거슬러 올라가며 반복한다.

    d. CondenseTree 과정이 끝난 후, 임시 목록에 저장했던 모든 엔트리들을 트리의 루트부터 시작하여 일반적인 삽입 절차에 따라 다시 삽입한다.17 리프 노드에서 제거된 엔트리들은 리프 레벨에, 비-리프 노드에서 제거된 엔트리들은 해당 레벨에 맞게 다시 삽입되어야 트리의 높이 균형이 유지된다.21

이러한 재삽입 전략은 B-트리의 병합보다 복잡해 보일 수 있지만, 중요한 장점을 가진다. R-트리의 구조는 삽입 순서에 매우 민감하기 때문에, 초기에 비최적의 위치에 삽입된 객체가 있을 수 있다. 재삽입 과정은 이러한 객체들에게 트리의 현재 상태를 기준으로 더 나은 위치를 찾을 기회를 제공함으로써, 트리의 구조를 동적으로 개선하고 장기적인 검색 성능을 향상시키는 부수적인 효과를 가져온다.17 이는 일종의 점진적이고 지역적인 트리 재구성(incremental reorganization)으로 볼 수 있다.

이처럼 R-트리의 핵심 연산들은 지역적 최적화에 기반한 휴리스틱의 연속이다. ChooseLeaf는 당장의 MBR 확장을 최소화하고, SplitNode는 분할되는 두 노드의 지역적 특성을 최적화하며, 삭제 시 ‘재삽입’은 언더플로된 노드의 객체들을 다시 ‘최적의’ 위치로 보내려는 시도이다. 그러나 이러한 지역적 최적화의 합이 반드시 전역적 최적화(global optimization)를 보장하지는 않는다. 동일한 데이터셋이라도 삽입 순서에 따라 전혀 다른 구조와 성능을 가진 트리가 생성될 수 있으며 5, 이는 R-트리 구조가 비결정적(non-deterministic)이며 성능 예측이 어렵다는 근본적인 한계로 이어진다.

R-트리의 성능을 좌우하는 가장 결정적인 요소는 노드 오버플로 시 M+1개의 엔트리를 두 개의 새로운 노드로 어떻게 분배하는가에 대한 노드 분할(node split) 전략이다. 좋은 분할 전략은 향후의 검색 연산이 가능한 한 적은 노드만을 방문하도록 트리를 구성해야 한다. 이를 위해 대부분의 분할 알고리즘은 두 가지 핵심 목표를 추구한다: (1) 분할 후 생성되는 두 MBR의 총 면적(coverage) 최소화, (2) 두 MBR 간의 겹치는 면적(overlap) 최소화.11 Guttman의 원 논문에서는 시간 복잡도를 기준으로 지수적(exponential), 이차적(quadratic), 선형적(linear)인 세 가지 분할 알고리즘을 제안했으며, 이 중 이차 및 선형 알고리즘이 실용적으로 널리 사용된다.

선형 분할 알고리즘은 이름에서 알 수 있듯이 노드 내 엔트리 수 $M$에 대해 선형적인 시간 복잡도, 즉 $O(M)$을 가지는 매우 빠른 분할 방법이다.14 알고리즘의 핵심은 두 개의 초기 ‘시드(seed)’ 엔트리를 효율적으로 선택하고 나머지 엔트리를 분배하는 데 있다.

  1. 시드 선택 (LinearPickSeeds):
    • 모든 차원에 대해 각 MBR의 최솟값과 최댓값의 차이(너비)로 MBR의 전체 크기를 정규화한다.
    • 각 차원별로 정규화된 거리가 가장 먼(farthest) 두 엔트리 쌍을 찾는다.
    • 이 두 엔트리를 각각 새로운 두 그룹의 첫 번째 멤버(시드)로 선택한다.18
  2. 엔트리 분배:
    • 시드로 선택된 두 엔트리를 제외한 나머지 $M-1$개의 엔트리들을 순차적으로 두 그룹 중 하나에 할당한다.
    • 이때, 어떤 그룹에 할당할지에 대한 명확한 규칙은 원 논문에 명시되어 있지 않아 구현에 따라 임의로 할당하거나, MBR의 면적 증가가 더 적은 그룹에 할당하는 등의 변형이 존재한다.23
    • 한 그룹이 최소 엔트리 수 $m$을 채우기 위해 필요한 만큼의 엔트리만 남게 되면, 나머지 모든 엔트리는 다른 그룹에 할당하여 최소 엔트리 수 제약 조건을 만족시킨다.

선형 분할의 가장 큰 장점은 속도이다. 구현이 간단하고 계산 비용이 매우 낮아 삽입 연산이 빈번한 환경에서 유리할 수 있다. 그러나 분할의 품질은 보장되지 않는다. 특히 시드 선택 후 나머지 엔트리를 분배하는 과정이 정교하지 않기 때문에, 결과적으로 생성되는 MBR들이 길고 좁은 ‘슬라이스(slice)’ 형태가 되어 중첩이 심해지는 경향이 있다.23 이는 트리의 전반적인 검색 성능을 저하시키는 요인이 될 수 있다.

이차 분할 알고리즘은 분할 품질을 높이기 위해 더 많은 계산 비용을 감수하는 전략으로, 시간 복잡도는 $O(M^2)$이다.14 이 알고리즘은 ‘낭비되는 공간’을 최소화하는 방향으로 시드를 선택하고, 이후 각 엔트리를 어느 그룹에 넣는 것이 더 나은 선택인지 신중하게 결정한다.

  1. 시드 선택 (QuadraticPickSeeds):

    • $M+1$개의 엔트리 중에서 가능한 모든 쌍($\binom{M+1}{2}$가지)에 대해, 두 엔트리를 함께 포함하는 MBR을 생성했을 때 발생하는 ‘낭비되는 공간’을 계산한다.18 여기서 낭비되는 공간은 다음으로 정의된다. \(Area(MBR(E_1, E_2)) - Area(E_1) - Area(E_2)\) 이 낭비되는 공간이 가장 큰, 즉 함께 묶였을 때 가장 비효율적인 두 엔트리 쌍을 찾아 각각 새로운 두 그룹의 시드로 선택한다.14 이는 서로 멀리 떨어져 있고 비효율적으로 결합되는 객체들을 초기에 분리하려는 의도를 담고 있다.
  2. 엔트리 분배:

    • 남아있는 엔트리들을 하나씩 두 그룹에 할당한다. 할당할 다음 엔트리를 선택하는 기준은, 두 그룹 중 어느 한쪽에 추가했을 때 발생하는 면적 증가량의 차이가 가장 큰 엔트리를 우선적으로 고려하는 것이다.18
    • 예를 들어, 엔트리 $E_j$를 그룹 1에 추가할 때의 면적 증가량을 $d_1$, 그룹 2에 추가할 때의 면적 증가량을 $d_2$라고 할 때, 모든 미할당 엔트리에 대해 $ d_1 - d_2 $ 값을 계산한다.
    • 이 차이값이 가장 큰 엔트리를 선택하여, 면적 증가량($d_1$ 또는 $d_2$)이 더 작은 그룹에 할당한다. 이는 한쪽 그룹에 대한 선호도가 명확한 엔트리부터 처리함으로써 분할의 모호성을 줄이려는 시도이다.
    • 선형 분할과 마찬가지로 최소 엔트리 수 제약 조건을 만족시키기 위해 마지막에는 남은 엔트리들을 한 그룹에 몰아서 할당할 수 있다.

이차 분할은 Guttman의 원 논문에서 비용과 분할 품질 간의 가장 합리적인 절충안으로 제시되었다.14 선형 분할보다 훨씬 더 균형 잡히고 조밀한(즉, 면적이 작은) MBR을 생성하여, 결과적으로 트리의 검색 성능을 크게 향상시킨다.23

노드 분할 전략의 선택은 데이터베이스 시스템 설계에서 흔히 나타나는 ‘쓰기 비용(write cost)’과 ‘읽기 비용(read cost)’ 간의 상충 관계(trade-off)를 명확하게 보여준다.

따라서 어떤 전략을 선택할지는 해당 R-트리가 사용될 애플리케이션의 작업 부하(workload) 특성에 따라 결정되어야 한다. 데이터의 삽입과 삭제가 매우 빈번하고 검색은 상대적으로 드문 ‘쓰기 중심(write-intensive)’ 환경이라면 선형 분할이 유리할 수 있다. 반면, 데이터가 한 번 구축된 후에는 거의 변하지 않고 검색이 매우 빈번하게 일어나는 ‘읽기 중심(read-intensive)’ 환경, 예를 들어 대부분의 GIS나 데이터 분석 시스템에서는 이차 분할이나 R*-트리의 더 정교한 분할 전략이 높은 초기 비용에도 불구하고 장기적으로 더 나은 성능을 제공한다.23

Table 2: 노드 분할 알고리즘 비교 (선형, 이차, R*-트리)

특징 선형(Linear) 분할 이차(Quadratic) 분할 R-트리(R-tree) 분할
시간 복잡도 $O(M)$ $O(M^2)$ $O(M \log M)$
핵심 아이디어 각 차원별로 정규화된 거리가 가장 먼 두 엔트리를 시드로 선택 함께 묶었을 때 가장 비효율적인(낭비 공간이 큰) 두 엔트리를 시드로 선택 모든 차원 축을 고려하여 둘레(perimeter) 합이 최소가 되는 분할 축을 선택하고, 해당 축에서 중첩(overlap)이 최소화되는 분할 지점을 선택
MBR 품질 낮음 (길고 좁은 슬라이스 형태, 중첩이 심할 수 있음) 중간 (상대적으로 균형 잡히고 면적이 작음) 높음 (거의 정사각형에 가까운 모양, 중첩과 면적, 둘레를 모두 고려하여 최적화)
장점 매우 빠르고 구현이 간단함 선형 분할보다 월등히 좋은 검색 성능 제공, 비용과 품질의 합리적 절충 최고의 검색 성능, 높은 노드 점유율
단점 검색 성능이 저하될 수 있음 선형 분할보다 삽입 속도가 느림 구현이 복잡하고 삽입 비용이 가장 높음 (강제 재삽입 포함)

출처: 14

Guttman의 R-트리는 공간 인덱싱의 가능성을 열었지만, MBR 중첩으로 인한 성능 저하라는 명확한 한계를 가지고 있었다. 이 문제를 해결하고 성능을 개선하기 위해 지난 수십 년간 수많은 R-트리 변형(variant)이 제안되었다. 이들 변형의 진화 과정은 크게 두 가지 방향으로 나눌 수 있다. 하나는 R*-트리처럼 기존 R-트리의 휴리스틱을 더욱 정교하게 다듬고 새로운 최적화 기법을 추가하는 ‘심화 발전’의 방향이고, 다른 하나는 R+-트리나 힐베르트 R-트리처럼 문제에 대한 접근 방식을 근본적으로 바꾸는 ‘패러다임 전환’의 방향이다. 본 장에서는 가장 중요하고 영향력 있는 세 가지 변형을 중심으로 그 진화 과정을 고찰한다.

R+-트리는 R-트리의 ‘중첩’ 문제를 가장 직접적이고 과감한 방식으로 해결하고자 한 시도이다. R+-트리의 핵심 규칙은 “어떠한 경우에도 같은 레벨에 있는 노드들의 MBR은 서로 겹쳐서는 안 된다”는 것이다.10 이 규칙은 R-트리의 가장 큰 약점이었던 점 질의(point query) 성능을 획기적으로 개선한다. 특정 지점은 최대 하나의 MBR에만 포함될 수 있으므로, 점 질의 시 탐색 경로는 B-트리처럼 항상 유일하게 결정된다.27

이러한 ‘비중첩(non-overlapping)’ 원칙을 지키기 위해 R+-트리는 데이터 중복이라는 비용을 감수한다. 새로운 객체를 삽입할 때, 만약 해당 객체의 MBR이 기존의 여러 MBR과 겹친다면, 객체를 여러 개의 작은 조각으로 잘라(clipping) 각각의 겹치지 않는 MBR에 해당하는 리프 노드에 모두 저장한다.10 이로 인해 하나의 객체가 여러 리프 노드에 중복되어 저장될 수 있다.

R+-트리는 중첩 문제를 원천적으로 차단하는 규칙 기반 접근을 통해 특정 유형의 질의 성능을 극대화했지만, 그 대가로 발생하는 복잡성과 공간 효율성 문제 때문에 R*-트리만큼 널리 사용되지는 못했다.

R-트리(R-star-tree)는 1990년 Beckmann 등에 의해 제안되었으며, 현재까지 가장 성공적이고 널리 사용되는 R-트리 변형으로 평가받는다.1 R-트리는 R+-트리처럼 구조적 제약을 가하는 대신, R-트리의 동적 연산 알고리즘(특히 ChooseSubtreeSplitNode)을 공학적으로 정교하게 개선하여 성능을 극대화하는 접근을 취한다.

R*-트리의 핵심 철학은 단순히 ‘MBR 면적’만을 최소화하는 것이 아니라, 트리의 전반적인 품질에 영향을 미치는 여러 요소를 복합적으로 고려하는 것이다. 이를 위해 다음과 같은 최적화 기준을 도입했다.10

  1. 중첩(Overlap) 최소화: 특히 리프 노드 바로 위 레벨에서 자식 노드를 선택할 때, 면적 증가량보다 중첩 증가량을 우선적으로 고려하여 최소화한다. 이는 검색 시 여러 경로를 탐색할 가능성을 직접적으로 줄여준다.
  2. 면적(Area) 최소화: 중첩이 없는 경우, 기존 R-트리와 같이 MBR의 면적 증가량을 최소화한다.
  3. 둘레(Margin) 최소화: 노드 분할 시, 분할된 두 MBR의 둘레 합을 최소화하는 분할 축을 선택한다. 이는 MBR을 가능한 한 정사각형에 가깝게 만들어 ‘데드 스페이스’를 줄이는 효과가 있다.

이러한 정교한 휴리스틱과 더불어, R*-트리는 ‘강제 재삽입(Forced Re-insertion)’이라는 혁신적인 개념을 도입했다.24 노드에 오버플로가 발생했을 때 즉시 분할을 수행하지 않고, 먼저 해당 노드의 엔트리 중 일부(예: 노드 중심에서 가장 멀리 떨어진 30%의 엔트리)를 임시로 제거한 뒤 트리에 다시 삽입한다.10 이 과정은 다음과 같은 여러 이점을 가져온다.

R*-트리는 이처럼 정교화된 휴리스틱과 강제 재삽입 기법을 통해 기존 R-트리 및 다른 변형들보다 월등한 검색 성능을 보여주었으며, 오늘날 많은 공간 데이터베이스 시스템에서 사실상의 표준 R-트리 구현으로 채택되고 있다.

힐베르트 R-트리는 기하학적 휴리스틱에 의존하는 대신, 위상 수학(topology)의 개념인 공간 채움 곡선(space-filling curve)을 이용하여 다차원 공간 데이터를 1차원으로 정렬하는 새로운 접근 방식을 제시한다.30 여러 공간 채움 곡선 중에서도 공간적 근접성을 1차원 근접성으로 가장 잘 보존하는 것으로 알려진 힐베르트 곡선(Hilbert curve)을 주로 사용한다.

핵심 원리는 다음과 같다.30

  1. 인덱싱할 모든 공간 객체의 MBR 중심점에 대해 힐베르트 값을 계산한다. 힐베르트 값은 힐베르트 곡선을 따라 원점에서 해당 지점까지의 거리에 해당하는 1차원 값이다.
  2. 모든 객체를 계산된 힐베르트 값에 따라 오름차순으로 정렬한다.
  3. 정렬된 객체들을 순서대로 가져와 노드 용량($M$)만큼씩 채워 리프 노드를 구성한다.
  4. 생성된 리프 노드들의 MBR에 대해 다시 힐베르트 값을 계산하고 정렬하여 상위 레벨의 노드를 구성하는 과정을 루트 노드가 생성될 때까지 반복한다.

이 방식은 주로 정적 데이터셋을 한 번에 인덱싱하는 벌크 로딩(bulk loading)에 매우 효과적이다. 힐베르트 곡선은 인접한 공간에 있는 점들이 정렬 후에도 가까운 순서를 유지하도록 보장하므로, 이 방식으로 생성된 R-트리는 자연스럽게 공간적으로 인접한 객체들을 같은 노드에 그룹화하는 경향이 있다. 이는 MBR의 면적과 중첩을 효과적으로 최소화하여 매우 높은 품질의 클러스터링을 달성하게 하고, 결과적으로 뛰어난 검색 성능으로 이어진다.30 또한, 1차원 값으로 정렬되기 때문에 B+-트리와 유사한 방식으로 노드 관리가 가능해져, 동적 환경에서도 지연 분할(deferred splitting)과 같은 기법을 통해 높은 공간 활용도를 유지할 수 있다.30

Table 3: R-tree 주요 변형들의 특징 비교

특징 R-tree (Guttman) R+-tree R*-tree Hilbert R-tree
핵심 아이디어 MBR 면적 최소화 휴리스틱 비-리프 노드 MBR 비중첩 규칙 면적, 중첩, 둘레의 복합 최적화 및 강제 재삽입 공간 채움 곡선을 이용한 데이터의 선형 정렬
노드 중첩 처리 허용 (최소화 노력) 비-리프 노드에서 원천적으로 금지 허용 (정교한 휴리스틱으로 적극적 최소화) 허용 (정렬을 통해 자연스럽게 최소화)
데이터 중복 없음 발생 가능 (객체 분할로 인해) 없음 없음
주요 장점 동적 공간 인덱싱의 기본 모델 제시 빠른 점 질의(Point Query) 성능 전반적으로 가장 뛰어난 검색 성능, 높은 공간 활용도 우수한 클러스터링 품질, 높은 공간 활용도, 벌크 로딩에 매우 효율적
주요 단점 중첩으로 인한 성능 저하 가능성 공간 효율성 저하, 복잡한 삽입/삭제 연산 구현이 복잡하고 삽입 비용이 높음 힐베르트 값 계산 비용, 동적 업데이트가 상대적으로 복잡할 수 있음
적합한 환경 일반적인 동적 공간 데이터 점 질의가 매우 빈번한 환경 대부분의 읽기 중심(read-intensive) GIS 및 공간 분석 환경 정적 데이터셋의 벌크 로딩, 공간적 근접성이 중요한 분석

출처: 10

R-트리는 공간 인덱싱 분야에서 가장 널리 사용되는 구조 중 하나이지만, 유일한 해법은 아니다. 쿼드트리(Quadtree)와 $k$-d 트리(k-d tree)는 R-트리와 함께 자주 언급되는 대표적인 공간 인덱싱 구조이다. 이들과의 비교를 통해 R-트리의 고유한 특징과 장단점을 더욱 명확히 이해할 수 있다. 공간 인덱싱 구조의 선택은 근본적으로 ‘데이터의 형태(Shape)’와 ‘데이터의 분포(Distribution)’라는 두 가지 축에 의해 결정된다.

쿼드트리는 2차원 공간을 재귀적으로 4개의 동일한 크기의 사분면(quadrant)으로 분할하는 방식을 사용하는 트리 구조이다.1

$k$-d 트리는 $k$-차원 데이터를 인덱싱하기 위한 이진 탐색 트리(Binary Search Tree)의 확장이다.35

결론적으로, 실제 GIS 데이터처럼 다양한 크기와 형태의 객체(점, 선, 면)가 특정 지역에 집중되는 불균일한 분포를 보이는 경우, R-트리가 가장 범용적이고 강력한 솔루션이 되는 경향이 있다. R-트리의 ‘데이터 기반 분할’ 방식은 데이터 분포에 효과적으로 적응하며, ‘영역 데이터 지원’은 다양한 공간 객체를 직접 다룰 수 있게 해준다. 반면, $k$-d 트리는 점 데이터에 특화된 효율적인 구조이며, 쿼드트리는 데이터 분포가 비교적 균일한 경우 간단하고 효과적인 대안이 될 수 있다.

Table 4: 주요 공간 인덱싱 구조 비교 (R-tree, Quadtree, k-d tree)

특징 R-트리 (R-tree) 쿼드트리 (Quadtree) $k$-d 트리 (k-d tree)
분할 방식 데이터 기반 분할 (Data-driven) 공간 기반 분할 (Space-driven) 공간 기반 분할 (Space-driven)
분할 형태 MBR (겹침 허용) 4개의 동일한 사분면 (겹침 없음) 2개의 하위 공간 (겹침 없음)
지원 데이터 유형 점, 선, 다각형 등 영역 데이터 주로 점 데이터 (영역 데이터는 복잡) 주로 점 데이터
트리 균형 높이 균형 (Balanced) 불균형 가능 (Unbalanced) 불균형 가능 (Unbalanced)
저장 방식 디스크 지향적 (Disk-oriented) 메모리/디스크 모두 가능 메모리 지향적 (Memory-oriented)
업데이트 효율성 동적 업데이트에 강함 (단, 분할 비용 발생) 동적 업데이트에 약함 (재구성 불필요) 동적 업데이트에 매우 약함 (재구성 필요)
주요 장점 불균일 분포 데이터, 영역 데이터, 동적 환경에 강함 구현이 간단하고 인덱스 생성 빠름 점 데이터의 최근접 이웃 검색에 효율적
주요 단점 MBR 중첩으로 인한 최악 성능 저하, 복잡한 구현 불균일 분포에 취약, 빈 공간 낭비 영역 데이터 처리 불가, 동적 환경에 취약

출처: 1

R-트리는 지난 수십 년간 공간 인덱싱의 발전을 이끌어왔지만, 여전히 해결해야 할 과제와 한계를 안고 있다. 동시에 데이터베이스 기술과 하드웨어의 발전은 R-트리 연구에 새로운 기회와 방향을 제시하고 있다.

R-트리의 성능은 이론과 실제 사이에 간극이 존재한다. 평균적인 경우, 높이 균형 트리의 특성상 데이터의 수 $n$과 노드의 최대 엔트리 수 $M$에 대해 검색, 삽입, 삭제 연산은 모두 $O(\log_M n)$의 시간 복잡도를 가진다.4 이는 디스크 I/O 횟수가 데이터의 총량에 비해 매우 느리게 증가함을 의미하며, 대용량 데이터셋에서도 효율적인 성능을 기대할 수 있게 한다.

그러나 R-트리의 가장 큰 아킬레스건은 최악의 경우(worst-case) 성능을 보장하지 못한다는 점이다.7 성능 저하의 주범은 노드 MBR 간의 ‘중첩(overlap)’이다.2 데이터의 분포나 삽입 순서가 좋지 않아 MBR들의 중첩이 심하게 발생하면, 하나의 범위 질의가 트리의 거의 모든 경로를 탐색해야 하는 상황이 발생할 수 있다. 이 경우, 탐색 성능은 인덱스가 없는 순차 탐색(sequential scan)과 마찬가지로 $O(n)$에 가까워진다.7 이러한 성능 저하 가능성 때문에 R-트리의 성능은 비결정적(non-deterministic)이라고 평가받는다.

이 문제를 이론적으로 해결하기 위해 Priority R-tree와 같은 변형이 제안되었다. Priority R-tree는 항상 $O((N/B)^{1-1/d} + T/B)$ I/O (여기서 $N$은 객체 수, $B$는 블록 크기, $d$는 차원, $T$는 결과 크기)라는 점근적으로 최적인 최악의 경우 성능을 보장한다.38 하지만 구조와 알고리즘의 복잡성이 매우 높아 실제 상용 시스템에 적용된 사례는 드물고, 주로 이론적인 연구에 머물러 있다.7

R-트리는 2차원이나 3차원과 같은 저차원 공간에서는 매우 효과적이지만, 차원의 수가 증가함에 따라 성능이 급격히 저하되는 ‘차원의 저주(curse of dimensionality)’ 현상에 직면한다.2 차원이 높아질수록 다음과 같은 문제들이 발생한다.

이러한 문제로 인해 R-트리 및 그 변형들은 일반적으로 5~10차원 이상의 고차원 데이터에는 적합하지 않은 것으로 알려져 있다.2 이 한계를 극복하기 위해 여러 대안적인 인덱싱 구조가 제안되었다.

R-트리는 40년 가까이 연구되어 온 고전적인 자료구조이지만, 오늘날에도 여전히 활발한 연구가 이루어지고 있다. 특히 새로운 하드웨어 환경의 등장과 인공지능 기술의 발전은 R-트리 연구에 새로운 활력을 불어넣고 있다.

이러한 연구 동향은 R-트리가 단순한 고전적 자료구조를 넘어, 데이터의 통계적 특성을 학습하고 최신 하드웨어에 적응하며 끊임없이 진화하는 ‘지능형’ 인덱스로 발전하고 있음을 보여준다.

R-트리는 1984년 제안된 이래, 지난 수십 년간 다차원 공간 데이터 인덱싱 분야에서 가장 중요하고 영향력 있는 자료구조 중 하나로 확고히 자리매김했다. 그 성공의 배경에는 B-트리로부터 물려받은 디스크 기반 환경에 최적화된 높이 균형 구조와, 점, 선, 다각형 등 복잡한 공간 객체를 MBR이라는 직관적인 형태로 근사하여 유연하게 다룰 수 있는 독창적인 설계 철학이 있다.1 R-트리는 동적인 데이터의 삽입과 삭제를 효율적으로 처리하며, 범위 질의, 최근접 이웃 질의 등 다양한 공간 질의를 지원함으로써 GIS, CAD를 비롯한 수많은 응용 분야의 발전에 핵심적인 기반 기술을 제공했다.

본 고찰을 통해 분석한 바와 같이, R-트리의 핵심적인 장점은 그 유연성과 동적 환경에 대한 적응력에 있다. 그러나 동시에 MBR의 ‘중첩’으로 인해 최악의 경우 검색 성능이 저하될 수 있다는 근본적인 한계와, 고차원 데이터에서는 ‘차원의 저주’로 인해 성능이 급격히 저하되는 문제점을 내포하고 있다.2 이러한 한계를 극복하기 위한 노력은 R-트리 연구의 역사를 관통하는 중심축이었다. R+-트리는 중첩을 원천적으로 제거하는 과감한 시도였고, R*-트리는 ‘중첩’, ‘면적’, ‘둘레’를 복합적으로 고려하는 정교한 휴리스틱과 ‘강제 재삽입’이라는 동적 최적화 기법을 통해 성능을 극대화했으며, 힐베르트 R-트리는 공간 채움 곡선이라는 수학적 원리를 도입하여 데이터 클러스터링의 품질을 한 차원 높였다. 이처럼 R-트리의 진화사는 ‘효율적인 클러스터링’과 ‘중첩 최소화’라는 두 가지 목표를 향한 끊임없는 탐구의 과정이었다.

오늘날 R-트리는 PostGIS와 같은 주요 공간 데이터베이스 시스템에서 GiST(Generalized Search Tree)와 같은 확장 가능한 인덱싱 프레임워크의 핵심 구현체로 활용되며 그 실용적 중요성을 입증하고 있다.55 더 나아가 R-트리 연구는 새로운 국면을 맞이하고 있다. 데이터의 분포를 스스로 학습하여 최적의 인덱싱 전략을 수립하는 ‘학습 기반 인덱싱’의 등장은 기존의 휴리스틱 기반 접근법의 한계를 뛰어넘을 가능성을 보여주고 있으며, 영구 메모리나 GPU와 같은 새로운 하드웨어의 특성을 활용하여 성능을 극대화하려는 연구 또한 활발히 진행되고 있다. 또한, 불확실성을 포함하는 데이터나 시공간 데이터와 같이 더욱 복잡한 유형의 데이터를 처리하기 위한 R-트리 기반의 아이디어도 계속해서 발전하고 있다.

결론적으로, R-트리는 단순히 과거의 유산이 아니라, 끊임없이 변화하는 데이터 환경과 기술 발전에 발맞추어 진화하는 살아있는 자료구조이다. MBR을 통한 공간 분할이라는 근본적인 아이디어는 여전히 강력하며, 앞으로도 새로운 도전 과제들을 해결하기 위한 다양한 연구의 초석이 될 것이다. R-트리에 대한 깊이 있는 이해는 공간 데이터베이스 시스템을 설계하고 구현하는 연구자와 개발자에게 필수적인 역량으로 남을 것이며, 그 미래는 인공지능과 첨단 하드웨어 기술과의 융합을 통해 더욱 확장될 것으로 전망된다.

  1. Mastering R-Tree Algorithm Design - Number Analytics, 7월 31, 2025에 액세스, https://www.numberanalytics.com/blog/mastering-r-tree-algorithm-design
  2. R-Tree Geospatial Data Structure: Functionality, Benefits, and Limitations, 7월 31, 2025에 액세스, https://opensourcegisdata.com/r-tree-geospatial-data-structure-benefits-and-limitations.html
  3. What is an R-tree in database design? How does it differ from a KD-tree or B+-tree in terms of indexing large databases efficiently with minimal storage space usage? - Quora, 7월 31, 2025에 액세스, https://www.quora.com/What-is-an-R-tree-in-database-design-How-does-it-differ-from-a-KD-tree-or-B-tree-in-terms-of-indexing-large-databases-efficiently-with-minimal-storage-space-usage
  4. B Tree compared to an R tree - Isn’t it just a bunch of linked lists linked together?, 7월 31, 2025에 액세스, https://softwareengineering.stackexchange.com/questions/96512/b-tree-compared-to-an-r-tree-isnt-it-just-a-bunch-of-linked-lists-linked-toge
  5. database - Why is the R -tree unordered ? Yet it is said to follow the …, 7월 31, 2025에 액세스, https://stackoverflow.com/questions/40966467/why-is-the-r-tree-unordered-yet-it-is-said-to-follow-the-rules-of-the-b-tree
  6. Comparison of Advance Tree Data Structures - arXiv, 7월 31, 2025에 액세스, https://arxiv.org/pdf/1209.6495
  7. R-tree - Wikipedia, 7월 31, 2025에 액세스, https://en.wikipedia.org/wiki/R-tree
  8. [MySQL] R-Tree Index 와 공간 탐색 - JW공부스토리, 7월 31, 2025에 액세스, https://jwkim96.tistory.com/298
  9. R트리,R+트리,R*트리 레포트 - 해피캠퍼스, 7월 31, 2025에 액세스, https://www.happycampus.com/report-doc/11757127/
  10. R-Trees, 7월 31, 2025에 액세스, http://www.gitta.info/SpatPartitio/en/html/ObjOriDecomp_learningObject2.html
  11. opensourcegisdata.com, 7월 31, 2025에 액세스, https://opensourcegisdata.com/r-tree-geospatial-data-structure-benefits-and-limitations.html#:~:text=R%2DTrees%20group%20nearby%20objects,margin%20or%20overlap%20of%20rectangles)..)
  12. r-trees a dynamic index structure - for spatial searching - PostGIS, 7월 31, 2025에 액세스, http://postgis.net/docs/support/rtree.pdf
  13. R Tree구조 - 지식덤프, 7월 31, 2025에 액세스, http://www.jidum.com/jidums/view.do?jidumId=159
  14. A new enhancement to the R-tree node splitting - JUST, 7월 31, 2025에 액세스, https://www.just.edu.jo/~qmyaseen/rtree1.pdf
  15. [Data Structures] R-Tree R-트리 - Archive - 티스토리, 7월 31, 2025에 액세스, https://dad-rock.tistory.com/594
  16. R-Tree 인덱스, 7월 31, 2025에 액세스, https://velog.io/@p0tat0_chip/R-Tree-%EC%9D%B8%EB%8D%B1%EC%8A%A4-itc48q91
  17. Lecture Notes: R-trees 1 The structure 2 Insertions and … - CiteSeerX, 7월 31, 2025에 액세스, https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=773df46cc4b8dfb137d9afc6ddd58c345231f1c3
  18. R-tree: Indexing Structure for Data in Multi- dimensional Space, 7월 31, 2025에 액세스, https://users.cs.utah.edu/~lifeifei/cis5930/lecture3.pdf
  19. R 트리 - 위키백과, 우리 모두의 백과사전, 7월 31, 2025에 액세스, https://ko.wikipedia.org/wiki/R_%ED%8A%B8%EB%A6%AC
    1. Dynamic Versions of R-trees, 7월 31, 2025에 액세스, https://tildesites.bowdoin.edu/~ltoma/teaching/cs340/spring08/Papers/Rtree-chap2.pdf
  20. scala - R-tree - Remove algorithm using reinsertion - Stack Overflow, 7월 31, 2025에 액세스, https://stackoverflow.com/questions/58367985/r-tree-remove-algorithm-using-reinsertion
  21. (PDF) Corner-based splitting: An improved node splitting algorithm for R-tree, 7월 31, 2025에 액세스, https://www.researchgate.net/publication/260599600_Corner-based_splitting_An_improved_node_splitting_algorithm_for_R-tree
  22. Difference between quadratic split and linear split - Stack Overflow, 7월 31, 2025에 액세스, https://stackoverflow.com/questions/17289393/difference-between-quadratic-split-and-linear-split
  23. The R*-tree: An Efficient and Robust Access Method for Points and Rectangles+, 7월 31, 2025에 액세스, https://infolab.usc.edu/csci599/Fall2001/paper/rstar-tree.pdf
  24. New Linear Node Splitting Algorithm for R-Trees - An-Najah National University, 7월 31, 2025에 액세스, https://repository.najah.edu/server/api/core/bitstreams/61f4e3d8-ee3e-42b2-9ecd-cd3b761c5591/content
  25. R-tree - Wikipedia, 7월 31, 2025에 액세스, https://en.wikipedia.org/wiki/R-tree
  26. R+ tree - Wikipedia, 7월 31, 2025에 액세스, https://en.wikipedia.org/wiki/R%2B_tree
  27. The R-Tree: A Dynamic Index for Multi-Dimensional Objects, 7월 31, 2025에 액세스, https://infolab.usc.edu/csci585/Spring2006/den_ar/R+-tree.pdf
  28. Splitting algorithm in R–Tree - Stack Overflow, 7월 31, 2025에 액세스, https://stackoverflow.com/questions/22752029/splitting-algorithm-in-r-tree
  29. Hilbert R-tree - Wikipedia, 7월 31, 2025에 액세스, https://en.wikipedia.org/wiki/Hilbert_R-tree
  30. Hilbert Tree in Data Structure - Tutorials Point, 7월 31, 2025에 액세스, https://www.tutorialspoint.com/hilbert-tree-in-data-structure
  31. Data Structure / Algorithm - 쿼드 트리 (Quadtree) 공간 분할 - joonyle99’s Blog, 7월 31, 2025에 액세스, https://joonyle99.github.io/datastructure_algorithm/DataStructure_Algorithm-Quadtree/
  32. indexing - R-Tree and Quadtree Comparison - Stack Overflow, 7월 31, 2025에 액세스, https://stackoverflow.com/questions/23216261/r-tree-and-quadtree-comparison
  33. Introduction to R-tree - GeeksforGeeks, 7월 31, 2025에 액세스, https://www.geeksforgeeks.org/dsa/introduction-to-r-tree/
  34. kd-트리 - 코딩연습블로그 - 티스토리, 7월 31, 2025에 액세스, https://coding6467.tistory.com/13
  35. data structures - What is the difference between a KD-tree and a R …, 7월 31, 2025에 액세스, https://stackoverflow.com/questions/4326332/what-is-the-difference-between-a-kd-tree-and-a-r-tree
  36. Understanding the time complexities of the R-Tree? - Stack Overflow, 7월 31, 2025에 액세스, https://stackoverflow.com/questions/48815868/understanding-the-time-complexities-of-the-r-tree
  37. Priority R-tree - Wikipedia, 7월 31, 2025에 액세스, https://en.wikipedia.org/wiki/Priority_R-tree
  38. Priority R-Tree, 7월 31, 2025에 액세스, https://www.cse.ust.hk/~yike/prtree/
  39. The X-tree: An Index Structure for High-Dimensional Data, 7월 31, 2025에 액세스, https://bib.dbvis.de/uploadedFiles/190.pdf
  40. X-tree - Wikipedia, 7월 31, 2025에 액세스, https://en.wikipedia.org/wiki/X-tree
  41. X-tree, 7월 31, 2025에 액세스, https://bib.dbvis.de/uploadedFiles/58.pdf
  42. The TV-tree: An index structure for high-dimensional data - ResearchGate, 7월 31, 2025에 액세스, https://www.researchgate.net/publication/2592132_The_TV-tree_An_index_structure_for_high-dimensional_data
  43. The TV-Tree. An Index Structure for High-Dimensional Data, 7월 31, 2025에 액세스, https://www.vldb.org/journal/VLDBJ3/P517.pdf
  44. High-Concurrency Locking in R-Trees - University of California, Berkeley, 7월 31, 2025에 액세스, https://dsf.berkeley.edu/papers/vldb95-rtree.pdf
  45. High-Concurrency Locking in R-Trees - VLDB Endowment, 7월 31, 2025에 액세스, https://www.vldb.org/conf/1995/P134.PDF
  46. Improving Sort-Tile-Recusive algorithm for R-tree packing in indexing time series Request PDF - ResearchGate, 7월 31, 2025에 액세스, https://www.researchgate.net/publication/282538726_Improving_Sort-Tile-Recusive_algorithm_for_R-tree_packing_in_indexing_time_series
  47. How to bulk-load an r-tree in C#? - Stack Overflow, 7월 31, 2025에 액세스, https://stackoverflow.com/questions/11371018/how-to-bulk-load-an-r-tree-in-c
  48. STRTree Engine - GitHub Pages, 7월 31, 2025에 액세스, https://xilinx.github.io/Vitis_Libraries/data_analytics/2022.1/guide_L2/internals/geospatialJoin.html
  49. Effectively Learning Spatial Indexes with a Support for Updates - Zheng Wang, 7월 31, 2025에 액세스, https://zhengwang125.github.io/paper/SIGMOD23_rlrtree.pdf
  50. Paper on Learned R-tree accepted at SIGMOD 2023 - ML for Data Management, 7월 31, 2025에 액세스, https://mlxdb.github.io/post/22-11-15-sigmod-23/
  51. PM-Rtree: A Highly-Efficient Crash-Consistent R-tree for Persistent Memory, 7월 31, 2025에 액세스, https://par.nsf.gov/servlets/purl/10355503
  52. Efficient Parallel Processing of R-Tree on GPUs - MDPI, 7월 31, 2025에 액세스, https://www.mdpi.com/2227-7390/12/13/2115
  53. (PDF) Efficient Parallel Processing of R-Tree on GPUs - ResearchGate, 7월 31, 2025에 액세스, https://www.researchgate.net/publication/382042492_Efficient_Parallel_Processing_of_R-Tree_on_GPUs
  54. R-tree Indexing for Efficient GIS - Number Analytics, 7월 31, 2025에 액세스, https://www.numberanalytics.com/blog/r-tree-indexing-for-efficient-gis
    1. Introduction - Introduction to PostGIS, 7월 31, 2025에 액세스, https://postgis.net/workshops/postgis-intro/introduction.html