SPF 레코드 구문 해설: 개발자를 위한 실용 가이드

발행: (2026년 5월 23일 PM 02:22 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

SPF(Sender Policy Framework)는 DNS 레코드로, 수신 메일 서버에 어떤 서버가 도메인을 대신해 이메일을 보낼 수 있는지 알려줍니다. 목록에 없는 서버가 해당 도메인에서 보낸 것처럼 이메일을 보낼 경우, 수신 서버는 이를 거부하거나 플래그를 달 수 있습니다.
문법을 이해하면 올바르게 설정하고, 10회 조회 제한을 실수로 초과하는 등의 흔한 오류를 피할 수 있습니다.

SPF 레코드는 도메인 DNS에 등록되는 TXT 레코드이며 항상 다음으로 시작합니다.

v=spf1

그 뒤에 허용할 발신자를 메커니즘 형태로 나열하고, 마지막에 all 지시자를 넣습니다.

예시 SPF 레코드:

v=spf1 include:_spf.google.com include:spf.sendinblue.com ip4:203.0.113.50 ~all

ip4: 와 ip6:

특정 IP 주소 혹은 CIDR 범위를 허용합니다.

ip4:203.0.113.50

직접 관리하는 메일 서버의 정확한 IP를 알고 있을 때 사용합니다.

include:

다른 도메인의 SPF 레코드를 참조합니다. include: 하나당 DNS 조회가 한 번 발생합니다.

include:_spf.google.com

대부분의 서드파티 이메일 서비스는 추가할 include: 값을 제공합니다. 해당 서비스의 SPF 레코드에 포함된 모든 IP가 허용됩니다.

a:

도메인의 A 레코드를 허용합니다. 도메인의 A 레코드와 이메일 발신 IP가 일치하면 통과합니다.

mx:

도메인의 MX 레코드를 허용합니다. 흔히 사용되지는 않으며, 메일 서버와 MX 레코드가 동일한 호스트일 때 주로 씁니다.

ptr:

사용하지 않는 것이 좋습니다. 조회가 느리고 신뢰성이 낮으며 실제로는 폐기된 방식입니다.

all 지시자

레코드 끝에 위치하며, 목록에 없는 서버에서 온 메일에 대해 어떻게 처리할지를 정의합니다.

  • ~all (softfail) — 실패하지만 보통은 메일을 전달하고, 의심스러운 것으로 표시합니다.
  • -all (hardfail) — 메일을 거부합니다.
  • +all (pass all) — 모든 것을 허용합니다. SPF의 의미가 사라집니다.
  • ?all (neutral) — 정책이 없으며, SPF가 없는 것과 동일합니다.

대부분의 발신자는 ~all을 기본으로 사용하면 안전합니다. 레코드가 완전하다고 확신이 서면 -all로 전환해 보안을 강화하세요.

DNS 조회 제한

SPF는 평가당 10회의 DNS 조회 제한이 있습니다. include:, a:, mx:, ptr: 각각이 한 번씩 조회를 차지합니다. 10회를 초과하면 SPF 검사는 permerror를 반환하고, 이는 레코드가 실패한 것으로 간주됩니다.

여러 서비스를 동시에 사용하는 경우(예: Google Workspace, Mailchimp, SendGrid, CRM 등) 이 제한을 쉽게 초과할 수 있습니다.

해결 방법

  • 레코드를 검토하고 조회 횟수를 셉니다.
  • 더 이상 사용하지 않는 서비스를 제거합니다.
  • include: 값을 실제 IP 주소로 교체해 레코드를 플래튼(flatten) 합니다(제공자가 IP를 변경하면 업데이트가 필요합니다).
  • 발신자가 많아 줄일 수 없을 경우 SPF 플래튼 서비스 이용을 고려합니다.
  • InboxGreen의 SPF 조회 도구를 사용하면 현재 레코드와 조회 횟수 문제를 확인할 수 있습니다.

기타 주의사항

  • Multiple SPF records: 도메인당 하나의 TXT SPF 레코드만 허용됩니다. 두 번째 레코드가 있으면 SPF 검증이 완전히 깨집니다. 하나로 합쳐야 합니다.
  • Wrong domain: SPF는 DMARC 정렬을 위해 From: 헤더에 있는 도메인과 일치해야 합니다. 예를 들어 noreply@mail.yourdomain.com에서 보낸다면 SPF 레코드는 mail.yourdomain.com에 있어야 합니다.
  • Forgetting subdomains: yourdomain.com에 설정한 SPF는 mail.yourdomain.com이나 info.yourdomain.com을 커버하지 않습니다. 각 서브도메인마다 별도의 레코드가 필요합니다.
  • Missing all: 모든 SPF 레코드는 반드시 all 형태로 끝나야 합니다. 없으면 결과가 정의되지 않습니다.
  • InboxGreen 무료 검사기는 SPF 레코드를 가져와 메커니즘을 파싱하고 도메인에 대한 인증 검사를 수행합니다. 로그인 없이 바로 사용할 수 있습니다.
0 조회
Back to Blog

관련 글

더 보기 »

내 스킬

프로젝트를 위한 AI 지시문을 만들고, 설치하고, 관리하세요 — 코딩이 필요 없습니다. CREATE 이름을 정하고, 카테고리를 선택하고, 원하는 것을 설명하세요 — 마법사가 자동으로 구성합니다.