AI와 함께 뉴스레터 서비스 직접 운영하기 (Ghost & Amazon SES 도입기)

Ghost(Pro)에서 자체 호스팅 Ghost로 옮기고, Mailgun 호환 Bridge로 Amazon SES를 연결했습니다. 두 번의 승인 거절과 단계 발송 준비까지 직접 겪은 과정을 정리합니다.

Ghost와 Amazon SES를 연결하는 디지털 뉴스레터 발송 구조

안녕하세요? 생산적생산자입니다.

저의 뉴스레터 운영에 큰 변화가 있습니다. 이 여정과 배움을 정리해서 여러분에게 공유하고 싶어 글을 적습니다. 누군가는 이걸 해보고 싶으실 수도 있기 때문입니다. 사실 여러분이 보시기엔 뉴스레터 자체에 아무런 변화도 없을 겁니다. 같은 url에서 뉴스레터 글을 블로그처럼 볼 수 있고, 뉴스레터도 동일한 이름으로 발송이 될 예정이기 때문입니다.

작년 9월, 저는 계속해서 사용 중인 뉴스레터 서비스인 Ghost(Pro)를 1년치 결제했습니다. 기존에 잘 써오던 서비스라서 1년 동안은 무조건 사용한다고 생각하고 결제를 했습니다.

사실 Ghost가 오픈소스(Ghost GitHub)로도 제공이 된다는 건 알고 있었습니다. 그렇지만 서버 운영이나 유지보수를 직접 관리하지 않아도 됐고, 글쓰기와 뉴스레터 발송을 한 화면에서 처리할 수 있었습니다. 저는 글을 쓰는 데 집중하는 게 맞고, 서버 운영까지 감당하기는 어렵겠다고 생각했습니다.

그런데 믿음으로 Ghost 1년 결제를 마치고 나서도 비용이 계속 마음에 남았습니다. 이후에 구독자 수가 늘어나면 비용도 함께 오르는 구조였습니다. 구독자가 늘어나는 건 좋아해야 하는 일인데, 특정 인원을 넘어가면 새로운 가격 구간에 접어들게 됩니다.

AI를 사용하면서(특히 Claude Code 이후로) 서버를 운영하는 역량을 계속 쌓아왔습니다. 운 좋게 얻은 오라클 프리티어 서버에서 n8n 자체 호스팅과 다양한 개인용 서비스를 운영하고 있고, 맥미니에서 돌아가는 Hermes 에이전트를 통한 서버 경험도 축적해왔습니다. 그래서 제가 자체적으로 뉴스레터 서비스를 한번 구축해서 써볼 수 있겠다는 생각이 점점 커졌습니다.

Ghost 갱신일(9월 중순)이 오기 전에 다른 길을 찾아보기로 했습니다. 처음에 Hermes 에이전트에서 대화를 하면서 방향을 찾았습니다. 일단 메일 발송은 Amazon SES(Amazon Simple Email Service)라는 메일 발송 서비스로 마음이 정해져 있었습니다. 이전에 한 개발자분이 자체 뉴스레터 발송 시스템을 구축했다고 했던, 스레드 포스팅이 기억나서 일단 이걸 메일 발송을 담당하는 모듈로 선택했습니다.

Amazon SES는 녹록지 않았다

아마존 웹 서비스(Amazon Web Services)의 이메일 발송 서비스인 Amazon SES(Amazon Simple Email Service)는 사용한 발송량에 따라 비용을 내는 구조입니다. 초기엔 콘텐츠 관리와 자동화는 워드프레스에서 맡고, 이메일은 Amazon SES로 보내는 조합을 먼저 설계했습니다.

Amazon SES 요금제 테이블

Amazon SES의 발송 비용은 Ghost에 비하면 거의 무료라고 봐도 될 정도로 저렴합니다. 메일 1,000개당 0.16달러입니다. 구독자 2,500명 정도면 1회 발송에 550원(0.4달러) 정도 됩니다. 구독자 10,000명이면 1회 발송에 2,220원(1.6달러) 정도가 됩니다. 아래에 보시는 것처럼 제가 검토한 구간 전부에서 Ghost 유료 구독보다, Amazon SES 사용이 비용 측면에서 훨씬 유리합니다.

Ghost(Pro) 관리형 호스팅과 Amazon SES Essentials 발송비 비교
(주 1회, 월 4회 발송 기준, 2026년 8월 Ghost(Pro) Publisher 연간 결제 가격 기준)

- 2,500명: SES $1.60 / Ghost $31
- 5,000명: SES $3.20 / Ghost $51
- 10,000명: SES $6.40 / Ghost $82

단, 이 표는 Ghost(Pro)의 관리형 호스팅 구독료와 Amazon SES의 순수 발송비를 비교한 것입니다. 자체 호스팅 쪽의 서버, 백업, 모니터링, Bridge 유지보수와 제가 들이는 시간은 포함하지 않았습니다. Ghost(Pro)에는 호스팅, 업데이트, 백업, 보안과 발송 인프라 관리가 포함됩니다.

말씀드린대로 처음엔 Hermes 에이전트의 추천에 따라서 워드프레스를 Ghost보다 먼저 검토했습니다. 이 당시엔 Ghost와 Amazon SES를 붙이는 선택지를 아예 지워두고 있었습니다. Ghost에 연결할 수 있는 대량 발송 서비스는 Mailgun뿐이라는 걸 이미 확인했기 때문입니다.

Amazon SES 승인을 얻기 위해, 격리된 환경에서 회원 상태와 수신 거부, 예약 발송, 자동 이메일 흐름을 시험했습니다. 실제 받은편지함으로 메일도 보내봤습니다. 기술적으로는 갈 수 있는 길처럼 보였습니다.

하지만 Amazon SES의 대량 발송 권한(Production Access) 심사에서 두 번이나 거절당했습니다. 용도와 발송 빈도, 명단을 모은 경로, 수신 거부 처리 방식을 설명했지만 승인을 받지 못했습니다. 무엇을 더 고쳐야 하는지는 구체적으로 피드백이 없어서 뭘 해야 할지 알 수 없었습니다.

처음에는 설명을 더 잘 쓰면 된다고 생각했습니다. 새 신청서를 세 번째로 내는 대신, 기존 AWS 지원 건에 실제로 고친 상태와 추가 근거를 보강하기로 했습니다. 심사 문장을 고치기 전에, 제가 지금 실제로 운영하는 뉴스레터에서 무엇을 실제로 확인할 수 있는지부터 보기로 했습니다.

결국 에이전트와 대화 안에 답이 있었다

헤르메스 에이전트와 대화하면서 가입 확인이나 로그인 안내와 주간 마케팅 뉴스레터는 발송 목적이 다르다는 점을 다시 확인했습니다. 최종 답변에서는 제가 보내려는 메일이 주간 마케팅 뉴스레터라는 점을 분명히 적었습니다.

그래서 뉴스레터 발송의 실제 용도가 주간 마케팅 뉴스레터라는 점을 다시 분명히 했습니다. 추가로 접속하면 오류가 나던 발신 도메인 대표 페이지를 복구했고, 개인정보 처리방침을 명시적으로 적어서 공개했습니다. 거기에 더해서 제가 메일을 보낸 발신 주소로 답장이 들어오는 경우에도 받을 수 있게 만들었습니다. 나중에 보면 이것들이 복합적인 요소가 되어 거절되었을 수도 있겠다 생각이 듭니다.

발송 대상도 약 2,000명이라고 넓게 적는 대신, 동의 기록과 현재 구독 상태, 발송 차단 여부를 다시 대조한 구독자 수로 좁혔습니다. 첫 메일 발송은 아주 적은 수에서부터 시작하겠다고 적기도 했습니다.

그리고 며칠 후에 드디어 Amazon SES 승인이 됐습니다. 이 변화 중 무엇이 승인에 결정적이었는지는 알 수 없습니다. 다만 이전 답변이 앞으로 이렇게 운영하겠다는 계획에 가까웠다면, 마지막 답변에는 실제 수치와 함께, 외부에서 확인할 수 있는 주소가 함께 들어갔습니다.

Amazon SES 승인 안내 메시지

Mailgun 호환 SES Bridge 만들기

승인을 받고 한시름 놓았지만, 문제가 하나 그대로 남아 있었습니다. SES를 쓸 수 있게 됐어도, Ghost 자체 호스팅의 내장 뉴스레터 발송 기능은 여전히 Mailgun을 전제로 움직입니다. 원칙대로라면 Ghost 자체 호스팅은 여기서 후보에서 빠져야 했습니다.

그런데 저는 Ghost를 정말 좋아합니다. Ghost는 UI가 깔끔하고, SEO가 좋고, 뉴스레터를 발송하는 동시에 같은 글을 블로그 포스트로 남길 수 있습니다. 한국에서 많이 쓰는 뉴스레터 서비스인 스티비나 메일리, 서브스택을 쓰지 않는 이유이기도 합니다.

그래서 이런 질문이 생겼습니다.

오픈소스 Ghost를 자체 호스팅하면서,
실제 메일 발송만 Amazon SES로 넘길 수는 없을까?

이 질문을 떠올릴 수 있었던 건 AI 에이전트와 함께 작업하면서 얻은 감각 덕분입니다. 도구가 요구하는 입력 형식과 실제 실행 장치를 나눠보면 다른 경로가 생길 수 있습니다. Ghost는 Mailgun에 보내는 형식으로 요청하되, 중간 장치가 그 요청을 Amazon SES가 이해하는 형식으로 바꾸면 되지 않을까 생각했습니다.

이럴 땐 먼저 GitHub에서 비슷한 사례를 찾아봅니다. 찾아보니 실제로 비슷한 케이스가 있었습니다. ghost-cms-amazon-ses-adapter는 Ghost가 Mailgun에 보내는 것처럼 설정해두고, 실제로는 Amazon SES가 메일 발송을 담당하게 만드는 방식이었습니다.

GitHub - exlab-code/ghost-cms-amazon-ses-adapter: This project provides a simple but effective solution for using AWS SES instead of Mailgun for sending Ghost newsletters, without modifying Ghost’s source code.
This project provides a simple but effective solution for using AWS SES instead of Mailgun for sending Ghost newsletters, without modifying Ghost's source code. - exlab-code/ghost-cms-amazon-se…

다만 제가 확인한 구현은 단순 발송을 대신하는 수준에 가까웠고, 반송 처리, 스팸 신고, Ghost의 뉴스레터 분석 기록까지 이어지는 데에는 한계가 있었습니다. 그래서 다른 이벤트 처리 방식까지 함께 구현 검토한 뒤, 제 운영 조건에 맞는 Bridge를 별도로 만들기로 했습니다.

정확히 말하면 제가 직접 코드를 작성한 건 아닙니다. 구현은 헤르메스 에이전트가 맡았고, 저는 문제를 정의하고, 필요한 계정 로그인을 해주고, Amazon SES 관련 정보를 환경변수로 설정하고, 실제 제 메일 주소로 테스트를 반복했습니다. 코드를 한 줄 한 줄 본 것은 아니지만, 운영자가 해야 할 판단과 검증은 하나씩 직접 했습니다.

에이전트와 함께 개발하면 사람이 직접 코딩할 때와는 다른 시간이 걸립니다. 특히 요즘 에이전트는 안전하게 검증하려고 오래 붙잡고 있는 경우가 많습니다. 그래서 이 작업도 짧게 끝날 줄 알았지만, 처음 WordPress와 Amazon SES 조합을 검토한 날부터 약 한 달 동안 계속 붙들고 있었습니다. Amazon SES 승인 뒤 블로그 공개 전환까지도 11일이 걸렸습니다.

에이전트는 적당히를 모른다, 그래서 마감이 있어야 한다

원래 지난주 뉴스레터 발송에 자체 구축한 Ghost를 사용하는 게 목표였습니다. 저는 보통 개발할 때, 개발한 솔루션으로 실제 업무를 할 수 있지 않으면 업무를 안 한다고 다짐하고 개발을 합니다. 업무는 어떻게든 해야 하니까 개발을 하게 되는 효과가 있습니다. 지난주 뉴스레터가 발송되지 않은 이유이기도 합니다.

검토왕 GPT 5.6 Sol

그리고 에이전트가 안전하게 한답시고 계속 맥미니 안에서만 구축과 검증을 하고, 실제 서버에 코드와 콘텐츠 반영을 안하고 있어서 일단 링 위에 올리기로 했습니다. 링 위에 올리는 건 기존 Ghost 포스팅과 구독자 정보, 모든 기존 콘텐츠 아카이빙을 실시하고, 이걸 그대로 자체 호스팅 Ghost에 이전하는 작업입니다. 이 작업도 하루 정도 하니까 모두 완료됐습니다.

마지막으로 도메인 작업이 남아 있었습니다. 이전에는 blog.productibe.com이 Ghost(Pro) 호스팅을 가리키고 있었습니다. DNS 레코드를 자체 호스팅한 Ghost 서버로 바꾸고 HTTPS 인증서를 적용했습니다. 기존 공개 주소 96개도 다시 확인했고 모두 같은 주소에서 정상적으로 열렸습니다.

아직도 갈 길이 남아있기는 합니다. 한 번에 전체 구독자에게 보내는 건 위험하다고 순차적 발송을 하라고 안내합니다. 제 기존 스타일은 그냥 한 번에 보내버리는 것입니다. 하지만 발신 도메인의 평판을 이젠 직접 관리해야 하기 때문에 (평판이 낮으면 스팸함으로 들어갑니다.) 에이전트가 무려 4단계로 인원을 나눠서 단계별로 보내라고 하는 제안을 받아들이기로 했습니다.

이제 만들어 쓸 수 있는 시대가 오고 있다

여러분이 이 뉴스레터를 이상 없이 받아보고 계시다면, Ghost에서 마지막 테스트를 잘 통과했다는 의미일 겁니다. 구축 결과를 놓고 보면 이렇습니다. 서버는 오라클 프리티어라 0원, 발송비는 Amazon SES 기준으로 월 4회 발송에 2,000원 남짓입니다. Ghost(Pro)를 계속 썼다면 연간 70만 원 안팎이 나갈 자리입니다. 대신 서버 관리와 백업, 발송 평판 관리는 이제 제 몫이 되었습니다. 이건 제가 아니라 AI 에이전트에 크론잡을 걸어서 주기적으로 업데이트하고 점검하게 할 예정입니다.

이번 Ghost–Amazon SES 뉴스레터 시스템을 구축하면서 느낀 점은 이미 검증된 것은 활용하고, 비어 있는 부분만 제 조건에 맞게 만들 수 있다는 것입니다. Ghost와 Amazon SES는 그대로 사용했고, 공개된 Ghost–SES 어댑터에서는 가능한 구조와 빠진 기능을 확인했습니다. 해당 저장소를 그대로 복사하지 않고, 반송과 스팸 신고, 중복 방지처럼 제 운영에 필요한 부분만 별도로 만들었습니다.

바퀴의 재발명이라는 개념이 있습니다. 만들어져 있는 게 있는데 처음부터 만들려고 하는 걸 의미하는 단어입니다. 바이브 코딩에서도 만들어져 있는 게 있다면 최대한 활용하는 걸 추천합니다. GitHub 레포를 가져와서 그 이후를 내가 수정하거나 더 추가해서 만들어도 되는 일입니다.

자신에게 필요한 일을 해야 지속 가능하다

다른 사람이 필요할 것 같은 프로그램을 만드는 것보다 자신에게 필요한 프로그램을 만드는 게 가장 빠르게 바이브 코딩을 익히는 효과적인 방식이라고 생각합니다. 개발자 분들은 판매하기 위한 걸 만드는 게 당연합니다. 하지만 저 같은 상황에선 자신에게 필요한 걸 만드는 게 프로그램을 만들 동기를 가장 강력하게 유지할 수 있는 조건이라고 봅니다.

그리고 거기엔 마감이 있어야 합니다. 저도 시작해놓고 아직 완성되지 않은 프로젝트들이 많습니다. CleanShot X, Scribe, Vrew 대신 쓸 수 있는 프로그램을 만들다가 멈춘 것들이 많습니다. 아직 그렇게까지 필요하지 않아서 밀리고 있는 것들이 있습니다. 결국 마감이 있고, 좀 더 외부에 공개할 동기가 있어야 더 열심히 만들게 된다는 걸 다시 한번 느낍니다.

이번 뉴스레터 개편을 시작으로 개인지식관리의 연장선에서 AI와 함께 구축한 시스템과 노하우, 생산성을 높이는 삶의 방식에 대해서도 뉴스레터, 그리고 블로그 포스팅으로 하나씩 공유하겠습니다.

고맙습니다.
생산적생산자 드림