Skip to main content

Command Palette

Search for a command to run...

[트러블슈팅] 글 작성 라이브러리(feat. react-draft-wysiwyg) 폰트크기 & 폰트종류 등이 작동 안 하는 이슈

Updated
3 min read
[트러블슈팅] 글 작성 라이브러리(feat. react-draft-wysiwyg) 폰트크기 & 폰트종류 등이 작동 안 하는 이슈

이번 프로젝트에서 글 작성을 해야하는 폼이 필요해서 라이브러리를 사용하기로 했다!

처음에는 Tiptab 라이브러리 사용하려고 했는데 이미지 처리에 어려움이 있어서 react-draft-wysiwyg로 결정하기로 했다.

먼저 둘의 공통점과 차이점을 보자

공통점은 둘 다 게시글 작성용 리치 에디터이다.

차이점

  • react-draft-wysiwyg의 경우 간단하고 빠른데 커스터마이징에 한계가 있고

  • Tiptab의 경우 러닝커브가 높지만 커스터마이징이 가능하다

우리 프로젝트는 현재 간단한 글 작성과 이미지 삽입 기능이 핵심이기 때문에 react-draft-wysiwyg를 우선 선택! (향후 기능 확장이나 커스터마이징 요구가 커지면 Tiptap으로 전환하는 방안도 고려하고 있음)

일단 구현을 했는데 font + font 크기 + 이미지 등 기능이 작동을 안 하는 이슈가 발생했다🥺

일단 백엔드에서 이미지 처리 준비가 안되었다고 해서 빼뒀고 .. 폰트크기 수정만 가능하게 했다..!

일단 App.jsx에서 react-draft-wysiwyg.css를 import 해주었다.

import { BrowserRouter } from 'react-router-dom'
import AppRoutes from './routes/AppRoutes'
import PageScrollToTop from './components/common/PageScrollToTop'
import { useEffect } from 'react'
import useAuthStore from './store/login/useAuthStore'
import { ToastContainer } from 'react-toastify'
import 'react-toastify/dist/ReactToastify.css'
import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css' //import 해주기

WriteEditor.jsx 기존 코드

import { Editor } from 'react-draft-wysiwyg'
import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css'

const WriteEditor = ({ editorState, onEditorStateChange, placeholder }) => {
  return (
    <Editor
      editorState={editorState}
      onEditorStateChange={onEditorStateChange}
      placeholder={placeholder}
      wrapperClassName='demo-wrapper'
      editorClassName='demo-editor'
    />
  )
}

export default WriteEditor

기존 코드에서 폰트크기 선택이 가능하게 커스텀 해주었다.

import React from 'react'
import { Editor } from 'react-draft-wysiwyg'
import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css'

const styleMap = {
  FONT_SIZE_8: { fontSize: '8px' },
  FONT_SIZE_10: { fontSize: '10px' },
  FONT_SIZE_12: { fontSize: '12px' },
  FONT_SIZE_14: { fontSize: '14px' },
  FONT_SIZE_16: { fontSize: '16px' },
  FONT_SIZE_18: { fontSize: '18px' },
  FONT_SIZE_24: { fontSize: '24px' },
  FONT_SIZE_30: { fontSize: '30px' },
  FONT_SIZE_36: { fontSize: '36px' },
}

const WriteEditor = ({ editorState, onEditorStateChange, placeholder }) => {
  return (
    <Editor
      editorState={editorState}
      onEditorStateChange={onEditorStateChange}
      placeholder={placeholder}
      wrapperClassName='demo-wrapper'
      editorClassName='demo-editor'
      customStyleMap={styleMap}
      toolbar={{
        options: ['inline', 'fontSize', 'list', 'textAlign', 'colorPicker', 'link', 'history'],
        fontSize: {
          options: [8, 10, 12, 14, 16, 18, 24, 30, 36],
        },
      }}
    />
  )
}

export default WriteEditor

근데 …!! 적용이 안되는 문제가 발생했다 🤦🏻‍♀️

코드에는 문제가 없어서.. 어떤게 문제일까 하는 마음에 엄청난 구글링 + AI 에게 도움을 받은 결과

StrictMode를 제거하라는 것을 확인했다.

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'
import './styles/font.css'

createRoot(document.getElementById('root')).render(<App />)

제거 후

정상적으로 작동된다🥺

하지만 StrictMode 제거는 근본적인 문제 해결방법이 아니라서 왜 이런 문제가 발생했는 지에 대해 알아본 결과

react-draft-wysiwyg 문제점

  • 유지보수가 안되고 있다😾

    1. 오랜 기간 동안 업데이트가 없음
    • npm에 최근 배포된 날짜가 오래되었고 새로운 기능 추가나 버그 수정이 거의 이루어지지 않고 있다.
    1. 많은 미해결 이슈
    • GitHub 저장소에 400개가 넘는 issue가 누적되어 있고 공식 데모 사이트에서도 동일한 버그가 반복적으로 발생하고 있지만 개발자가 이를 수정하지 않고 있다.
    1. 커뮤니티의 피드백
    • 사용자들이 제기한 버그(예: 엔터 입력 시 불필요한 <p></p> 태그 생성, 이미지 삽입 후 한글 입력 시 오류 등)가 장기간 방치되어 있고, 이에 대해 "아마 수정할 계획은 없는 것 같다"는 의견이 많다..
    1. 대체 프로젝트 개발
    • 기존 개발자가 새로운 에디터를 개발하고 있는 정황도 있어, 기존 프로젝트에 대한 관심이 줄어든 것으로 보인다..

이러한 이유로 react-draft-wysiwyg 사용은 지양해야 된다는 것을 알았고 .. 현재는 개발 일정 때문에 일단 그대로 진행했지만 추후에 마이그레이션으로 다른 툴을 사용해봐야겠다 🧐

More from this blog

[회고] 풀스택 개발자로 (곧) 1년...

정말 정말 오랜만에 글을 작성한다 🤭 나는 현재 개발자로 취업한 지 거의 1년이 다 되어간다. 이제 10개월임 ! 처음에는 무조건 프론트엔드 개발자로 취업할거임!! 풀스택 NO ! 라는 마음으로 준비했던 취업.. 하지만 현실은 풀스택으로 취업하게 되었다. 취업을 하고 나니 여러가지 생각과 감정이 들었고 맨날 회고 적어야지 ~ 적어야지 ~ 했는데 10개

May 29, 20263 min read

[React] 클라이언트에서 이미지를 압축해보자

우리는 서버 비용을 직접 부담하고 있기 때문에 항상 최적화와 비용 절감 방법을 고민하게 된다. 현재 자유게시판이 활성화가 많이 되지는 않았지만 사용자들이 업로드하는 이미지가 평균 5MB 이상일 경우를 대비해서 클라이언트에서 이미지 압축을 진행했다. 웹에서는 크게 두 가지 방법이 있었는데 Canvas API를 직접 사용하는 방법 browser-image-compression 라이브러리를 활용하는 방법 이 있다. 여러 장점을 고려해 brow...

Oct 8, 20252 min read
[React] 클라이언트에서 이미지를 압축해보자

[책 추천] 프론트엔드 개발자라면 반드시 알아야 할 '웹 접근성' 이야기

내가 생각하는 프론트엔드 개발자는 단순히 보이는 화면만 구현하는 것을 넘어서 누구나 접근할 수 있는 웹을 만드는 데 중요한 역할을 해야 한다고 생각한다. 실무에 바로 적용하는 웹 접근성 가이드북 이번에 이 책을 받고 프엔들이 읽기에 너무 좋다고 생각해서 블로그에 추천 글까지 적게 되었다 ! 목차 Chatper1. 쉽게 이해하는 접근성 Chapter2. 웹 접근성의 기초 Chapter3. HTML 태그, 의미 있게 사용하기 Chpater4...

Jul 27, 20255 min read
[책 추천] 프론트엔드 개발자라면 반드시 알아야 할 '웹 접근성' 이야기

[Next.js] 나만의 학습 블로그 만들기#3-다국어 지원 (Feat.next-i18next)

오늘은 다국어 지원 가능한 기능 구현 과정을 적어보려고 한다. 원래는 댓글기능보다 먼저 구현하려고 했는데 ,, 갑자기 댓글기능 알아보다가 재밌어서 먼저 끝내버렸다,,,🙄 시작하기 전에 정말 어려웠다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 어려움이 많아서 기능 적용하는 데 시간이 꽤 걸렸다 ,,, 다국어 지원 기능 나는 영어랑 일본어를 추가해줬다 ! (해외취업도 관심 있기 때문에 나중에 이력서 낼 때 도움이 되지 않을까? ..🤭) 다국어 구현 방법 구현 방...

Jul 15, 20254 min read
[Next.js] 나만의 학습 블로그 만들기#3-다국어 지원 (Feat.next-i18next)

[Next.js] 나만의 학습 블로그 만들기#4 - 댓글 기능(Feat. Giscus)

댓글기능이 있으면 무조건 재밌을 거 같아서 넣어보려고 한다🤭 아무래도 개발에 관련된 학습 블로그라서 개발자들이 많을 것으로 예상했다 ! 그래서 깃허브 이슈 기반 댓글 시스템을 기반으로 기능을 구현해보려고 한다. 👉🏻 도움이 많이 된 블로그 ! 방법 Giscus | (https://giscus.app) utterances | (https://utteranc.es) 알아봤을 때는 이렇게 두 개가 유명하다고 한다. 그럼 각각의 특징과 장...

Jul 14, 20253 min read
[Next.js] 나만의 학습 블로그 만들기#4 - 댓글 기능(Feat. Giscus)
S

subin-dev-blog

28 posts

끊임없이 배우기 위해 노력합니다. 🌱