본문 바로가기

HTML 코드 압축

주석과 공백을 없애고 페이지 안의 CSS와 JavaScript까지 줄입니다. 실제로 화면에 표시되는 간격은 건드리지 않습니다. 소스는 브라우저 밖으로 나가지 않습니다.

  • 저장되지 않음
  • 대기열 없음, 기다림 없음
  • 회원가입 없음, 워터마크 없음
압축 결과

압축된 HTML 코드가 여기에 표시돼요.

사용 방법

1

HTML 붙여넣기

파일을 끌어다 놓아도 됩니다. 아무것도 저장하지 않으며, 이는 다른 어떤 파일보다 소스 코드에서 더 중요합니다.

2

적용 범위 선택

주석, 공백, 인라인 CSS, 인라인 JavaScript를 각각 따로 켜고 끌 수 있습니다.

3

복사 또는 다운로드

압축 전후를 비교해 얼마나 줄었는지 보여 줍니다.

중요한 공백과 중요하지 않은 공백

HTML에서 두 인라인 요소 사이의 공백은 실제 공백입니다. 신중한 압축 도구와 페이지를 깨뜨리는 도구는 바로 여기서 갈립니다. 두 링크 사이의 줄바꿈을 없애면 화면에서 단어가 붙어 버리고, pre 블록이나 textarea 안의 들여쓰기를 없애면 내용 자체가 바뀝니다. 그곳에서는 공백이 곧 내용이기 때문입니다. 그래서 공백은 표시되지 않는다는 것이 확실한 곳에서만 제거하고, 표시되는 곳은 그대로 둡니다. 모든 공백을 일률적으로 지우는 도구는 파일은 작게 만들지만 눈에 띄게 잘못된 페이지를 내놓습니다.

주석은 제거합니다. 주석은 읽는 사람이 아니라 소스를 관리하는 사람을 위한 것이기 때문입니다. 다만 조건부 주석은 메모가 아니라 지시문이므로 예외입니다. 불필요한 속성도 삭제합니다. script 요소의 type="text/javascript"는 10년 넘게 기본값이었고, form의 method="get"은 어차피 폼이 하는 동작을 다시 적은 것일 뿐입니다.

속성 따옴표 제거는 올바른 HTML이지만 기본값은 꺼져 있으며, 이는 의도된 것입니다. 사양에서는 공백이나 까다로운 문자가 없는 한 따옴표 없는 속성 값을 허용하고, 브라우저도 이를 완벽하게 처리합니다. 하지만 템플릿 엔진은 그렇지 못한 경우가 많습니다. 따옴표 없는 속성 안에 Blade, Twig, Handlebars, JSX 표현식이 있으면 제대로 파싱되지 않고, 그 오류는 아무도 읽고 싶지 않은 파일에서 빌드할 때 드러납니다. 절약되는 용량은 작고 위험은 작지 않으니, 직접 켤 때만 적용됩니다.

얼마나 줄었는지는 압축 전이 아니라 압축 후를 기준으로 보는 것이 정확합니다. 서버는 HTML을 gzip이나 brotli로 압축해 보내고, 이 알고리즘은 반복되는 공백을 매우 잘 줄입니다. 그래서 최소화로 100 KB에서 70 KB가 된 문서도 실제 전송량은 12 KB에서 11 KB로 줄어드는 데 그칠 수 있습니다. HTML 최소화는 할 만한 가치가 있지만 셋 중 효과가 가장 작습니다. 진짜 무게는 스타일시트와 스크립트에 있습니다.

다른 작업이 필요할 때

파일 하나가 아니라 사이트 전체라면, 이 작업은 브라우저 탭이 아니라 빌드 과정에서 해야 합니다. 요즘 프레임워크와 정적 사이트 생성기는 모두 빌드할 때 HTML을 최소화하며, 손으로 하면 누군가 잊는 순간 멈춰 버립니다. 그 바탕이 되는 라이브러리는 변환 규칙 하나하나까지 설정할 수 있어, 특정 규칙이 문제를 일으킬 때 유용합니다.

마크업을 최적화하기 전에 페이지가 실제로 얼마나 무거운지 확인하세요. 거의 모든 실제 사이트에서 HTML은 이미지, 글꼴, JavaScript에 비하면 오차 수준입니다. Lighthouse나 브라우저의 네트워크 패널을 보면 몇 초 만에 알 수 있고, 대개는 최적화하지 않은 메인 이미지 하나가 페이지의 모든 마크업보다 더 큰 부담이라는 결론이 나옵니다.

자주 묻는 질문

제 코드가 어딘가에 저장되나요?

아니요. 소스 코드라면 바로 그 점이 핵심입니다. 아무것도 저장하지 않으며 어떤 서버도 코드를 보지 않습니다. 사내 소스 코드를 어딘가로 전송하는 온라인 압축 도구에 붙여 넣는 것은, 그 사이트가 보관 정책에 대해 뭐라고 하든 유출입니다. 그리고 이런 일은 급할 때 아무 생각 없이 저지르기 쉽습니다.

압축하면 페이지 모양이 달라지나요?

여기서 설정된 방식으로는 달라지지 않습니다. 공백은 div나 목록 항목 같은 블록 요소 사이처럼 화면에 표시되지 않는 곳에서만 줄입니다. 인라인 요소 사이의 공백은 유지합니다. 없애면 두 단어가 눈에 띄게 붙어 버리기 때문입니다. "</span> <span>"은 화면에서 실제 공백이지만 "</span><span>"은 그렇지 않습니다. <pre>와 <textarea>의 내용은 한 바이트도 건드리지 않습니다. 그리고 생략 가능한 닫는 태그를 제거하는 기능은 일부러 꺼 두었습니다. 올바른 HTML이긴 하지만 적지 않은 템플릿 엔진과 이메일 클라이언트가 그 결과를 제대로 해석하지 못합니다.

실제로 무엇을 제거하나요?

주석, 원래 화면에 표시되지 않던 공백, 그리고 <style>과 <script> 블록 안의 군더더기입니다. 마크업 구조, 속성, 텍스트는 건드리지 않습니다. 이 도구는 압축 전후의 페이지를 각각 파싱해 요소 수, 목록 항목, 보이는 텍스트가 똑같은지 확인하는 방식으로 검증되었습니다.

속성 따옴표를 제거해야 하나요?

결과물이 곧바로 브라우저로 간다면 괜찮습니다. 올바른 HTML이고 용량도 조금 줄지만, 따옴표 없는 속성은 일부 템플릿 엔진, 일부 이메일 클라이언트, 그리고 단순한 파서 대부분을 깨뜨립니다. 기본값은 꺼져 있고, 켜면 페이지에서 경고를 표시합니다.

페이지 안의 CSS와 JavaScript도 압축하나요?

네, 둘 다 저희 CSS 코드 압축, JavaScript 코드 압축과 같은 방식으로 압축합니다. 한 가지 예외가 있습니다. 인라인 CSS에 네이티브 중첩이나 최신 미디어 쿼리가 쓰였다면 그 실행에서는 CSS 압축을 끕니다. CSS 압축기가 이런 기능보다 먼저 만들어져서 규칙을 소리 없이 지워 버리기 때문입니다. HTML은 그대로 압축되며, 스타일이 빠진 페이지를 돌려주는 대신 이런 일이 있었다고 페이지에서 알려 드립니다.

얼마나 작아지나요?

들여쓰기와 주석이 있는 직접 작성한 HTML이라면 보통 10~30% 줄어듭니다. 그다음은 서버의 gzip이 남은 작업 대부분을 해냅니다. 두 효과가 겹치므로 먼저 최소화하는 것도 도움이 되지만, 최소화만으로 파일이 절반이 되리라 기대하지는 마세요.

사이트 전체를 한 번에 압축할 수 있나요?

여기서는 한 번에 한 페이지씩입니다. 페이지가 많은 사이트라면 빌드나 배포 단계에서 최소화해, 릴리스할 때마다 모든 페이지가 같은 방식으로 처리되게 하세요. 그리고 버전 관리에는 최소화된 결과물이 아니라 읽을 수 있는 소스를 보관하세요.

참고: 공백은 화면에 표시되지 않는 곳에서만 줄이므로 pre와 textarea 안의 텍스트는 전혀 건드리지 않고, 인라인 요소 사이의 공백도 유지합니다. 속성 따옴표 제거는 올바른 HTML이지만 일부 템플릿 엔진을 깨뜨리기 때문에 기본값은 꺼져 있습니다.

내 웹사이트에 이 도구 넣기

블로그, 수업 페이지, 도움말 글 어디에나 무료로 넣을 수 있습니다. 코드 한 줄만 붙여 넣으면 방문자가 페이지에서 바로 사용할 수 있습니다.