회원 여러분, 안녕하세요! 지난 E-Market 시리즈에 이어 오늘은 회원가입 과정에서 발생하는 트랜잭션 지연 문제 해결에 대한 이야기를 나누고자 합니다. 지난 포스팅에서는 ... (지난 포스팅 내용 간략하게 요약) ... 에 대해 다루었는데요, 이번에는 회원가입 시 발송되는 환영 메일과 관련된 문제를 해결하는 과정을 공유하려고 합니다.
회원가입 시스템을 구축하면서 저희는 AuthService와 MailService를 사용했습니다. AuthService는 회원 정보를 저장하고, MailService는 환영 메일(쿠폰 포함)을 발송하는 역할을 합니다. 초기에는 이 두 서비스를 동기적으로 호출했는데, 이 방식에는 몇 가지 문제점이 있었습니다. 첫째, AuthService와 MailService가 긴밀하게 결합되어 응집도가 떨어졌습니다. 둘째, 더 심각한 문제는 회원가입과 메일 발송이 하나의 트랜잭션으로 처리되면서, 메일 발송에 예상치 못한 지연이 발생할 경우 사용자가 오랫동안 결과를 기다려야 한다는 점입니다. 메일 서버의 문제, 네트워크 지연 등 예측 불가능한 변수로 인해 회원가입 자체가 지연되는 현상이 발생했고, 사용자 경험에 악영향을 미쳤습니다.
이 문제를 해결하기 위해 메일 발송 기능을 비동기적으로 처리하는 방식으로 변경했습니다. 구체적으로는, 회원가입 성공 후 메일 발송 요청을 메시지 큐(예: RabbitMQ, Kafka)에 넣는 방식을 채택했습니다. 이렇게 하면 회원가입은 메일 발송과 독립적으로 빠르게 완료될 수 있습니다. 메시지 큐에서 메일 발송 작업을 처리하는 별도의 서비스(예: 메일 전송 worker)를 통해 비동기적으로 메일을 발송합니다. 이를 통해 메일 발송 지연이 회원가입에 영향을 주지 않게 되었습니다.
그렇다면 메일 전송 실패 시 재전송은 어떻게 처리할까요? 메일 전송 worker는 메시지 처리 결과를 추적합니다. 메일 발송 실패 시, 재전송 로직을 구현하여 일정 시간 후 재시도를 하도록 했습니다. 여러 번의 재시도에도 실패할 경우, 관리자에게 알림을 보내는 등의 추가적인 처리를 통해 문제를 해결할 수 있도록 했습니다. 재시도 횟수와 시간 간격은 시스템 설정을 통해 유연하게 조정할 수 있도록 설계했습니다.
이번 작업을 통해 회원가입 속도를 크게 개선하고, 시스템 안정성을 향상시킬 수 있었습니다. 비동기 처리를 도입함으로써 응집도를 개선하고, 외부 서비스 의존성으로 인한 지연 문제를 효과적으로 해결했습니다. 앞으로도 사용자 경험 개선을 위해 끊임없이 노력하겠습니다. 혹시 이 글에 대한 질문이나 피드백이 있다면 언제든지 댓글로 남겨주세요! 다음 포스팅에서는 ... (다음 포스팅 예고) ... 에 대해 자세히 다뤄보도록 하겠습니다. 감사합니다!