리뷰 요청 메일 조회 기능

2024년 7월 24일 수요일

Today I Learned

날짜

2024년 7월 24일 수요일

내용

리뷰 요청 메일

리뷰를 요청하는 메일은 중요한 기능이기 떄문에 매일매일 확인하고 있다. 발송 자체는 올바르게 되나 한가지 문제점을 발견했다. 발송 여부에 관한 데이터를 메시징 로그라 하는데, 이 데이터가 조회가 안된다. 메뉴에서 collect 메뉴에 들어가면 유저는 메시징 로그가 생성된 메일들 목록을 볼 수 있다. 특정 날짜에 발송되었거나, 취소되었거나, 발송할 예정인 메일들과 그 메일의 기점이 된 주문 데이터를 볼 수 있다. 주문데이터를 볼떄는 필터링을 추가할 수 있는데 주문시점, 배송완료 시점, 요청 메일 발송 시점 3가지다.

이전에 말했듯, 주문 데이터는 여러개 생성된다. 주문 즉시, 주문 내역의 변경, 배송 완료 후 로 나뉘어진다. 방금 만들어진 주문 데이터는 필터링에 “배송 완료시점”을 걸면 보이지 않는다. 아직 배송이 완료되지 않았으니까.. 만약 그 주문이 배송이 완료된 시점이라면 그때부턴 보여야한다.

이슈가 발생한 원인은 주문이 생성될 떄마다 데이터가 생성되고, 중복해서 메일이 발송된다는 것. 똑같은 주문 A가 발생하더라도 우리 서버에는 주문 생성시점에 생성되는 A-1 데이터와 주문 배송이 완료된 후 생성되는 A-2 데이터가 생성된다. 메시징로그가 여기 각각에 생성되고 발송되서 문제였다.

처음에는 필요한 주문에만 메시징로그가 생성되도록 처리했다. 발송 자체는 이상이 없었으나, 요청을 조회할 떄 문제가 됐다. 각 주문별로 메시징 로그 상태를 조회할 때 똑같은 주문 중 어떤걸 가져가느냐를 선택할 수가 없었다. 어떤 주문은 최초로 생성된 주문(A-1)에서 메시징로그가 생성될 것이고 어떤 주문은 마지막에 생성된 주문(A-2)에서 메시징로그가 생성된다.

완료 시점을 기준으로 주문을 조회할 때면 A-2처럼 완료된 주문들만 조회하는데, 이떄 어떤 주문에는 메시징 로그가 없을 수도 있다. 주문 B에선 B-1 데이터를 이용해 메시징 로그를 만들었다면? A-2, B-2, C-2, … 목록에서 B-2는 메시징로그가 없다고 뜰 것이다.

불가피하게 로직을 조금 수정했다. A-1, A-2 데이터를 모두 만들고 발송 시점에 데이터를 처리하는 것이다. 메일 발송 크론이 돌 때, A-2 데이터로 만든 메시징로그로 이메일을 발송하면서

  1. 주문 A로 만들어진 데이터가 또 있는지,
  2. 그 데이터로 만든 메시징 로그가 있는지
  3. 그 메시징 로그가 WAITING 상태인지

확인하는 로직을 추가해주었다. 이제 A-1, A-2, A-3 주문 모두에 메시징로그가 생성되므로 조회할 때 볼 수 있다.

하지만 “주문 시점”을 기준으로 주문 데이터를 조회하면 모든 주문이 다 나온다. 이때는 주문에 관한 조건이 따로 없기 떄문에.. 내가 할 수 있는 선에서, 어떤 것을 선택해야 했는데 결국 주문으로 조회할 때 여러개가 나오도록 선택했다. 가장 유저가 덜 보는 화면이기 떄문에.

만약 개선하려면 주문당 주문 데이터가 한개만 생성되도록 하는게 최선 인듯하다. 하지만 주문은 정말 온갖곳에 다 엮여있어 어디가 고장날지 모르니, 조회하는 함수를 수정해야 할듯 하다. 근데 너무 어려워서 어디서부터 손대야 할지모르겄다

회고

내가 하면 잘되던게 QA땐 안된다. 하..