잘되던 주요 기능이 갑자기 안된다;;;;

·2022년 5월 13일
1

삽질LOG

목록 보기
2/13
post-thumbnail

난 커머스 회사에 다닌다. 그리고 오늘 오전 cs팀에서 🚨긴급호출🚨이 왔다.
문의 전화 한 통이 왔다는데..그 내용이..

"지금 결제가 안된대요!!"

이 말을 듣자마자 동공이 흔들렸다. 최근에 관련 코드를 수정한 일이 없는걸로 아는데..왜 갑자기..안되지?

일단..로그를 보자


Sentry에 들어가 로그를 확인해보니..
새로운 주문을 생성해야하는데 생성 중에 다른 데이터를 불러와서 update 하려는 시도를 하고 있었다.
어디서 validation 오류가 생긴거 같은데..왜일까?🤔

로그따라 DB 확인하기


지금 왜 이 잘못된 정보를 불러오게 되었는가? 에 집중하며 DB 쿼리 로그를 따라 DB 정보를 하나씩 확인하기 시작했다.

  1. 우린 주문번호를 기반으로 주문을 가져온다.
    주문번호가 이미 있으면 데이터를 가져오고 없으면 주문을 새로 생성한다.

  2. 새로운 주문인데도 주문번호를 가져오는 로직이 실행되었다.
    로그에서 조회한 주문번호를 확인해보니 이미 존재하는 주문번호였다. 해당 주문번호에 데이터는 요청이 들어온 데이터와 달랐다. 그래서 validation 과정 중 에러가 나는 중이었다.

범인은 바로 주문번호 중복!


이 모든 사태는 동일한 주문번호가 생성되는게 문제였다!
찬찬히 주문번호 생성 로직을 보았다. 우리 서비스의 경우엔 주문번호는 가장 마지막 주문번호와 주문날짜를 기반으로 만들어진다.
살펴보니 우리 DB상 마지막 주문번호는 테스트용 주문번호였다. (테스트용이 왜 production db에 들어가 있었냐고 한다면🤐).

테스트용 주문번호가 바른 형식이 아니다보니 이전 주문번호를 무시하고 오늘 날짜만 기반으로 주문번호를 생성 중이었다. 그러다보니 지금 들어오는 주문들이 모두 같은 주문번호를 가지게되어 문제가 생긴 것이었다.

원인을 찾았으니 해결을 해야지! 주문번호를 생성하는 함수에 마지막 주문번호를 가져올 땐 테스트용 주문번호를 걸러내는 로직과 주문 날짜뿐만 아니라 주문 시간까지 반영해서 주문번호가 만들어지게 바꿔줬더니 깔끔하게 해결됐다!

이 사건 덕분에 오전 시간을 아주 알차게 보낼 수 있었다!! 오늘도 삽질 자아알 했다!👋

profile
이제는 병아리는 벗어나야하는 프론트개발자

0개의 댓글