Golang 및 AWS로 나만의 서버리스 구독자 목록 작성

DynamoDB 및 SES 이메일 등록 확인으로 자신 만의 뉴스 레터 목록을 작성하는 방법

Unsplash의 Rinck Content Studio의 사진.

다음은 내가 짜증나 지 않는 이메일 확인으로 구독 가입 흐름을 사랑스럽게 구축 한 방법입니다. 당신도 할 수 있습니다.

Simple Subscribe 소개

자체 메일 링리스트 또는 뉴스 레터를 관리하는 데 관심이있는 경우 자체 AWS 리소스에서 Simple Subscribe를 설정하여 이메일 주소를 수집 할 수 있습니다. 이 오픈 소스 API는 Go로 작성되었으며 AWS Lambda에서 실행됩니다. 사이트 방문자는 DynamoDB 테이블에 저장되고 여유 시간에 쿼리하거나 내보낼 준비가 된 목록에 가입 할 수 있습니다.

누군가 가입하면 가입 확인을 요청하는 이메일을 받게됩니다. "확인 됨"이라는 용어를 선호하지만이를 "이중 옵트 인"이라고도합니다. Simple Subscribe는 서버리스 인프라에서 작동하며 AWS Lambda를 사용하여 구독, 확인 및 구독 취소 요청을 처리합니다.

GitHub에서 완전 오픈 소스 코드가 포함 된 Simple SubScribe 프로젝트를 찾을 수 있습니다 . 나는 당신이 코드를 가져 와서 따라하기를 권장합니다! 이 기사에서는 각 빌드 단계, API의 단일 책임 기능 뒤에있는 사고 프로세스, 이와 같은 AWS 프로젝트에 대한 보안 고려 사항을 공유 할 것입니다.

확인 된 구독 흐름 구축

확인되지 않은 이메일 등록 프로세스는 간단합니다. 누군가 자신의 이메일을 웹 사이트의 상자에 넣으면 해당 이메일이 데이터베이스로 들어갑니다. 그러나 내가 사용자 입력을 신뢰하지 않는 것에 대해 가르쳐 주었다면 확인되지 않은 가입 프로세스라는 아이디어 자체가 당신의 문제를 일으킬 것입니다. 스팸은 샌드위치로 튀겨 질 때 유용 할 수 있지만 AWS 청구서를 실행하는 동안에는 재미가 없습니다.

보안 문자 또는 퍼즐과 같은 전략을 사용하여 사람임을 확인할 수 있지만 잠재적 인 구독자를 차단할 수있는 충분한 마찰을 일으킬 수 있습니다. 대신 확인 이메일을 통해 주소 정확성과 사용자 감정을 모두 확인할 수 있습니다.

이메일 확인으로 구독 흐름을 구축하려면 각 논리적 단계를 충족하는 단일 책임 함수를 만듭니다. 사람들은:

  1. 이메일 주소를 수락하고 기록하십시오.
  2. 해당 이메일 주소와 관련된 토큰을 생성하고 기록합니다.
  3. 토큰과 함께 해당 이메일 주소로 확인 이메일을 보냅니다.
  4. 이메일 주소와 토큰이 모두있는 확인 요청을 수락합니다.

각 단계에서 데이터의 모양과 저장 방법을 고려하십시오. 이렇게하면 "누군가 구독을 두 번 시도하면 어떻게 되나요?"와 같은 수수께끼를 처리하는 데 도움이 될 수 있습니다. 또는 "누군가가 소유하지 않은 이메일로 구독하면 어떻게 될까요?"와 같은 위협 모델링

준비된? 각 단계를 분석하고 마법이 어떻게 일어나는지 살펴 보겠습니다.

구독

구독 프로세스는 소박한 웹 양식으로 시작됩니다. 속성 type="email" required이 있는 양식 입력 은 브라우저 덕분에 유효성 검사 도움이됩니다 . 제출되면 양식은 단순 구독 구독 끝점에 GET 요청을 보냅니다.

단순 구독은 의도 한 구독자의 이메일이 포함 된 쿼리 문자열과 함께이 끝점에 대한 GET 요청을 수신합니다. 그것은 다음 생성 id값을 모두 추가 email하고 id당신의 DynamoDB의 테이블.

이제 테이블 항목은 다음과 같습니다.

  • 이메일: subscriber@example.com
  • 확인 : 거짓
  • 신분증: uuid-xxxxx
  • 타임 스탬프 : 2020–11-01 00:27:39

데이터로 작업 할 때 각 조작의 목표와 수신 요청을 기존 데이터와 비교할 수있는 방법을 고려하십시오.

예를 들어, 누군가가 동일한 이메일 주소에 대해 후속 구독을 요청했다면 어떻게 처리 하시겠습니까? "새로 새 광고 항목 만들기"라고 말할 수 있습니다 id. 그러나 이것은 서버리스 애플리케이션 데이터베이스가 요청 볼륨으로 지불되는 경우 최상의 전략이 아닐 수 있습니다.

이후 DynamoDB의 가격은 당신이 당신의 테이블에 읽기 및 쓰기 데이터의 양에 따라 달라집니다, 그것은 초과 데이터에 말뚝 박기 방지하는 것이 유리합니다.

이를 염두에두고 새 줄을 추가하는 대신 업데이트를 수행하여 동일한 이메일에 대한 구독 요청을 처리하는 것이 현명 할 것입니다. Simple Subscribe는 실제로 동일한 기능을 사용하여 데이터베이스 항목을 추가하거나 업데이트합니다. 이를 일반적으로 "업데이트 또는 삽입"이라고합니다.

SQLite와 같은 데이터베이스에서는 UPSERT 구문으로 수행됩니다 . DynamoDB의 경우 업데이트 작업을 사용합니다. 를 들어 이동 SDK , 구문이다 UpdateItem.

중복 구독 요청이 수신되면 데이터베이스 항목 email만 일치 합니다. 기존 라인 항목이 발견되면 id및 해당 항목이 timestamp재정의되어 기존 데이터베이스 레코드를 업데이트하고 테이블에 중복 요청이 넘치지 않도록합니다.

이메일 주소 확인

양식을 제출 한 후 의도 한 구독자는 링크가 포함 된 SES로부터 이메일을받습니다. 이 링크는 테이블 의 및를 사용하여 작성 email되며 id다음 형식을 사용합니다.

<BASE_URL><VERIFY_PATH>/?email=subscriber@example.com&id=uuid-xxxxx

링크를 방문하면 emailid쿼리 문자열에있는 확인 엔드 포인트에 요청이 전송 됩니다. 이번에는 들어오는 값 emailid값을 모두 데이터베이스 레코드 와 비교하는 것이 중요합니다 . 이것은 확인 이메일의 수신자가 요청을 시작하고 있음을 확인합니다.

검증 엔드 포인트 보장하지만이 값은 데이터베이스의 항목과 일치하는지, 다음 세트에 또 다른 업데이트 작업 수행 confirm에를 true하고 타임 스탬프를 업데이트합니다. 이제 항목은 다음과 같습니다.

  • 이메일: subscriber@example.com
  • 확인 : 사실
  • 신분증: uuid-xxxxx
  • 타임 스탬프 : 2020-11-01 00:37:39

이제 테이블을 쿼리하여 이메일 목록을 작성할 수 있습니다. 이메일 전송 솔루션에 따라 다른 Lambda를 사용하거나 명령 줄에서 수동으로이 작업을 수행 할 수 있습니다.

요청 구독에 대한 데이터 (여기서부터 confirm입니다 false) 확인 구독과 함께 테이블에 저장되고,이 이메일 주소로 전송하는 쿼리 할 때이 데이터를 구분하는 것이 중요합니다. 당신은 어디에서 당신은 단지 이메일을 반환 할 수 있도록 할 것 confirm입니다 true.

구독 취소 링크 제공

이메일 주소를 확인할 때와 마찬가지로 Simple Subscribe는 emailid이메일 주소를 구독 취소하기 위해 DynamoDB 테이블에서 항목을 삭제하는 함수에 대한 인수로 사용 합니다. 사람들이 목록에서 자신을 제거 할 수 있도록하려면 보내는 각 이메일에 해당 emailid구독 해지 엔드 포인트에 대한 쿼리 문자열을 포함하는 URL을 제공해야 합니다. 다음과 같이 보일 것입니다.

<BASE_URL><UNSUBSCRIBE_PATH>/?email=subscriber@example.com&id=uuid-xxxxx

구독자가 사람의 개입없이 목록에서 자동으로 자신을 제거 할 수있는 방법을 제공하는 것은 귀하에게 맡겨진 데이터를 처리하는 윤리적이고 존중하는 철학의 일부입니다.

데이터 관리

다른 사람의 데이터를 수락하기로 결정하면이를 관리하는 것이 귀하의 책임이됩니다. 이것은 당신이 만드는 모든 것에 적용됩니다. Simple Subscribe의 경우 데이터베이스 보안을 유지하고 테이블을 주기적으로 정리하는 것을 의미합니다.

일정 시간 confirmfalse지난 이메일 주소를 유지하지 않으 려면 정기적으로 실행되는 정리 기능을 설정하는 것이 좋습니다. 이는 AWS Lambda 함수를 사용하거나 명령 줄을 사용하여 수동으로 수행 할 수 있습니다.

여기서 데이터베이스 항목을 찾아 정리하는 방법 confirm입니다 falsetimestamp특정 시점보다 이전 버전입니다. 사용 사례 및 요청 볼륨에 따라 정리를 선택하는 빈도가 달라집니다.

또한 사용 사례에 따라 데이터 백업을 유지할 수 있습니다. 특히 데이터 무결성에 관심이있는 경우 DynamoDB에 대한 온 디맨드 백업 또는 특정 시점 복구 를 살펴볼 수 있습니다 .

독립 구독자 기반 구축

자신의 구독자 목록을 작성하는 것은 힘을 실어주는 노력이 될 수 있습니다! 뉴스 레터를 시작하든, 새 콘텐츠에 대한 알림을 보내든, 작업을 중심으로 커뮤니티를 만들 든, 제가 보내는 이메일보다 더 개인적이거나 직접적인 것은 없습니다.

오늘 Simple Subscribe로 구독자 기반을 구축하는 것이 좋습니다! 대부분의 작업과 마찬가지로 오픈 소스이며 개인적인 용도로 무료입니다. GitHub 저장소 에서 코드를 살펴 보거나 공식 웹 사이트 에서 자세히 알아보세요 .

Suggested posts

좋은 습관을 만들고 유지하는 방법

장기적인 습관을 유지하기위한 생산성 팁

좋은 습관을 만들고 유지하는 방법

두 아이의 엄마가 된 후 일을 끝내기가 더 어려워졌습니다. 나는 한 작업에서 다음 작업으로 뛰어 들었고 하루가 끝날 때까지 아무것도하지 않았을 때 실망했습니다.

양자 컴퓨팅 Pt를위한 프로그래밍. 1 : NumPy

이제 양자 컴퓨팅이면의 물리학을 배우기 시작 했으므로 "이봐, 실제로 양자 컴퓨터를 사용하려면 실제로 양자 장치를 손으로 만들어야합니까?"라고 궁금해 할 것입니다. 답은 양자 컴퓨터를 컴퓨터라고 부르는 이유가 있습니다. 프로그래밍이 가능합니다! 이 시리즈에서는 수학 개념을 시뮬레이션하고 양자 컴퓨터에서 실행하는 소프트웨어를 구축하는 방법을 배우게됩니다. 깨끗하고 현대적이며 라이브러리가 풍부한 언어이기 때문에 Python을 사용하여 코드를 작성할 것입니다.

Related posts

"실용적인 프로그래머"의 5 가지 필수 사항

역대 베스트셀러 코딩 북의 요점

"실용적인 프로그래머"의 5 가지 필수 사항

Pragmatic Programmer는 1999 년에 처음 출판되었으며 이후 역대 최고의 프로그래밍 책으로 선정되었습니다. 저자 Andy Hunt와 David Thomas는 Agile Manifesto의 원저자 중 하나였으며 몇 가지 심각한 자격을 가지고 있습니다.

대규모 GraphQL 쿼리 공격으로부터 보호

공격자가 공개적으로 사용 가능한 GraphQL 인터페이스를 사용하여 사이트를 스크랩하거나 서비스 거부 공격을 실행하는 방법에 대해 알아보십시오. 이들은 4 가지 방법 중 하나로이를 수행 할 수 있습니다. 단일 대형 쿼리를 신중하게 구성하여 실행하고, 관련 데이터를 가져올 수있는 병렬 쿼리를 많이 작성하고, 일괄 요청을 사용하여 많은 쿼리를 연속적으로 실행하고, 마지막으로 많은 요청을 보냅니다.

기술 인터뷰의 사회적 구성 요소

코딩 문제는 스트레스가 많지만 스트레스에 대한 당신의 반응은 당신의 기술적 능력보다 더 크게 말합니다.

기술 인터뷰의 사회적 구성 요소

기술 업계의 직책을 위해 인터뷰 할 때 일반적으로 제안을 고려하기 전에 최소한 3 차례의 인터뷰를 거치게됩니다. 라운드는 일반적으로 다음과 같습니다. 그렇게 생각하면 잘못된 것입니다.

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자를 만드는 비 기술적 인 것들 나는이 기사를 작성하는 것을 한동안 미루고 있습니다. 나는 그것을 작성할 자격이 있다고 생각하지 못했습니다. 오늘은 쓸 때라고 생각했습니다.