배열에서 연결리스트로

이전 글에서 블록 기반 마크다운 에디터의 기본적인 구조와 키보드 이벤트 핸들링에 대해 설명했습니다. 이번 글에서는 에디터의 블록 관리 방식을 배열 기반에서 연결 리스트 기반으로 마이그레이션한 과정을 다루고, 그 이유와 함께 마이그레이션을 통해 얻은 장점들을 작성하겠습니다.

왜 변경했을까?

CRDT

협업 편집 환경에서 데이터의 일관성과 충돌 없는 병합을 보장하기 위해 CRDT를 도입하기로 결정했습니다. CRDT는 분산 환경에서 데이터를 병합할 때 충돌을 방지하고 일관성을 유지할 수 있도록 설계된 데이터 구조로 다양한 알고리즘이 있지만 우리가 구현하려는 알고리즘에서는 블록 데이터를 연결리스트 구조로 관리해야 했습니다.

배열 기반의 한계

기존의 배열 기반 구조는 각 블록을 배열의 인덱스를 통해 관리했습니다. 이는 단순한 구현과 빠른 접근성을 제공하지만, 다음과 같은 한계가 존재했습니다.

연결리스트 구조의 장점

배열 기반 코드와 연결리스트 기반 코드의 차이점

변경된 부분의 코드만 작성했습니다!

블록 데이터 구조

배열

가장 핵심적인 내용으로, 가장 많이 변경된 부분입니다. 기존의 배열 기반 구조에서는 모든 블록이 배열의 인덱스를 통해 관리되었으나 이는 단순한 구현과 빠른 접근성을 제공하지만, 다음과 같은 한계가 있습니다.