shopify 쿠폰을 위한 고객관리

2024년 4월 1일 월요일

Today I Learned

날짜

2024년 4월 1일 월요일

내용

리스트 디자이너는 실서버에 배포! 다음 스프린트를 진행중

쿠폰

이벤트를 완료한 인원에게 쿠폰을 제공해야 한다. Shopify Docs 를 참조하여 GraphQL을 참고하여 생성하는 과정에서 두 가지 문제에 봉착했다. 내가 기존에 계획한 로직은 스토어에서 고객이 수행해야 할 이벤트를 설정할 때, 사용 가능 인원이 지정되지 않은 쿠폰을 만들어 두는 것이었다. 좀 더 자세히는, 아무도 들어있지 않은 비어있는 고객 세그먼트를 생성한 후 , 할인 쿠폰에 배정할 계획이었다. 이 후 이벤트를 완료한 고객만 해당 세그먼트에 개별적으로 추가하여 쿠폰을 사용할 자격을 부여할 생각이었다.

고객 세그먼트를 생성할 때 첫 문제를 발견했는데, 필터링 없이 임의로 조작하여 세그먼트를 구성할 수 없다. 반드시 쿼리를 작성해서만 세그먼트를 구성할 수 있었다. 이 쿼리는 SQL에서 사용하는 것과 대동소이 한데, Shopify에 저장된 고객 정보를 필터링하여 세그먼트라는 고객 집단을 만들어야만 한다는 의미이다. “누구, 누구, 누구로 구성된 세그먼트를 만들어”는 안되고, “이메일 정보가 입력된 사람의 모음”이나 “국적이 호주인 고객” 등만 가능하다.

굳이 특정 고객들을 선택하고 싶다면 해당 고객에게 tag를 달아주면 된다. 따라서 이벤트를 완료하여 쿠폰을 사용할 자격이 있는 고객에게 “첫번째 미션 통과자” 라는 태그를 달아주고, 해당 태그를 가진 사람들로만 구성된 세그먼트를 만들 수 있다. 생성한 쿠폰은 이 세그먼트에 포함된 사람만 사용하도록 설정할 수 있다. 물론 처음에는 해당 태그를 가진 사람이 없을테니 빈 세그먼트를 가지겠지만.

여기서 또 다른 문제가 발생했다. 고객을 설정하지 않은 할인 쿠폰, 일명 공수표를 만들 수 없다는 것. 반드시, 최소 특정된 한명의 고객은 배정되어 있어야 했다. “일단 아무도 못쓰게 만들어 놓고, 추가해야겠다”는 불가능하다. Shopify 개발자 포럼에서 이에 대한 직원의 답변을 들을 수 있었다.(출처)

세줄 요약하면

  1. 쿠폰을 누구나 사용가능하도록 설정한다.
  2. 단, 쿠폰의 사용 가능 기간의 시작을 미래로 설정한다.
  3. 이 후, 사용자를 추가할 때 사용 가능 기간의 시작을 지금으로 변경한다.

실화냐… 심지어 고작 1달된 답변이었다.

결국 방법을 고심하다가, 세그먼트를 만들지 않기로 했다. 대신 쿠폰에 이벤트 참여를 완료한 고객의 플랫폼 내 고유 ID를 추가하는 방식을 사용하기로 했다. 굳이 고객에게 태그를 추가하는 번거로운 공수를 들일 필요가 없었고, 쿠폰 발급 횟수가 늘어날 수록 세그먼트도 추가되야 하기 떄문이다. 스토어가 이벤트에 10번 참여할 수 있다고 설정하면 그 스토어는 10개의 세그먼트를 가져야 하며 고객들은 최대 10개의 태그를 가져야 한다. 이건 좀 아닌듯.

구조

구현 중 2개의 클래스를 만들었다. 하나는 이벤트에서 설정한 대로 pricerule을 생성하고 저장하는 클래스, 다른 하나는 고객이 이벤트를 완료했다고 보낼 떄 로직을 처리할 클래스

PriceRule 관련 클래스

이 클래스가 가져야할 메서드는 다음과 같다.

  1. 입력한 데이터를 포함하여 쿠폰 관련 데이터를 초기화하는 메서드
  2. Shopify에 PriceRule 생성 요청을 보내기 위한 형식을 갖추는 메서드
  3. 생성 요청을 보내는 메서드
  4. 데이터베이스에 할인관련 정보를 알맞은 형태로 저장하는 메서드

Customer 관련 클래스

이 클래스의 메서드는 비슷한듯 다르다.

  1. 이 고객이 참여한 이벤트 데이터를 서버에서 찾는 메서드
  2. 입력받은 고객 데이터를 포함하여 데이터를 초기화하는 메서드
  3. Shopify에 PriceRule 업데이트 요청을 보내기 위한 형식을 갖추는 메서드
  4. 업데이트 요청을 보내는 메서드
  5. 데이터베이스에 참여 고객 정보를 알맞은 형태로 저장하는 메서드

이 둘을 추상클래스로 관리하려고 했는데, 같이 묶는게 맞는지 조금 혼란스럽다. 기가 막히게 잘 짜고싶은데… 엉클 밥의 가호가 함께하기를.

회고

어떻게 하면 코드를 기가막히게 작성했다고 소문이 날 수 있을까?