개발 slecs

SMS 구매 링크에 수신자 대신 발송자 소속이 박히던 버그 수정

목차

증상

파트너 포털에서 운영자가 가맹점주에게 구매 링크 SMS 보내는 기능이 있음. QA에서 "링크 눌렀더니 다른 소속 화면으로 떨어졌다"는 제보가 올라옴. 링크에 박힌 sysId(소속 식별자)가 수신자 파트너 소속이 아니라 발송 운영자 본인 소속 기준이었던 게 원인.

원인 추적

  • SMS 본문 조립 분기에서 sysId를 로그인 세션 객체에서 바로 꺼내 쓰고 있었음
  • 본사 운영자는 화면에서 여러 파트너를 골라 발송할 수 있는데, 그 흐름을 가정 안 한 코드였음
  • 파트너 객체에 이미 sysId 필드가 박혀 있었는데 그쪽을 무시하고 세션 값을 잡아옴 → 더 뼈아픈 부분
항목 변경 전 변경 후
sysId 출처 로그인 세션 선택된 파트너 객체
본사 운영자 발송 시 운영자 소속으로 mismatch 항상 수신자 소속 기준
가맹점주가 직접 발송 시 우연히 일치해서 무사고 동일

운영자 본인이 자기 가맹점에 보낼 때는 세션 sysId 와 파트너 sysId 가 우연히 같아서 운영 중 한참 못 잡고 있었음. 본사 권한 운영자가 늘어나면서 드러난 케이스.

수정

// before
String sysId = loginUser.getSysId();

// after
String sysId = partner.getSysId() != null
    ? partner.getSysId()
    : loginUser.getSysId();
  • 파트너에 sysId 박혀 있으면 그걸 1순위
  • 레거시 파트너 데이터 중 sysId 비어있는 row 가 있어서 세션값 폴백은 일단 살려둠
  • 폴백 타는 케이스는 경고 로그 남겨서 데이터 정리 트래킹용으로 씀

회고

  • 세션에서 식별자 꺼내는 코드는 익숙하다는 이유로 무의식적으로 박는데, 맥락(발송자 vs 수신자) 이 달라지는 자리에선 한 번 더 의심해야 됨
  • 도메인 객체에 이미 필요한 필드가 있는데 못 본 게 제일 아쉬움. PR 셀프 리뷰 항목에 "이 식별자, 왜 이 출처에서 가져오는가" 한 줄 추가함
  • 본사 운영자 케이스가 늘면서 드러난 버그라, 권한 매트릭스 바뀔 때 SMS·링크·인증 토큰 같은 식별자 흐름은 통째로 다시 점검해야겠음

다음

댓글 0

첫 댓글 달아줘.