[Project_coupon] 쿠폰 발행 시스템 코드 리뷰 후기

forhjy
3 min readMar 27, 2021

개인프로젝트 코드 리뷰 받고 배운 점 정리

Photo by Markus Winkler on Unsplash

3일간 쿠폰 발행 시스템을 만들었고 멘토님께 코드 리뷰를 받고 왔다. 사실 짧은 기간동안 만든거라 허점이 많았지만 그래도 정해진 마감일에 완성해서 우선 보여드리는게 나을 것이라 생각해 약속을 잡고 멘토링을 받으러 갔다.

물론 이전에 CTO 였던 멘토님께 코드 리뷰를 받는다는 건 참 부담스러웠지만 트인 장소에서 TV에 내 코드가 띄워지고 왜 이렇게 짰는지 설명하고 즉석에서 코드를 어떻게 수정할 수 있을지 이야기해보는 경험은 생각보다 즐거웠다. 아마 사고가 확장되는 경험이라 즐거웠던 것 같다. 멘토링 받은 내용은 아래와 같다.

쿠폰 번호 중복 방지에 관하여

  • 나는 쿠폰 번호를 생성할 때 타임스탬프 대신에 db의 auto increment 되는 id를 사용해 중복 방지를 하였다.
  • 보통 타임스탬프를 hash화 시켜서 중복을 방지하는데 이를 파티션 키라고 한다.

소비 유도 마케팅에 관하여(쿠폰과 마일리지)

  • 쿠폰, 마일리지(적립금)은 다른 성격의 소비 유도 방식이다. 하지만 회사의 부채 비율에 책정된다는 것은 동일하다. 그럼에도 불구하고 더 많은 소비를 발생시키니 채택할 수밖에 없는 마케팅 전략임.
  • 쿠폰은 소비자의 결제와 함께 발생하는 회사의 부채라면 마일리지는 소비자가 특정 횟수 혹은 금액을 채워야만 발생하는 회사의 부채이다.

개선사항들

  1. db의 id 가 INT 인 점
  • Youtube 싸이 강남스타일 뮤비 조회수가 INT_MAX를 넘어서 오버플로우가 났었다고 한다. 그래서 INT(32bit int) → BIG INT(64bit int)로 바꿨다고 한다.
  • VARCHAR 를 사용해 id를 생성한다면 Parser 가 필요하겠지만 무제한으로 생성이 가능하다.

2. 한 id 당 쿠폰을 한 번만 발급받을 수 있도록 수정해보자. 사용기록에 대한 데이터를 어떻게 남길 것인가에 대한 고민을 해봐야 한다.

3. useCoupon, createCoupon 에서 둘 다 SELECT * FROM coupon 을 위로 올려버리면 쿼리 3개 쓸 것을 2개로 줄일 수 있다.

  • 쿼리를 3개에서 2개로 줄이면 뭐가 얼마나 좋아지는데?
  • 수치로 이야기해보자. 33% ⇒ 50% 약 20%의 성능개선이 되었다. 서버가 10대라면 8대만 쓸 수 있도록 줄여준 것이고, 서버 1대당 2억이면 4억 비용절감을 해준 셈이 된다.

4. 비즈니스 로직에서 장애를 일으킬 만한 요소를 없앤다. 방어 로직을 추가한다.

이에 더해 발권력에 대해서 한번 더 생각해보면서 코드를 수정해 볼 예정이다.

--

--