마크다운 HTML 변환기
실시간 미리보기와 함께 마크다운을 깔끔한 HTML로 변환 — 제목, 목록, 링크, 코드 블록 등 모두 브라우저에서.
조회수 1,118회
작동 방식
이 변환기는 CommonMark 명세를 따릅니다 — 2004년 원래 마크다운 설명이 남겨둔 모호함(중첩된 목록이 느슨한 문단과 어떻게 상호작용하는지, 인용문 안에 목록 기호가 있을 때 어떻게 처리하는지 등)을 정밀하게 해소한 마크다운 버전입니다. 파싱은 두 개의 뚜렷한 단계로 이루어집니다. 첫 번째 단계는 블록 수준입니다: 원본 텍스트는 각 블록의 내용을 아직 들여다보지 않은 채, 오직 줄 구조와 들여쓰기만을 읽어 문단, ATX 제목(#부터 ######까지), 펜스 코드 블록, 인용문, 순서 있는/없는 목록, 수평선 같은 구조적 단위로 나뉩니다. 두 번째 단계는 인라인 수준입니다: 각 블록 안에서 파서는 강조 기호(*기울임*, **굵게**), 인라인 코드 구간(`code`), 링크나 이미지 문법([텍스트](url))을 찾아 해당하는 HTML 태그로 다시 씁니다. 이 2단계 설계 덕분에 펜스 코드 블록 안에 있는 별표는 건드려지지 않고 그대로 남는데, 코드 블록은 인라인 강조 규칙이 그 내용에 도달하기 전, 첫 번째 단계에서 이미 완전히 처리되기 때문입니다.
예를 들어 ## 릴리스 노트 다음에 빈 줄과 - **v2.1**: 수정 사항이 오면, 블록 수준 파싱은 먼저 제목 하나와 항목 하나짜리 목록을 식별하고, 그다음 인라인 수준 파싱이 <li> 안의 **v2.1**을 <strong>v2.1</strong>으로 바꿉니다. 표는 CommonMark 위에 얹힌 GFM(GitHub Flavored Markdown) 확장을 따릅니다: 제목 행, 콜론 위치(:--, :-:, --:)로 열 정렬을 지정하는 --- 구분 행, 그리고 그 아래 원하는 만큼의 데이터 행으로 구성됩니다.
알아야 할 것
- 원본 HTML은 실행되지 않고 이스케이프됩니다 — 스크립트 태그나 인라인 이벤트 핸들러를 붙여넣으면 실행되는 대신 눈에 보이는 텍스트로 렌더링됩니다. 신뢰할 수 없는 콘텐츠를 붙여넣을 때를 위한 의도적인 안전 장치입니다.
- 느슨한 목록과 촘촘한 목록은 출력이 다릅니다 — 목록 항목 사이에 빈 줄이 있으면 CommonMark는 각 항목을 자신만의 <p>로 감싸도록 강제하고("느슨한" 목록), 빈 줄이 없으면 항목을 일반 인라인 콘텐츠로 유지합니다("촘촘한" 목록) — 이는 렌더링된 HTML의 세로 간격을 바꿉니다.
- 지나치게 깊은 중첩에는 실용적인 한계가 있습니다 — 4단계 이상 중첩된 목록이나 참조 스타일 링크 정의는 유효한 CommonMark이지만, 브라우저 기반 실시간 미리보기보다는 전용 빌드타임 파서가 다루기에 더 적합한 예외 사례입니다.
자주 묻는 질문
표도 지원되나요?
파이프 형식의 표가 변환됩니다(| a | b |와 --- 구분 행). 왼쪽/가운데/오른쪽 정렬을 나타내는 콜론도 인식됩니다.
왜 내 HTML 태그가 그대로 텍스트로 표시되나요?
의도된 동작입니다 — 원본 HTML은 안전을 위해 이스케이프 처리됩니다. 마크다운으로 동등한 표현을 작성하거나, 출처를 신뢰한다면 수동으로 이스케이프를 해제하세요.
줄 간격도 마크다운 규칙을 따르나요?
네: 빈 줄은 문단을 구분하고, 줄 끝의 이중 공백은 <br>을 생성합니다. 문단 내의 단일 줄바꿈은 CommonMark 규격대로 하나로 합쳐집니다.
왜 중첩된 목록이나 코드 블록 안의 서식이 가끔 예상과 다르게 보이나요?
파싱이 두 단계로 이루어지기 때문입니다: 블록 구조(목록, 코드 펜스, 인용문)는 들여쓰기와 줄 기호만으로 먼저 해석되고, 각 블록 안의 인라인 서식(굵게, 기울임, 링크)은 그 이후에 적용됩니다. 펜스 코드 블록 안의 내용은 인라인 단계가 전혀 건드리지 않으므로, 그 안의 **이 텍스트**는 굵게 처리되지 않고 그대로 문자로 남습니다 — 이는 버그가 아니라 CommonMark의 정상 동작입니다.
핵심 CommonMark와 "GitHub Flavored" 기능의 차이는 무엇인가요?
핵심 CommonMark는 제목, 강조, 목록, 인용문, 코드 블록, 링크를 정밀하게 정의합니다. 표, 취소선(~~텍스트~~), 작업 목록 체크박스([ ] / [x])는 그 위에 얹힌 GFM 확장으로, 이 도구를 포함한 많은 변환기에서 널리 지원되지만, 이후 그 출력을 붙여넣을 수도 있는 모든 엄격한 CommonMark 전용 구현에서 보장되지는 않습니다.
비슷한 도구
문제 신고하기
마크다운 HTML 변환기
댓글
아직 댓글이 없습니다 — 첫 댓글을 남겨보세요!