공백만 지우는 게 아닙니다
이 도구는 Terser를 브라우저 안에서 돌립니다. 번들러(webpack·Vite·Rollup)가 배포 빌드에 쓰는 바로 그 압축기입니다. 코드를 실제로 파싱해 구문 트리를 만든 뒤 다시 씁니다.
| 단계 | 하는 일 |
|---|---|
| 공백·주석 제거 | 가장 기본. 보통 20~30% 줄어듭니다 |
| 변수 이름 줄이기 | 지역 변수 userName을 a로. 여기서 크게 줄어듭니다 |
| 죽은 코드 제거 | 안 쓰는 변수, if (false) 블록, 도달할 수 없는 코드를 지웁니다 |
조심할 것: 변수 이름 줄이기
지역 변수만 바뀝니다. 전역 변수와 객체 속성은 그대로 둡니다 — 밖에서 이름으로 접근할 수 있기 때문입니다. 그래도 다음 경우에는 깨질 수 있습니다.
function의 이름을 문자열로 참조하는 코드 (fn.name비교 등)- Angular의 옛 DI처럼 매개변수 이름으로 의존성을 찾는 프레임워크
eval()이나with가 있는 코드
압축 결과를 배포하기 전에 반드시 동작을 확인하세요.
console 삭제
운영 배포에서 디버그 로그를 걷어낼 때 씁니다. console.log뿐 아니라
console.error까지 전부 지우므로, 오류 추적을 콘솔에 의존하고 있다면 켜지 마세요.
문법 수준
이건 변환기가 아니라 압축기입니다. ES5를 골라도 화살표 함수가 function으로
바뀌지는 않습니다. 압축 과정에서 그 문법 수준을 넘는 코드를 만들어 내지 않겠다는 설정일
뿐입니다. 구형 브라우저 지원이 필요하면 Babel 같은 트랜스파일러를 따로 써야 합니다.
코드가 서버로 전송되나요?
아닙니다. Terser 자체(약 1 MB)를 브라우저로 내려받아 여기서 실행합니다. 페이지를 연 뒤로는 네트워크를 쓰지 않으므로 사내 코드를 붙여넣어도 밖으로 나가지 않습니다. 대신 이 페이지는 다른 도구보다 처음 열 때 조금 무겁습니다.
압축을 되돌릴 수 있나요?
자바스크립트 정렬로 들여쓰기는 복원됩니다. 하지만 줄어든 변수 이름과 지워진 주석은 돌아오지 않습니다.
난독화 도구인가요?
아닙니다. 결과가 읽기 어려워지는 건 부작용이고 목적은 용량입니다. 코드를 감추는 게 목적이라면 전용 난독화 도구가 따로 있습니다 — 다만 클라이언트로 내려간 코드는 어떤 방법으로도 완전히 숨길 수 없습니다.