웹에 이메일을 올려야 하는데, 스팸이 무서워요
웹사이트에 연락처를 남기고 싶은데 이메일 주소를 그대로 노출하면 스팸봇이 순식간에 긁어간다는 건 개발자라면 다들 아는 이야기예요. 그래서 예전부터 이메일 주소를 "난독화(obfuscation)"하는 다양한 기법이 쓰여왔는데요. 문제는 시간이 지나면서 봇도 점점 똑똑해지고, 예전에 잘 먹히던 방법이 지금은 안 통하는 경우가 많다는 거예요. Spencer Mortensen이라는 개발자가 이 주제를 2026년 기준으로 다시 정리했는데, 꽤 흥미로운 결과가 나왔어요.
이메일 난독화, 이게 뭐냐면
이메일 난독화란 사람 눈에는 이메일 주소가 보이지만, 자동으로 웹페이지를 훑는 프로그램(크롤러, 스팸봇)에게는 이메일 주소로 인식되지 않게 만드는 기법이에요. 예를 들어 user@example.com 대신 user [at] example [dot] com이라고 쓴다거나, JavaScript로 이메일 주소를 동적으로 조립하는 식이죠. 쉽게 말해 "사람은 알아보지만 기계는 못 알아보게 위장하는 것"이에요.
실제로 테스트해보니, 뭐가 통하고 뭐가 안 통할까
이번 분석에서는 다양한 난독화 기법을 실제 웹페이지에 적용하고, 현재 활동 중인 스팸봇들이 이를 뚫는지 테스트한 결과를 공유하고 있어요. 핵심 결과를 살펴볼게요.
효과 없는 방법들부터 보면요. 일단 mailto: 링크에 이메일을 그대로 넣는 건 당연히 즉시 수집돼요. 그리고 많은 분들이 쓰는 [at]이나 (at) 같은 텍스트 치환도 이제는 대부분의 봇이 패턴을 학습해서 거의 무용지물이에요. ROT13 같은 단순 인코딩도 마찬가지고요. ROT13이 뭐냐면, 알파벳을 13자리씩 밀어서 치환하는 아주 단순한 암호화인데, 봇 입장에서 디코딩하는 건 일도 아니거든요.
HTML 엔티티 인코딩, 그러니까 @처럼 @를 HTML 숫자 코드로 바꾸는 것도 예전에는 꽤 효과적이었는데 지금은 봇들이 다 파싱해버려요. URL 인코딩(%40)도 마찬가지예요.
그러면 뭐가 효과적이냐? CSS를 활용한 방법이 아직 꽤 잘 막아주고 있어요. 예를 들어 이메일 주소를 역순으로 HTML에 넣고 CSS direction: rtl(오른쪽에서 왼쪽으로 읽기)을 적용하면 사람 눈에는 정상으로 보이지만 봇이 소스를 읽으면 거꾸로 된 문자열을 보게 되는 거예요. 또 CSS display: none으로 가짜 문자를 중간에 끼워 넣는 방법도 있어요. 소스코드에는 use<span style="display:none">FAKE</span>r@example.com처럼 보이지만 화면에는 user@example.com만 표시되는 거죠.
JavaScript 기반 방법도 여전히 강력해요. 페이지 로드 후 JS로 이메일 주소를 조립해서 DOM에 삽입하면 HTML 소스만 긁는 단순한 봇은 이메일을 찾을 수 없거든요. 다만 헤드리스 브라우저(Puppeteer 같은 도구로 실제 브라우저처럼 페이지를 렌더링하는 봇)가 점점 늘고 있어서 이것도 완벽하진 않아요.
가장 확실한 방법은 이메일 주소를 이미지로 만들거나, 컨택트 폼을 대신 사용하는 것이에요. 이미지는 OCR 기술이 발전하면서 100% 안전하다고는 못 하지만 여전히 대부분의 스팸봇을 막아주고요.
다른 접근법과 비교해보면
사실 이메일 난독화 말고 다른 전략도 있어요. Google의 reCAPTCHA를 컨택트 폼에 붙이는 방법, 또는 Cloudflare가 제공하는 이메일 주소 보호 기능을 쓰는 방법도 있죠. Cloudflare의 Email Address Obfuscation은 서버 사이드에서 자동으로 이메일을 암호화해주는데, Cloudflare를 이미 쓰고 있다면 설정 한 번으로 끝나서 편리해요.
하지만 이런 서드파티 의존 없이 순수 HTML/CSS/JS만으로 해결하고 싶은 경우도 있잖아요. 특히 정적 사이트나 개인 블로그에서는 가볍게 CSS 기반 기법을 적용하는 게 현실적인 선택이에요.
한국 개발자에게 주는 시사점
한국에서도 개인 포트폴리오 사이트, 회사 소개 페이지, 오픈소스 프로젝트의 README 등에 이메일을 노출하는 경우가 정말 많은데요. 특히 GitHub 프로필에 이메일을 그대로 올려두는 분들이 아직도 많아요. 스팸뿐만 아니라 피싱 공격의 타겟이 될 수도 있으니 한번 점검해보면 좋겠어요.
실무에서 바로 적용할 수 있는 팁을 정리하면요. 정적 사이트에는 CSS direction: rtl 기법이나 display:none 더미 삽입을 조합해서 쓰면 효과적이에요. SPA(React, Vue 등)를 쓰고 있다면 이미 JavaScript로 렌더링되니 기본적인 보호가 되지만 SSR(서버사이드 렌더링)을 쓴다면 별도 처리가 필요해요. 그리고 가장 좋은 건 역시 컨택트 폼으로 대체하는 거예요.
정리하자면
2026년에도 이메일 난독화는 "은탄환(silver bullet)" 같은 완벽한 해법은 없고, 여러 기법을 조합해서 봇의 수집 비용을 높이는 게 핵심이에요. 여러분은 자신의 이메일 주소를 웹에 어떻게 노출하고 계신가요? 혹시 스팸봇에 털린 경험이 있다면 공유해주세요!
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공