1. 개요
Laravel에서 회원가입 시 이메일 인증 기능을 구현할 때 Amazon SES(Amazon Simple Email Service)를 함께 사용하면 안정적인 발송 품질을 확보할 수 있다. (하루 5만개 발송 무료)
특히 서울(ap-northeast-2) 리전을 사용할 경우, 리전 설정·IAM 권한 구성·발신 이메일 인증이 올바르게 이루어져야 오류 없이 정상 발송이 가능하다.
아래 내용은 실제 설정 시 가장 중요한 핵심 요소인 IAM 사용자 생성 및 권한 부여, Access Key 생성, 이메일 또는 도메인 인증 절차, 리전 일치 여부를 중심으로 정리한 구성이다.
2. AWS SES 사용 준비 (서울 리전 기준)
2-1. AWS 리전 설정
SES는 리전별로 완전히 독립된 서비스이다.
따라서 SMTP 엔드포인트, Verified Identity, DKIM, SPF 모두 리전 단위로 관리된다.
서울 리전을 사용하는 경우 다음 값이 기준이 된다.
- 리전:
ap-northeast-2 - SMTP HOST:
email-smtp.ap-northeast-2.amazonaws.com
Laravel .env 파일에서도 반드시 같은 리전을 사용해야 오류가 발생하지 않는다.
3. IAM 사용자 생성 및 핵심 권한 구성
SES 발송을 위해서는 전용 IAM 사용자를 생성하고, SES 관련 권한을 부여해야 한다.
3-1. IAM 사용자 생성 절차
- AWS 콘솔 접속 → IAM 이동
- Users → Create user
- 사용자명 예:
mail-user - Programmatic access(프로그래밍 접근) 설정이 포함되도록 생성 진행
- 권한 부여 단계에서 SES 관련 권한을 추가
3-2. 권한(Policy) 부여
테스트 및 개발 단계에서는 아래 정책을 부여하는 것이 가장 간단하다.
AmazonSESFullAccess
운영 환경에서는 최소 권한 정책으로 다음 권한만 포함하도록 구성할 수도 있다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ses:*",
"Resource": "*"
}
]
}
4. Access Key 생성 (가장 중요한 단계)
IAM 사용자 생성 후 바로 Access Key가 만들어지는 것이 아니며, 별도로 생성해 주어야 한다.
Access Key 생성 절차:
1. IAM → Users → mail-user 클릭
2. Security credentials 탭 이동
3. Access keys 항목으로 이동
4. Create access key 버튼 클릭
5. Access key ID와 Secret access key 발급
Secret access key는 처음 생성된 순간에만 확인 가능하므로 반드시 안전하게 보관해야 한다.
5. Amazon SES에서 발신 이메일 또는 도메인 인증
Amazon SES에서는 발신자 정보가 반드시 인증되어 있어야 한다.
5-1. 도메인 인증(권장)
- SES → Verified Identities
- Create Identity → Domain
- 서울 리전 선택 상태인지 반드시 확인
- 도메인 입력 (예: example.com )
- DKIM 자동 생성 옵션 사용
- 제공되는 DNS 레코드(TXT + CNAME 3개)를 도메인 DNS에 등록 (cloudflare 이용)
- Verified 상태로 변경되면 인증 완료
도메인 인증이 완료되면 해당 도메인의 모든 이메일 주소를 발신자로 자유롭게 사용할 수 있다.
5-2. 이메일 단독 인증(테스트용)
- SES → Verified Identities
- Create Identity → Email Address
- 예:
userid@도메인주소.co.kr - 수신된 인증 메일의 링크 클릭
- Verified로 바뀌면 즉시 사용 가능
6. Sandbox 모드 해제(Production 모드 필요)
SES 신규 계정은 기본적으로 Sandbox 상태이다.
Sandbox 상태에서는: - 발신자와 수신자 모두 Verified 상태여야 한다. - 외부 사용자는 수신 불가.
서비스 운영 시에는 반드시 Production 모드 전환이 필요하다.
절차:
1. SES → Account Dashboard
2. Request Production Access
3. 발송 목적·도메인 설명·스팸 정책 등을 입력 후 제출 승인되면 외부 이메일로 정상 발송이 가능하다.
7. Laravel 환경 설정 (.env)
서울 리전을 기준으로 .env 설정 예시는 다음과 같다.
MAIL_MAILER=ses
MAIL_HOST=email-smtp.ap-northeast-2.amazonaws.com
MAIL_PORT=587
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=userid@도메인주소.co.kr
MAIL_FROM_NAME="site-name"
AWS_ACCESS_KEY_ID=발급받은AccessKeyID
AWS_SECRET_ACCESS_KEY=발급받은SecretAccessKey
AWS_DEFAULT_REGION=ap-northeast-2
핵심 주의 사항:
1. MAIL_HOST 리전과 AWS_DEFAULT_REGION은 반드시 동일해야 한다.
2. MAIL_FROM_ADDRESS는 SES에서 Verified된 이메일 또는 Verified된 도메인의 이메일이어야 한다.
8. Laravel 구성 파일 설정
8-1. config/services.php
'ses' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
],
8-2. config/mail.php
'default' => env('MAIL_MAILER', 'ses'),
'mailers' => [
'ses' => [
'transport' => 'ses',
],
],
9. 설정 반영을 위한 캐시 초기화
php artisan config:clear
php artisan cache:clear
php artisan config:cache
10. 흔히 발생하는 오류 정리
오류: "Email address is not verified"
주요 원인:
1. 발신 이메일 또는 도메인이 Verified되지 않음
2. Verified 리전과 실제 발송 리전이 서로 다름
3. Sandbox 모드에서 수신자 이메일이 미인증 상태
4. MAIL_FROM_ADDRESS가 미인증 주소를 사용
위 문제는 대부분 인증 절차 또는 리전 불일치로 인해 발생하므로, 해당 부분을 점검하면 해결할 수 있다.
11. 마무리
Laravel과 Amazon SES의 연동에서 가장 중요한 요소는 다음 세 가지이다.
- IAM 사용자 생성 후 적절한 권한 부여
- Access Key 및 Secret Key 발급
- SES에서 발신 이메일 또는 도메인 인증
특히 리전 설정이 정확해야 오류 없이 메일 발송이 가능하다.
위 구성을 기준으로 설정하면 회원가입 인증 메일을 안정적으로 운영할 수 있다.
'Laravel' 카테고리의 다른 글
| Laravel migrate 명령어 정리 (개발시) (0) | 2025.12.30 |
|---|---|
| Laravel 12 + Livewire 3 + React(Inertia) 기반 관리자 및 하이브리드 레이아웃 구성 가이드 (0) | 2025.12.22 |
| Cloudflare 환경에서 Laravel 세션 및 인증 설정 가이드 (0) | 2025.11.20 |
| Cafe24에서 라라벨 호스팅 방법, php8.4 + composer 설치 (0) | 2025.08.21 |
| Laravel 전용 MCP 서버 - boost (2) | 2025.08.17 |