자주 묻는 질문
일반 질문
JavaScript 난독화와 그 동작 방식에 대한 일반적인 질문입니다.
코드를 보호해야 할 이유는 여러 가지입니다. 다른 사람이 작업물을 그대로 복사해 붙여넣는 것을 막을 수 있고(HTML5 게임처럼 클라이언트 측에서 실행되는 프로젝트에서 특히 중요합니다), 주석과 공백을 제거해 코드 로딩 속도를 높이면서 동시에 이해하기 어렵게 만들 수 있으며, 아직 대금을 받지 못한 작업물을 보호하여 소스 코드를 넘기지 않고도 고객에게 결과물을 보여줄 수 있습니다.
VM(가상 머신) 난독화는 JavaScript 코드를 내장 인터프리터에서 실행되는 맞춤형 바이트코드로 변환합니다. 여전히 읽을 수 있는 JavaScript를 만들어내는 표준 난독화와 달리, VM 난독화는 원본 코드의 구조를 완전히 숨깁니다. 정적 분석 도구는 가상 머신 전체를 먼저 리버스 엔지니어링하지 않고서는 로직을 이해할 수 없습니다. 자세한 내용은 VM 난독화 가이드에서 확인하세요.
네! 특정 함수나 메서드에만 VM 난독화를 선택적으로 적용하는 옵션을 제공합니다. 대상 함수 위에 특수 주석(/* javascript-obfuscator:vm */)을 달아두면 해당 함수만 VM 난독화 도구를 거칩니다. 가장 민감한 알고리즘만 보호하고 나머지 코드는 표준 난독화 상태나 원본 그대로 두어 성능 오버헤드를 최소화하려는 경우에 적합합니다.
안 됩니다. API 키와 시크릿, 자격 증명은 절대 프런트엔드 코드에 저장해서는 안 됩니다. 아무리 높은 수준으로 난독화하더라도 프런트엔드 JavaScript에 담긴 데이터는 작정한 공격자라면 추출해 낼 수 있습니다. 난독화는 리버스 엔지니어링을 어렵게 만들 뿐 암호화가 아니며, 시크릿을 지키는 수단으로 의존해서는 안 됩니다. 대신 시크릿은 백엔드 서버에 저장하고, 서버 측에서 환경 변수를 사용하며, 키를 감추기 위해 백엔드를 통해 API 호출을 프록시하거나, 서버가 발급하는 단기 토큰을 사용하세요.
100% 완벽한 난독화는 없습니다. JavaScript는 결국 공격자가 통제하는 환경, 즉 브라우저나 Node.js에서 실행되며 그곳에서는 런타임 메모리 검사가 언제나 가능합니다. 어떤 JavaScript 난독화도 이를 완전히 차단할 수는 없고, 다만 거기에 도달하기까지의 비용을 높일 수 있을 뿐입니다. 현재 VM 난독화된 코드를 처리하는 자동 역난독화 온라인 서비스는 존재하지 않습니다. 난독화할 때마다 고유한 가상 머신과 함께 맞춤형 바이트코드로 컴파일되기 때문에 범용 도구를 만드는 것이 불가능하기 때문입니다. 표준 난독화는 훨씬 쉽게 무너집니다. 자동화 도구와 코드 정리 도구만으로도 상당 부분 되돌릴 수 있습니다. 반면 VM 난독화를 뚫으려면 가상 머신을 완전히 리버스 엔지니어링하고, 바이트코드를 복호화·디코딩하고, 명령어 집합을 파악한 뒤 실행 흐름을 추적해야 하며, 이는 몇 주에 걸친 집중적인 노력이 필요한 작업입니다. VM 자기 방어가 없다면 강력한 AI 에이전트(예: Claude Opus 4.7)가 바이트코드를 추적해 규모가 작은 코드베이스의 원본 코드를 대략적으로 재구성할 수 있습니다. VM 자기 방어를 활성화하면 후킹 방지, 크로스 렐름 무결성 검증, 바이트코드 네이티브성 검사로 구성된 다층 LLM 대응 방어가 작동하여, 에이전트가 바이트코드를 해석하는 데 사용하는 동적 기법인 계측과 후킹, 샌드박스 실행을 무력화합니다. 파일을 정적으로 읽는 것은 여전히 가능하지만 드러나는 것은 불투명한 바이트코드뿐이며, 이를 해석하는 런타임을 관찰하려는 시도는 모두 무결성 검사에 걸립니다. 결국 파일만 가지고 AI로 자동 역난독화하는 일은 현실적으로 불가능해집니다. 코드를 한층 더 견고하게 만들려면 민감한 함수를 IIFE로 감싸 이름이 완전히 변환되도록 하고, 바이트코드 암호화 같은 강화 옵션을 활성화하세요. VM이 코드를 변환하는 방식에 대해 더 알아보세요.
VM 난독화는 복잡한 기술이라 일부 예외적인 상황은 완전히 지원되지 않을 수 있습니다. VM 난독화 후 코드가 깨진다면 vmTargetFunctionsMode: 'comment'를 사용해 특정 함수만 선택적으로 난독화하면서 문제의 범위를 좁힐 수 있습니다. 문제가 되는 코드를 찾아내고 이슈를 신고하는 단계별 방법은 문제 해결 가이드를 참고하세요.
난독화 도구는 디버깅과 리버스 엔지니어링을 막기 위해 새로운 코드를 추가합니다. 문자열은 16진수로 변환되며, VM 난독화의 경우 가상 머신 인터프리터 전체가 바이트코드와 함께 번들에 포함됩니다. 크기는 너무 걱정하지 않으셔도 됩니다. 난독화된 코드는 GZIP으로 매우 잘 압축되며, 대부분의 서버는 GZIP을 기본으로 활성화하고 있습니다.
권장하지 않으며, 경우에 따라 코드가 깨질 수 있습니다(특히 자기 방어를 활성화한 경우). 다만 난독화 전에 코드를 미니파이어로 처리하는 것은 괜찮습니다.
4.4MB 미만의 파일은 전적으로 메모리에서 처리되어 난독화된 결과물로 즉시 반환됩니다. 그보다 큰 파일(Team/Business 플랜)은 안전한 스토리지에 일시적으로 업로드한 뒤 난독화가 끝나는 즉시 삭제합니다. 추가 안전장치로 5분마다 정리 작업이 실행되어 5분이 지난 파일을 모두 제거합니다. 회원님의 코드는 결코 보관되지 않습니다.
아니요, 난독화된 코드를 원래 코드로 되돌리는 것은 불가능하므로 원본을 안전하게 보관해 두세요.
네. 난독화 옵션에서 대상 환경으로 "Node"를 선택하면 Node.js 환경에 맞게 결과물이 최적화됩니다.
ES2015(ES6)를 비롯해 ES2022+ 문법, 비공개 클래스 필드, async/await, 옵셔널 체이닝 등 모든 최신 JavaScript 기능을 지원합니다. TypeScript와 JSX는 난독화 전에 JavaScript로 컴파일해야 합니다. 유료 플랜에서는 HTML 파일도 난독화할 수 있습니다. 보호하려는 <script> 태그에 data-javascript-obfuscator 속성을 추가하면 HTML 구조를 유지한 채 해당 스크립트만 개별적으로 난독화됩니다. 표시된 각 스크립트의 코드는 다른 스크립트를 참조하지 않는 독립적인 코드여야 하며, ES 모듈 스크립트는 처리에서 제외된다는 점에 유의하세요.
VM 인터프리터와 자기 방어 계층을 포함한 난독화 결과물은 데스크톱 에버그린 브라우저와 iOS 16 이상(대략 최근 3년)에서 적극적으로 지원되고 테스트됩니다. 그보다 오래된 브라우저는 ES2015 모듈 지원이라는 최저 기준까지 최선을 다해 지원하며, 그 아래 버전과 Internet Explorer는 지원 범위에 포함되지 않습니다.
VM 보호가 필요하시면 요금제를 확인해 보시고, 표준 난독화는 무료 온라인 플레이그라운드에서 사용해 보세요. 전체 사용 흐름은 시작하기 가이드에서 확인하실 수 있습니다.
요금제 및 계정
플랜, 결제, 사용 한도에 대한 질문입니다.
pricing.faq.usageMeasured.answer
pricing.faq.exceedLimit.answer
pricing.faq.upgradeDowngrade.answer
pricing.faq.cancel.answer
pricing.faq.paymentMethods.answer
