logo
logo
셀렉트샵에서 예약하기 서비스 개발기
코드너리  |  2022. 09. 26
쇼핑 플랫폼
사용된 기술:
mysql-image
content

배경

29CM은 셀렉트샵으로, 지금까지 다양한 콘텐츠를 통해 유형상품을 소개하고 구매할 수 있는 경험을 제공하였습니다. 최근, 29CM에서 판매하였던 티켓과 숙박상품들의 큰 판매성과를 통해 29CM 서비스 내 독립적인 비즈니스 경쟁력이 있다고 판단하였고, 이를 서비스화하게 되었습니다.

기존 서비스가 지닌 한계

이미 언급한것 처럼 29CM의 서비스는 유형상품을 고려하여 설계되어 있었기 때문에, 상품 도메인에서 예약 상품정보를 관리하는 것이 어렵다고 판단하였습니다. 특히 데이터 구조상 단순히 컬럼추가와 테이블 추가로 해결하기엔 서비스 복잡도만 높아질 것으로 예상하여 독립적인 독립된 데이터베이스에 데이터를 관리하는 서비스로 개발하였습니다.

해결 방안

  1. 옵션테이블은 개별적인 옵션정보를 저장하기 때문에 컬럼추가 또는 데이터 반정규화를 통해 객실별 일정, 상세설명, 상세이미지를 저장하기 어려운 한계가 존재합니다.
    기존에는 상품 테이블에 대부분의 상품 정보가 저장되고, 옵션테이블에 추가금액등 빈약한 정보만 가지는 구조였지만, 신규 상품 테이블에서는 최소한의 메타정보만 갖고, 옵션테이블의 정보를 묶어주는 역할의 데이터만 저장하도록 하였습니다.
  2. 기존 어드민에서는 날짜를 표현하는데 한계가 있었습니다. 아래처럼 객실과 날짜를 조합해서 옵션 상품들이 만들어지기 때문에, 예약 가능한 날짜가 조금이라도 늘어나게되면 옵션 상품들이 무수히 늘어나게된다는 한계가 있었습니다
    → 옵션테이블에 객실정보를 저장하고, 객실의 일정, 상세설명 그리고 이미지를 별도의 테이블로 정규화하였습니다.
  3. 기존 옵션테이블에서는 재고수량이 컬럼으로 저장되고 있었습니다.이는 유저의주문시 재고를 차감하는 요청과 어드민에서 상품을 수정하는 요청시 Lock경합으로 주문처리의 성능저하가 발생할 수 있습니다.
    → 재고 테이블을 별도로 정규화하여 경합을 줄이도록 하였습니다. 그리고 옵션 테이블과 사은품 테이블에서 재고테이블의 기본키를 외래키로 참조하도록 설계하였습니다.
  4. 상품상세 조회화면에서 날짜의 연박선택이 불가능하고, 긴 리스트로 표현되어 구매경험이 떨어집니다.
    → 일정은 캘린더로 표현하였고, 당연히 연박도 가능하도록 하였습니다.
Copyright © 2024. Codenary All Rights Reserved.