오픈소스에 숟가락 얹기

이정진·2024년 3월 11일
0

개발

목록 보기
6/9

지금 회사에서 Elixir/Pheonix를 활용해서 개발을 진행하고 있다.
입사하면서 알게 된 언어와 프레임워크로, 국내 레퍼런스도 거의 없는 상태에서 공식문서와 함께 열심히 개발하고 있다.


물론 이 엘릭서 아니다.😕

Elixir의 오픈소스로 공개되어 있는 Swoosh 내의 개선사항을 발견하여 Issue로 올리게 되었고, 해당 Issue가 Resolve된 기분 좋은 경험을 공유하고자 한다.

기본 환경

Elixir에서 Pheonix 프레임워크로 프로젝트를 생성하면, Mailer.ex라는 파일이 생성되어 있다.
SMTP 서비스를 adapter 형식으로 편리하게 적용할 수 있도록 기본적으로 생성된다.
(자세한 프로젝트 구조는 따로 정리하고 있는 글을 업로드할 예정이다.)

Swoosh 라이브러리 덕분에 config.exs에서 Mailer와 관련된 설정을 찾아서 adpater를 변경한 뒤, adapter별 필요한 기본 설정값들을 설정해주면, 편리하게 메일 발송 로직을 처리할 수 있다.

메일 하나는 누구보다 쉽게 개발할 수 있다. 😎

Swoosh 라이브러리가 현재 지원하고 있는 Adapter는 아래와 같다.

PROVIDER / SWOOSH ADAPTER

  • SMTP / Swoosh.Adapters.SMTP
  • SendGrid / Swoosh.Adapters.Sendgrid
  • Brevo / Swoosh.Adapters.Brevo
  • Sendmail / Swoosh.Adapters.Sendmail
  • Mandrill / Swoosh.Adapters.Mandrill
  • Mailgun / Swoosh.Adapters.Mailgun
  • Mailjet / Swoosh.Adapters.Mailjet
  • MsGraph / Swoosh.Adapters.MsGraph
  • Postmark / Swoosh.Adapters.Postmark
  • SparkPost / Swoosh.Adapters.SparkPost
  • Amazon SES / Swoosh.Adapters.AmazonSES
  • Amazon SES / Swoosh.Adapters.ExAwsAmazonSES
  • Dyn / Swoosh.Adapters.Dyn
  • Scaleway / Swoosh.Adapters.Scaleway
  • SocketLabs / Swoosh.Adapters.SocketLabs
  • Gmail / Swoosh.Adapters.Gmail
  • MailPace / Swoosh.Adapters.MailPace
  • SMTP2GO / Swoosh.Adapters.SMTP2GO
  • ProtonBridge / Swoosh.Adapters.ProtonBridge
  • Mailtrap / Swoosh.Adapters.Mailtrap

왜 다르지?

지원되는 SMTP 서비스 중 SMTP2GO를 사용하고 있었는데, SMTP2GO Adapter를 활용해서 메일을 발송한 이후 받은 응답 값이 SMTP2Go Api docs와 다르다는 것을 발견했다.
SMTP2GO는 아래의 이미지처럼 요청 ID/이메일 ID와 해당 요청에서 발송에 성공/실패 수 및 실패 메일 리스트를 반환한다.

그러나, 실제 라이브러리를 이용하여 메일 발송 후 Response를 출력해보면, email_id만을 반환하고 있는 것을 확인했다.
이로 인해, 실패한 이메일에 대한 추가적인 비즈니스 로직을 진행할 수 없었고, 원인을 찾기 시작했다.

이래서 다르네?

Github에서 해당 라이브러리의 코드를 살펴본 결과, 아래의 부분에서 차이를 발견했다.

%{"data => %{"email_id" => email_id}} 

이 부분을 보면, data 중 email_id만을 추출하여 decoding 후 반환하고 있다.
나는 해당 코드가 data 전체를 반환하도록 변경되어야 한다고 판단했고, Issue를 작성하기로 결정했다.

바꿔주실래요?

Issue를 작성하려고 보니, Template을 지정해서 올려야 하더라.

버그는 아닌, 개선사항이다 보니 Feature Request를 선택해서 작성했다. 작성을 요구하는 내용은 아래와 같았다.

  1. Is your feature request related to a problem? Please describe.
    어떤 문제로 인해 발생한 요청인지에 대한 서술
  2. Is your feature request related to a specific adapter? Please specify.
    특정한 adapater와 연관된 문제라면, 해당 adapter는 무엇인지?
  3. Describe the solution you'd like
    해결되었으면 하는 방식 서술
  4. Describe alternatives you've considered
    고려하고 있는 대안이 있다면 서술
  5. Additional context
    추가 사항

총 5개에 대하여 영어로 열심히 Issue를 작성해서 제출했고, 굉장히 짧은 시간 이후에 resovled 코멘트를 받을 수 있었다.

빠르게 반영된 덕분에, 관련 작업을 데드라인 안에 마무리할 수 있었다. 감사합니다. @princemaple님..

글을 작성하고 보니 굉장히 단순한 회고인 것 같지만, SMTP2GO 문서가 최신화가 되지 않아서 내가 놓치고 있는 것은 아닌지 굉장히 다방면으로 알아보면서 해결하고자 노력했었다. Issue를 올리고 Resolve된 걸 넘어 다음번엔 컨트리뷰터까지 한 번 도전해봐야겠다.

Reference

0개의 댓글