Strapi 이메일·API 제공자 선택과 운영 가이드
Strapi 이메일·API 제공자 선택 가이드: 비용보다 먼저 확인할 운영 기준
헤드리스 CMS를 운영하다 보면 “메일 제공자를 무엇으로 쓸까?”와 “API는 REST와 GraphQL 중 무엇으로 열까?”가 한꺼번에 논의된다. 하지만 두 선택은 서로 다른 문제다. 이메일 제공자는 발송·반송·도메인 인증과 같은 전달 운영의 문제이고, API는 콘텐츠를 어떤 계약으로 소비자에게 제공할지의 문제다. Strapi에서는 이 둘을 분리해 결정해야 비용도 추적하기 쉽고 장애 원인도 좁혀진다.
먼저 역할을 나눠 보자
Strapi 5 문서는 REST API와 GraphQL을 API 표면으로 안내한다. REST는 일반적인 HTTP 자원 접근 흐름에 맞추기 쉽고, GraphQL은 클라이언트가 필요한 필드를 요청하는 형태를 선택할 수 있다. 어느 쪽이든 공개 범위와 권한 설정, 응답 크기, 캐시 정책은 별도로 설계해야 한다. 편의상 API를 열어 둔 뒤 프런트엔드가 모든 필드를 가져가게 만들면, 비용보다 더 큰 문제인 데이터 노출과 성능 저하가 생길 수 있다.
이메일은 Email 플러그인이 담당한다. Strapi Cloud 지원 문서는 SendGrid, Mailgun, Amazon SES, Nodemailer용 공식 패키지를 열거하고, 대량 발송이나 사용자 도메인이 필요한 경우 외부 제공자 사용을 권장한다. 패키지 목록은 곧 전달률 보증 목록이 아니다. 스팸 신고, 반송률, 제공자별 성능 문제는 각각의 제공자 콘솔과 정책에서 확인해야 한다.
비용표보다 ‘보낼 메일’부터 분류한다
월 발송량 하나만으로 제공자를 고르면 나중에 후회하기 쉽다. 다음 네 가지로 메일을 나눠 견적과 운영 책임을 정리하자.
- 가입 확인·비밀번호 재설정처럼 즉시성이 필요한 트랜잭션 메일
- 주문·예약·알림처럼 실패 재시도와 기록이 중요한 업무 메일
- 뉴스레터처럼 수신 동의와 발송 속도 관리가 필요한 대량 메일
- 개발·스테이징 환경의 테스트 메일
각 분류마다 발신 도메인, 보낼 사람 주소, 회신 주소, 실패 시 처리, 보존 기간을 문서화한다. Strapi의 안내도 제공자 변경 뒤 관리 화면에서 from과 reply-to를 갱신하라고 명시한다. 발신 주소만 바꾸고 도메인 인증이나 회신 흐름을 확인하지 않는 실수는 운영에서 특히 자주 나타난다.
구현은 작고 검증 가능하게
애플리케이션 코드가 직접 특정 제공자의 HTTP API를 여기저기 호출하면 제공자 교체가 어려워진다. Strapi Email 플러그인이라는 한 경계에서 발송하고, 비밀값은 소스 코드가 아닌 배포 환경의 시크릿 관리에 둔다. 애플리케이션에서는 다음처럼 발송 의도만 전달하는 방식이 유지보수에 유리하다.
await strapi.plugin('email').service('email').send({
to: recipient,
subject: 'Your verification link',
text: 'Open the link to continue.'
});
정확한 제공자 설정 키와 지원 버전은 배포 중인 Strapi 버전의 문서와 패키지 페이지에서 다시 확인한다. 테스트에서는 실제 고객 주소 대신 통제된 수신함을 사용하고, 성공 응답뿐 아니라 잘못된 발신 도메인·비정상 수신자·제한 초과 상황을 기록한다. 메일 본문에는 로그인 토큰이나 개인정보를 불필요하게 담지 않는다.
API와 메일을 함께 운영하는 체크리스트
콘텐츠 API에는 최소 권한을 적용하고, 공개 엔드포인트에서 필요 없는 관계 데이터와 대형 미디어를 기본 포함하지 않는다. 메일 작업은 요청 처리 경로와 분리해 실패를 추적할 수 있게 하고, 사용자에게는 같은 알림이 중복 발송되지 않도록 업무 식별자를 둔다. 제공자 가격은 변하지만, 이 기본 설계는 바뀌지 않는다. 선택의 결론은 ‘가장 싼 서비스’가 아니라 현재 발송 유형·도메인·장애 대응 능력에 맞는 서비스여야 한다.