• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

안녕하세요 선생님.

21.05.16 02:29 작성 조회수 194

0

안녕하세요 선생님.

개인적으로 여쭤보고 싶은 점이 있어서 질문을 남깁니다.

따로 프로젝트를 진행중인데 회원가입 시 이메일 인증 토큰을 메일로 발송하도록 구현했습니다.

메일을 발송해주는 요청이 4초 정도 소요되는 것을 확인했습니다.

하나의 요청을 처리하는데 4초나 걸리는 상황에서  만약에 여러 사람들이 회원가입을 요청하면 다음 요청은 대기시간이 길어지고 결국 처리하지 못하는 상황이 생기지 않을까? , 일꾼을 늘려서 처리하면 어떨까?라는 생각을 하게 되었습니다. 

그래서 이러한 상황에서도 강의에서 알려주신 eventPublisher + @Async + ThreadPoolTaskExecutor을 하나의 해결법?으로  사용할 수 있는지 여쭤보고 싶습니다. 

정말 배울 점이 많은 강의라 여겨 여러 번 공부했고 강의에서 알려주신 내용을 통해 프로젝트를 진행하면서 해결할 수 있는 문제들이 정말 많았습니다.  감사합니다.

답변 4

·

답변을 작성해보세요.

1

임시 비밀번호를 생성하는 부분은 성능에 거의 영향이 없겠지만 이메일을 보내는 부분은 성능에 영향이 클테니 비동기적인 이벤트 기반의 처리가 적절하겠네요.

1

안녕하세요. 남기석님 좋은 질문 감사합니다. 강의에서 비동기 이벤트 기반으로 회원 가입을 처리하는 이유가 회원 가입 처리 로직과 메일 발송 로직을 분리해서 회원 가입 로직이 메일 발송 때문에 지연되지 않게끔 하기 위한 것인데요.

서비스에 가입자가 많더라도, 회원 가입 요청 자체가 지연되진 않을테고 메일 발송만 지연이 될텐데 그점이 문제라고 하시는건가요? 만약 메일 발송 지연 자체가 문제가 된다면 메일 발송 시스템을 보다 빠른 시스템을 사용하거나, 여러 메일 발송 시스템으로 보다 분산된 메일 발송 시스템을 만들어야 할겁니다.

0

남기석님의 프로필

남기석

질문자

2021.05.16

감사합니다!

0

남기석님의 프로필

남기석

질문자

2021.05.16

답변 감사합니다 선생님.

덕분에 조금 더 생각해 볼 수 있었습니다.

한 가지만 더 여쭤보고 싶습니다.

만약 임시 비밀번호를 생성하고 이를 메일로 보내준다고 했을 때 

public void sendTempPassword(Account account) {
//~~ 임시 비밀번호 생성 및 setting code
// 임시 비밀번호 메일 발송 publisher.publishEvent(new TempPasswordEvent(account,uuid));

 메일 전송 시간 자체를 줄이는 것이 아닌

임시 비밀번호를 발송해주는 부분이

생성 및 세팅하는 기존 로직에 영향을 주지 않도록 따로 처리하기 위해

위처럼 구성하는 것은  eventPublisher + @Async사용의 올바른 목적?이 될 수 있는지 여쭤보고 싶습니다!