Liquid를 이용한 고급 개인화
메시지 발송에 사용할 수 있는 Liquid 필터와 태그의 목록입니다.
핵클 CRM 캠페인에서 사용할 수 있는 Liquid 필터와 태그의 목록입니다. 목록에 없는 태그나 필터는 동작하지 않을 수 있으며, 이 경우 대부분 빈 문자열로 변환됩니다.
사용할 수 있는 변수
대시보드의 개인화 변수 모달을 통해 사용자별로 달라지는 값을 참조할 수 있어요.
{{ user_properties.<속성> }}
사용자 속성
{{ event_properties.<속성> }}
이벤트 속성
{{ api_properties.<속성> }}
API 속성
{{ identifiers.<종류> }}
식별자 (Webhook 채널에서만 사용 가능)
예: {{ user_properties['name'] }}님 안녕하세요
자주 쓰는 패턴
이름이 없으면 기본값 사용
변수에 값이 없을 때 대체 문구를 씁니다.
{{ user_properties.name | default: '고객' }}님→ 고객님 (name이 없을 때)
숫자에 천 단위 구분 기호
포인트·금액 등을 읽기 좋게 표시합니다.
변수: point = 15000
→ 15,000P
한국 시간·한국어로 날짜 표시
Asia/Seoul 기준으로 변환하고 요일을 한국어로 출력합니다.
변수: ordered_at = "2026-07-15 23:00:00 UTC"
→ 07월 16일 목요일
너무 길면 대체 문구로 바꾸기
지정한 길이를 넘는 값은 통째로 대체합니다.
변수: name = "김수한무거북이와두루미" (8자)
→ 고객님
빠른 참조
필터
append
문자열 뒤에 다른 문자열을 붙입니다.
prepend
문자열 앞에 다른 문자열을 붙입니다.
capitalize
첫 글자만 대문자로 바꾸고 나머지는 그대로 둡니다.
downcase
모든 문자를 소문자로 바꿉니다.
upcase
모든 문자를 대문자로 바꿉니다.
lstrip
문자열 왼쪽(앞)의 공백을 제거합니다.
rstrip
문자열 오른쪽(뒤)의 공백을 제거합니다.
strip
문자열 양쪽 끝의 공백을 제거합니다.
strip_html
문자열에서 HTML 태그를 제거합니다.
strip_newlines
문자열에서 줄바꿈 문자를 제거합니다.
newline_to_br
줄바꿈 문자를 <br /> 태그로 바꿉니다.
remove
문자열에서 특정 부분 문자열을 모두 제거합니다.
remove_first
문자열에서 특정 부분 문자열을 처음 한 번만 제거합니다.
replace
문자열에서 특정 부분 문자열을 모두 다른 문자열로 바꿉니다.
replace_first
문자열에서 특정 부분 문자열을 처음 한 번만 다른 문자열로 바꿉니다.
split
문자열을 구분자 기준으로 나눠 배열로 만듭니다.
slice
문자열의 일부를 시작 위치와 길이로 잘라냅니다.
truncate
문자열을 지정한 길이로 줄이고 말줄임표를 붙입니다.
truncatewords
문자열을 지정한 단어 수로 줄이고 말줄임표를 붙입니다.
escape
문자열의 HTML 특수문자를 이스케이프합니다.
escape_once
문자열의 HTML 특수문자를 이스케이프하되, 이미 이스케이프된 부분은 다시 이스케이프하지 않습니다.
abs
숫자의 절댓값을 반환합니다.
at_least
숫자가 지정한 최솟값보다 작으면 최솟값을 반환합니다.
at_most
숫자가 지정한 최댓값보다 크면 최댓값을 반환합니다.
ceil
숫자를 올림하여 정수로 반환합니다.
floor
숫자를 내림하여 정수로 반환합니다.
round
숫자를 반올림합니다.
plus
숫자를 더합니다.
minus
숫자를 뺍니다.
times
숫자를 곱합니다.
divided_by
숫자를 나눕니다.
modulo
숫자를 나눈 나머지를 반환합니다.
number_with_delimiter
숫자에 천 단위 구분 기호(쉼표)를 붙입니다.
compact
배열에서 nil 값을 제거합니다.
concat
두 배열을 이어붙입니다.
first
배열의 첫 번째 요소를 반환합니다.
last
배열의 마지막 요소를 반환합니다.
join
배열의 요소를 구분자로 이어붙여 문자열로 만듭니다.
map
배열의 각 요소에서 지정한 속성 값만 뽑아 새 배열을 만듭니다.
reverse
배열의 순서를 뒤집습니다.
sort
배열을 정렬합니다(대소문자 구분, 대문자 우선).
sort_natural
배열을 대소문자 구분 없이 정렬합니다.
uniq
배열에서 중복된 값을 제거합니다.
where
배열에서 지정한 속성 값을 가진 요소만 남깁니다.
size
배열의 요소 개수 또는 문자열의 길이를 반환합니다.
date
날짜/시간 값을 지정한 형식의 문자열로 바꿉니다.
url_encode
문자열을 URL 인코딩합니다.
url_decode
URL 인코딩된 문자열을 원래대로 디코딩합니다.
url_escape
문자열에서 URL에 사용할 수 없는 문자만 이스케이프합니다.
url_param_escape
문자열을 URL 쿼리 파라미터 값으로 이스케이프합니다.
json_escape
문자열을 JSON 문자열 값으로 안전하게 이스케이프합니다.
json_parse
JSON 문자열을 파싱하여 템플릿에서 접근 가능한 객체로 만듭니다.
as_json_string
값을 JSON 문자열로 직렬화합니다.
default
값이 비어 있거나 falsy일 때 대체 값을 반환합니다.
fallback_over_length
문자열이 지정한 길이를 초과하면 대체 문구를 반환합니다.
태그
assign
변수에 값을 대입합니다.
capture
블록 안의 렌더 결과를 변수에 저장합니다.
if
조건이 참일 때만 블록을 렌더합니다.
unless
조건이 거짓일 때만 블록을 렌더합니다.
case / when
값에 따라 여러 분기 중 하나를 렌더합니다.
for
배열이나 범위를 순회하며 블록을 반복 렌더합니다.
break
for 반복문을 즉시 종료합니다.
continue
for 반복문에서 현재 반복을 건너뛰고 다음으로 넘어갑니다.
cycle
여러 값을 순서대로 돌아가며 출력합니다.
comment
블록 안의 내용을 출력하지 않습니다.
raw
블록 안의 내용을 Liquid 문법으로 해석하지 않고 그대로 출력합니다.
increment
0부터 시작하는 전용 카운터를 증가시키며 출력합니다.
decrement
-1부터 시작하는 전용 카운터를 감소시키며 출력합니다.
connected_content
외부 API를 호출해 응답(JSON)을 템플릿 변수로 저장합니다.
random
난수를 생성해 출력합니다.
문자열 필터
append
문자열 뒤에 다른 문자열을 붙입니다.
→ 봄바람이 분다
prepend
문자열 앞에 다른 문자열을 붙입니다.
→ 흩날리는 꽃잎
capitalize
첫 글자만 대문자로 바꾸고 나머지는 그대로 둡니다.
→ Spring bloom
downcase
모든 문자를 소문자로 바꿉니다.
→ blossom
upcase
모든 문자를 대문자로 바꿉니다.
→ PETAL
lstrip
문자열 왼쪽(앞)의 공백을 제거합니다.
→ [새싹 ]
rstrip
문자열 오른쪽(뒤)의 공백을 제거합니다.
→ [ 새싹]
strip
문자열 양쪽 끝의 공백을 제거합니다.
→ [새싹]
strip_html
문자열에서 HTML 태그를 제거합니다.
→ 중요 안내
strip_newlines
문자열에서 줄바꿈 문자를 제거합니다.
→ 여름이왔다
newline_to_br
줄바꿈 문자를 <br /> 태그로 바꿉니다.
→ 매미가 울면<br /> 여름이 온다
remove
문자열에서 특정 부분 문자열을 모두 제거합니다.
→ 밤 밤
remove_first
문자열에서 특정 부분 문자열을 처음 한 번만 제거합니다.
→ 밤 여름밤
replace
문자열에서 특정 부분 문자열을 모두 다른 문자열로 바꿉니다.
→ 여름 하늘, 여름 하늘
replace_first
문자열에서 특정 부분 문자열을 처음 한 번만 다른 문자열로 바꿉니다.
→ 볕-비-비
split
문자열을 구분자 기준으로 나눠 배열로 만듭니다. 결과가 배열이므로 예시는 join과 함께 사용했습니다.
→ 바다 / 수박 / 소나기
slice
문자열의 일부를 시작 위치와 길이로 잘라냅니다.
시그니처: slice: 시작위치[, 길이]
→ 여름
→ 바다
truncate
문자열을 지정한 길이로 줄이고 말줄임표를 붙입니다.
시그니처: truncate: 길이[, 말줄임문자열]
→ 가을 하늘이...
비고: 말줄임 문자열이 길이에 포함됩니다 — 기본 말줄임(...) 기준으로 실제 보이는 본문은 길이 - 3자이며, 말줄임 문자열을 지정하면 그 길이만큼 차감됩니다.
truncatewords
문자열을 지정한 단어 수로 줄이고 말줄임표를 붙입니다.
시그니처: truncatewords: 단어수[, 말줄임문자열]
→ 단풍 물들고 낙엽...
escape
문자열의 HTML 특수문자를 이스케이프합니다.
→ <a href="x">링크</a>
escape_once
문자열의 HTML 특수문자를 이스케이프하되, 이미 이스케이프된 부분은 다시 이스케이프하지 않습니다.
→ <p> & <p>
숫자 필터
abs
숫자의 절댓값을 반환합니다.
→ 5
at_least
숫자가 지정한 최솟값보다 작으면 최솟값을 반환합니다.
→ 5
at_most
숫자가 지정한 최댓값보다 크면 최댓값을 반환합니다.
→ 5
ceil
숫자를 올림하여 정수로 반환합니다.
→ 2
floor
숫자를 내림하여 정수로 반환합니다.
→ 1
round
숫자를 반올림합니다.
시그니처: round: [소수자릿수]
→ 3
→ 3.14
plus
숫자를 더합니다.
→ 125
minus
숫자를 뺍니다.
→ 75
times
숫자를 곱합니다.
→ 300
divided_by
숫자를 나눕니다.
→ 3
→ 3.3333333333333335
비고: 정수끼리는 정수 몫(소수점 버림)이며, 소수 결과가 필요하면 3.0처럼 소수로 나눕니다.
modulo
숫자를 나눈 나머지를 반환합니다.
→ 1
number_with_delimiter
숫자에 천 단위 구분 기호(쉼표)를 붙입니다.
→ 1,234,567.89
배열 필터
compact
배열에서 nil 값을 제거합니다.
→ 단풍,낙엽
concat
두 배열을 이어붙입니다.
→ 가,나,다
first
배열의 첫 번째 요소를 반환합니다.
→ 사과
last
배열의 마지막 요소를 반환합니다.
→ 밤
join
배열의 요소를 구분자로 이어붙여 문자열로 만듭니다.
→ 사과, 감, 밤
map
배열의 각 요소에서 지정한 속성 값만 뽑아 새 배열을 만듭니다.
→ 단풍, 은행
reverse
배열의 순서를 뒤집습니다.
→ 밤,감,사과
sort
배열을 정렬합니다(대소문자 구분, 대문자 우선).
→ Banana,Cherry,apple
비고: sort는 대소문자를 구분하며(대문자 우선), sort_natural은 대소문자를 무시합니다 — 위 출력이 이를 보여줍니다.
sort_natural
배열을 대소문자 구분 없이 정렬합니다.
→ apple,Banana,Cherry
uniq
배열에서 중복된 값을 제거합니다.
→ a,b
where
배열에서 지정한 속성 값을 가진 요소만 남깁니다.
시그니처: where: 속성명[, 값]
→ 동백
size
배열의 요소 개수 또는 문자열의 길이를 반환합니다.
→ 3
→ 7
날짜 필터
date
날짜/시간 값을 지정한 형식의 문자열로 바꿉니다.
시그니처: date: format[, timezone][, locale: "언어태그"]
→ 2026년 07월 16일 10시 30분
→ 2026-07-16 08:00
→ 목요일
→ 07월 16일 목요일
→ 2026-07-16 10:30
비고:
날짜 문자열에 붙은 ISO
Z접미사는 파싱되지 않습니다(2026-07-16T10:30:00Z✗) — 공백 구분 존(2026-07-16 10:30:00 UTC) 또는 존 없는 형식을 사용하세요.숫자 입력은 epoch 초 단위입니다.
timezone은 TZ 이름(
Asia/Seoul)·ISO 오프셋(+09:00)을 지원하며, 분 단위 숫자(360)는 지원하지 않습니다.잘못된 timezone/locale은 해당 파라미터만 무시됩니다.
timezone(위치 인자)과
locale:(이름 인자)은 함께 사용할 수 있으며 순서는 무관합니다.
URL 필터
url_encode
문자열을 URL 인코딩합니다.
→ user%40example.com
url_decode
URL 인코딩된 문자열을 원래대로 디코딩합니다.
→ 안녕 하세요
url_escape
문자열에서 URL에 사용할 수 없는 문자만 이스케이프합니다.
→ https://example.com/search?q=%EC%95%88%EB%85%95%20%ED%95%98%EC%84%B8%EC%9A%94
url_param_escape
문자열을 URL 쿼리 파라미터 값으로 이스케이프합니다.
→ %EA%B2%80%EC%83%89%EC%96%B4+A%26B
JSON 필터
json_escape
문자열을 JSON 문자열 값으로 안전하게 이스케이프합니다.
→ 그가 \"안녕\"이라 말했다
json_parse
JSON 문자열을 파싱하여 템플릿에서 접근 가능한 객체로 만듭니다.
→ 철수님의 포인트: 1500
비고: 파싱 실패 시 nil이 되며 렌더는 계속됩니다.
as_json_string
값을 JSON 문자열로 직렬화합니다.
→ {"name":"철수","point":1500}
기타 필터
default
값이 비어 있거나 falsy일 때 대체 값을 반환합니다.
시그니처: default: 기본값
→ 나그네님 안녕하세요
fallback_over_length
문자열이 지정한 길이를 초과하면 대체 문구를 반환합니다.
시그니처: fallback_over_length: 최대길이, 대체문구
→ 나그네
→ 첫눈
비고: 길이는 UTF-16 코드 유닛 기준입니다(size 필터와 동일).
태그
assign
변수에 값을 대입합니다.
→ 해클님 안녕하세요
capture
블록 안의 렌더 결과를 변수에 저장합니다.
→ 철수님 환영합니다
if
조건이 참일 때만 블록을 렌더합니다.
→ VIP 혜택
unless
조건이 거짓일 때만 블록을 렌더합니다.
→ 구독을 시작해보세요
case / when
값에 따라 여러 분기 중 하나를 렌더합니다.
→ 골드 혜택
for
배열이나 범위를 순회하며 블록을 반복 렌더합니다.
→ 귤 유자 곶감
break
for 반복문을 즉시 종료합니다.
→ 123
continue
for 반복문에서 현재 반복을 건너뛰고 다음으로 넘어갑니다.
→ 1245
cycle
여러 값을 순서대로 돌아가며 출력합니다.
→ ABAB
comment
블록 안의 내용을 출력하지 않습니다.
→ 앞뒤
raw
블록 안의 내용을 Liquid 문법으로 해석하지 않고 그대로 출력합니다.
→ {{ name }}은 치환되지 않습니다
increment
0부터 시작하는 전용 카운터를 증가시키며 출력합니다.
→ 0-1-2
비고: increment는 0부터, decrement는 -1부터 시작하며 assign 변수와 별개의 카운터를 사용합니다.
decrement
-1부터 시작하는 전용 카운터를 감소시키며 출력합니다.
→ -1--2
기타 태그
connected_content
외부 API를 호출해 응답(JSON)을 템플릿 변수로 저장합니다.
자세한 사용법·제약(타임아웃, 응답 크기 한도, 허용 프로토콜·주소 등)은 커넥티드 콘텐츠 작성하기를 참고하세요.
시그니처: {% connected_content <url> [:method <method>] [:body <body>] [:headers <json>] [:save <변수명>] %}
→ 철수님, 오늘의 추천 상품을 확인해보세요 (API가 {"name": "철수"}를 응답했다고 가정)
비고: 렌더 시 실제 HTTP 호출이 발생합니다. 위 출력은 가정한 응답 기준 예시입니다.
random
난수를 생성해 출력합니다. 자연수를 넣어서 0 이상 특정 값 미만의 무작위 정수를 얻을 수 있습니다.
→ 0.250538241955663 (실행마다 다름)
→ 7 (실행마다 다름)
주사위 굴리기 (1~6) — 뽑은 값을 변수에 담아 재사용하려면 capture로 담고 plus로 숫자로 바꿉니다. {% random 6 %}은 0-5를 주므로 plus: 1로 1-6이 됩니다.
→ 4 (실행마다 다름)
마지막 업데이트