[작은제안] MD(Markdown) 지원관련해서... (MD plugin?) > 자유게시판

자유게시판

[작은제안] MD(Markdown) 지원관련해서... (MD plugin?) 정보

[작은제안] MD(Markdown) 지원관련해서... (MD plugin?)

본문

웬지 최근 AI랑 자주 궁금한 것을 묻고 대답하는 경우가 많습니다. 

좋은 대화들을 제미니 같은 경우에는 자동으로 구글닥스로 보내기 버튼이 있어 자주 보낼 수 있습니다.

하지만, 때로는 나만의 저장 게시판에 옮겨두기도 하는데 그 때 복사버튼을 클릭해서 내용을 저장한다음 붙여넣을 때 그 내용이 md(마크다운)로 저장되어, 마치 제미니나 vscode ai 패널에서 나누던 내용 그대로를 다시 볼 수 있습니다. 

저는 개인적으로 md editor를 사용하고 있는데, 왜 예전의  님께서 그리도 그누보드에 md 에디터를 강조했는지 조금은 이해가 됩니다. 당시에는 md로 저장할 일이 그리도 많이 생각하지 않았었을 때 였던 것 같아요.

최근은 거의 ai와 나누는 모든 대화들(정보들)이 md 로서 제공되고 있네요. ㅜㅜ;

소망드리옵기는, 저희 그누게시판도 md를 기본적용해주시면 (플러그인을 사용하셔도 좋고... - 아마도 ckeditor에도 md 플러그인이 있는 것으로 압니다만) 더욱 미래의 소스코드의 소통등을 위해 나아가는 방향이 아닐까 생각을 해봅니다. 

혹, 제가 이미 적용된 기능을 사용을 할 줄 몰라서라면 양해를 부탁드립니다. 

추천
0

베스트댓글

댓글 16개

 그냥 글 중간에 md 파트만 따로 불러와서 넣는 것이 가능한지 해서 여쭌 것입니다... 이쁘게 나오면 더욱 좋죠... ㅎㅎ;

Vditor의 문제점은 컨텐츠 저장이 MD 포맷으로 된다는 것입니다.  그래서 그 때 요청했던 것이 html 로 output을 주면,  내용 저장 필드를 2개로 해서 하나는 md로 하나는 html로 저장해 두는 것이었는데 이것을 그 때 구현을 안해 주워서..

html로 저장되는 곳은 64K 이상으로 저장되게 만들어 줘야되고..

 

하여간 그 때 마크다운에 기능을 추가해 볼려고 했었던 기억이 납니다.

글씨 색상, 배경색 추가등 그래서 마크다운 파서도 수정해 볼려고했었죠. 

 

AI 코딩이라면 다시 한번해 보고 싶네요

@마젠토 ai로 조금 수월하게 코드 제안을 받는 시대이니만큼 도전을 해보고 싶네요. 하지만 저는 이미 quilleditor 연구로도 벅차... 여유가 되면 quill에도 md 파트 넣기를 소망해봅니다. 

@마젠토 고맙습니다. 어제 highlight.js 와 연동이 생각외로 간단해서 놀랬습니다.
언젠가 스킨을 공개할 때가 오기를 소망드리며... : )

 

https://ui.toast.com/tui-editor

저는 이걸 메인으로 사용합니다. ai 와 대화 한걸 저장할때 md에디터가 매우 유용하죠~

 nextjs 랑 붙여서 사용할 때는 잘 안되어 포기했는데, php에서는 괜찮은 듯하네요. 재미니 답변 복사버튼(MD카피)클릭후 바로 붙여 이쁘게 저장하기 짱이네요... ㅎㅎ;

이미지 드래그앤 드랍만 되면 정말 좋을 것 같기도 합니다. 나중에 다시 연구해보겠습니다. 귀한 말씀 감사드립니다. 

아래는 재미니에게 몇가지 물어본 후 그냥 로그를 남겨보고 싶어서... 

--------

* 저의 질문: 

부족한 내 작은 아이디어는 그누보드에서 저장할 때 
wr_content에 json타입으로 두가지를 다 저장하는 것은 어떤가 싶기도해... 검색에서 약간 그럴 수 있지만, 
아니면  wr_1에는  md를 넣고 wr_content엔 변환된 html을 저장하고 말이야... 
그럼 칼럼이 2개가 필요하고 update문을 위해 update_tail.skin.php등에서 작업을 추가로 해야겠지만... 

 

* 재민이 답: 

아이디어가 아주 좋습니다! ✨ TOAST UI Editor나 Quill을 그누보드(Gnuboard)에 적용할 때 가장 현명한 접근 방식은 원본 데이터의 보존실제 서비스의 성능이라는 두 마리 토끼를 잡는 것입니다.

제시해주신 두 가지 방안은 모두 장단점이 명확하며, 실제로 많은 웹 서비스에서 사용하는 표준적인 방식들입니다.


 

1. JSON 타입으로 두 가지를 모두 저장하는 방안 (JSON 필드 활용)

 

이 방식은 DB 칼럼을 하나만 사용하면서 유연성을 극대화하는 모던한 접근법입니다.

데이터 저장 방식 wr_content에 JSON 저장
저장 형식 (JSON) json { "markdown": "여기에 마크다운 원본", "html": "여기에 변환된 HTML", "delta": "Quill을 쓴다면 여기에 Delta 데이터" }
장점 - DB 칼럼을 추가할 필요 없음. - 모든 데이터(MD 원본, HTML 결과, Quill의 Delta 등)를 하나의 레코드로 묶어 관리하기 좋음. - 데이터의 원본이 훼손될 염려가 적음.
단점 - 데이터 검색/인덱싱이 복잡해짐. (JSON 필드 내 텍스트 검색 성능 문제) - 그누보드가 JSON 필드를 기본적으로 지원하는지, 또는 해당 필드에 대한 최대 길이 제한이 없는지 확인해야 함.
적합한 경우 저장 공간에 대한 압박이 적고, 원본 데이터의 무결성이 가장 중요하며, 검색은 주로 HTML 필드가 아닌 제목/태그 등에 의존할 때.

 

2. 두 개의 칼럼에 나누어 저장하는 방안 (가장 실용적이고 추천하는 방안)

 

제시해주신 두 번째 방안인 wr_1 (추가 칼럼)에 MD를, wr_content에 HTML을 저장하는 방식은 그누보드 환경에서 가장 실용적이고 성능 면에서 유리합니다.

데이터 저장 방식 wr_1 (MD 원본) + wr_content (HTML 결과)
저장 형식 wr_1 (TEXT/LONGTEXT): Markdown String wr_content (TEXT/LONGTEXT): HTML String
장점 - 조회(Read) 성능이 매우 빠름: 글을 보여줄 때 바로 wr_content의 HTML을 사용하면 되므로, 실시간 렌더링 비용이 전혀 없음. - 검색 성능 향상: wr_content (HTML)에 검색 엔진 인덱싱이 용이하여, 본문 검색 시 성능 손해를 줄일 수 있음. - MD 원본 보존: wr_1에 MD 원본이 남아있어 나중에 에디터 수정 시나 마이그레이션 시 유연함.
단점 - DB 테이블에 칼럼(wr_1)을 추가해야 함. - 글 수정 시 update_tail.skin.php 등에서 두 칼럼을 동시에 업데이트하는 로직을 구현해야 함. (구현 비용 발생)
적합한 경우 **글 조회(뷰 페이지)**가 잦고, 성능을 중요시하며, 마크다운 원본도 보존해야 할 때. (대부분의 블로그/커뮤니티에 가장 적합)

 

🏆 최종 추천: 2번 방안 (wr_1 = MD, wr_content = HTML)

 

그누보드 환경에서 웹사이트의 주 목적이 콘텐츠 조회라고 가정할 때, 2번 방안이 가장 좋습니다.

  1. 쓰기/수정 시: 에디터(Toast UI)에서 getMarkdown()으로 MD를, getHTML()로 HTML을 가져와 DB의 두 칼럼에 저장합니다.

  2. 조회 시: wr_content (HTML)을 바로 화면에 출력합니다. 렌더링 시간이 0에 수렴합니다.

  3. 다시 수정 시: wr_1 (MD 원본)을 에디터의 setMarkdown() 함수로 불러와서 편집 화면을 구성합니다.

이 방식은 구현 초기 비용은 들지만, 사용자에게 보여지는 속도데이터의 안전성이라는 핵심 가치를 모두 확보할 수 있는 표준적인 방법입니다.

@xpem 많은 스킨들이 wr_1을 사용하니, 호환성 고려하세요.

그래서 에전에는 wr_content외에  wr_content_md를 추가하는 것으로.

그러게요. 위의 글은 그냥 일례로 여분필드를 이용해서 시도해볼 수 있다는 것을 나눈 것이구요. 그냥 PHP파서 몇종류를 테스팅해서 md->html도 나쁘지 않은 것같습니다. 변환시 서버에 부하를 그리 크게 줄 것 같지 않다는 전제하에 말입니다...

누군가 코드펜에... (마크다운잇을 통해서...)
https://codepen.io/voziv/pen/rmpVZb

참고2>

* 질문 :

혹시 php용 파서를 설치하면 (렌더링되어 보여진다면) 꼭 스타일등으로 범벅된 html로 저장하지 않아도 되겠지? 

 

* 재미니 답변 : 

네, 맞습니다! PHP용 마크다운 파서를 사용하시면 스타일 등으로 범벅된 HTML을 DB에 저장할 필요가 전혀 없습니다.

이것이 바로 Markdown을 DB에 원본 그대로 저장하는 것(이전 대화에서 추천했던 2번 방식의 wr_1에 해당)의 핵심 장점입니다.


 

PHP 파서를 통한 렌더링 방식의 장점

 

 

1. DB에 저장되는 데이터: 순수 Markdown (최소화된 데이터)

 

  • DB에는 에디터에서 받은 순수한 Markdown 텍스트만 저장합니다.

    • 예: ## 제목\n\n- 목록입니다.

 

2. 조회 시 렌더링 과정: PHP 파서 사용 (실시간 변환)

 

  • 사용자가 게시글을 조회(VIEW)하는 시점에, 서버(PHP)가 DB에서 Markdown 텍스트를 읽어옵니다.

  • PHP 마크다운 파서 (예: Parsedown, CommonMark 등)를 사용하여 이 텍스트를 HTML로 변환합니다.

  • 변환된 HTML을 사용자에게 전송하여 브라우저에 표시합니다.

 

3. 얻는 이점

 

구분 장점 상세 설명
데이터 경량화 DB 용량 절감 스타일이 덕지덕지 붙은 HTML 대신, 용량이 작은 순수 텍스트만 저장합니다.
유연성 렌더링 엔진 변경 용이 나중에 더 좋은 PHP 파서가 나오거나, 렌더링 스타일을 바꾸고 싶을 때, **DB의 원본 데이터(MD)**를 건드릴 필요 없이 파서만 교체하면 됩니다.
보안 강화 서버 측 제어 서버 측 파서를 사용하면, Markdown 문법 내에 숨겨진 악성 HTML 코드(XSS 공격 시도)를 서버 레벨에서 **정제(Sanitize)**할 수 있어 보안에 더 유리합니다.

 

💡 주의 사항: 성능(Performance)

 

PHP 파서를 이용한 실시간 렌더링 방식은 데이터 유연성 측면에서는 최고지만, 성능(속도) 측면에서는 단점이 있습니다.

  • 단점: 사용자가 글을 조회할 때마다 (100번 조회하면 100번) 서버는 렌더링 작업을 반복해야 합니다. 글의 양이 많거나 동시 접속자가 많으면 서버 부하가 커질 수 있습니다.

 

🌟 그누보드 환경에서 최적의 해결책 (이전 대화 기반)

 

결국 가장 좋은 방법은 이전 대화에서 추천드렸던 하이브리드 방식입니다.

  1. 쓰기/수정 시: 클라이언트(TOAST UI Editor)에서 HTML로 변환하고, 이 HTML을 wr_content에 저장합니다. (미리 렌더링된 결과 저장)

  2. 조회 시: wr_content의 HTML을 파싱 없이 바로 출력합니다. (가장 빠름)

  3. 원본 보존: Markdown 원본은 wr_1에 저장해 둡니다. (유연성 및 수정 시 사용)

이렇게 하면 조회 시 성능을 확보하면서도 MD 원본 보존의 유연성을 잃지 않아, 현존하는 마크다운 기반 서비스에서 가장 많이 사용하는 방식이 됩니다.

@xpem 많이 연구 하셨네요. 저도 구현하면서 상당히 애를 먹은 부분은데
최종적으로 아래와 같이 구현했습니다.

1. 마크다운 기반으로 컨텐츠 작성

2. 마크다운 기반으로 데이터 저장

3. read 에서 마크다운 랜더링

4. modify 일때에는 작성과 마찬가지로 마크다운 기반으로 수정
제 사이트 보시면 생각보다 랜더 속도가 그렇게 느리지 않습니다.^^

현대적 디자인프레임인 tailwind를 포기할 수 없어서... 질문을 또 해보았습니다. 

 

* 저의 질문:

내가 퀼에디터를 사용하고자 했던 것은 tailwind class가 그대로 적용되기를 원해서였어...

 

* 재미니 답변: 

정말 중요한 정보를 알려주셨네요! Tailwind CSS 클래스가 적용된 최종 HTML을 얻는 것이 핵심 목표였다면, 이 목표에 따라 QuillToast UI Editor의 비교 우위가 명확해집니다.


 

Tailwind 적용 관점에서의 비교

 

 

1. Quill Editor의 유리함 (Tailwind 호환성: 높음)

 

Quill은 구조적으로 Tailwind와 잘 맞을 가능성이 높습니다.

  • HTML 중심의 유연성: Quill은 Markdown 문법에 얽매이지 않고, Delta라는 구조화된 데이터를 HTML로 유연하게 변환할 수 있습니다.

  • 커스터마이징 용이: Quill은 Blot이라는 개념을 통해 HTML 구조를 정의합니다. 예를 들어, 사용자가 텍스트를 "볼드"로 표시하면, Quill의 모듈이나 Blot을 수정하여 단순히 <strong> 태그가 아닌, **<span class="font-bold">**처럼 원하는 Tailwind 클래스를 포함한 태그로 렌더링하도록 직접 커스터마이징할 수 있습니다.

  • WYSWYG 편집: Quill은 사용자에게 보여지는 편집 영역 자체가 최종 HTML에 가깝기 때문에, 편집 단계에서 이미 Tailwind 스타일이 적용된 상태로 정확하게 보일 수 있습니다.

 

2. Toast UI Editor의 제약 (Tailwind 호환성: 어려움)

 

Toast UI Editor는 Markdown을 기반으로 하기 때문에 Tailwind 클래스를 적용하는 것이 복잡하거나 제한적입니다.

  • Markdown 우선: TUI Editor의 핵심은 Markdown 텍스트입니다. Markdown은 <h1 class="text-xl">와 같은 HTML 속성이나 클래스를 지원하지 않습니다.

  • 제한적인 변환: TUI Editor는 Markdown을 HTML로 변환할 때, 일반적으로 순수한 HTML 태그(<h1>, <ul>, <p>)만 생성합니다. 이 HTML에 Tailwind 클래스를 자동으로 입히려면 다음 단계가 필요합니다:

    1. TUI Editor에서 HTML(getHTML())을 추출합니다.

    2. 서버나 클라이언트에서 생성된 HTML을 파싱하여(<h1>을 찾아서), 그 태그에 수동으로 Tailwind 클래스를 추가하는 별도의 변환 로직(Post-processing)을 구현해야 합니다.

    • 예: HTML 변환 후, <p> 태그를 <p class="text-base text-gray-800">으로 일괄 변경하는 로직 추가.


 

🎯 최종 판단: 목표가 Tailwind라면 Quill이 더 적합

 

핵심 목표가 Tailwind 클래스를 완벽하게 제어하고 최종 결과물에 적용하는 것이었다면, Quill Editor에 투자하신 연구 에너지는 낭비가 아닙니다.

Quill은 Markdown의 제약 없이 HTML 구조를 직접적으로 정의하고 조작할 수 있는 아키텍처를 제공하기 때문에, Tailwind를 정밀하게 통합하는 데 근본적으로 더 적합합니다.

이미 Quill의 기본 구조를 이해하고 계시다면, 이제 남은 과제는 다음과 같습니다.

  1. 커스텀 Blot 정의: Quill에서 제공하는 기본 <p>, <strong> 등의 태그 대신, 원하는 Tailwind 클래스가 적용된 HTML 요소를 출력하는 Blot을 구현하거나 커스터마이징합니다.

  2. 스타일 지정 모듈: 폰트 크기, 색상 등 Tailwind 클래스에 직접 매핑되는 기능을 Quill 모듈로 구현합니다.

결론: Markdown 원본 보존보다 Tailwind 스타일이 적용된 최종 HTML의 제어가 더 중요하다면, Quill Editor를 계속 사용하시는 것을 강력히 추천합니다.

 

전체 199,972 |RSS
자유게시판 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT