SMTP와 클라우드 메일 서비스 (SES / SENS) 구성하기
애플리케이션에서 메일 발송 기능을 구성하면서, SMTP와 클라우드 메일 서비스의 관계를 정리했습니다.
문제/상황
애플리케이션에서 메일 발송은 거의 필수 기능이지만, 실제 구성 시 아래와 같은 선택이 필요합니다.
- SMTP는 무엇인가?
- AWS SES와 NCP SENS의 차이는?
- SMTP 방식과 API 방식 중 어느 것을 택할까?
- 클라우드 환경에서 특별히 고려할 점은?
해결 방법 / 개요
이 글에서는 아래 내용을 정리합니다.
- SMTP 개념 및 동작 방식
- AWS SES와 NCP SENS 구조 비교
- SMTP vs API 방식 선택 기준
- 클라우드 환경 운영 시 주의사항
아키텍처 / 흐름
[Application]
↓
[SMTP Server or Cloud Email Service]
↓
[Recipient Mail Server]
애플리케이션은 메일을 직접 보내지 않고, 중간 서버를 거쳐 전달합니다.
사전 준비
- AWS 또는 NCP 계정
- SES/SENS 기본 접근 권한
- 메일 발송용 계정 (SMTP ID/Password)
- 테스트용 애플리케이션
1. SMTP란 무엇인가
SMTP (Simple Mail Transfer Protocol)는 메일을 전송하기 위한 표준 프로토콜입니다.
기본 동작:
Application → SMTP Server → Recipient Mail Server
핵심 특징:
- 애플리케이션이 SMTP 서버에 메일 전달을 위임
- ID/Password 기반 인증
- 포트 기반 통신
주요 포트:
25: 기본 포트 (대부분의 클라우드에서 차단)587: TLS (가장 일반적)465: SSL
2. AWS SES와 NCP SENS 비교
AWS SES (Simple Email Service)
특징:
- 이메일 발송 전용 서비스
- SMTP 방식과 API 방식 모두 지원
- 대량 메일 발송 최적화
- 세밀한 통계 및 로그 제공
NCP SENS (Simple & Easy Notification Service)
특징:
- 이메일 + SMS + Push 통합 서비스
- SMTP 방식과 API 방식 모두 지원
- 알림 채널 통합 관리
- 멀티 문자/이메일 템플릿 지원
비교
| 항목 | SES | SENS |
|---|---|---|
| 주 목적 | 이메일 전용 | 통합 알림 |
| SMTP 지원 | ✓ | ✓ |
| API 지원 | ✓ | ✓ |
| SMS | ✗ | ✓ |
| 특화 영역 | 대량 이메일 | 멀티 채널 |
정리:
- SES: 이메일에만 집중하는 서비스
- SENS: 여러 알림 채널을 함께 운영하려면 유리
3. 메일 발송 방식: SMTP vs API
SMTP 방식
Application → SMTP Server → Mail
장점:
- 표준 프로토콜 (대부분 언어 지원)
- 설정이 단순
- 벤더 독립적
단점:
- 템플릿/통계 미지원
- 에러 처리가 상대적으로 복잡
API 방식
Application → Email API → Mail
장점:
- 템플릿/변수 치환 가능
- 상세한 통계 제공
- 에러 응답이 구조화됨
단점:
- 서비스에 종속적
- 추가 학습 필요
4. SMTP 기반 구성 예제
Python 예제
import smtplib
from email.mime.text import MIMEText
# 1. SMTP 연결
smtp_server = "email-smtp.<region>.amazonaws.com" # AWS SES
port = 587
smtp = smtplib.SMTP(smtp_server, port)
smtp.starttls()
# 2. 인증
smtp.login("SMTP_USERNAME", "SMTP_PASSWORD")
# 3. 메일 구성
message = MIMEText("메일 본문")
message['Subject'] = "테스트"
message['From'] = "sender@example.com"
message['To'] = "recipient@example.com"
# 4. 발송
smtp.sendmail("sender@example.com", "recipient@example.com", message.as_string())
# 5. 종료
smtp.quit()
흐름정리:
- SMTP 서버 연결
- TLS 시작
- 인증 (SMTP 계정)
- 메일 구성 및 발송
- 연결 종료
주의사항
- SMTP 계정 정보는
Parameter Store또는Secret Manager에서 관리 - 포트 587, 465는 클라우드 보안 그룹에서 허용 필요
- 포트 25는 대부분 차단됨
5. API 기반 구성 예제 (간단히)
AWS SES SDK 예제 (Python)
import boto3
ses_client = boto3.client('ses', region_name='ap-northeast-2')
response = ses_client.send_email(
Source='sender@example.com',
Destination={'ToAddresses': ['recipient@example.com']},
Message={
'Subject': {'Data': '테스트'},
'Body': {'Text': {'Data': '메일 본문'}}
}
)
API 방식의 장점:
- 템플릿 기반 발송 가능
- 응답에
MessageId포함으로 추적 용이 - 구조화된 에러 처리
6. 클라우드 환경 운영 시 고려사항
6-1) 네트워크 설정
- SMTP 포트(587, 465) 허용 필요
- IAM 권한 또는 접근 키 설정
- VPC 내부 통신인 경우 엔드포인트 설정
6-2) 보안
- SMTP 계정 정보는 환경변수/비밀 저장소 사용
- 코드에 직접 포함 금지
- TLS 사용 강제
# 나쁜 예
password = "abc123"
# 좋은 예
import os
password = os.getenv('SMTP_PASSWORD')
6-3) 발송 제한
- AWS SES: 초기 account는 하루 발송량 제한 (제한 해제 신청 필요)
- NCP SENS: 서비스별 발송 한도 설정
- 구성 전에 서비스 제한 확인 필수
6-4) 모니터링
- 발송 성공/실패율 확인
- 수신 거부(bounce/complaint) 모니터링
- CloudWatch / SENS Dashboard 활용
정리
메일 발송은 표면상 단순하지만, 다음 계층으로 구성됩니다.
- 프로토콜: SMTP (표준)
- 클라우드 서비스: SES (AWS) / SENS (NCP)
- 전송 방식: SMTP (단순) vs API (확장)
선택 기준:
- 단순 메일 → SMTP 기반
- 템플릿/통계 필요 → API 기반
- 멀티 채널 → NCP SENS
- 이메일 전용 → AWS SES
SMTP를 이해하면 어떤 환경에서도 기본 메일 발송 구성이 가능합니다.
참고
- SMTP는 가장 기본적인 메일 전송 표준 (거의 모든 환경 지원)
- 클라우드 서비스는 SMTP 위에 추가 기능 제공
- 초기 구성은 SMTP, 확장 시 API 선택 권장