# Braid: HTTP 동기화 기술

> Clean Markdown view of GeekNews topic #15026. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15026](https://news.hada.io/topic?id=15026)
- GeekNews Markdown: [https://news.hada.io/topic/15026.md](https://news.hada.io/topic/15026.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-05-27T10:05:05+09:00
- Updated: 2024-05-27T10:05:05+09:00
- Original source: [braid.org](https://braid.org/)
- Points: 12
- Comments: 1

## Topic Body

- **Braid**는 상호운용 가능한 상태 동기화를 위한 알고리듬, 애플리케이션, 도구 및 표준을 만드는 오픈 작업 그룹임.  
- 목표는 네트워크 컴퓨팅 시스템 전반에서 분산 상태를 로컬 변수처럼 쉽게 읽고 쓸 수 있도록 하는 것임.  
- 매 2주마다 오픈 미팅을 통해 애플리케이션 및 시스템 요구사항을 논의하고, 공통점을 식별하며, 공유 프로토콜에 대한 합의를 찾음.  
  
### Braid-HTTP: HTTP를 위한 동기화  
  
- **Braid-HTTP**는 HTTP를 상태 전송에서 상태 동기화 프로토콜로 일반화하는 확장임.  
- HTTP에 다음 기능을 추가함:  
  - HTTP 리소스 **버전 관리**  
  - GET 요청에 대한 **구독(Subscription)**  
  - Range 요청에 대한 **PATCH**  
  - OT 또는 CRDT 동작을 지정하는 **Merge-Type**  
- 이러한 기능을 통해 웹 리소스는 여러 클라이언트, 서버 및 프록시 간에 자동으로 동기화되고, 여러 작성자가 임의의 네트워크 지연 및 분할 하에서도 일관성을 보장하며 동시에 편집할 수 있음.  
- 웹 애플리케이션은 Braid 확장을 사용하여 협업 편집, 서버리스 오프라인 모드 및 P2P 네트워킹을 제공할 수 있음.  
- 표준 라이브러리를 사용하면 기존 웹 애플리케이션 및 브라우저에 이러한 기능을 쉽게 추가할 수 있음.  
- 자세한 내용은 IETF 인터넷 초안에서 확인할 수 있음.  
  
### Braid 프로토콜 사용하기  
  
- **Braid**는 현재의 웹과 호환되며, 현재의 브라우저에서 작동하고, 기존 웹 애플리케이션에 쉽게 추가할 수 있음.  
- 다양한 언어에 대한 라이브러리가 있음:  
  - Javascript: braid-http, braid-protocol  
  - Haskell: wai-braid  
  - Lua: Paul Kulchenko가 개발 중  
- Chrome에서는 Braid-Chrome 확장을 사용하여 Braid 기능을 사용할 수 있음.  
  
### Braid 동기화 모델  
  
- **프로토콜 구현**:  
  - braid-http  
  - braid-protocol  
  - wai-braid  
- **브라우저 확장**:  
  - Braid-Chrome  
- **상태 추상화 라이브러리**:  
  - Braid-Text (텍스트용)  
  - Redwood  
  - Statebus  
  - Statecraft  
- **알고리듬**:  
  - Diamond Types: 세계에서 가장 빠른 텍스트 CRDT  
  - Antimatter: 세계 최초의 히스토리 프루닝 텍스트 CRDT  
  - Sync9: 텍스트 및 JSON을 위한 CRDT+OT  
  - SyncX: Sync9  
  - Shelf: 매우 간단하고 유용한 JSON CRDT  
  - Diffsync: 재귀적 3방향 병합을 사용하는 CRDT+OT  
  - Tiny-Merge: 실용적인 CRDT의 잘 설계된 라이브러리  
  - CR-SQLite: SQLite를 매우 유용한 CRDT로 변환  
  - Portals: 모든 OT 또는 CRDT에 대한 복사, 이동 및 랩 작업  
  - Simpleton: 모든 CRDT에 대한 매우 간단하고 빠른 경량 클라이언트  
- **호환성**:  
  - Automerge 호환성  
  - ShareDB 및 Sync9 호환성  
  
#### 애플리케이션  
  
- 이 웹사이트 자체   
- Peery View: Braid 기반 P2P 평판 시스템  
- Quiet: torDT를 사용한 P2P 채팅  
- Wiki  
  
#### 함께 일하기  
  
- **오픈 그룹**임.  
- 매 2주마다 Zoom 링크에서 일반 회의를 가짐.  
- 새로운 진행 상황을 데모하고, 표준을 논의하며, 분산 웹 구축 접근 방식을 논의함.  
- 특별 주제에 대한 중간 회의도 주기적으로 일정에 추가됨.  
  
#### 표준 만드는 방법  
  
- IETF에서 공개적으로 작업함.  
- Braid 및 HTTP 메일링 리스트에서 사양을 논의함.  
- Github에서 Braid 사양을 편집할 수 있음.  
- 문제가 있으면 Github에 파일을 제출할 수 있음.  
- 아이디어가 있으면 사양에 작성하고 Pull Request를 발행할 수 있음.  
- 거친 합의에 도달하면 Pull Request가 수락됨.  
- 표준 논의에 대한 최신 정보를 얻으려면 메일링 리스트를 구독하고 Github를 클릭할 수 있음.  
- 도움이 필요하면 Michael Toomim에게 이메일을 보내면 도움을 받을 수 있음.  
  
#### Braid 프로토콜  
  
- **Braid 프로토콜**은 여러 동기화 알고리듬이 공통 네트워크 프로토콜을 통해 상호 운용할 수 있도록 함.  
- 오늘날의 동기화 장치들은 서로 다른 프로토콜을 사용하지만, 그들의 네트워크 메시지는 시간의 버전, 공간의 위치 및 시간의 범위에 걸친 공간의 패치를 전달함.  
- 패치 집합의 구성은 수학적 구조인 브레이드를 형성함.  
- Braid 프로토콜은 모든 동기화 장치가 시간의 변화를 표현하고 일관된 상태로 해결할 수 있는 표준 메시지 형식임.  
- 데이터 모델을 탐색할 수 있는 인터랙티브 데모:  
  - 브레이드와 상호작용하기  
  - 랜덤 브레이드 생성하기  
- HTTP를 통한 동기화에 관심이 있다면 프로토콜 사양을 검토하고 메일링 리스트에 의견을 제공할 수 있음.  
  
#### 프로토콜 로드맵  
  
- 현재 Braid 사양은 HTTP를 두 가지 동기화 차원으로 확장함:  
  - 레벨 0: 오늘날의 HTTP  
  - 레벨 1: 푸시 업데이트가 있는 구독  
  - 레벨 2: P2P 일관성 (패치, 버전, 병합)  
- 또한 다음 P2P 기능을 프로토타이핑 중이지만 아직 표준화되지 않음:  
  - 레벨 3: P2P 의미론 (메서드, 검증, 확인)  
  - 레벨 4: P2P 전송 (URL, 명명, 암호화, 라우팅)  
- 설명은 meeting-2에서 Mike의 발표를 참조할 수 있음.  
- 네 가지 모든 영역에서 협력을 환영함.  
  
#### Braid가 동기화 장치를 상호 운용 가능하게 함  
  
- **Rafie Walker**는 Braid 프로토콜을 사용하여 OT 시스템과 CRDT를 동기화함.  
- 웹소켓에 바벨피쉬가 있어 ShareDB의 네트워크 메시지를 Braid 메시지로 변환하고 그 반대도 가능함.  
- **ShareDB와 Sync9 간의 바벨피쉬**:  
  - 라이브로 시도해볼 수 있음.  
  - ShareDB 프로토콜에 대한 통찰력을 제공한 Seph Gentle에게 감사함.  
  - 이 바벨피쉬는 대부분 완성되었지만, 두 동기화 장치가 다른 정렬 순서로 충돌을 해결하는 경우를 처리하지 않음.  
  - 이를 위해 동일한 병합 유형을 구현해야 함 (프로토콜 사양 참조).  
- Automerge, CRDT 시스템을 위한 바벨피쉬 설계도 시작함.  
- 동기화 장치가 있다면 Braid 호환성 레이어를 개발하기 위해 함께 작업할 수 있음.  
  
#### 왜 "Braid"인가?  
  
- Braid는 비디오 게임 Braid처럼 웹에 역사적 시간 여행을 추가함.  
- 월드 와이드 웹의 각 가닥을 꼬아 웹을 더 두껍고 강력하며 견고하게 만듦.  
- 웹 표준에서 동기화 및 분산 기술에 대한 여러 관점을 함께 엮음.  
- 브레이드는 동기화 장치에 필요한 정보를 포함하는 수학적 구조이자 컴퓨터 데이터 구조임.  
- 편집을 브레이드의 패치로 표현함으로써 여러 동기화 장치가 상호 운용할 수 있게 함.  
  
### GN⁺의 의견  
  
- **Braid 프로토콜**은 다양한 동기화 알고리즘을 통합할 수 있는 강력한 도구로, 분산 시스템에서 일관성을 유지하는 데 큰 도움이 될 수 있음.  
- **CRDT와 OT**를 모두 지원하는 점은 협업 애플리케이션 개발자에게 매우 유용할 것임.  
- **Braid-HTTP**의 확장은 기존 웹 애플리케이션에 쉽게 통합할 수 있어, 개발자들이 새로운 기술을 도입하는 데 큰 장벽이 없을 것임.  
- **Braid의 오픈 미팅**은 커뮤니티 참여를 장려하고, 다양한 의견을 수렴하여 더 나은 표준을 만들 수 있는 기회를 제공함.  
- **다양한 언어 지원**은 개발자들이 자신이 선호하는 언어로 Braid를 사용할 수 있게 하여, 더 많은 개발자들이 참여할 수 있는 환경을 조성함.

## Comments



### Comment 25620

- Author: neo
- Created: 2024-05-27T10:05:05+09:00
- Points: 2

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40480016) 
##### 해커뉴스 댓글 모음 요약

* **새로운 braid-text 라이브러리 출시 예정**
  - 웹 앱에 협업 편집 기능을 쉽게 추가할 수 있는 라이브러리 소개.
  - Node.js 앱에 간단히 추가 가능하며, WebSocket이 필요 없음.
  - `simpleton` 병합 타입을 사용하여 클라이언트의 히스토리 오버헤드가 없음.
  - Braid-Chrome 확장을 통해 버전 히스토리 확인 가능.

* **URL에 버전 번호 포함 안 함**
  - URL에 버전 번호가 포함되지 않고, 별도의 헤더로 전송됨.
  - 특정 버전에 링크하기 어려움.
  - 동기화가 HTTP와 밀접하게 연결되어야 하는지 의문.

* **HTTP 확장 대신 기존 표준 사용 선호**
  - HTTP를 확장하기보다는 기존 표준을 사용하는 것이 더 나을 수 있음.
  - `partial PUT` 대신 `PATCH` 사용이 더 적절할 수 있음.

* **분산 인프라에 유리**
  - Braid가 클라우드 없이도 기기 간 상태 동기화 비용을 낮출 수 있음.
  - 탈중앙화된 인프라에 유리함.

* **일반적인 이벤트 스트리밍 목표 가능성**
  - 개별 리소스 변경 구독 가능.
  - 더 일반적인 이벤트 스트리밍 목표 가능성에 대한 질문.

* **WebDAV와의 비교**
  - WebDAV와 유사하지만 더 강력한 기능 제공.
  - HTTP 위에 계층을 쌓는 것이 더 나을 수 있음.

* **사용 용도에 대한 질문**
  - 이 라이브러리를 어디에 사용할 수 있는지에 대한 질문.
  - 사용 사례가 명확하지 않음.

* **관련 링크**
  - Braid: Synchronization for HTTP 관련 링크 제공.

* **실시간 전용 여부**
  - 실시간 전용인지, 히스토리 정리 기능이 있는지에 대한 질문.
  - 클라이언트가 드물게 연결되는 경우에 대한 우려.

* **HTTP의 특성**
  - HTTP는 요청-응답 프로토콜로 상태 전송을 다루지 않음.
  - Braid-HTTP가 상태 동기화 프로토콜로 확장된다는 설명이 이상함.
