JavaScript 압축기

Terser로 JavaScript를 압축 — 100% 브라우저에서 처리되며 업로드되지 않습니다

압축된 JavaScript
JavaScript를 입력한 뒤 압축을 누르세요.

🔒 Terser로 브라우저에서 처리되며 업로드되지 않습니다.

JavaScript를 즉시 압축

JavaScript를 붙여넣으면 Rollup·Vite 같은 번들러가 사용하는 Terser로 주석과 공백을 제거하고 사용하지 않는 코드를 없애며, 선택적으로 지역 변수 이름을 짧게 바꿔 더 작고 빠르게 로드되는 코드를 만듭니다.

안전한 로컬 처리

압축은 전적으로 브라우저에서 이뤄지며 소스 코드는 서버로 전송되지 않아 비공개 코드도 안전하게 압축할 수 있습니다.

최소화·압축·난독화는 서로 다른 셋입니다

최소화는 소스를 같은 동작의 더 작은 소스로 다시 씁니다. 공백과 주석이 사라지고, 지역 이름이 한두 글자로 줄고, 죽은 분기가 빠집니다. 압축은 서버가 내보내면서 적용하는 gzip이나 brotli로, 주어진 바이트에서 반복을 찾습니다. 둘은 겹쳐 쓰지만 더해지지는 않습니다. 최소화된 코드는 원본만큼 잘 압축되지 않습니다. gzip이 먹고 살던 반복을 최소화가 이미 걷어냈기 때문이죠. 그래서 최소화 60%에 gzip 70%가 88%가 되지 않습니다. 난독화는 세 번째 것으로, 작게 만드는 게 아니라 읽기 어렵게 만드는 게 목적이고 대개 파일을 더 키웁니다.

최소화 도구가 알 수 있는 것과 없는 것

지역 변수 이름 바꾸기는 안전합니다. 모든 사용처를 볼 수 있으니까요. 바깥에서 이름으로 닿는 것은 안전하지 않습니다. 런타임에 만든 키로 obj[key] 조회하는 속성, 인라인 onclick에서 부르는 함수, 다른 번들이 import하는 export 같은 것들입니다. 최소화 도구는 그런 것을 건드리지 않고, 그래서 결과물에도 읽을 수 있는 속성 이름이 남습니다. 변환은 설계상 동작을 보존하며, 스택 트레이스를 실제 줄 번호로 되돌리는 것은 소스 맵입니다. 소스 맵은 남겨 두되 오류 수집기는 읽고 외부는 못 읽는 곳에 두세요.

자주 묻는 질문

"이름 축약"은 무엇을 하나요?

지역 변수와 함수 매개변수를 짧은 한 글자로 바꿔 결과 크기를 더 줄입니다. 최상위·내보낸 이름은 그대로 두어 공개 API는 계속 동작합니다. 읽기 쉬운 변수명이 필요하면 끄세요.

압축하면 코드가 동작하는 방식이 달라지나요?

아니요. Terser는 공백·주석·도달할 수 없는 코드처럼 실행에 영향을 주지 않는 것만 걷어내고 지역 이름만 안전하게 바꿉니다. 입력에 문법 오류가 있으면 깨진 결과를 내놓는 대신 몇 번째 줄에서 잘못됐는지 알려줍니다.

서버가 이미 gzip을 하는데 최소화도 해야 하나요?

해야 하지만 두 숫자를 곱한 만큼은 기대하지 마세요. 최소화와 압축 모두 중복을 이용하므로, 앞의 것이 지나간 뒤 뒤의 것이 찾을 게 줄어듭니다. 그래도 둘을 함께 쓰는 편이 하나만 쓰는 것보다 낫습니다.

최소화하면 코드가 깨지나요?

깨지지 않아야 정상입니다. 변환은 동작을 보존합니다. 흔한 사고는 도구가 볼 수 없는 것에서 옵니다. 런타임에 문자열로 해석되는 이름, 인라인 HTML 속성에서 부르는 함수, Function.prototype.name에 기대는 코드 같은 것들입니다.

왜 어떤 이름은 그대로 읽히나요?

안전하게 바꿀 수 있는 것은 지역 바인딩뿐입니다. 속성 이름·전역·export는 최소화 도구가 본 적 없는 코드에서 닿을 수 있어 그대로 둡니다.