포스트

Toast ui Editor 사용하기

영화커뮤니티를 주제로 스프링 프로젝트를 진행중이다. 커뮤니티는 게시판 기능이 핵심이기 때문에 사용자가 게시글을 올리기 편하도록 기능을 구현하는데 중점을 맞춰야 한다고 생각한다.

textarea 태그를 사용하여 게시글을 올리게 할 경우 텍스트만 올릴 수 있기 때문에 비효율적이다. 또한 글 크기나 굵기같은 수정이 안되기 때문에 불편하다.

따라서 오픈소스 에디터로 눈길이 가게되었고, 여러가지 에디터중 Toast ui Editor를 사용해보기로 하였다.

사실 오픈소스 에디터는 종류가 다양하다. 대표적인 위지윅 오픈소스 에디터로 CKEditor를 많이 사용하는 것 같았다. 여러 글을 찾아보니 확장성이 좋은 에디터인 것 같았지만 5.0으로 업데이트 되면서 에디터의 핵심기능이 유료로 전환되었다는 이야기가 많이 들리기도하고, 기능이 너무 많아서 난잡해보이는 생각이 들어서 내 스타일은 아니였다.

그 와중에 Toast ui 에디터를 찾게 되었다. NHN에서 개발한 오픈소스 에디터로, 마크다운과 위지윅을 둘 다 지원하고, Viewer도 지원하기 때문에 작성한 글을 HTML태그로 쉽게 변환해주고, 또 작성된 글을 Viewer를 통해 손쉽게 게시글을 볼 수 있는 장점이 있었다.

아무튼 이번 프로젝트를 통해 게시판 에디터 사용법을 알게되었으므로 기록하여 나중에 사용할 일이 생길 때 찾아볼 수 있도록 하는 것이 이번 글의 목적이 되겠다.


공식문서 가이드가 있으므로 여기에서 참고하도록 하자.

먼저 CDN을 통해 에디터를 불러와야한다. Toast ui에서는 npm으로 사용하는 것을 권장하지만, 이번 프로젝트는 Spring/JSP를 사용하기 때문에 CDN으로 사용하기로 하였다.

2021년 1월 6일 기준, 현재의 cdn 주소는 다음과 같다.

1
<script src="https://uicdn.toast.com/editor/latest/toastui-editor-all.min.js"></script>


editor를 불러오기 위해서는 HTML에 id가 editor인 div 태그를 생성한 후, 태그 바로 아래에 CDN을 입력해주어야한다.

1
2
<div id="editor"></div>
<script src="https://uicdn.toast.com/editor/latest/toastui-editor-all.min.js"></script>


에디터를 사용하기 위해서는 제공하는 CSS도필요하다. 필자는 head태그 내부에 넣어주었다.

1
2
3
4
5
6
7
8
<head>
  ...
  <link
    rel="stylesheet"
    href="https://uicdn.toast.com/editor/latest/toastui-editor.min.css"
  />
  ...
</head>


CSS와 자바스크립트를 모두 불러왔다면, 이제 에디터를 띄워보자, 에디터는 자바스크립트 코드를 작성하여 불러올 수 있다.

1
2
3
4
5
6
7
<div id="editor"></div>
<script src="https://uicdn.toast.com/editor/latest/toastui-editor-all.min.js"></script>
<script>
  const editor = new Editor({
    el: document.querySelector("#editor"),
  });
</script>

위와 같이 작성했을 경우, 에디터를 볼 수 있게된다. 아래는 현재 프로젝트의 글쓰기 페이지에서 에디터를 띄운 모습이다.

아마 우측하단에 보이는 언어가 영어일 것이다. 에디터를 한국어로 설정하기 위해서는 CDN을 하나 더 가져와야 한다. 주소는 아래와 같다.

1
<script src="https://uicdn.toast.com/editor/latest/i18n/ko-kr.min.js"></script>


Editor를 한국어로 변경하기위해 작성한 JavaScript 문을 아래와 같이 수정한다. 지금까지 설명한 코드를 전부 합치면 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<head>
  ...
  <link
    rel="stylesheet"
    href="https://uicdn.toast.com/editor/latest/toastui-editor.min.css"
  />
  ...
</head>

<body>
  ...
  <div id="editor"></div>
  <script src="https://uicdn.toast.com/editor/latest/toastui-editor-all.min.js"></script>
  <script src="https://uicdn.toast.com/editor/latest/i18n/ko-kr.min.js"></script>
  <script>
    const editor = new Editor({
      el: document.querySelector("#editor"),
      language: "ko-KR",
    });
  </script>
  ...
</body>

일단 에디터를 불러오는 것과 한국어로 설정하는 것 까지는 완료되었다. 이제 에디터를 불러올 때 설정할 수 있는 옵션들을 알아보자. 전체적인 옵션은 여기에서 확인이 가능하다. 여기에서는 대표적인 옵션들을 알아본다.

  • height : 에디터의 높이를 설정한다.

  • initialEditType : Tui Editor는 마크다운과 위지윅을 지원한다. 에디터를 처음 불러왔을 때 입력방식을 정하는 옵션.

  • initialValue : 에디터를 불러왔을 때 안에 입력될 내용을 해당 옵션을 통해 정할 수 있다.

  • language : 에디터의 언어를 설정한다. 위에서 한국어 정보를 CDN으로 가져왔으므로 ‘ko-KR’를 입력하여 설정하였다.

  • placeholder : HTML의 placeholder와 역할이 동일하다. 에디터에 입력한 값이 없을 경우 밝은 회색으로 출력될 텍스트.

위의 옵션들을 가지고 에디터를 용도에 맞게 커스텀할 수 있다. 필자는 다음과 같이 작성하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script>
  const editor = new toastui.Editor({
    el: document.querySelector("#editor"),
    height: "500px",
    initialEditType: "wysiwyg",
    placeholder: "내용을 입력해주세요",
    hooks: {
      addImageBlobHook: function (blob, callback) {
        const formData = new FormData();
        formData.append("image", blob);
        const imageURL = imageUpload(formData);
        console.log(imageURL);
        callback(imageURL, "image");
      },
    },
    language: 'ko-KR'
</script>
});

개인적으로 자바스크립트가 HTML파일 안에서 길게 작성될 경우 지저분해 보일 수 있기 때문에 다른 파일로 빼낸 다음 import하여 사용하는 것을 추천한다. 해당 글에서 import하는 것은 생략한다.

위에서 언급하지 않았지만 hooksevent 옵션은 에디터에서 사용자가 글을 작성할 때 특정한 이벤트가 발생할 경우에 작동하게할 수 있는 함수라고 보면 된다. 이는 다음 글 Toast ui Editor 이미지 업로드하기에서 자세히 다루도록 하겠다.

이 포스트는 저작권자의 CC BY 4.0 라이센스를 따릅니다.