본문 바로가기
잡다한 지식

[AWS] SES Rebounce 확인법

by 얼음꽃 2026. 1. 23.
728x90

오랜만에 글을 쓰게됩니다.

 

유지보수만 하다 제 기준 새로운걸 확인하게 되어 끄적여 봅니다.

 

기본적으로 AWS 를 사용하게되면 Email 시스템인 SES를 사용하게 될텐데요.

 

AWS 콘솔 안에서는 전송 / 거부 / 반송 / 수신거부의 수치를 확인이 가능합니다.

 

SES 예시

 

전송이야 우리가 누구한테 보낼지는 대략 짐작이 되지만, 실제로 반송 / 거부 / 수신 거부는 수치만 확인 할 수 있고, 누구한테서 발송했는지는 따로 확인이 불가능합니다.

 

정확히 얘기하자면 저희가 AWS 에게 요청을 하지 않으면 수치상으로 밖에 확인을 못하는거죠.

 

해당 값을 확인하기 위해서는 우리가 이메일을 보낼때, 이 이메일에서 발생하는 Rebounce 혹은 Bounce를 확인해줘라고 알려줘야 AWS 측에서 추적을 시작하게되는데요. 해당 방법은 다음과 같습니다.

 

** 해당 내용은 Node & ses sdk v1 기준으로 작성합니다.

 

1. 통로를 만든다.

먼저 우리는 추적을 해서 해당 이벤트가 발생할 시 우리한테 보낼 수 있는 통로를 먼저 만들어줘야 하는데요.

 

그러기 위해서는 메시지를 뿌리는 방송 채널과 같은 AWS 내에 있는 SNS Topic을 생성 해줘야 합니다. Amazon SNS 를 가게되면

생성이 가능하고 보통은 표준 상태로 진행하게 됩니다.

 

SNS Topic 생성 예시

 

2. 통로를 통해서 보내는 SNS은 괜찮다를 설정

SNS Topic을 만들게 되면 이제 SNS 관리를 하게되는데 이때 여기서 보내는 메일은 누가 보내는거고 안전합니다 라는 정책이 필요합니다. ex) 현재 보내는 SNS는 SES에서 보내는거에요~~ 

 

만들어진 SNS Topic 주제에 들어가 편집을 누르면 액세스 정책이라고 존재하고 기본적으로 만들어진건 건들지말고, 다음과 같은 내용을 추가합니다.

{
      "Sid": "AllowSESPublish",
      "Effect": "Allow",
      "Principal": {
        "Service": "ses.amazonaws.com"
      },
      "Action": "SNS:Publish",
      "Resource": "arn:aws:sns:ap-northeast-2:계정:ses-event",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "계정"
        }
      }
    }

 

해당 내용의 정책을 넣고 저장하게되면 이제 정책은 완료가 됩니다.

 

(만들때 바로 넣어도 되긴하는데 설명 차 순서대로 작성합니다.)

 

3. 추적 가능한 세팅을 진행

Node에서 사용한 aws ses sdk 를 사용하는 경우 ConfigurationSetName 이라는 값을 추가해줘야 추적이 가능합니다. 이게 가능하도록 유도를 하려면 구성세트를 맞춰줘야 사용이 가능합니다.

 

Amazon SES를 들어가게 되면 목록에 구성 -> 구성세트가 존재하고 거기서 세트를 만들어 줍니다.

 

SES 구성세트 예제

 

이름만 설정하고 나머지는 그대로 둔 상태에서 세트를 먼저 생성합니다.

 

그럼 만든 세트가 보이는데 그 세트를 누르고 이벤트 대상을 클릭을 합니다.

 

SES 구성에서 이벤트 유형 예제

 

저희가 하려던 목적은 정상적으로 전송이 안되고 다시 돌아오는 것들에 대해서 확인 하는거기 때문에, 거부 / 하드 바운스 / 수신 거부를 선택을 합니다. 그리고 2단계에서 대상 지정은 Amazon SNS 를 선택 우리가 아까 만든 SNS Topic 주제를 연결합니다.

 

SES 구성에서 이벤트 유형 2단계 예제

 

그럼 이제 이메일을 보낼때 ConfigurationSetName 이 설정되어있으면 추적이 가능해집니다.

 

어 그럼 끝났네? 하실 수 있지만, 저희는 데이터를 받아야하기 때문에 데이터를 받을 수 있는 위치도 체크해줘야합니다.

데이터 저장은 우리가 사용하고 있는 DB에다 저장을 해서 수신 거부, 하드 바운스 등을 체크해서 나중에 보내지 말아야합니다.

 

4. Lamda를 만들어서 이벤트 발생 시 Lamda를 통하도록 만들기

 

Lamda 예제

 

람다를 일단 먼저 생성합니다. 그리고 생성 후 해당 람다에 들어가서 코드를 작성하고 옆에 Deploy를 누르면 배포가 됩니다.

 

Test를 하고 싶을때는, 코드 옆에 테스트를 이용하면 됩니다. 테스트가 완료되면 해당 람다를 이제 SNS Topic에 연결을 시켜줍니다.

 

5. Lamda와 SNS Topic 연결

 

Amazon SNS 들어가서 목록에 구독 -> 구독 생성 을 누른 후

 

Amazon SNS 구독 생성 예제

 

주제 ARN은 SNS Topic 에 만든 주제가 될거고, 프로토콜은 Lamda를 선택 후 만든 Lamda를 선택해서 구독생성을 하면 됩니다.

 

 

이렇게 하면 이메일 발송 후, 문제가 생기면

 

SNS Topic -> Lamda를 거쳐서 Lamda에 연결된 내 DB로 데이터가 들어올 수 있게 됩니다.

(Lamda에 DB를 연결하는데 아닌 API를 연결해서 그 API에서 DB 처리를 한다고 보시면 됩니다.)

 

이렇게하면 조금이라도 문제 생기는걸 방지 할 수 있게 됩니다.

 

728x90

'잡다한 지식' 카테고리의 다른 글

[for] for를 쓰면서 느낀점...  (2) 2025.07.23
[Linux] 파일에 권한 정보  (0) 2025.05.16
[PY] python을 이용한 Chromadb  (0) 2025.04.24
[Vector] Pinecone 벡터  (0) 2025.04.15
[SQL] mediumtext 가 준 교훈..  (0) 2025.03.21