데이터 처리 함수 구현

2024년 3월 7일 목요일

Today I Learend

날짜

2024년 3월 7일 목요일

내용

정신 없는 하루지만 그래도 큰 거 하나 끝냈다..

데이터 처리 구현

위젯에 담길 데이터를 처리하는 로직을 꼭 완성하려 했고, 거의(?) 성공했다. 총 6가지 데이터를 얻었다.

Flow

이전 TIL에서 언급했듯, 우리 서비스에서 위젯은 리뷰 서버에서 렌더링 해준다.

고객이 스토어에 접속 ⇒ shopify 쪽에 위젯 요청 ⇒ shopify가 우리 서버로 요청을 리다이렉트 ⇒ 저장해놓은 위젯을 응답 ⇒ shopify가 응답을 리다이렉트

의 과정이다. 따라서 이번 위젯들도 리뷰서버에서 처리되어야 한다. 필요한 데이터들 중 shop 서버에서 가져와야 할 것들이 있다. 고객이 상품을 주문하면 웹훅으로 우리 shop 서버의 order 테이블 등에 관련 데이터가 저장된다. 따라서 리뷰 서버에서 샵 서버로 일부 데이터들을 요청하도록 구조를 만들어야 했다.

현재는 cron에서 존재하는 위젯을 모두 탐색하되, 처리한 product_platform_id를 저장해서 중복된 데이터 업데이트를 방지했다. 더 좋은 방안이 있을진 고민이 필요할 듯 하다.

기본적으로 고객이 설정한 기준에 맞을 때만 출력되는 형식으로 데이터를 저장하고, 그렇지 않으면 빈 값으로 냅뒀다. 아예 사용하지 않는다면, 고객이 설정한 기준값을 -1로 일관되게 설정되도록 작성하여 로직의 진입 지점에서 탐색을 하지 않도록 했다.

리뷰서버

실시간 리뷰 작성자

이름으론 리뷰 내용이 필요할 것 같지만, 실제론 최근 작성된 리뷰의 평점을 나타내야 한다. 어쨌든, 위젯이 작동되는 리뷰 서버 내에 있는 데이터라 큰 어려움 없었다. 특정 상품과 스토어를 기준으로 찾은 리뷰 중 가장 빨리 작성된 5점짜리 리뷰를 찾았다.

리뷰 종합 데이터

특정 점수 이상으로 별점을 매겨준 사람의 수를 파악해야 한다. 위와 마찬가지로 리뷰를 탐색했다.

실시간 재고

product_variant라는 테이블에 inventory_quantity가 존재한다. product_variants는 상품의 옵션조합(?) 느낌이다. 예를 들어, 티셔츠라는 product를 팔 때 다양한 색깔과 사이즈 옵션이 있다면 각 조합이 하나의 product_variant가 된다. S 사이즈 - 빨간색, M사이즈 - 검정색, L 사이즈 - 빨간색, XL사이즈 - 초록색 등등…. 우선 현재 재고라 하면 이 모든 product_variant의 inventory_quantity의 합으로 구현했다. 보통은 그게 맞지 않나..? 참고로 product_varaint에 SKU라는 값은 각 product_variant가 가지는 고윳값이다. ID같은. 따라서 한 상품에서 파생된 variant들은 같은 product_platform_id와 각각 개별적으로 고유한 sku를 가진다.

샵 서버

실시간 구매자

주문한 물품 데이터인 line_item에서 가장 최근 작성된 것 1개를 찾았다.

구매 종합 데이터

기존에 있는 line_item 테이블에는 quantitry 필드가 없었다. 주문을 했고 거기에 대한 리뷰만 중요하지 수량은 아직까지 사용할 데이터가 아니었기 때문이다. 이번 위젯에선 총 얼마나 판매되었는지를 확인할 필요가 있었고, 이것은 위젯뿐만 아니라 나중에 위젯의 효과를 측정하기 위한 매출 데이터에도 사용될 예정이기 떄문에 이번에 추가했다. quantity와 refundable_quantity가 있는데 후자는 환불되지 않은 수량을 의미한다고 한다. 10개 주문한 후 3개가 환불되면 각각 10, 7로 기록 되는 것 같은데.. 우선 두 개 다 저장하도록 구현했다.

총 방문자 수 데이터

방문 데이터를 저장하는 customer_visit 테이블을 순회하도록 작성했다. 다만, 아직 방문자 정보를 우리 서버로 보내는 스크립트를 shopify 프론트에 작성하지 않았기 떄문에 찾을 데이터가 없긴 하다.

위젯

이제 위젯 렌더링을 구현해야 한다. 고객이 위젯을 디자인하는 곳에서 미리보기 기능이 필요한데, 실제로 스토어에 위젯을 렌더링하는 것과 같은 방식으로 처리해야 한다. 다만 기존에 몰랐던 차이가 있었는데, 위젯에 설정된 디자인 값이 다르다. 미리보기에선 고객이 적용한 디자인 요소를 보여줘야 하기 떄문에 위젯 렌더링 요청에 디자인 값이 들어오는 반면, 실제 스토어에 렌더링할 때는 이미 완성된 위젯이기 떄문에 위젯의 해시코드만 들어온다. 기존에 위젯 렌더링하는 템플릿 메서드, 팩토리 메서드가 있긴 한데 이용하긴 힘들 것 같다. 처리하는 param이 너무 다르다..

회고

열심히 집중해서 일정은 다 따라 잡았다.