「번역」ProseMirror 1.0 출시

✍🏼 작성일 2021년 11월 12일   
❗️ 참고: 이 글이 작성된 지 이미 일이 지났습니다. 시의성에 유의하세요
🖥  설명:원문 작가는 2017년 10월 13일에 ProseMirror 1.0 개발 과정을 회고하며 작성한 글입니다. 본문은 의역에 중점을 두었습니다.

본문의 모든 https://prosemirror.xheldon.com 링크는 https://prosemirror.net 링크로 대체하여 원문의 원본 참조를 확인할 수 있습니다.

2년 전, 저는 ProseMirror 프로젝트를 시작했습니다. 왜냐하면 [더 나은](/tech/ProseMirror.html) WYSIWYG 방식의 편집 방법을 시도해보고 싶었기 때문입니다. 오늘, 저는 이 라이브러리1.0 버전을 발표했습니다. 프로젝트의 아키텍처와 내부 구현은 그 생명주기 동안 상당히 변화했지만, 초기의 목표는 달성되었다고 생각합니다.

ProseMirror는 웹 UI 라이브러리입니다. 웹 플랫폼의 강점과 (특히) 약점을 대상으로 하는 몇 가지 도전 과제를 해결하지만, 이를 또 다른 TinyMCE의 대체품으로 보지 마십시오. 오히려, 이는 더 일반적인 리치 텍스트 편집 방식이며, 우연히 브라우저에서 JavaScript로 구현된 것입니다(즉, 이 라이브러리의 로직을 다른 언어 버전의 리치 텍스트 편집기로 번역할 수 있습니다. 예를 들어 OC 버전 등—역자 주).

Scheme 제약 기반 편집

ProseMirror에서 가장 중요한 것은 실제 문서 내용과 무관하다는 점입니다. 이는 과거에는 완전히 사용자 정의된 편집기 구현이 필요했던 애플리케이션을 이 라이브러리 위에 구축할 수 있게 합니다.

제가 말하는 문서 내용과의 무관성은 ProseMirror의 Scheme 제약 기능을 의미합니다. 코어 편집기는 문서의 구체적인 내용에 대해 어떠한 요구 사항도 두지 않으며, 대신 구성 가능한 데이터(scheme)를 통해 어떤 내용이 허용되고 어떤 구조를 이루는지 결정합니다. ProseMirror는 정확히 여러분이 필요로 하는 사용자 정의 의미론적 문서 형식과 함께 작동하며, 여전히 사용자가 익숙한 WYSIWYG 편집 스타일을 제공합니다.

예를 들어, 과학 글쓰기 애플리케이션은 장, 각주 및 참고 문헌을 포함하는 scheme을 사용할 수 있습니다—SciFlowFidus Writer 같은 두 애플리케이션이 이미 ProseMirror 위에 구축되었습니다. 또는 뉴스 기관은 자신의 콘텐츠 모델을 반영하는 scheme을 구축하여 기자들이 글을 쓸 수 있는 편집기를 제공할 수 있습니다. 예를 들어, 《뉴욕 타임즈》는 자신들의 CMS에서 ProseMirror를 사용하고 있습니다. 또는 여러분의 회사가 여러 다른 콘텐츠 모델의 편집기를 가지고 있다면, ProseMirror를 다른 scheme과 함께 사용하면 편집기 코드를 더 쉽게 통합할 수 있습니다. Atlassian은 위키부터 버그 추적기, 소스 호스팅까지 자신들의 제품에서 ProseMirror를 도입하고 있습니다.

협업

[협업 편집](/tech/Collaborative-Editing-in-ProseMirror.html)에 대한 지원은 처음부터 ProseMirror의 핵심이었습니다. 문서 업데이트의 표현 방식이나 실행 취소 기록 모듈의 작동 방식과 같은 시스템의 여러 측면은 협업 편집의 요구 사항에 크게 영향을 받았습니다. 저는 이것이 기존 편집기 위에 확장할 수 있는 기능이 아니라고 확신합니다.

다행히, 이러한 제약들은 설계를 불편한 구석으로 몰아넣지 않고, 오히려 일반적으로 유익한 방향으로 이끌었습니다. 변경 추적이나 과거 변경 사항을 되돌릴 수 있는 기능과 같은 몇 가지 까다로운 기능들은 협업 편집과 관련된 설계 결정 덕분에 가능해졌습니다.

트랜잭션 기반 상태 업데이트

협업 편집의 요구 사항과 기능적인 단방향 데이터 흐름 아키텍처를 결합하려는 시도는 우리의 설계로 이어졌습니다. 여기서 편집기는 단독으로 상태를 업데이트하는 대신 트랜잭션을 발생시킵니다. 트랜잭션은 새로운 상태를 계산하는 데 사용될 수 있으며, 이를 통해 편집기를 업데이트합니다.

이는 원한다면 애플리케이션의 데이터 흐름 루프에 편집기를 거의 완벽하게 통합할 수 있게 합니다. 또한, 업데이트를 일급 값으로 취급함으로써 외부 상태를 편집기와 동기화하는 것이 훨씬 쉬워졌으며, 이는 새로운 강력한 확장 유형을 가능하게 합니다.

요약

몇 년간의 미친 실험과 지속적인 변화 끝에, 1.0 버전부터 우리는 안정성을 목표로 합니다. 코어 모듈은 가능한 한 오랫동안 1.x에 머무를 것이며, 이는 새 버전에서 코드를 변경할 필요가 없음을 의미합니다. RFC 진행 상황이 있으며, 이를 통해 커뮤니티로부터 새로운 기능에 대한 피드백을 받을 것입니다.

만약 여러분이 간단한 플러그인 방식의 리치 텍스트 편집기 컴포넌트를 찾고 있다면, ProseMirror는 여러분이 필요한 것이 아닐 수도 있습니다. (우리는 그런 컴포넌트가 ProseMirror로 구축되기를 바랍니다.) 이 라이브러리는 단순함을 희생하면서도 요구 사항이 높고, 고도로 통합된 사용 사례에 최적화되어 있습니다. 하지만 여러분의 애플리케이션이 WYSIWYG 편집기의 한계를 시험하고 있다면, 사용해 보는 것을 고려해 보십시오.

- EOF -
이 글의 최초 게시: 「번역」ProseMirror 1.0 출시 - Xheldon Blog