WangEditor에서 HTML 콘텐츠를 설정하고 가져오는 효율적인 방법
웹 애플리케이션 개발 시 WangEditor와 같은 리치 텍스트 에디터를 사용할 때, 서버에서 가져온 HTML 데이터를 에디터에 주입하거나 작성된 내용을 서버로 전송하는 과정에서 예기치 않은 렌더링 문제가 발생하곤 합니다. 가장 흔한 문제는 HTML 태그가 해석되지 않고 소스 코드 문자열 그대로 화면에 노출되는 현상입니다.
1. HTML 엔티티 및 이스케이프 이슈 해결
서버 사이드 템플릿 엔진을 통해 데이터를 직접 자바스크립트 변수에 할당할 경우, 특수 문자가 HTML 엔티티(예: <, >)로 변환되어 에디터가 이를 일반 텍스트로 인식하게 됩니다. 이를 방지하기 위해 가장 안정적인 방법은 숨겨진(hidden) 입력 필드를 매개체로 사용하는 것입니다.
<!-- HTML 구조 -->
<div class="editor-container">
<!-- 서버 데이터를 임시 보관할 hidden 필드 -->
<input type="hidden" id="raw-content" value="${serverData.content}">
<div id="editor-canvas" style="height: 400px;"></div>
</div>
<script>
const E = window.wangEditor;
const myEditor = new E('#editor-canvas');
// 에디터 설정
myEditor.config.uploadImgShowBase64 = true;
myEditor.create();
// 데이터 주입: hidden 필드의 value를 읽어와 에디터에 설정
const savedHtml = document.getElementById('raw-content').value;
if (savedHtml) {
myEditor.txt.html(savedHtml);
}
</script>
2. 편집 내용의 실시간 동기화
사용자가 에디터에서 내용을 수정할 때마다 이를 특정 입력 폼에 동기화하여 서버로 전송할 준비를 해야 합니다. WangEditor에서 제공하는 onchange 콜백 함수를 활용하면 효율적입니다.
// 에디터 내용이 변경될 때마다 실행되는 설정
myEditor.config.onchange = function (newHtml) {
const hiddenInput = document.getElementById('raw-content');
hiddenInput.value = newHtml;
};
// 혹은 특정 시점(예: 저장 버튼 클릭)에 데이터를 가져오는 방법
const handleSave = () => {
const currentData = myEditor.txt.html();
console.log("전송할 데이터:", currentData);
// AJAX 통신 로직 구현
};
HTML DOCTYPE 선언의 기술적 의미와 필요성
웹 페이지의 최상단에 위치하는 <!DOCTYPE html>은 단순한 태그가 아니라 브라우저에게 해당 문서가 어떤 HTML 버전으로 작성되었는지 알려주는 '문서 유형 선언(Document Type Declaration)'입니다.
1. 브라우저 렌더링 모드 결정
DOCTYPE 선언의 가장 중요한 역할은 브라우저를 '표준 모드(Standards Mode)'로 동작하게 만드는 것입니다. 만약 이 선언이 누락되면 브라우저는 '쿼크 모드(Quirks Mode)'로 진입하게 됩니다. 쿼크 모드에서는 브라우저가 오래된 웹 페이지를 지원하기 위해 각기 다른 비표준 방식으로 레이아웃을 해석하므로, 브라우저 간 디자인이 깨지는 현상이 발생합니다.
2. HTML5 표준 선언
과거 HTML 4.01이나 XHTML 1.0 시절에는 DTD(Document Type Definition) 참조를 포함하는 매우 복잡한 선언문이 필요했습니다. 하지만 현대의 웹 표준인 HTML5에서는 다음과 같이 매우 간결한 선언을 권장합니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>웹 표준 문서</title>
</head>
<body>
<!-- 콘텐츠 -->
</body>
</html>
3. 선언 시 주의사항
- 위치: 반드시 문서의 첫 번째 줄에 위치해야 하며, 어떤 태그(심지어 공백이나 주석)보다도 앞서야 합니다.
- 대소문자: 관례적으로
<!DOCTYPE html>과 같이 대문자로 작성하지만, 대소문자를 구분하지는 않습니다. - 기능: 이는 HTML 태그가 아니므로 닫는 태그가 존재하지 않습니다.
정확한 DOCTYPE 선언은 크로스 브라우징 이슈를 최소화하고, CSS 박스 모델이나 레이아웃 엔진이 의도한 대로 작동하게 만드는 웹 개발의 가장 기초이자 필수적인 단계입니다.