ToolDeck

HTML 포매터

올바른 들여쓰기로 HTML을 정렬 및 미화

예시 시도

HTML 입력

정렬된 HTML

로컬에서 실행 · 시크릿 붙여넣기 안전
정렬된 HTML이 여기에 표시됩니다…

HTML 포매팅이란 무엇인가요?

HTML 포매터는 HTML 포매팅(미화 또는 pretty-printing이라고도 함)을 수행하는 도구입니다. HTML 마크업에 일관된 들여쓰기, 줄 바꿈, 공백을 추가하여 중첩 구조를 눈에 보이게 만듭니다. 브라우저는 HTML을 렌더링할 때 공백을 무시하므로, 한 줄로 작성된 문서와 들여쓰기가 잘 된 문서는 동일한 출력을 냅니다. 차이는 전적으로 사람을 위한 것입니다. 포매팅된 HTML은 읽기, 디버깅, 유지 관리가 훨씬 쉽습니다.

HTML 명세(WHATWG의 HTML Living Standard로 관리됨)는 110개 이상의 요소를 정의하며, 각 요소에는 고유한 콘텐츠 모델이 있습니다. <div>, <section>, <article>과 같은 블록 수준 요소는 일반적으로 새 줄에서 시작하고 자식 요소를 들여씁니다. <br>, <img>, <input>과 같은 빈 요소는 닫는 태그나 들여쓸 자식이 없습니다. 좋은 포매터는 이러한 차이를 이해하고, 모든 태그 뒤에 무조건 공백을 추가하는 것이 아니라 그에 맞는 들여쓰기 규칙을 적용합니다.

포매팅은 개발 중에 가장 중요합니다. CMS 플랫폼의 출력, 브라우저 DevTools에서 복사한 마크업, 압축되거나 기계 생성된 HTML은 흔히 한 줄의 빽빽한 텍스트로 도착합니다. 들여쓰기가 없으면 누락된 닫는 태그를 찾거나 깊이 중첩된 구조를 추적하는 데 훨씬 더 많은 시간이 걸립니다. HTML 포매터는 그 텍스트 덩어리를 올바르게 들여쓰인 읽기 쉬운 트리 구조로 한 번에 변환합니다.

이 HTML 포매터를 사용하는 이유

어떤 HTML이든 붙여넣으면 즉시 올바르게 들여쓰인 결과를 얻을 수 있습니다. 플러그인 설치, 설정 파일 작성, 계정 생성이 필요 없습니다.

즉각적인 포매팅
입력하는 즉시 결과가 업데이트됩니다. 어떤 소스에서든 압축된 HTML을 붙여넣고 빌드 단계나 CLI 명령 없이 들여쓰인 결과를 바로 확인하세요.
🔒
개인 정보 우선 처리
모든 포매팅은 JavaScript를 사용하여 브라우저에서 실행됩니다. HTML이 기기를 벗어나지 않으므로 API 키, 토큰, 내부 URL이 포함된 마크업도 안전하게 붙여넣을 수 있습니다.
🎯
들여쓰기 설정 가능
버튼 하나로 2칸과 4칸 들여쓰기 사이를 전환할 수 있습니다. 포매터는 선택한 설정을 모든 중첩 수준에 일관되게 적용합니다.
📋
원클릭 복사
버튼 하나로 포매팅된 결과를 클립보드에 복사합니다. 편집기, PR 리뷰, 또는 문서에 바로 붙여넣으세요.

HTML 포매터 사용 사례

프론트엔드 개발
버전 관리에 커밋하기 전에 HTML 템플릿을 포매팅하세요. 일관된 들여쓰기는 풀 리퀘스트의 diff 노이즈를 줄이고 코드 리뷰를 빠르게 만듭니다.
백엔드 템플릿 디버깅
Django, Rails, PHP 같은 프레임워크의 서버 렌더링 HTML은 들여쓰기 없이 출력되는 경우가 많습니다. 렌더링된 결과를 여기에 붙여넣어 중첩을 확인하고 닫히지 않은 태그를 찾아내세요.
DevOps & CI 파이프라인
빌드 도구가 올바르게 구조화된 HTML을 생성하는지 검증하세요. 시각적 검사 전에 정적 사이트 생성기나 HTML 이메일 빌더의 출력을 포매팅합니다.
QA & 테스팅
테스트 실행 간 HTML 출력의 포매팅된 스냅샷을 비교하세요. 올바른 들여쓰기 덕분에 두 버전의 페이지를 비교할 때 구조적 차이가 명확하게 드러납니다.
데이터 엔지니어링
웹 스크래핑 파이프라인은 검사가 필요한 원시 HTML을 생성합니다. 추출 선택자를 작성하기 전에 스크래핑된 페이지를 포매팅하여 DOM 구조를 파악하세요.
HTML 학습
학생들이 임의의 웹사이트 소스 코드를 붙여넣어 요소들이 서로 어떻게 중첩되는지 확인할 수 있습니다. 포매팅된 트리 뷰는 태그 간의 부모-자식 관계를 명확하게 보여줍니다.

HTML 들여쓰기 규칙

HTML 포매터가 각 요소 유형을 처리하는 방법은 콘텐츠 모델에 따라 다릅니다. 아래 표는 일반적인 요소와 2칸 및 4칸 설정으로 들여쓰는 방법을 보여줍니다. 두 설정 모두 브라우저에서 동일하게 렌더링됩니다. 차이는 가독성에 있습니다.

태그요소 유형2칸 들여쓰기4칸 들여쓰기
<div>Block elementNew line, indent childrenNew line, indent children
<span>Inline elementNew line, indent childrenInline with parent text
<br>Void elementNew line, same levelNew line, same level
<img>Void elementNew line, same levelNew line, same level
<!-- -->CommentNew line, same levelNew line, same level
<!DOCTYPE>Document typeFirst line, no indentFirst line, no indent
<script>Script blockNew line, preserve innerNew line, preserve inner
<pre>PreformattedNew line, preserve innerNew line, preserve inner

포매터 vs. 압축기 vs. 린터

세 도구 모두 HTML을 다루지만 목적이 다릅니다. 포매팅과 압축은 서로 반대되는 변환이며, 린터는 공백을 변경하지 않고 오류를 검사합니다.

포매터 (이 도구)
HTML을 읽기 쉽게 만들기 위해 들여쓰기와 줄 바꿈을 추가합니다. DOM 구조를 변경하거나 콘텐츠를 제거하지 않습니다. 출력은 브라우저에서 입력과 동일하게 렌더링됩니다.
압축기
파일 크기를 줄이기 위해 공백, 주석, 선택적 닫는 태그를 제거합니다. 포매팅의 반대입니다. 읽거나 편집하는 용도가 아닌 프로덕션 빌드에 사용하세요.
린터 (HTMLHint / W3C)
누락된 alt 속성, 중복 ID, 더 이상 사용되지 않는 태그 등의 오류를 검사합니다. 문제를 보고하지만 들여쓰기나 포매팅은 변경하지 않습니다.

코드 예제

주요 언어와 도구에서 HTML을 프로그래밍 방식으로 포매팅하는 방법:

JavaScript (js-beautify)
import { html as beautify } from 'js-beautify'

const ugly = '<div><p>Hello</p><ul><li>One</li><li>Two</li></ul></div>'

const formatted = beautify(ugly, {
  indent_size: 2,
  indent_char: ' ',
  wrap_line_length: 80,
  preserve_newlines: false,
})
// → <div>
// →   <p>Hello</p>
// →   <ul>
// →     <li>One</li>
// →     <li>Two</li>
// →   </ul>
// → </div>
Python (BeautifulSoup)
from bs4 import BeautifulSoup

ugly = '<div><p>Hello</p><ul><li>One</li><li>Two</li></ul></div>'

soup = BeautifulSoup(ugly, 'html.parser')
print(soup.prettify(formatter='minimal'))
# → <div>
# →  <p>
# →   Hello
# →  </p>
# →  <ul>
# →   <li>One</li>
# →   <li>Two</li>
# →  </ul>
# → </div>
Go (goquery + x/net/html)
package main

import (
    "bytes"
    "fmt"
    "golang.org/x/net/html"
    "strings"
)

func main() {
    ugly := "<div><p>Hello</p></div>"
    doc, _ := html.Parse(strings.NewReader(ugly))

    var buf bytes.Buffer
    html.Render(&buf, doc)
    fmt.Println(buf.String())
    // renders normalized HTML — pair with indent logic for pretty output
}
CLI (Prettier)
# Format a single file in place
npx prettier --write index.html

# Format and print to stdout (pipe-friendly)
npx prettier --parser html index.html

# Format with 4-space indentation
npx prettier --tab-width 4 --parser html index.html

# Format HTML from stdin
echo '<div><p>Hello</p></div>' | npx prettier --parser html

자주 묻는 질문

HTML 포매팅과 HTML 유효성 검사의 차이점은 무엇인가요?
포매팅은 마크업을 읽기 쉽게 만들기 위해 들여쓰기와 줄 바꿈을 추가합니다. 유효성 검사는 마크업이 HTML 명세를 준수하는지 확인하고, 필수 속성 누락이나 잘못 중첩된 요소 같은 오류를 보고합니다. 포매터는 오류를 수정하지 않으며, 유효성 검사기는 공백을 변경하지 않습니다.
HTML을 포매팅하면 페이지 렌더링이 달라지나요?
대부분의 경우, 그렇지 않습니다. 브라우저는 렌더링 시 연속된 공백을 하나의 공백으로 축소합니다. 예외는 white-space: pre 또는 유사한 CSS 규칙이 있는 요소와, 공백이 중요한 <pre> 및 <textarea> 요소입니다. 잘 만들어진 포매터는 이 요소들의 콘텐츠를 그대로 보존합니다.
HTML 들여쓰기는 몇 칸을 사용해야 하나요?
2칸과 4칸 모두 일반적으로 사용됩니다. Google의 HTML/CSS 스타일 가이드는 2칸을 권장합니다. Prettier 포매터도 기본값이 2칸입니다. 4칸은 Python의 PEP 8 규칙과 일치하며 언어 간 일관성을 위해 선호하는 팀도 있습니다. 하나를 선택하고 포매터나 편집기 설정으로 강제하세요.
임베디드 JavaScript나 CSS가 포함된 HTML도 포매팅할 수 있나요?
이 도구는 HTML 구조(태그와 속성)를 포매팅합니다. 인라인 <script> 및 <style> 블록은 그대로 보존됩니다. 임베디드 JavaScript와 CSS를 포매팅하려면 Prettier와 같은 전용 포매터를 사용하세요. 세 언어를 한 번에 파싱하고 포매팅할 수 있습니다.
HTML에서 탭 vs. 공백 논쟁은 아직도 있나요?
대부분의 HTML 스타일 가이드와 포매터는 기본적으로 공백을 사용합니다. 2023년 Stack Overflow 개발자 설문조사에 따르면 약 55%의 응답자가 웹 개발에 공백을 사용합니다. 탭은 각 개발자가 선호하는 시각적 너비를 설정할 수 있다는 접근성 장점이 있습니다. 둘 다 작동하며, 선택 자체보다 프로젝트 내 일관성이 더 중요합니다.
포매팅 후 HTML이 다르게 보이는 이유는 무엇인가요?
포매터가 원본 마크업에 없던 공백 문자(공백과 줄 바꿈)를 추가합니다. 이는 소스 코드의 모양을 바꾸지만 렌더링 출력은 변경하지 않습니다. 브라우저에서 시각적 차이가 보인다면, 인라인 요소에서 추가된 공백이 태그 사이에 여분의 공백 문자를 만드는 경우일 가능성이 높습니다. CSS로 해결할 수 있습니다(부모에 font-size: 0 적용 또는 flexbox 레이아웃 사용).
팀 전체에서 일관된 HTML 포매팅을 강제하려면 어떻게 해야 하나요?
CI 파이프라인에서 자동화된 포매터를 사용하세요. Prettier는 HTML을 지원하며 Husky나 lint-staged를 통해 pre-commit 훅으로 실행할 수 있습니다. 저장소에 tabWidth, printWidth, htmlWhitespaceSensitivity를 지정한 .prettierrc 설정 파일을 추가하세요. 그러면 모든 커밋이 각 개발자의 편집기 설정에 관계없이 동일한 포매팅 규칙을 따르게 됩니다.
HTML 포매터와 HTML 미화 도구의 차이점은 무엇인가요?
동일한 작업입니다. '포매터'와 '미화 도구'는 모두 HTML 마크업에 들여쓰기와 줄 바꿈을 추가하는 것을 말합니다. 일부 도구는 'beautify'(js-beautify), 다른 도구는 'format'(Prettier)을 사용합니다. 출력은 동일합니다. 올바르게 들여쓰인, 사람이 읽기 쉬운 HTML입니다. 'Pretty-print'는 문서와 검색 쿼리에서 자주 사용되는 또 다른 동의어입니다.