---
title: "몇 초 만에 휴대폰에 도착하는 Shopify 주문 알림"
description: "Shopify 웹훅을 휴대폰으로 바로 보내세요. 모든 주문은 조용한 푸시로, 고액 주문은 좀 더 크게, 환불이나 취소는 당신이 필요할 때 전화로."
date: 2026-09-09
author: Nooc
authorAvatarLink: /images/avatars/nooc.webp
authorLink: https://nooc.me
tags:
  - Shopify
  - 주문 알림
  - 이커머스 알림
  - 웹훅 알림
  - 소상공인
---

# 몇 초 만에 휴대폰에 도착하는 Shopify 주문 알림

Shopify가 보내는 주문 메일은 메일 앱이 동기화하기로 마음먹은 시점에 도착하고, 당신이 필터를 걸어 둔 폴더에 떨어지며, 주문이 1만 원이든 100만 원이든 똑같이 생겼습니다. 가게를 직접 운영한다면 그건 잘못된 형태의 신호입니다.

웹훅이 이걸 고칩니다. Shopify는 모든 주문을 당신이 고른 URL로 POST하고, Echobell은 그 POST를 당신이 크기를 정하는 알림으로 바꿉니다.

## 당신을 방해할 자격이 있는 토픽만 고르기

Shopify는 웹훅 이벤트 종류를 **토픽**이라고 부릅니다. 혼자 운영하는 가게라면 이 넷이면 대부분 충분합니다.

| 토픽 | 무슨 뜻인가 | 긴급도 |
| --- | --- | --- |
| `orders/create` | 주문이 들어왔다. | 일반 |
| `orders/paid` | 결제가 통과됐다. 실제로 들어온 돈만 신경 쓴다면 이걸 쓰세요. | 일반 |
| `orders/cancelled` | 고객이 취소했다. 포장 전에 아는 편이 낫다. | 시간 민감 |
| `refunds/create` | 환불이 이뤄졌다. | 시간 민감 |

`orders/create`와 `orders/paid` 중 **하나만** 구독하세요. 판매 한 건에 알림 두 개를 정말로 원하는 게 아니라면요. 대부분의 가게에는 `orders/paid`가 정직한 쪽입니다.

## 1단계 — 채널 만들기

Echobell에서 "Shopify 주문" 같은 이름의 채널을 만들고, webhook URL을 복사한 뒤 **POST만 허용**을 켜세요. Shopify는 항상 POST로 보냅니다.

취소와 환불용으로 더 큰 별도 채널을 원한다면 지금 같이 만들고 시간 민감으로 설정하세요.

## 2단계 — Shopify에 웹훅 추가하기

Shopify 관리자에서 **설정 → 알림 → 웹훅 → 웹훅 만들기**로 갑니다. 토픽을 고르고, 형식을 **JSON**으로 두고, 채널 URL을 붙여넣으세요.

저장할 때 Shopify가 테스트 페이로드를 보냅니다. 휴대폰이 울리면 경로가 뚫린 겁니다.

## 3단계 — 실제로 읽는 필드만 템플릿에 넣기

Shopify 주문 페이로드는 깁니다. 주문 하나에 백 개가 넘는 필드가 있죠. 필요한 건 몇 개뿐입니다.

**제목**

```
새 주문 #{{order_number}} · {{total_price}} {{currency}}
```

**본문**

```
{{customer.first_name}} {{customer.last_name}}
{{line_items[0].title}}
```

`line_items`는 배열이라 `line_items[0]`이 첫 번째 품목입니다. Echobell 템플릿은 인덱스 접근을 지원하지만 반복문은 없습니다. 세 품목짜리 주문도 첫 번째만 보이고 끝입니다. 그게 중요하다면 개수를 옆에 붙이세요.

```
{{line_items[0].title}} · 총 {{line_items.length}}개 품목
```

Stripe와 달리 Shopify는 `total_price`를 소수 문자열로 보냅니다. `4900`이 아니라 `"49.00"`이라서 계산 없이도 제대로 읽힙니다.

## 4단계 — 조건으로 토픽별 분기하기

여러 토픽을 한 채널로 보냈다면, Shopify가 헤더로 어느 것인지 알려 줍니다.

```
header["x-shopify-topic"] == "orders/paid"
```

관리자에서 채널마다 웹훅을 만들지 않고도 동작을 나누는 가장 깔끔한 방법입니다.

## 큰 주문만 깨워 주세요

가게 주인 대부분이 실제로 원하는 형태는 이렇습니다. 모든 주문은 조용한 채널로 가고, 기준을 넘는 것만 시끄러운 채널로 갑니다.

두 번째 채널을 만들고 시간 민감으로 설정한 뒤, `orders/paid` 웹훅을 하나 더 그쪽으로 보내고 조건을 주세요.

```
total_price > 500
```

이제 평범한 날은 배경의 웅웅거림이 되고, 90만 원짜리 주문은 몸으로 느껴지는 무언가가 됩니다.

## 이게 해 주지 않는 것

**HMAC 검증 없음.** Shopify는 모든 웹훅을 `X-Shopify-Hmac-Sha256` 헤더로 서명합니다. Echobell은 이를 검증하지 않으므로 낯선 이를 막아 주는 건 채널 URL뿐입니다. 비밀로 두고, **POST만 허용**을 켠 채로 유지하세요. 위조된 주문 알림이 실제 피해를 낳는다면, 앞단에 직접 만든 엔드포인트를 두어 HMAC을 검증하고 거기서 Echobell을 호출하게 하세요.

**Shopify는 같은 웹훅을 두 번 보낼 수 있습니다.** 실패 시 재시도하며 재시도는 중복 제거되지 않습니다. 알림은 "주문을 확인해 보라"는 신호로 받아들이고 주문 개수로 세지 마세요. 진실의 근거는 Shopify 관리자입니다.

**재고 토픽은 금세 시끄러워집니다.** `inventory_levels/update`는 당신이 직접 수정한 것을 포함해 모든 재고 변동에서 발동합니다. 재고 부족 알림을 원한다면 조건으로 세게 거르세요. 아니면 점심 전에 후회합니다.

## 자주 묻는 질문

### 이걸 하려면 Shopify 앱이 필요한가요?

아닙니다. **설정 → 알림** 아래의 웹훅은 관리자에 기본 내장되어 있고, 앱도 파트너 계정도 코드도 필요 없습니다.

### 창고 담당자가 Shopify 관리자 없이 주문만 볼 수 있나요?

가능합니다. 채널을 공유하세요. 그들은 알림만 받고 그 외에는 아무것도 못 봅니다. 관리자 접근도 없고, 템플릿에 담은 것 이상의 고객 정보도 없습니다.

### 알림에 고객 이름을 넣어야 하나요?

당신의 판단이고, 의식적으로 정할 값어치가 있습니다. 템플릿에 넣은 건 잠금 화면에 뜹니다. 대응 여부를 정하는 데는 보통 주문 번호와 금액이면 충분합니다.

### 지불 거절이 오면 전화를 받을 수 있나요?

Shopify Payments를 쓰는 상점이라면 분쟁은 `disputes/create` 토픽으로 옵니다. 그걸 전화 채널로 보내세요. 주문 관련 이벤트 중 유일하게 기한이 붙은 것입니다.

## 마무리

웹훅 하나, 템플릿 하나, 크게 울리는 버전을 원하면 조건 하나. 5분쯤 걸리고, 주문 페이지를 계속 새로고침하던 습관을 대체합니다.

[iPhone용 Echobell 다운로드](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=blog-shopify-order-notifications-ko&mt=8) 또는 [Google Play에서 받기](https://play.google.com/store/apps/details?id=one.echobell.echobellandroid) 후, 테스트 주문을 하나 넣고 확인 메일보다 먼저 도착하는 걸 지켜보세요.

---

## 관련 문서

- [Stripe 결제 알림](/ko/blog/stripe-payment-alerts)
- [Webhook 트리거 문서](/ko/docs/webhook)
- [템플릿 시스템 참조](/ko/docs/template)
- [채널 조건 참조](/ko/docs/conditions)
- [개발자를 위한 알림 피로 해결 가이드](/ko/blog/fix-alert-fatigue-developer-guide)
