-
Notifications
You must be signed in to change notification settings - Fork 6
텍스트 에디터 및 HTML Sanitizer 라이브러리 도입
Seongjin Hong edited this page Aug 5, 2024
·
2 revisions
사용자가 크루루 서비스를 이용하여 동아리 부원 모집 공고를 작성할 때 편의를 제공합니다.
- 모집 공고는 크루루에서 동아리 모집 담당 임원과 지원자가 만나는 접점입니다.
- 동아리 자체의 아이덴티티, 모집하고자 하는 포지션의 특성, 인재상과 JD가 사람들에게 효과적으로 전달될 수 있도록 다양한 타이포그래피 기능 지원이 필요하다고 판단하였습니다.
- Heading 요소
- List 요소 (
ol
,ul
) - 문단 정렬 스타일
- 서체 스타일 (색상, 배경색상 등)
- 부가적인 학습곡선이 요구되는 마크다운 등의 문법 지원보다는, 직관적인 UI를 갖춘 텍스트 에디터가 기능 사용성 측면에서 더 바람직하다고 보고 WYSIWYG 에디터를 우선 고려하게 되었습니다.
사용자가 임의로 입력한, HTML 포함 콘텐츠를 렌더링하는 과정에서 XSS 공격을 방지합니다.
- WYSIWYG 에디터를 통해 입력된 데이터는 일반적으로 HTML 태그 문자가 포함된
string
타입으로 저장됩니다. - React 기반 애플리케이션 화면에 이 데이터를 렌더링하려면
dangerouslySetInnerHTML
prop을 사용해야 합니다. 이름에서 유추할 수 있듯이 보안적으로 위험한 방법이며, 특히 악의적인 사용자에 의한 스크립팅 공격을 허용할 가능성이 있습니다. - 이러한 공격을 방지하기 위하여 별도의 HTML Sanitizer 라이브러리를 함께 도입하고자 합니다.
기준 | 상세 내용 |
---|---|
오픈소스 기반 무료 | 오픈소스에 기반한 무료 라이브러리여야 한다. |
라이선스 문제 없음 | 상업적/비상업적 사용에 따른 문제가 없어야 한다. |
활발한 사용자 커뮤니티 유무 | 높은 인지도와 함께 각종 도입기, 트러블슈팅 기록이 꾸준히 축적된 상태여야 한다. |
꾸준한 유지보수 여부 | 현 시점 기준으로 최근 6개월 이내에 업데이트 배포 이력이 있어야 한다. |
(에디터 한정) 한글 지원 | 한글 입력 및 저장에 문제가 없어야 한다. |
최종 선택 : Quill (react-quill)
Quill는 JS/TS/React에서 사용 가능한 오픈소스 WYSIWYG 에디터 라이브러리입니다.
- Quill는 React와 함께 사용 가능한 텍스트 에디터 중 가장 대중적이며(깃허브 ⭐ 42.6k), 무료입니다.
- React용 예시 코드가 공식 제공되어 최소한의 학습 곡선으로 기능 구현이 가능할 것으로 기대됩니다.
- NHN Cloud에서 개발한 마크업 언어 기반 오픈소스 에디터
- 타이포그래피, 이미지 업로드, 테이블 생성 등 다양한 기능을 지원
- WYSIWYG보다는 마크업 기반 ‘웹페이지 에디터’의 역할에 가까움
- 2023년을 끝으로 지원 중단되었으며, React v18을 미지원하여 후보군에서 탈락
- 오픈소스 기반 유명 WYSIWYG 에디터
- React component 공식 지원
- 무료 버전의 경우 cloud-hosted 버전만 선택 가능하며 월 1,000회 로드 제한이 걸려있어 후보군에서 탈락
- Facebook에서 공개했던 오픈소스 에디터
- Heading, Blockquote, List 등 타이포그래피 위주로 지원했으며 React와의 직접 연동을 지원
- 2020년 v0.11.7 버전을 끝으로 지원 중단되었으며, 한글 입력시
onChange
이벤트 문제로 상태값 저장이 제대로 되지 않는 이슈가 있어 후보군에서 탈락
- 순수 TypeScript로 개발된 오픈소스 에디터
- 워드프로세서에 준하는 다양한 기능 지원 → 실제 필요 범위에 비해 지나치게 많은 기능 및 플러그인
- 국내 사용자 커뮤니티 및 도입 기록을 찾아보기 힘듦 → 부가적인 러닝 커브 및 트러블슈팅 난이도 상승 이슈로 후보군에서 탈락
기준 | Quill | Toast UI | TinyMCE | Draft.js | Jodit |
---|---|---|---|---|---|
오픈소스 기반 무료 여부 | O | O | △ | O | O |
라이선스 문제 없음 | O | O | O | O | O |
활발한 사용자 커뮤니티 유무 | O | O | O | △ | X |
꾸준한 유지보수 여부 | O | X | O | X | O |
한글 지원 | O | O | O | X | O |
최종 선택 : DOMpurify
DOMpurify는 HTML 태그가 포함된 텍스트에서 위험 요소를 제거하는(sanitize) 라이브러리입니다.
- 관련 라이브러리 중 가장 대중적으로 알려져 있습니다.
- 국내에도 Quill와 연계된 사용기들이 다수 기록되어 있어 빠른 도입에 유리하다고 판단했습니다.
- Node.js 등 서버사이드의 백엔드 환경에서 사용하는 데에 특화되어 있어 후보군에서 제외
- DOMpurify와 유사하게 HTML 포함 텍스트에서 위험 요소를 제거하는 라이브러리
- DOMpurify 대비 React, Quill 등과 연계한 사용기가 부족하여 후보군에서 제외
- Chrome, Firefox 등 브라우저 차원에서 Sanitizing을 지원하기 위한 API로 개발
- 2023년 10월 Chrome의 API deprecated 처리를 계기로 사실상 사장된 상태
기준 | DOMpurify | sanitize-html | js-xss | Sanitizer API |
---|---|---|---|---|
오픈소스 기반 무료 여부 | O | O | O | - (브라우저 내장) |
라이선스 문제 없음 | O | O | O | - (브라우저 내장) |
활발한 사용자 커뮤니티 유무 | O | △ | X | X |
꾸준한 유지보수 여부 | O | O | O | X |