이메일은 비즈니스 커뮤니케이션의 핵심 도구이지만, 스팸 메일함으로 직행하거나 아예 차단되는 경우만큼 답답한 일도 없습니다. 고객에게 중요한 정보가 담긴 메일이 제대로 전달되지 않는다면 비즈니스에 큰 타격을 줄 수 있습니다. 이러한 문제를 해결하고 이메일 발송 신뢰도를 높이는 열쇠는 바로 SPF, DKIM, DMARC와 같은 이메일 인증 기술에 있습니다.
이번 글에서는 이메일 발송 서비스로 널리 사용되는 SendGrid, Google을 기준으로, 마치 전문가처럼 SPF, DKIM, DMARC를 설정하여 이메일 전달률을 극대화하는 방법을 단계별로 알아보겠습니다.
🎯 0단계: 이메일 보안 설정, 왜 필요하고 무엇을 준비해야 할까요?
스팸 메일과 피싱 공격이 날로 정교해지면서, 주요 이메일 서비스 제공업체(Gmail, Outlook 등)는 수신되는 메일이 진짜 발신자로부터 온 것인지 더욱 엄격하게 검증합니다. SPF, DKIM, DMARC는 이러한 검증 과정에서 내 도메인의 정당성을 증명하는 역할을 합니다.
- SPF (Sender Policy Framework): 내 도메인 이름으로 이메일을 보낼 수 있도록 허용한 메일 서버 목록을 DNS에 공개합니다.
- DKIM (DomainKeys Identified Mail): 이메일에 디지털 서명을 추가하여 메일 내용이 중간에 위조되지 않았음을 증명합니다.
- DMARC (Domain-based Message Authentication, Reporting, and Conformance): SPF와 DKIM 검증 결과를 바탕으로 메일 처리 정책(예: 차단, 격리)을 수신 측에 알리고, 인증 실패 시 보고서를 받아볼 수 있게 합니다.
준비물:
- 사용할 도메인: 예) example.com
- 발신자 이메일 주소: 예) noreply@example.com
- DNS 관리 권한: 도메인을 구입한 곳(예: GoDaddy, 가비아) 또는 DNS 호스팅 서비스(예: Cloudflare, AWS Route 53)의 설정 페이지 접근 권한이 필요합니다.
- SendGrid 계정
이제 본격적으로 설정을 시작해 봅시다!
✅ 1단계: SendGrid 발신자 인증 (Single Sender Verification)
가장 먼저 SendGrid에서 내가 사용할 발신자 이메일 주소를 인증해야 합니다.
- SendGrid 대시보드에 로그인합니다.
- Settings > Sender Authentication으로 이동합니다.
- Single Sender Verification 섹션에서 "Create New Sender" 또는 유사한 버튼을 클릭합니다.
- 양식에 발신자 이름, 이메일 주소(noreply@example.com), 회신 주소 등을 입력하고 저장합니다.
- 입력한 발신자 이메일 주소로 인증 메일이 발송됩니다. 해당 메일을 확인하고 인증 링크를 클릭하여 완료합니다.
이제 noreply@example.com 주소로 테스트 메일을 보낼 수 있게 되었습니다. 하지만 이는 가장 기본적인 인증이며, 실제 대량 발송 및 높은 신뢰도를 위해서는 도메인 전체를 인증하는 것이 강력히 권장됩니다.
✅ 2단계: SendGrid 도메인 인증 (SPF & DKIM 설정)
도메인 인증은 SendGrid가 내 도메인을 대신하여 이메일을 보낼 수 있도록 공식적으로 허용하는 과정입니다. 이 과정을 통해 SPF와 DKIM 레코드가 자동으로 설정(또는 설정 정보가 제공)됩니다.
- SendGrid 대시보드의 Settings > Sender Authentication으로 이동합니다.
- Domain Authentication 섹션에서 "Authenticate Your Domain" 또는 "Get Started"를 클릭합니다.
- DNS Host 선택: DNS 레코드를 관리하는 서비스를 선택합니다 (예: Cloudflare, GoDaddy, Amazon Route 53 등). 목록에 없다면 "Other Host (Not Listed)"를 선택합니다.
- Use branded links? (브랜드 링크 사용 여부): Yes를 선택하는 것이 좋습니다. 이를 통해 이메일 내의 모든 링크(오픈 추적, 클릭 추적 등)가 SendGrid 도메인이 아닌 내 도메인으로 표시되어 신뢰도를 더욱 높일 수 있습니다.
- Domain (도메인): 인증할 도메인(예: example.com)을 입력합니다.
- Advanced Settings (고급 설정 - 선택 사항): 자동 보안(Automated Security)을 선택하는 것이 일반적입니다. 커스텀 DKIM 선택자 등을 사용할 수 있습니다.
- "Next"를 클릭하면 SendGrid가 DNS에 추가해야 할 여러 개의 CNAME 레코드 (또는 경우에 따라 TXT 레코드 포함) 정보를 보여줍니다. 일반적으로 다음과 같은 레코드들이 생성됩니다:
- DKIM 레코드 (2개):
- Type: CNAME
- Name/Host: s1._domainkey.example.com (실제 값은 다름)
- Value/Points to: s1.domainkey.uXXXXX.wlXXX.sendgrid.net (실제 값은 다름)
- Name/Host: s2._domainkey.example.com (실제 값은 다름)
- Value/Points to: s2.domainkey.uXXXXX.wlXXX.sendgrid.net (실제 값은 다름)
- SPF 레코드 (및 브랜드 링크용 MAIL FROM 도메인 레코드):
- SendGrid는 주로 CNAME 레코드를 사용하여 MAIL FROM 도메인을 설정하고, 이를 통해 SPF 정렬을 맞춥니다. 예를 들어, em123.example.com과 같은 레코드가 생성될 수 있습니다.
- 만약 TXT 레코드로 직접 SPF를 설정해야 하는 경우, SendGrid의 SPF는 include:sendgrid.net입니다. 기존 SPF 레코드가 있다면 여기에 추가합니다. (예: v=spf1 include:sendgrid.net ~all)
- 브랜드 링크용 CNAME 레코드 (선택 시):
- Type: CNAME
- Name/Host: urlXXX.example.com (실제 값은 다름)
- Value/Points to: sendgrid.net (또는 유사한 값)
- DKIM 레코드 (2개):
- DNS 레코드 추가: 위에서 받은 레코드 정보를 복사하여 내 도메인의 DNS 관리 페이지에 정확히 추가합니다. (각 DNS 호스팅 업체마다 UI는 다를 수 있습니다.)
- 주의: DNS 변경 사항이 전 세계로 전파되는 데에는 몇 분에서 최대 48시간까지 소요될 수 있습니다.
- DNS 레코드 추가가 완료되면 SendGrid 화면으로 돌아와 하단의 "Verify" 버튼을 클릭합니다.
- 모든 레코드가 정상적으로 확인되면 "It worked!" 메시지와 함께 도메인 상태가 "Verified"로 변경됩니다.
🎉 이제 example.com 도메인은 SendGrid를 통해 SPF와 DKIM 인증을 받아 메일을 발송할 준비가 되었습니다!
✅ 3단계: DMARC 레코드 설정 (DNS에 추가)
DMARC는 SPF와 DKIM을 보완하여 이메일 보안을 한층 강화합니다. DMARC 정책을 설정하면, 내 도메인에서 발송된 것처럼 위장한 이메일이 수신자에게 어떻게 처리되어야 하는지(예: 아무것도 안 함, 격리, 거부)를 지정할 수 있고, 관련 활동에 대한 보고서를 받을 수 있습니다.
- DNS 관리 페이지에 접속하여 새 TXT 레코드를 추가합니다.
- 레코드 정보:
- Type (유형): TXT
- Name/Host (이름/호스트): _dmarc.example.com (반드시 _dmarc로 시작해야 합니다)
- Value/Content (값/내용):
- 초기 권장 값 (모니터링 모드):v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com;
- v=DMARC1: DMARC 버전입니다.
- p=none: 정책을 '없음'으로 설정합니다. 즉, DMARC 검증에 실패해도 특별한 조치를 취하지 않고 모니터링만 합니다. 처음에는 none으로 시작하여 정상 메일이 차단되지 않도록 하는 것이 안전합니다.
- rua=mailto:dmarc-reports@example.com: DMARC 집계 보고서를 받을 이메일 주소를 지정합니다. dmarc-reports@example.com은 예시이며, 실제 수신 가능한 주소로 변경해야 합니다.
- 점진적 강화:
- 모니터링 후 문제가 없다고 판단되면 p=quarantine (격리, 스팸함으로 이동)으로 변경합니다.
- 최종적으로 p=reject (거부, 메일 반송)로 강화하여 스푸핑 메일을 적극적으로 차단할 수 있습니다.
- 기타 유용한 태그:
- ruf=mailto:forensic-reports@example.com: 포렌식(실패) 보고서를 받을 이메일 주소입니다. (더 상세하지만 용량이 클 수 있습니다.)
- pct=100: DMARC 정책을 적용할 메일의 비율입니다. (기본값 100)
- adkim=r (relaxed) 또는 s (strict): DKIM 정렬 모드입니다.
- aspf=r (relaxed) 또는 s (strict): SPF 정렬 모드입니다.
- 초기 권장 값 (모니터링 모드):v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com;
- 레코드를 저장합니다. DNS 전파 시간을 기다립니다.
중요: DMARC 정책을 reject로 바로 설정하면 정상적인 메일 발송에 문제가 생길 수 있으므로, 반드시 p=none으로 시작하여 충분한 기간 동안 리포트를 분석한 후 점진적으로 강화해야 합니다.
✅ 4단계: 테스트 이메일 구성 및 발송
이제 모든 설정이 완료되었으니, 실제 이메일을 발송하여 잘 작동하는지 테스트해 봅시다.
1. SendGrid 템플릿 사용 (선택 사항): SendGrid의 Email API > Dynamic Templates에서 테스트용 템플릿을 만들 수 있습니다.
<html>
<head>
<title>Example.com 발신 전용 테스트 메일</title>
</head>
<body style="font-family: Arial, sans-serif; background-color: #ffffff; padding: 24px; color: #333333;">
<h2 style="color: #000000;">📬 Example.com 테스트 메일</h2>
<p style="font-size: 14px; line-height: 1.6;">
안녕하세요,<br><br>
이 메일은 <strong>발신 전용</strong> 이메일 주소 <code>noreply@example.com</code>에서 발송된 테스트 메일입니다.<br>
메일 수신 테스트를 위한 용도로 발송되었으며, 별도의 응답은 처리되지 않습니다.<br><br>
감사합니다.<br>
<em>Example.com 팀 드림</em>
</p>
<hr style="margin: 24px 0; border: none; border-top: 1px solid #dddddd;" />
<div data-role="module-unsubscribe" class="module" role="module" data-type="unsubscribe" style="color:#444444; font-size:12px; line-height:20px; padding:16px; text-align:center;" data-muid="4e838cf3-9892-4a6d-94d6-170e474d21e5">
<p style="font-size:12px; line-height:20px;">
<a class="Unsubscribe--unsubscribeLink" href="{{{unsubscribe}}}" target="_blank" style="text-decoration:none;">
수신 거부
</a>
|
<a href="{{{unsubscribe_preferences}}}" target="_blank" class="Unsubscribe--unsubscribePreferences" style="text-decoration:none;">
수신 설정 관리
</a>
</p>
</div>
</body>
</html>
2. API를 사용하여 테스트 발송: curl 명령어 또는 Postman과 같은 API 테스트 도구를 사용하여 발송할 수 있습니다. (YOUR_SENDGRID_API_KEY는 실제 API 키로 대체해야 합니다.)
curl --request POST \
--url https://api.sendgrid.com/v3/mail/send \
--header "Authorization: Bearer YOUR_SENDGRID_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"personalizations": [
{
"to": [
{
"email": "test-recipient@gmail.com"
}
],
"subject": "Example.com 발신 전용 테스트 메일"
}
],
"from": {
"email": "noreply@example.com",
"name": "Example.com"
},
"content": [
{
"type": "text/html",
"value": "<html><body><h2>📬 Example.com 테스트 메일</h2><p>이 메일은 발신 전용 주소에서 발송된 테스트 메일입니다. SPF, DKIM, DMARC 설정을 확인해주세요.</p></body></html>"
}
]
}'
✅ 5단계: Gmail 수신 테스트 & 인증 헤더 확인
테스트 메일을 Gmail과 같은 주요 이메일 서비스로 발송하여 수신 상태 및 인증 결과를 확인합니다.
- Gmail에서 테스트 메일을 수신합니다.
- 메일 오른쪽 상단의 점 세 개(더보기) 메뉴를 클릭한 후 "원본 보기 (Show original)"를 선택합니다.
- 새 창에 메일의 전체 헤더 정보가 표시됩니다. 여기서 다음 항목들을 확인합니다:
- SPF: Authentication-Results 헤더 또는 유사한 부분에서 spf=pass인지 확인합니다. 발신 서버 IP가 SPF 레코드에 명시된 서버와 일치해야 합니다.
- DKIM: Authentication-Results 헤더에서 dkim=pass이고, 서명 도메인(d=example.com)이 올바른지 확인합니다.
- DMARC: Authentication-Results 헤더에서 dmarc=pass (또는 p=none일 경우 dmarc=none으로 표시될 수 있음)인지 확인합니다.
Authentication-Results: mx.google.com;
dkim=pass header.i=@example.com header.s=s1 header.b=XXXXXX;
spf=pass (google.com: domain of noreply@example.com designates XX.XX.XX.XX as permitted sender) smtp.mailfrom=noreply@example.com;
dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=example.com
🚀 정리: 성공적인 이메일 발송을 위한 여정
지금까지 SendGrid를 사용하여 이메일 발송 신뢰도를 높이기 위한 SPF, DKIM, DMARC 설정 방법을 알아보았습니다. 전체 흐름을 다시 한번 정리하면 다음과 같습니다.
- [사전 준비] 필요한 정보 확인 및 DNS 관리 권한 확보
- [SendGrid 발신자 인증] Single Sender Verification (기본)
- [SendGrid 도메인 인증] SPF 및 DKIM 레코드 DNS에 추가 (필수)
- [DMARC 설정] DNS에 DMARC (TXT) 레코드 추가 (권장)
- [테스트 발송] SendGrid 템플릿 또는 API로 테스트 메일 발송
- [수신 확인 및 검증] Gmail 등에서 메일 헤더의 SPF, DKIM, DMARC 결과 확인
이메일 보안 설정은 한 번으로 끝나는 것이 아니라, DMARC 리포트를 주기적으로 모니터링하고 필요에 따라 정책을 조정해나가는 지속적인 과정입니다. 처음에는 다소 복잡해 보일 수 있지만, 이 가이드를 차근차근 따라 하시면 분명 이메일 전달률 향상이라는 값진 결과를 얻으실 수 있을 것입니다. 여러분의 이메일이 스팸 걱정 없이 안전하게 전달되기를 응원합니다!
'* DevSecOps > Operations' 카테고리의 다른 글
Amazon Bedrock으로 Slack 기반 AIOps 챗봇 만들기: AWS 보안 아키텍처 제안부터 장애 해결까지! 🚀 (0) | 2025.04.22 |
---|---|
Datadog Watchdog,로그 관리, Contents Pack으로 완성하는 AIOps 🐶 (0) | 2025.04.14 |
회사 규모에 따른 보안 전략 (0) | 2025.03.23 |
온프레미스 vs 가상머신 가상화 vs 클라우드 (0) | 2025.03.22 |