주문 실행 추적

마지막 업데이트: 2022년 2월 1일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
주문 액션

주문 흐름이란 무엇입니까?

주문 흐름은 대규모 중개인이 자체적으로받는 주문의 양을 처리 할 수 ​​없기 때문에 대규모 중개인이 주문을 소규모 딜러에게 양도하는 투자 산업의 관행입니다. 때로는 딜러가 주문을 분배 한 것에 대해 프리미엄을 지불합니다. 일반적으로 각 거래마다 몇 페니입니다. 이것이 항상 합법적 인 것은 아니며 딜러가 더 많은 주문을 지시하도록 목표로 지불 할 수있는 시점에 제한이있을 수 있습니다.

개인이 중개에 가입하면 중개인은 고객의 지시에 따라 또는 고객의 재무 고문의 명령을 통해 시장에서 주문을 실행하는 데 동의합니다. 중개인은 시장에서 다양한 규모와 관심을 가진 고객과 함께 일하면서 매일 수많은 거래를 처리 할 수 ​​있습니다. 주문이 적시에 실행되도록하기 위해 다른 딜러에게 분배 할 수 있습니다.

주문이 완료되면, 원하는 경우 거래가 완료되었음을 고객에게 알릴 수 있습니다. 증권의 구매 또는 판매를 추적하고 가격, 관련된 증권 수 및 기타 세부 사항을 문서화하는 명확한 종이 흔적이 있는지 확인하기 위해 딜러와 브로커가 세부 정보를 기록합니다. 분쟁 발생시, 이러한 세부 사항을 참조하여 문제의 사실을 파악하고 해결책을 제공 할 수 있습니다.

딜러는 주문 흐름을 통해 주문을 분배함으로써 딜러가 동일한 보안을 위해 여러 주문을 패키징하고 한 번에 모두 실행할 수 있기 때문에 더 나은 거래에 액세스 할 수 있습니다. 주문 흐름에 대한 지불이 허용되면 중개인은 고객을 대신하여 금융 계정을 처리하기 위해 이미 벌어 들인 수수료 외에 각 거래에서 돈을 벌 수 있습니다. 개별 거래는 많은 돈을 벌지 못할 수도 있지만 장기적으로 이러한 수수료는 실질적으로 증가 할 수 있습니다.

중개인이 주문 흐름에 대한 지불을 수락하면 고객이 새 계정에 가입 할 때이를 공개해야합니다. 수령 한 지불에 관한 정보를 제공해야합니다. 그렇게하지 않으면 증권 거래위원회와 같은 규제 기관에보고 될 경우 사람들에게 법적 처벌을받을 수 있습니다. 일부 지역에서는 주문 흐름에 대한 지불이 브로커 또는 딜러를 손상시킬 수 있다는 우려가 있습니다. 브로커는 주문할 가장 적합한 사람을 선택하는 대신 지불 할 딜러에게 우선적으로 주문을 보냅니다.

주문 실행 추적

우커머스 – 주문 관리

주문은 고객이 결제 프로세스를 완료할 때 생성되며 관리자 및 상점 매니저 역할이 있는 사용자에게만 표시됩니다. 각 주문에는 고유한 주문 ID가 부여됩니다.

주문 ID는 기본 WordPress ID 접근 방식을 사용하므로 순차적이지 않습니다. 순차적 주문 번호의 경우 Sequential Order Numbers Pro를 사용할 수 있습니다.

주문 상태

주문에는 상태가 있습니다. 주문 상태를 통해 ‘결제 대기 중’에서 ‘완료됨’으로 끝나는 주문이 얼마나 진행되었는지 알 수 있습니다. 다음 주문 상태가 사용됩니다.

  • 결제 대기 중 — 주문이 접수되었으며 결제가 시작되지 않았습니다. 지불 대기 중(미지급).
  • 실패 — 결제 실패 또는 거부(미결제). 이 상태는 즉시 표시되지 않고 확인될 때까지 보류 중으로 표시될 수 있습니다
  • 처리 중 — 지불을 받았으며(지불) 재고가 감소했습니다. 주문이 처리를 기다리고 있습니다. 가상 및 다운로드 가능한 제품만 포함된 제품을 제외하고 모든 제품 주문은 처리가 필요합니다.
  • 완료됨 — 주문이 완료되고 완료되었습니다. 추가 조치가 필요하지 않습니다.
  • 보류 중 — 결제 대기 중 – 재고가 감소했지만 결제를 확인해야합니다.
  • 취소됨 — 관리자 또는 고객이 취소했습니다. 재고가 증가하므로 추가 조치가 필요하지 않습니다.
  • 환불됨 — 관리자가 환불함 – 추가 조치가 필요하지 않습니다.
  • 인증 필요 — 거래를 인증하거나 SCA 요구 사항을 완료하기 위해 고객의 조치를 기다리고 있습니다.
주문 상태를 보여주는 시각적 다이어그램

“결제 보류”에서 “완료됨”, “취소됨” 또는 “환불됨”으로 상태를 보여줍니다.

주문 상태 다이어그램

주문 상태 및 이메일

이메일 설정에서 자동으로 전송되는 다양한 이메일에 대해 알아보세요.

여러 주문보기 및 관리

주문 개요

상점에서 주문을 받기 시작하면 주문 관리 페이지가 채워지기 시작합니다. 워드프레스 대시보드 -> 주문으로 이동

각 행에는 여러 세부 정보가 표시됩니다. 일부는 기본적으로 존재하고 나머지는 추가할 수 있습니다. 사용 가능한 옵션은 다음과 같습니다.

  • 주문 번호 및 고객 이름,
  • 구매 날짜,
  • 주문 상태,
  • 청구지 주소,
  • 배송 주소,
  • 구매 총액 및
  • 액션

주문 예시

표시할 열을 변경하려면:
  1. 워드프레스 대시보드 -> 주문으로 이동하십시오.
  2. 오른쪽 상단에서 화면 옵션을 선택합니다.
  3. 표시할 열을 선택하십시오.
  4. 각 페이지에 표시할 항목 수를 선택하십시오.
  5. 그런 다음 적용하십시오.

화면 옵션

주문 필터링 및 정렬

날짜 (월/년) 또는 등록된 고객별로 주문을 필터링합니다.

  • 월을 선택하거나 고객을 검색하십시오.
  • 필터를 선택하십시오.

필터 예시

제목을 선택하여 주문 번호, 날짜 또는 합계를 기준으로 오름차순 또는 내림차순으로 주문을 정렬합니다.

‘총액’열은 환불된 금액을 주문 실행 추적 고려하지 않습니다.

주문 정렬

주문 검색 및 찾기

주문 목록의 오른쪽 상단에 있는 검색 상자를 사용하여 주문을 찾을 수 있습니다. 주문 번호, 고객 이름 또는 주문 목록에 표시된 기타 정보 (예: 주소)를 입력하십시오.

주문 미리보기

주문 행에는 미리보기 아이콘(눈)이 있습니다.

주문 미리보기 아이콘

미리보기를 클릭하면 주문 번호, 주문 상태, 청구 세부 정보, 결제 방법, 배송 세부 정보, 배송 방법, 주문한 항목 및 주문 상태를 변경하는 옵션이 포함된 새 창이 열립니다.

주문 미리보기

주문 상태

주문 상태는 색상으로 구분되어 설명되어 있습니다.

  • 취소됨 – 회색
  • 완료 – 파란색
  • 실패 – 빨간색
  • 보류 중 – 주황색
  • 결제 보류 – 회색
  • 처리 중 – 녹색
  • 환불됨 – 회색

주문 액션

주문 상태 위로 마우스를 가져 가면 주문에 대한 메모가 표시됩니다.

주문 액션

행 끝에는 주문을 처리 중 또는 완료로 빠르게 표시하는 바로 가기 버튼이 있습니다.

주문 바로가기 버튼

단일 주문보기 및 편집

단일 주문 페이지에서는 모든 주문 데이터를 볼 수 있을 뿐만 아니라 편집하고 업데이트할 수도 있습니다.

  • 주문 상태 변경
  • 주문 항목 편집 – 제품, 가격 및 세금을 수정합니다.
  • 재고 – 주문 재고 축소 및 복원
  • 주문 액션 – 고객에게 주문 세부 정보를 이메일로 보내거나 (고객에 대한 주문을 수동으로 생성하는 경우 편리함) 다운로드 권한 재생성
  • 메타를 제거하고 추가하여 제품 옵션을 편집하려면 제품 메타를 수정하십시오.
  • 쿠폰을 적용하십시오. 주문을 신청하려면 쿠폰 코드를 알아야합니다. 쿠폰 사용 횟수를 추적하고 쿠폰을 주문에서 제거할 수도 있습니다. 참고: 쿠폰이 영향을 받으려면 주문이 미결제 상태이어야 합니다.
  • 수수료를 추가하십시오. 금액 또는 비율을 입력하여 주문에 수수료를 추가할 수 있습니다. 마이너스 수수료는 다른 모든 항목 사이에 세금을 배분하고 장바구니 총액이 0 미만이 되지 않습니다.

주문 정보

  • 볼 수 있는 주문 세부 정보
  • 주문 번호
  • 결제 세부 사항
  • 주문 날짜 및 시간
  • 주문 상태
  • 고객 정보:
    • 프로필 및 고객이 과거 구매를 볼 수 있는 링크와 함께 사용자 이름 및 이메일
    • 결제 세부 정보
    • 배송 정보

    고객 정보 예시

    주문 세부 정보 편집

    이 섹션에 있는 대부분의 세부 정보는 업데이트 또는 변경할 수 있습니다.

    • 날짜와 시간을 변경하려면 날짜 선택기와 시간 선택기를 사용합니다.
    • 상태를 변경하려면 올바른 상태를 선택하세요.
    • 고객을 변경하려면 현재 고객을 선택하고 새 고객을 검색하십시오.

    “청구” 및 “배송”에서 몇 가지 다른 세부 정보를 변경할 수 있습니다. 이렇게 하려면 각각 옆에 있는 연필 아이콘을 선택합니다.

    • “청구”에서 다음 사항을 변경할 수 있습니다.
      • 청구지 주소 — “청구지 주소 불러오기”를 선택하여 고객의 프로필에서 불러올 수도 있습니다.
      • 이메일
      • 전화 번호
      • 결제 방법 및 세부 정보
      • 배송 주소 — 고객의 프로필에서 불러오거나 청구지 주소에서 복사할 수도 있습니다.
      • 고객이 제공한 메모

      세부 정보 편집

      주문 항목 및 합계

      주문 항목보기

      여기에는 제품 항목, 배송 세부정보 및 주문 요약이 포함됩니다.

      • 각 제품 항목 행에는 다음이 나열됩니다.
        • 제품 이미지
        • 상품명
        • 단일 제품 비용
        • 수량
        • 합계 (비용 x 수량, 할인 고려)
        • 세금
        • 배송 방법
        • 박스 아이템
        • 총 비용
        • 세금
        • 항목 총액 — 세금을 제외한 비용
        • 쿠폰 — 쿠폰 사용에 따라 공제 된 금액입니다. 사용된 쿠폰은 이 섹션의 왼쪽에 표시됩니다.
        • 배송 — 주문에 대한 배송비
        • 세금 — 전체 주문에 대한 세금 금액입니다. 이는 주문에 적용된 세금 코드로 대체됩니다.
        • 주문 총액 — 위 비용의 총액
        • 마지막으로, 지불된 항목과 결제 수단이 받는 수수료에 대한 개요가 있습니다.

        주문 항목 예시

        주문 항목 편집 또는 추가

        주문 상태가 “결제 보류” 또는 “보류중”일 때 환불과 별도로 주문 항목을 편집할 수 있습니다.

        편집할 제품 옆에 있는 연필 아이콘을 주문 실행 추적 선택합니다.

        항목 편집

        다음 제품 항목을 편집할 수 있습니다.
        • 메타 추가 — 제품 변수 옵션을 변경하려면 메타를 추가 및 제거합니다.
        • 수량 — 고객이 구매하는 품목 수입니다.
        • 합계 — 세전 할인전 가격 및 세금.
        • 세금 — 세금 비용입니다. 예를 들어 고객이 면세 대상인 경우 세금을 제거할 수 있습니다.
        다음으로 액션을 수행할 수 있습니다.
        • 항목 추가 — 6 개의 새로운 옵션이 표시됩니다.
          • 제품 추가 — 주문에 제품을 추가합니다.
          • 수수료 추가 — 선물 포장과 같은 추가 수수료를 추가합니다.
          • 배송 추가 — 배송비를 추가합니다. 이 작업을 마치면 연필 아이콘을 선택하여 이름, 방법, 비용 및 세금을 업데이트합니다.
          • 세금 추가 — 주문의 모든 섹션에 추가 세금 코드를 추가합니다.
          • 취소 — 변경하지 않으려면 취소합니다.
          • 저장 — 변경한 후 저장합니다.

          사용자 지정 필드

          사용자 지정 메타 필드를 추가하려면 사용자 지정 필드 메타 상자를 사용하십시오.

          wc_2-1_custom_fields

          사용자 지정 필드

          주문 메모

          주문 메모 패널에는 주문에 첨부된 메모가 표시되며 결제 결과 또는 재고 수준 감소와 같은 이벤트 세부 정보를 저장하거나 고객이 볼 수 있도록 주문에 메모를 추가하는데 사용할 수 있습니다. 일부 결제 수단은 디버깅을 위한 메모도 추가합니다.

          다음과 같은 메모 유형이 가능합니다.

          • 보라색: 결제 게이트웨이 세부 정보와 같은 시스템 상태 알림.
          • 회색: 상태 변경 또는 비공개 메모와 같은 일반 상태 업데이트. 고객은 볼 수 없지만 알림을 받을 수 있습니다. 예를 들어 상태가 처리에서 완료로 변경되면 이메일이 전송될 수 있습니다 (설정에 따라 다름).
          • 파란색: 고객 참고 사항. 고객은 이메일을 통해 메모를 받습니다. 주문을 보거나 WooCommerce 주문 추적 페이지를 사용하여 볼 수 있습니다.

          메모는 고객 또는 다른 매장 관리자와 의사소통 할 수 있는 강력한 도구가 될 수 있습니다. 트랙킹 번호나, 재고에 대해 고객 메모를 추가하면 자동으로 알림이 전송됩니다.

          주문 메모 예시

          메모를 추가하려면
          1. 텍스트 영역을 사용하여 메모 내용을 추가합니다.
          2. 드롭 다운에서 비공개 메모 또는 고객에게 메모를 선택합니다.
          3. 추가를 선택하십시오.

          수동으로 주문 추가

          1. 우커머스 -> 주문으로 이동하십시오.
          2. 페이지 상단에서 “주문 추가하기”를 사용합니다. 단일 주문 페이지가 나타납니다.
          3. 고객 세부 정보 입력, 항목 추가, 쿠폰 적용, 수수료 적용 및 합계 계산. 주문 항목 편집
          4. 새 주문의 상태를 설정합니다 (예: 결제해야 하는 경우 ‘결제 대기 중’).
          5. 저장.

          “주문 동작” 메뉴를 사용하여 결제 안내와 함께 고객에게 주문 세부 정보를 이메일로 보냅니다.

          새 주문 추가하기

          주문 결제

          “결제 대기 중”인 주문은 결제 링크를 통해 결제할 수 있습니다.

          상점 관리자는 주문 개요에서 다음 링크를 찾을 수 있습니다.

          고객 결제페이지

          • 고객이 비회원인 경우 올바른 링크가 있는 모든 사용자가 결제 페이지를 보고 주문에 대해 결제할 수 있습니다.
          • 고객이 회원인 경우
            • 이 고객만 로그인하면 결제 링크를 볼 수 있습니다.
            • 고객은 내 계정 -> 주문에서도 주문을 찾을 수 있습니다.

            상점 소유자이고 고객을 대신하여 결제하려는 경우 User Switchinig 플러그인 (WooCommerce 플러그인 아님)을 사용하여 고객의 계정에 로그인하고 결제를 완료할 수 있습니다.

            개인 데이터 제거

            WooCommerce 3.4 이상부터 고객 데이터를 제거할 수 있습니다.

            1. 우커머스 -> 설정 -> 계정 및 개인정보로 이동하십시오.
            2. “주문에서 개인 데이터를 한꺼번에 제거하도록 주문 실행 추적 허용”을 활성화합니다.
            3. 변경 사항 저장

            개인 데이터 삭제

            이제 주문에서 삭제할 수 있습니다.

            1. 우커머스 -> 주문으로 이동하십시오.
            2. 개인 데이터를 제거해야 하는 주문을 선택
            3. 일괄 작업 -> 개인 데이터 제거를 선택합니다.
            4. 적용 선택

            개인 데이터 삭제

            개별 주문에서 데이터는 다음과 같이 업데이트됩니다.

            개인 데이터 삭제 완료

            • 실패, 보류 및 취소된 주문은 휴지통으로 이동됩니다.
            • 완료된 주문은 익명으로 처리되므로 판매 통계는 영향을 받지 않습니다 (위 참조).

            개인 데이터 제거는 계정 삭제 요청과 자동으로 연결될 수 있습니다. WordPress에서는 요청시 도구 -> 개인 데이터 삭제를 통해 사용자 세부 정보를 삭제할 수 있습니다.

            우커머스 -> 설정 -> 계정 및 개인정보로 이동하십시오.

            “요청 시 주문에서 개인 데이터 제거”는 계정 삭제 요청이 되었을 때 주문 데이터도 제거

            “요청 시 다운로드에 대한 액세스 권한 제거” 계정 삭제 요청이 된 후 고객이 더 이상 다운로드링크에 액세스하지 않아야 하는 경우 활성화합니다.

            계정 삭제 요청

            개인 데이터 보존도 자동화할 수 있습니다.
            1. 우커머스 -> 설정 -> 계정 및 개인 정보
            2. 개인 데이터 유지에서 값을 설정합니다.
            3. 변경 사항 저장

            개인 정보 유지 자동화

            활성화된 경우 매일 크론 작업을 통해 실행됩니다. 비활성 계정은 메타 데이터를 사용하여 추적되며 구독자/고객 계정만 제거됩니다.

            다중 사이트 주문

            WooCommerce 3.4 이상부터 모든 사이트의 주문 정보를 보여주는 대시보드 아래에 위젯이 표시됩니다. 주문을 클릭하면 해당 사이트의 주문 세부 정보로 이동할 수 있습니다.

            다중 사이트 예시

            AutoCAD에서 "이 실행 파일의 게시자를 확인할 수 없으며 해당 파일이 주문 실행 추적 신뢰할 수 있는 폴더에 없습니다." 메시지 표시

            회사 이름:

            AutoLISP 파일, VBA 매크로, ARX 응용프로그램, Object Enabler 또는 DLL에서 시작되는 파일이 AutoCAD에서 자동으로 로드되지 않습니다. 이러한 파일이 발견되면 다음과 유사한 메시지가 표시됩니다.

            AutoCAD 2014 이후 버전에는 소프트웨어 보안을 향상시키고 인증되지 않았거나 악의적인 AutoLISP 및 VBA 응용프로그램이 로드되고 실행되는 것을 방지하는 데 도움이 되는 컨트롤이 있습니다.

            해결 방법:

            1. 옵션>파일 탭으로 이동합니다.
            2. 주문 실행 추적
            3. 신뢰할 수 있는 위치를 확장합니다.
            4. 그 아래에 경로를 추가합니다.

            macOS에서 시스템 환경설정 > 응용 프로그램으로 이동하고 신뢰할 수 있는 위치를 확장합니다.

            또는 TRUSTEDPATHSTRUSTEDDOMAINS 명령을 사용하여 신뢰할 수 있는 위치 경로를 수동으로 입력합니다.

            옵션시스템 탭에 있는 보안 컨트롤을 사용하여 "보안 옵션"에 액세스할 수 있습니다(이전 버전의 AutoCAD에서는 이 버튼의 이름이 약간 다르며 결과로 나타나는 대화상자 창도 다르게 보임).

            여기에서도 파일 탭에서와 마찬가지로 신뢰할 수 있는 경로를 추가할 수 있으며, 이와 더불어 보안 수준 및 로드 설정을 지정할 수도 있습니다. 신뢰할 수 있는 위치 또는 TRUSTEDPATHS에 \. (백슬래시와 세 개의 점)으로 끝나는 폴더를 포함하면 해당 하위 폴더도 모두 신뢰할 수 있는 위치로 추가됩니다.

            참고: TRUSTEDPATHS/TRUSTEDDOMAINS 명령을 사용하는 경우 긴 경로 또는 여러 경로를 입력해야 하기 때문에 쉽지 않을 주문 실행 추적 수 있습니다. 메모장 또는 TextEdit을 사용하여 TRUSTEDPATHSTRUSTEDDOMAINS 명령에 추가할 경로를 정리하십시오. 모든 경로를 텍스트 한 줄로 지정해야 하며, 각 경로를 큰따옴표로 묶고 세미콜론으로 구분해야 합니다. 전체 경로 문자열을 복사하여 AutoCAD에서 명령에 붙여넣습니다. Windows에서 경로를 복사하려면 Windows 탐색기에서 폴더 맨 위에 있는 위치 표시줄을 클릭하여 경로를 선택/강조 표시한 후 Ctrl+C를 눌러 복사해야 합니다. macOS에서는 폴더를 마우스 오른쪽 버튼으로 클릭한 후 옵션 키를 누른 상태로 "복사" 옵션을 ". 을(를) 경로 이름으로 복사"로 변경합니다. AutoCAD에 붙여넣으려면 동적 입력 대신 Ctrl+V를 누르거나 마우스 오른쪽 버튼을 클릭하고 붙여넣기를 클릭하여 명령행에 직접 붙여넣으면 됩니다.

            신뢰할 수 있는 경로가 AutoCAD에서 적용되지 않는 것 같은 경우 프로그램을 기본값으로 재설정한 다음 경로를 다시 입력합니다(AutoCAD를 기본값으로 재설정하는 방법 참조).

            사장님용 통계 데이터 서빙하기

            안녕하세요, 배민상품시스템팀에서 서버 개발을 맡고 있는 한진욱입니다.
            작년에 저희 팀은 ‘우리가게NOW’라는, 사장님들을 위한 통계 서비스를 만드는 프로젝트에 참여했습니다.
            기존에 하던 업무에서 보기 힘들었던 통계 데이터를 다루면서 겪었던 어려움과 문제 해결의 과정에 대해서 소개하고자 합니다.

            이름도 낯선 프로젝트, ‘우리가게NOW’

            우리가게NOW 서비스는 작년 6월에 출시한 통계 서비스입니다.

            사장님들께 주문 접수율, 주문 접수시간, 조리시간, 조리시간 준수율 등의 지표를 공개하여, 사장님이 직접 가게 운영과 고객만족에 큰 영향을 미치는 지표들을 살펴보고 개선할 수 있도록 하는 주문 실행 추적 통계 서비스입니다.

            사장님에게 새로운 통계 화면을 제공하기 위해, 다음과 같은 요구사항을 구현해야 했습니다.

            • 주문/배달 데이터로부터 주문 접수율, 주문 접수시간, 조리시간 준수율 등의 통계 데이터를 만들 수 있어야 합니다.
            • 통계 데이터를 바탕으로 상대평가를 해야 합니다. 각 지표별로 모든 가게들 중 상위 몇 퍼센트인지 수치로 나타낼 수 있어야 합니다.
            • 매일 아침 9시에 통계/상대평가 데이터 최신본을 업데이트해야 합니다.

            이 프로젝트는 기존에 팀에서 주로 하던 작업과 비교해 생소한 부분이 많았는데, 다음과 같은 점이 생소했습니다.

            • 통계 데이터를 다뤄야 했습니다. 실시간 데이터가 아니라는 점이 정말 생소했습니다. 과거 데이터를 처리하는 통계 작업을 진행하는 것은 처음이었습니다.
            • 처리하는 데이터 크기가 컸습니다. 주문 데이터를 바탕으로 통계 데이터를 계산해야 하는데, 주문 데이터 개수는 이전에 팀에서 취급해왔던 데이터 수(몇 십만 개 수준)의 몇 배를 뛰어넘는 수준이었습니다.
            • Airflow, SparkSQL 기술을 사용해야 했습니다. 데이터 레이크에서 다른 도메인(주문) 데이터를 바탕으로 작업해야 했기 때문입니다.

            낯선 작업이었지만, Airflow+SparkSQL을 통해서 외부 데이터를 사용해야 한다는 점은 분명해 보였습니다.

            아래 3가지 틀 하에서, 세부적인 구조를 주문 실행 추적 만들며 나아갔습니다.

            1. Airflow 스케줄러를 통해 주기적으로 외부에서 필요한 정보를 가져온다.
            2. 데이터 레이크(Data Lake)에서 SparkSQL 쿼리문으로 데이터 추출한다.
            3. 데이터를 팀 내 RDB로 저장한다.

            프로젝트를 위한 첫 구조

            팀원과 함께 정한 첫 구조는 이렇습니다.

            먼저, 사내에서 데이터서비스실이 관리하고 있는 테이블을 모두 ‘데이터 레이크(Data Lake)’라고 하겠습니다.

            1. 데이터 레이크에서 주문 데이터를 뽑은 뒤 팀 내 RDB로 적재합니다.
            2. 적재한 주문 데이터를 바탕으로 주문 접수율, 주문 접수시간, 조리시간, 조리시간 준수율 등의 통계 데이터를 계산합니다.
            3. 계산한 결과를 다시 팀 내 RDB로 적재합니다.

            통계 데이터를 배치 애플리케이션으로 계산한다는 점이 핵심입니다.
            위 구조의 장점은 다음과 같습니다.

            • 테스트가 쉽습니다.
            • 변경사항에 유연하게 대응할 수 있습니다.
            • 통계를 처리하는 부분을 가독성 있게 코드로 표현할 수 있습니다.

            세 가지 장점 모두 애플리케이션 코드라는 특성에서 나옵니다. Java 코드로 계산 로직을 표현하기 때문에, 테스트를 할 수 있고 따라서 유연성 및 가독성이 증가한다는 것입니다.

            첫 구조의 문제점

            하지만 이 구조는 곧 문제에 부딪혔습니다.

            팀에서 겪어보지 못한 엄청난 크기의 데이터 때문이었습니다.
            몇 백만 건의 주문 데이터양 때문에 두 가지 우려가 생겼습니다.

            1. 3시간에 안에 배치를 완료할 수 있을지에 대한 확신이 없었습니다.
              1. 적어도 3시간 안에는 통계 계산이 끝나야 합니다. 전날 주문 주문 실행 추적 데이터가 쌓이는 6시 이후부터 시작해서, 사장님에게 통계 데이터가 오픈되는 9시까지 통계 데이터를 생성해야 했기 때문입니다.
              2. 하지만 14일간의 주문 건을 바탕으로 통계를 내기 때문에, 계산 대상 데이터가 몇 백만 건이 될 수 있습니다.
              3. 팀에서 평소에 배치가 다루는 데이터가 몇십만 건 수준임을 생각하면, 팀 내 평균 배치 실행 시간보다는 훨씬 오래 걸릴 것으로 추정했습니다.

              적재하는 과정에서 계산하기로 결정, 하지만..

              몇 차례의 팀 내 논의를 거친 후, 애플리케이션이 아닌 적재하는 과정에서 통계 데이터를 함께 계산하는 것으로 결정했습니다.
              즉, 데이터 레이크에서 팀 내 RDB로 데이터를 적재하는 과정에서 통계 데이터를 계산하기로 했습니다.

              이를 통해, 다음 두 가지 장점을 얻을 것으로 기대했습니다.

              1. 성능상 유리하다고 생각했습니다. 데이터 레이크에서 팀 내 RDB로 적재할 때 SparkSQL를 이용하고 있습니다. 분산 환경에서 동작하는 Spark 특성을 이용하여, executor 수를 조절하여 저희가 원하는 주문 실행 추적 만큼 성능을 올릴 수 있을 것이라고 기대했습니다.
              2. 주문데이터를 팀내 RDB로 적재하는 부담을 없앨 수 있습니다.

              하지만 아직 SparkSQL로 통계 데이터를 생성하는 구조에 대해 자신이 없었습니다.
              평소에 쿼리 형태의 코드를 작성한 적이 드물었고, 쿼리 형태의 코드가 앞으로의 요구사항 변경을 과연 충족할 수 있을지에 대해 의문이 들었기 때문입니다.

              여기에 대해 동료 개발자 한 분은 다음과 같은 질문을 할 것을 조언했습니다.

              나에게 일주일의 시간이 있다고 상상해 보기

              ‘나에게 일주일의 빈 시간이 있을 때, 새로운 기술의 불안감을 해소하기 위해 나는 무엇을 할 것인가?’
              ‘SparkSQL의 불안감을 해소하기 위해 나는 어떤 점을 찾아볼 것인가?’

              스스로에게 이 질문을 던졌을 때, 업주 간 상대평가를 하는 구현하는 부분이 제일 자신이 없었습니다.
              그래서 SparkSQL 쿼리로 구현할 수 있을지 직접 확인했습니다.

              업주 조리시간 준수율 순위
              A 12% 1
              B 9% 2
              C 9% 2
              D 8% 4

              현재 요구사항은 위 표와 같이 순위가 나오도록 하는 것입니다. 동점자는 같은 순위가 되고, 그다음 순위는 직전 동점자들 수가 반영되어 매겨집니다.

              찾아보니 SparkSQL에도 RANK() 함수가 있었습니다.
              다음과 같이 쿼리문을 만드니 상대평가를 하는 로직이 간단히 해결됐습니다.

              SparkSQL에 대한 불안감을 일정 부분 해소했습니다.

              물론 더 복잡한 요구사항이 들어온다면, 쿼리로 구현하는 게 어려울 수도 있습니다.
              하지만 더 복잡한 요구사항이 들어올 가능성은 적을 것이라고 생각했습니다. 또한 들어온다고 하더라도, 그때 상대평가 부분만 배치로 계산하도록 바꿔도 됩니다.

              그렇게 해서 만들었습니다, 최종 구조

              최종 구조는 다음과 같습니다.

              중간 통계 결과를 저장하는 hive 테이블을 두고, 중간 결과를 합친 최종 결과만 팀 내 RDB로 저장하도록 만들었습니다.
              통계 데이터를 계산하는 로직은 데이터 레이크에서 데이터를 추출하는 SparkSQL에 있습니다.
              이를 통해, 주문 실행 추적 우리가게NOW 오픈 첫날 30분 안쪽으로 데이터 처리를 완료할 수 있었습니다.
              지금까지도 평균적으로 30분 처리 시간을 유지하고 있습니다.

              돌이켜보면

              우리가게NOW 통계를 계산하는 작업은 몇백만 건이 넘는 과거 주문 데이터를 처리하는 빅데이터 성격의 작업이었습니다.

              하지만 당시에 제가 작업했을 때 빅데이터를 다루고 있다는 인식조차 희박했습니다.

              그래서 처음에는 실시간성 데이터를 보정하는 배치 애플리케이션으로 접근하는 등의 시행착오를 겪었습니다.

              지식이 부족한 상태였지만, 당시로서 가장 나은 대안을 찾을 수 있었던 이유는 다음 요인이었던 것 같습니다.

              • 가치의 우선순위 파악, 기술의 장단점 분석 후 우선순위에 따라 기술 선택
                • 당시 아침 9시까지 업주에게 최신화된 통계 화면을 보여주는 것을 최우선 우선순위로 두었습니다.
                • 따라서 수행 시간 축소를 최우선 순위로 둘 수 있었습니다.
                • SparkSQL에 대한 불안감은 말로 표현하기 전까지는 막연한 상태였습니다.
                • 일주일의 시간이 있으면 어떤 부분을 공부할 것인가? 질문을 통해 불안감의 원인을 구체화할 수 있었습니다.

                이번 우리가게Now 프로젝트를 통해 기술에 대한 막연한 불안감을 해소하는 방법을 배울 수 있었습니다. 더불어 데이터에도 실시간 데이터, 통계 데이터 등 여러 가지 유형이 있다는 점을 배웠습니다.

                통계 데이터를 서빙할 때 이 글이 도움이 되기를 바라며, 이상으로 글을 마치도록 하겠습니다.

                배민상품시스템에서 함께할 개발자를 적극적으로 모집하고 있습니다(지원 공고).
                저희와 함께 더 나은 서비스를 위한 기술적인 고민을 할 수 있으면 좋겠습니다.
                감사합니다.


0 개 댓글

답장을 남겨주세요