YES ERROR IN MY PROJECT!

hodu·2022년 10월 6일
0

dev

목록 보기
1/5
post-thumbnail

예전에 만들었던 프로젝트 중 오류를 발견해 기록으로 남기고자 한다.

내가 만든 프로젝트는 오픈마켓 서비스 API인데, 판매자/구매자로 나뉘고 판매자가 물건을 올리면 구매자가 구매할 수 있게하는 프로젝트이다. (실제 결제까지는 이어지지 않음)
약간 아이디어스와 비슷한 서비스라고 생각하면 될듯하다.
(서비스 프로토타입)

나는 이 서비스의 초기 기획부터 구현, 배포까지 진행했는데 이게 벌써 1년 이나 되었다..! 시간이 참 빠르군..

아무튼, 내가 1년이 지난 지금에서야 발견한 치명적인 오류는 다음과 같다.

  • cart에 담은 물건을 /order/ API로 주문요청을 할 때 계산 금액이 제대로 맞지 않음

시나리오는 다음과 같다.

cart에서 주문하기 버튼을 누르면 order 페이지로 연결되고 주문자의 이름, 주소, 결제방법 등을 작성하고 /order/ API로 주문요청을 하게된다.
그러면 이때 백엔드에서 결제금액에 대해
교차확인을 거치는데, 이 부분이 이상했다.

만약 2000원짜리 물건 1개를 카트에 담고, 그걸 주문하게 되면 당연히 2000원+배송비2000원인 4000원이 결제 금액이어야 한다.

근데 이상하게 백엔드에서 계산한 결제금액은 22000원이라는 오류가 나왔다.

음.. 배송비는 2000원이고 상품 가격도 2000원이니 수량이 10개로 설정된건가?
으음... 내 코드는 이상이 없는데....

(내 상태였다)

아무리봐도 내 코드는 잘못된게 없다는 확신이 들었고(왜냐면 1년이나 지났으니) 분명 요청 사항이 잘못했겠지... 하면서 테스트를 하고 있었음.

히히 내 오만이었다.^____ㅠ

내가 실수했던 부분은 cart에 담긴 아이템을 뽑아올 때 "누구"의 것인지 설정해주지 않았다.
(나였다)

무슨말이냐면
buyer1 이라는 구매자가 "제일 먼저" A 물건을 카트에 10개 담아놓는다면,
buyer2가 A 물건을 1개만 담아놓고 주문하더라도 buyer1의 카트에 담겨있는 10개가 주문되게 된다.

왜냐하면 누구의 카트인지 "특정"해주지 않았기 때문이다.
코드를 잘 살펴보니 cart에 있는 아이템을 가져올 때 이렇게 가져왔다.

CartItem.objects.filter(product_id=item)

그러니까 product_id값이 같기만 하면 가져와주는데, filter의 특성 상 가장 처음 값을 가져와버린다.

즉, 처음 카트에 A라는 물건을 넣은 사람이 buyer1이니까 buyer1의 카트에 있는 수량 10개를 가져오기 때문에 22000원이라는 의문의 가격이 나왔던 것이다..!

다른 값들도 똑같은 오류가 났었는데 1년동안 아무도 몰랐다!ㅠㅋ
(오픈마켓 사랑해조...plz.....)

오류를 발견할 때 얼마나 짜릿하던지...
오류를 발견해야 할 땐 조금 지루하지만 오류가 왜 났는지 알게되고 해결하는 과정이 너무 재밌다.

이래서 개발하나!?

그리고 내 코드에 겸손해지자... always yes error in my project...

profile
안녕 세계!

0개의 댓글