본문 바로가기
C.W.K.
Stream
Lesson 05 of 05 · published

왜 CM6 이 이기나

~11 min · why-cm6, reuse, architecture, synthesis

Level 0식은 초고
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"decoration 엔진이 세 역할을 한다는 건 덤이 아니야. CodeMirror 를 고른 이유 그 자체지."

세 기능, 하나의 원시 요소

한 발 물러나서 세 역할을 나란히 놓고 봐. Live Preview 는 범위를 계산해서 mark 를 붙여. voice underline 은 범위를 계산해서 mark 와 widget 을 붙이고. CMD+K 는 제안을 담은 widget 을 붙였다가 수락할 때 문서를 바꿔. 겉보기엔 아무 상관 없는 세 기능, 그러니까 렌더러와 linter 와 AI 에디터가 같은 모양으로 정리되는 거야. 소스 위의 범위를 계산하고, decoration 을 붙이고, 사용자가 확정할 때만 문서를 바꾼다. 원시 요소 하나를 한 번 익히면 soul 레이어 전체가 그 위에서 굴러가.

Live Preview   범위 -> mark                         (모습 렌더)
voice underline 범위 -> mark + 여백 widget           (voice 이슈 표시)
CMD+K          widget 제안 -> 수락 편집 하나         (AI 재작성 무대)

# 입력만 다르고 decoration 원시 요소는 같아. 그게 이 선택의 승리야.

rich-text 모델이라면 우회로 셋으로 갈라져

이제 같은 세 기능을 Tiptap 이나 Lexical 같은 rich-text 트리 위에 짓는다고 상상해봐. Live Preview 는 개념 자체가 성립을 안 해. 트리가 이미 렌더된 형태라서 '소스를 렌더된 모습으로 보여준다' 는 발상이 모델과 부딪히거든. voice underline 은 문자 범위 대신 노드 트리를 뒤져서 위치를 찾고 주석을 달아야 해. CMD+K 프리뷰는 직접 편집되기를 전제로 만들어진 문서 모델 안에서 비파괴적인 제안을 표현해야 하고. 기능마다 트리의 결을 거스르는 자기만의 우회로가 생겨. 서브시스템 하나가 아니라 셋을 짓게 되는 거지.

재사용이 곧 아키텍처

그래서 '메커니즘 하나에 역할 셋' 은 운 좋은 우연이 아니라 하중을 떠받치는 결정이야. CodeMirror 를 고른 건 소스 위에 decoration 을 얹는 그 원시 요소가 세 soul 기능을 전부 같은 모양으로 만들어주기 때문이거든. margin-Pippa 도 라이브 voice 도 inline AI 도, 제품 전체가 한 번 짓고 한 번 디버깅한 메커니즘 하나 위에 올라타. 이 가족의 첫 번째 pillar 인 Reuse 를 에디터 코어 선택으로 표현하면 이렇게 되는 거야. 기능이 제일 많은 substrate 를 고르지 마. 네 기능들이 이미 공유하고 있는 원시 요소를 가진 쪽을 골라. 재사용이 이 정도로 깊어지면 그건 더 이상 최적화가 아니라 아키텍처야.

Code

세 역할, 하나의 decoration 원시 요소·text
기능            모양                                    종류
--------------  --------------------------------------  -----------------
Live Preview    범위 -> mark                            모습 렌더
voice underline 범위 -> mark + 여백 widget              voice 이슈 표시
CMD+K           widget 제안 -> 수락 편집 하나           AI 재작성 무대

# 입력만 다르고 원시 요소는 같아. rich-text 트리였다면 셋이 각각
# 문서 모델을 거스르는 우회로가 됐겠지. CM6 은 이걸 하나로 묶어.

External links

Exercise

Rekindle 에 다음으로 넣고 싶은 에디터 기능을 아무거나 하나 골라봐. 번역 제안 띄우기라든가 반복되는 단어 하이라이트 같은 것. 그리고 물어봐. 이게 '소스 위 범위를 계산하고, mark 나 widget 을 붙이고, 수락할 때 문서를 바꾼다' 로 정리돼? 그렇다면 거의 공짜야. 기존 엔진에 얹으면 되니까. substrate 를 잘 고르면 새 기능마다 그 값을 계속 돌려받는다는 걸 확인해.
Hint
'작가 텍스트 위에 뭔가 보여주기' 로 표현되는 기능은 대부분 decoration 모양으로 정리돼. 그렇게 안 되는 것, 예를 들면 진짜 rich-text 표 편집기 같은 게 다른 substrate 를 정당화할 만한 기능이지. Rekindle 이 언젠가 코어를 넘어서게 된다면 그런 식으로 알게 될 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.