logo
Published on

일회용 이메일 서비스 개발 및 리뷰

프로젝트 소개

일회용 이메일이란, 내 이메일 주소를 알려주고 싶지 않을 때 사용합니다. 또, 신뢰할 수 없는 사이트에 회원가입 할 때 스팸메일로부터 내 이메일을 보호할때도 사용할 수 있습니다. 저는 개발 테스트를 할 때 이런 서비스를 알게되었습니다. 테스트를 위해 수많은 이메일이 필요했는데, 한번 사용하고 버릴 이메일이라서 번거롭게 Gmail을 여러개 만드는 것은 부담스러웠습니다. 이 서비스를 이용하면 쉽게 이메일을 통해 회원가입과 이메일 인증을 하고, 또 필요없어지면 과감히 새로운 이메일로 교체할 수 있었습니다.

시작 이유

개인 프로젝트로 일회용 이메일 서비스를 선택한건 유지보수의 부담이 적기 때문입니다. 이메일의 기술구조는 수십년간 변하지 않았습니다. 그리고 앞으로도 큰 변화가 없을거라 생각합니다. 한번 만들어두기만 하면, 유지보수에 대한 부담 없이 꾸준히 수익화할 수 있기 때문에 개인 프로젝트 주제로 적절하다고 판단했습니다.

제작 과정

  1. 일회용 이메일 서비스를 구글에 검색해보면 정말 여러가지 서비스가 있음을 알 수 있습니다. 흔한 서비스이기 때문에 누군가 작성한 가이드 글이 있을거라 생각했습니다. AHEM server의 개발자인 Oren Geva님이 작성한 How To Setup Your Own Disposable Email Server 가이드를 찾았습니다.

  2. 가이드의 저자가 만든 오픈소스 AHEM (Ad-Hoc-Email-Server) server는 node.js로 만들어진 메일서버입니다. 가이드를 따라 메일서버를 AWS Lightsail에 구축했고, 정상 작동을 SMTP Test Tool 툴을 이용해서 확인했습니다.

    240228-191348
  3. 메일 서버에서 사용할 도메인을 구입했습니다. 일회용 이메일 서비스는 길어야 하루, 짧은 기간만 이메일 사용하기 때문에 도메인을 매년 바꿔도 문제없습니다. 그래서 할인 받아 각각 500원에 1년동안 사용할 수 있는 도메인을 구입했습니다. 1년 후에는 하나에 49,000원의 비용이 지불해야 연장할 수 있지만, 애초에 연장할 생각이 없습니다.

    231120-122652
  4. 도메인 주소를 메일 서버로 연결해야 하기 때문에, 도메인에 DNS 정보를 설정했습니다. MX record를 바로 서버 주소로 연결하고 싶었지만, MX record는 IP주소를 허용하지 않기 때문에, 중간에 mail.redmail.shop을 끼워넣었습니다. 이렇게 하면 MX record는 mail.redmail.shop 주소를 가리키고, 이 주소는 서버 주소인 15.165.14.244를 가리키게 됩니다. 등록하고 반나절이 지난 뒤에 Gmail에서 메일 서버로 이메일이 정상적으로 넘어왔습니다.

    231120-123028
  5. 메일서버와 프론트를 연결할 API를 만들어야 하는데, AHEM server의 좋은 점은 Github readme 파일을 보면 아시다시피, 이미 API가 만들어져있습니다. 그래서 메일 서버를 연결한 것만으로 백엔드 구축이 마무리되었습니다.

    231120-123508
  6. 마지막으로 웹을 Next.js로 구축하면서 개발을 마무리했습니다. 이미 초기 셋팅이 템플릿화 되어 있고, 디자인 라이브러리도 자동으로 연결되어 있어서 개발은 금방 끝났습니다.

    231120-115600

사용한 기술

  • 웹 : Next.js, Typescript, TailwindCSS
  • 다국어화 : next-i18next (번역), Google sheet를 이용한 번역 텍스트 관리
  • 배포 : Vercel을 통한 자동 배포
  • 백엔드 : 오픈소스 AHEM server on AWS lightsail
  • DB : MongoDB

좋았던 것들

  • 오픈소스를 활용해서 백엔드 구축을 빠르게 마무리할 수 있어서 좋았습니다. 또 어렵게만 느껴졌던 메일서버가 코드를 살펴보니 생각보다 단순해서 다음에는 직접 구축할 수도 있을 것 같다고 생각했습니다.
  • 주제 선정이 좋았다고 생각합니다. 개발 난이도는 낮지만, 유지보수 부담이 적어서 이런 사이즈의 프로젝트를 여러개 찾아보고 싶습니다.

진행하면서 겪었던 실패

  • AHEM server에는 CORS 처리가 되어 있지 않아서, 코드를 수정해야 했습니다. cptkuk91님의 Node.js 기본 CORS 문제 해결하기 글을 참고했습니다.
  • Linux에서 1024포트까지는 관리자 권한이 있어야 사용할 수 있습니다. 제가 사용할 SMTP 포트는 25번이라서, 권리자 권한을 사용해서 메일 서버 서비스를 실행했습니다.
  • AHEM server는 정말 오래전에 만들어진 프로젝트입니다. 그래서 최신 Node.js에서는 돌아가지 않습니다. Node.js 10.x 버전을 설치해서 진행했습니다.
  • 비용을 절약하기 위해 AWS EC2가 아닌 AWS Lightsail을 사용했습니다. Lightsail은 기본적으로 요금도 절반이고, 처음에는 3개월을 무료로 사용할 수 있습니다. 다만 Lightsail은 AWS의 다른 서비스에 연결하기 어려워서 HTTPS 인증서를 Let's encrypt를 통해서 직접 설정해야했습니다. 이 Let's encrypt는 무료이지만 90일마다 연장을 해야하는 단점이 있습니다. 추후에는 자동으로 연장하는 설정을 하기로 계획하고, 마무리했습니다.

맺으며

오픈소스를 적절히 활용한 사례라서 좋습니다. 바퀴를 다시 만들지도 않았고, 이미 만들어진 바퀴를 잘 활용해서 개발을 3일만에 마무리할 수 있었습니다. 지금까지는 프론트로 웹만을 사용했는데, 이제부터는 앱도 만들어보려고 합니다. 이미 서버가 만들어져있기 때문에 앱은 더 빠르게 제작할 수 있을 것 같습니다. 서비스는 https://tmpmail.danver.io 에서 확인하실 수 있습니다.

참고자료