MODOO HUB ← 모두의 툴
Dev · Instrument

JavaScript 압축기

JS 코드를 압축해 파일 크기를 줄입니다

📖 JS 압축기의 문자열 손상 위험 가이드 보기

JavaScript 압축기

이 도구의 5가지 옵션은 문자열 안전성이 서로 다릅니다. // 주석 제거는 따옴표를 만나면 이스케이프까지 인식하며 문자열을 통째로 건너뛰는 문자 단위 스캐너(stripLineComments)라 실제로 안전합니다. 반면 /* */ 주석 제거는 원본 텍스트 전체에 정규식 /\/\*[\s\S]*?\*\//g를 그대로 적용해, 문자열 안에 "/* 처럼 보이는 */" 텍스트가 들어있으면 그 내용을 통째로 지워버릴 수 있습니다. 줄바꿈 제거·연속 공백 제거·연산자 주변 공백 제거도 마찬가지로 문자열 경계를 구분하지 않는 전체 텍스트 정규식이라, 문자열 안의 공백이나 " = " 같은 부분도 함께 뭉개질 수 있습니다. 화면에 뜨는 경고는 오직 "문자열 안에 // 가 있을 때"만 표시되는데, 정작 그 경우는 이미 안전하게 처리되고 있어 불필요하게 뜰 수 있는 반면, 실제로 위험한 블록 주석·공백 압축에는 아무 경고도 뜨지 않습니다.

자주 묻는 질문

// 한줄 주석 제거가 문자열 안의 //를 실수로 지울 수도 있나요?

아니요. 이 옵션은 따옴표를 만나면 이스케이프 문자까지 인식하며 문자열 전체를 그대로 건너뛰는 문자 단위 스캐너로 구현돼 있어, 문자열 내부의 //는 안전하게 보존됩니다.

/* */ 블록 주석 제거는 문자열 내용을 건드릴 위험이 있나요?

네, 있습니다. 이 옵션은 원본 텍스트 전체에 정규식을 바로 적용하며 문자열 여부를 구분하지 않으므로, "/* 이건 주석처럼 보이는 문자열 */"처럼 문자열 안에 그런 패턴이 있으면 실제로 그 내용이 삭제되어 문자열 값이 깨질 수 있습니다.

화면의 경고 메시지는 정확히 언제 뜨나요?

문자열 안에 //가 있는 것으로 감지될 때만 뜹니다. 하지만 그 케이스는 이미 안전하게 처리되고 있어 실제로는 걱정할 필요가 없는 경우에도 경고가 표시될 수 있는 반면, 훨씬 더 위험한 블록 주석·공백 압축 문제는 어떤 경고도 띄우지 않습니다.

줄바꿈 제거나 연속 공백 제거가 문자열 내부에 영향을 줄 수 있나요?

네. 두 옵션 모두 문자열 경계를 구분하지 않는 전체 텍스트 정규식이라, 문자열 값 안에 있는 줄바꿈이나 연속된 공백도 코드의 다른 부분과 똑같이 처리되어 값이 바뀔 수 있습니다.

연산자 주변 공백 제거는 어떤 위험이 있나요?

이 옵션의 정규식은 =, +, -, 쉼표, 괄호 등 넓은 범위의 기호 주변 공백을 지우는데, 이 역시 문자열 여부를 구분하지 않습니다. 문자열 값 안에 "a = b"처럼 이런 기호와 공백이 함께 있으면 "a=b"로 바뀌어 값이 손상될 수 있습니다.

정규식 리터럴 내부 공백은 실제로 보존되나요?

보장되지 않습니다. 이 도구의 압축 로직 어디에도 정규식 리터럴(/.../)을 따로 인식하는 코드가 없으므로, 정규식 패턴 안에 공백이나 하이픈처럼 연산자 문자 클래스에 포함된 기호가 있으면 다른 코드와 똑같이 공백이 제거될 수 있습니다.

변수명 단축(맹글링)은 지원하나요?

지원하지 않습니다. 이 도구는 주석·공백 제거만 하며, 짧은 이름으로 바꾸는 맹글링은 Terser나 UglifyJS 같은 AST 기반 도구가 필요합니다.

실제 프로덕션 배포에는 어떤 도구가 더 안전한가요?

위에서 설명한 문자열 손상 위험 때문에, 실제 배포용 코드에는 실제 파서로 문자열·정규식·주석을 정확히 구분하는 Terser, esbuild, webpack 같은 도구를 사용하는 것이 안전합니다. 이 도구는 간단한 확인이나 임시 압축에 적합합니다.