개발/개발과정

    [CRDT 구현하기] 2차 시도: 연결 리스트 (개선)

    [CRDT 구현하기] 2차 시도: 연결 리스트 [CRDT 구현하기] 2차 시도: 연결 리스트 [CRDT 구현하기] 1차 시도: 배열 [CRDT 구현하기] 1차 시도: 배열 [CRDT 구현하기] CRDT란? [CRDT 구현하기] CRDT란? CRDT 동시 편집 기술 네이버 부스트캠프 그룹 프로젝트에서 코드를 공동 편집 할 수 있는 29223.tistory.com 연결리스트를 사용하여 병합이 제대로 이루어지는 것을 확인할 수 있었다. 하지만, 아직 몇 가지 문제점이 남아있었다. 우선, 현재 상태로는 단일 글자의 삽입만 가능하다는 것과 병합 과정에서 충돌에 대한 대비가 제대로 되어있지 않았다. 여러 글자의 삽입/삭제 insertLocal(index: number, letter: string, time: num..

    [CRDT 구현하기] 2차 시도: 연결 리스트

    [CRDT 구현하기] 1차 시도: 배열 [CRDT 구현하기] 1차 시도: 배열 [CRDT 구현하기] CRDT란? [CRDT 구현하기] CRDT란? CRDT 동시 편집 기술 네이버 부스트캠프 그룹 프로젝트에서 코드를 공동 편집 할 수 있는 기술이 필요했다. 이 글에서는 공동 편집 기술이 무엇이며 왜 29223.tistory.com 앞의 글에서 배열을 사용했을 때의 과정과 한계에 대해 경험했다. 하지만, 배열의 index를 활용하는 과정에서 배열의 순회가 불가피 했으며 이는 비효율적인 연산이라 판단했다. 따라서, 2차 시도에서는 다른 자료구조를 선택하게 되었다. 2차 시도: 연결 리스트 배열 이외의 다른 자료구조를 고려하면서 가장 먼저 떠오른 자료구조가 연결 리스트였다. (문자의 삽입/삭제가 빈번히 발생할 ..

    [CRDT 구현하기] 1차 시도: 배열

    [CRDT 구현하기] CRDT란? [CRDT 구현하기] CRDT란? CRDT 동시 편집 기술 네이버 부스트캠프 그룹 프로젝트에서 코드를 공동 편집 할 수 있는 기술이 필요했다. 이 글에서는 공동 편집 기술이 무엇이며 왜 우리 팀이 CRDT 방식을 선택했는지에 관하여 29223.tistory.com 배열 직접 구현을 시도하며 가장 먼저 고려한 자료구조는 배열이었다. 문자열은 일렬로 나열된 글자들이므로 가장 먼저 떠오르는 배열을 사용하기로 했다. index의 위치에 단순히 삽입하려 시도했고, 만약 index가 같다면 time을 기준으로 정렬하도록 했다. (나중에 생성된 글자가 같은 index에서 더 앞에 오도록) 만약, 모든 조건이 같다면 (index가 같고 Date.now()를 통해 얻는 ms 단위의 시간..

    [CRDT 구현하기] CRDT란?

    CRDT 동시 편집 기술 네이버 부스트캠프 그룹 프로젝트에서 코드를 공동 편집 할 수 있는 기술이 필요했다. 이 글에서는 공동 편집 기술이 무엇이며 왜 우리 팀이 CRDT 방식을 선택했는지에 관하여 이야기 할 것이다. 공동 편집 기술 공동 편집 기술은 서로 다른 사람이 같은 공간에서 동시에 편집할 수 있도록 해주는 기술이다. 공동 편집이 적용된 대표적인 예시로는 노션과 피그마가 있다. 그렇다면 CRDT 이외의 다른 공동 편집 기술에는 어떤 것이 있을까? 그리고 왜 CRDT를 사용하게 되었을까? OT (1989 ~ 2006) CRDT 이전에 사용했던 기술이며 Google Docs, MS Office 등에서 사용되었다. OT 방식의 핵심은 "서버가 병합을 수행"하는 것이다. 현재 문자의 상태가 HELO라고 ..