보안, 이메일, DNS
SPF·DKIM·DMARC 설정 확인법 — 회사 메일이 스팸으로 가는 이유
2026-10-01
보낸 메일이 스팸함으로 가는 이유
고객에게 견적서를 보냈는데 "메일 못 받았다"는 연락을 받은 적이 있다면, 원인은 상대방 메일함이 아니라 우리 도메인의 DNS 설정일 가능성이 큽니다.
이메일에는 구조적인 약점이 하나 있습니다. 보내는 사람 주소를 아무나 적을 수 있다는 점입니다. 누구든 [email protected]을 발신자로 적어 메일을 보낼 수 있고, 프로토콜 자체는 그걸 막지 않습니다. 그래서 받는 쪽 메일 서버는 "이 메일이 정말 그 도메인에서 보낸 것인가"를 따로 검증합니다.
그 검증에 쓰이는 것이 SPF·DKIM·DMARC 세 가지입니다. 설정이 없으면 받는 서버는 판단 근거가 없으니 의심하는 쪽으로 기울고, 스팸함으로 분류하거나 아예 거부합니다. 반대로 설정이 제대로 되어 있으면 두 가지를 동시에 얻습니다.
- 우리가 보낸 메일이 정상 수신될 확률이 올라갑니다
- 우리 도메인을 사칭한 메일이 차단됩니다
두 번째가 특히 중요합니다. 거래처에게 우리 회사 이름으로 위조 메일이 가는 상황은 신뢰 문제로 직결됩니다.
세 가지가 각각 하는 일
| 항목 | 무엇을 확인하나 | 비유 |
|---|---|---|
| SPF | 이 도메인의 메일을 보낼 수 있는 서버 IP 목록 | 발신 가능한 우체국 명단 |
| DKIM | 메일에 전자서명을 붙여 내용이 위조되지 않았는지 | 봉인 스티커 |
| DMARC | SPF·DKIM 검사에 실패한 메일을 어떻게 처리할지 | 명단에 없을 때의 처리 지침 |
순서가 있습니다. SPF와 DKIM이 "검증 방법"이고, DMARC는 "검증에 실패했을 때 무엇을 할지"를 정하는 정책입니다. SPF·DKIM 없이 DMARC만 걸면 의미가 없고, DMARC 없이 SPF·DKIM만 있으면 실패한 메일에 대한 처리 지침이 없습니다. 세 개가 세트입니다.
지금 설정 상태 확인하기
DNS에 기록된 TXT 레코드를 조회하면 됩니다. 터미널에서 아래를 실행합니다. (example.com을 본인 도메인으로 바꿔주세요)
bash# SPF nslookup -type=TXT example.com # DMARC nslookup -type=TXT _dmarc.example.com
맥이나 리눅스라면 dig도 쓸 수 있습니다.
bashdig +short TXT example.com dig +short TXT _dmarc.example.com
결과에서 v=spf1로 시작하는 줄이 SPF, v=DMARC1로 시작하는 줄이 DMARC입니다. 아무것도 안 나오면 설정이 없는 상태입니다.
DKIM은 선택자(selector)를 알아야 조회할 수 있어서 조금 다릅니다. 메일 서비스마다 선택자 이름이 정해져 있는데, 예를 들어 구글 워크스페이스는 보통 google입니다.
bashnslookup -type=TXT google._domainkey.example.com
터미널이 부담스러우면 더 간단한 방법이 있습니다. 본인 회사 메일로 지메일 계정에 메일을 하나 보내고, 받은 메일에서 점 세 개 메뉴 → 원본 보기를 누릅니다. 상단에 SPF·DKIM·DMARC 각각의 통과 여부가 PASS/FAIL로 표시됩니다. 설정이 실제로 작동하는지 확인하는 가장 확실한 방법입니다.
설정하는 순서
DNS 레코드는 도메인을 구입한 곳(가비아, 후이즈, Cloudflare 등)의 DNS 관리 화면에서 추가합니다.
1. SPF — 발신 서버 지정
TXT 레코드를 하나 추가합니다. 호스트/이름은 @(또는 비워둠), 값은 쓰는 메일 서비스에 따라 다릅니다.
codev=spf1 include:_spf.google.com ~all
구글 워크스페이스를 쓰는 경우의 예입니다. 네이버웍스, Microsoft 365 등은 각 서비스가 안내하는 include: 값을 넣습니다.
끝의 ~all과 -all 차이를 알아두면 좋습니다.
~all(softfail) — 명단에 없는 서버의 메일은 의심하되 통과시킬 수 있음-all(hardfail) — 명단에 없으면 거부
처음에는 ~all로 시작하는 편이 안전합니다. 외부 메일 발송 도구(뉴스레터, 견적 자동발송 등)를 빠뜨렸을 때 -all이면 그 메일이 전부 막혀버립니다.
SPF는 도메인당 한 개만 둬야 합니다. 여러 서비스를 쓴다면 레코드를 여러 개 만드는 게 아니라 하나에 include:를 나열합니다. 두 개 이상 있으면 검사 자체가 실패합니다. 이게 가장 흔한 실수입니다.
codev=spf1 include:_spf.google.com include:sendgrid.net ~all
2. DKIM — 전자서명 켜기
DKIM은 DNS만으로 되지 않고, 쓰는 메일 서비스에서 키를 발급받아야 합니다. 서비스 관리 콘솔에서 DKIM을 활성화하면 공개키가 담긴 TXT 레코드 값과 선택자 이름을 알려줍니다. 그 값을 선택자._domainkey 형태의 호스트로 DNS에 추가합니다.
값이 길어서 복사 중에 줄바꿈이나 공백이 끼어드는 일이 잦습니다. 붙여넣은 뒤 다시 조회해 값이 온전한지 확인하세요.
3. DMARC — 정책 정하기
호스트 _dmarc에 TXT 레코드를 추가합니다. 처음에는 아무것도 차단하지 않고 보고만 받는 설정으로 시작하는 것이 정석입니다.
codev=DMARC1; p=none; rua=mailto:[email protected]
p=none은 "검사에 실패해도 그대로 두되, 리포트는 보내달라"는 뜻입니다. 몇 주간 리포트를 받아보면 우리 도메인으로 메일을 보내는 서버가 전부 드러납니다. 빠뜨린 발송 도구가 있는지 확인한 뒤에 단계를 올립니다.
| 정책 | 의미 | 언제 |
|---|---|---|
p=none | 처리하지 않고 보고만 | 처음 몇 주 |
p=quarantine | 스팸함으로 | 발송 경로를 전부 파악한 뒤 |
p=reject | 수신 거부 | 설정이 안정되고 사칭을 확실히 막으려 할 때 |
처음부터 p=reject로 두면 안 됩니다. 미처 등록하지 않은 발송 도구의 메일이 전부 거부되고, 그걸 알아차릴 때까지 고객에게 가는 메일이 사라집니다.
자주 나는 실수
| 실수 | 결과 |
|---|---|
| SPF 레코드가 두 개 이상 있다 | SPF 검사 자체가 실패 |
처음부터 -all 또는 p=reject | 등록 안 된 도구의 메일이 전부 차단 |
| DKIM 값 복사 중 줄바꿈·공백 혼입 | 서명 검증 실패 |
DMARC를 _dmarc가 아닌 @에 넣었다 | 인식되지 않음 |
| 외부 발송 도구를 SPF에 안 넣었다 | 뉴스레터·자동 견적 메일만 스팸 처리 |
| 설정만 하고 실제 수신 테스트를 안 했다 | 오타를 몇 달간 모름 |
마지막 항목이 핵심입니다. DNS 변경은 반영까지 수십 분에서 하루가 걸립니다. 설정 후 반드시 지메일 등으로 테스트 메일을 보내 원본 보기에서 세 항목이 PASS인지 눈으로 확인하세요.
자주 묻는 질문
Q. 메일은 네이버·지메일 무료 계정으로 쓰고 홈페이지 도메인만 있습니다. 설정해야 하나요? 회사 도메인으로 메일을 보내지 않는다면 SPF·DKIM은 당장 필요하지 않습니다. 다만 도메인을 사칭한 메일을 막기 위해 "이 도메인은 메일을 보내지 않는다"는 선언을 해두는 것은 의미가 있습니다.
Q. DNS를 잘못 건드리면 홈페이지가 안 열릴까요? SPF·DKIM·DMARC는 모두 TXT 레코드이고, 홈페이지 접속에 쓰이는 A·CNAME 레코드와는 별개입니다. TXT만 추가·수정하면 사이트 접속에는 영향이 없습니다. 기존 레코드를 지우지 않도록만 조심하세요.
Q. 우리 도메인 설정이 어떤 상태인지 한 번에 보고 싶습니다. 무료 보안 점검에서 URL만 넣으면 SPF·DMARC 설정 여부를 포함해 HTTPS, 보안 헤더, 파일 노출, 쿠키 설정 등 32개 항목을 점검해드립니다. 공격 행위 없이 외부에서 확인 가능한 범위만 보는 비침습 점검입니다.
Q. 설정을 직접 하기 어렵습니다. DNS 관리 화면 접근 권한이 있어야 하는 작업이라 대행이 제한되는 경우가 있습니다. 전문가 원격지원에서 상황을 알려주시면 가능한 범위를 안내해드립니다.
우리 도메인의 메일 인증 설정과 보안 상태를 지금 확인하려면 무료 보안 점검에서 URL만 입력하면 됩니다.