# 세그멘테이션 언어

Pushwoosh는 Tag 값을 기반으로 세분화된 세그먼트를 구축하기 위한 강력한 세그멘테이션 엔진을 제공합니다. **세그멘테이션 언어**는 특정 기준에 맞는 사용자 그룹을 설명하고 단일 오디언스 세그먼트로 취급하기 위해 세분화 기준을 작성하고 결합하는 특정 방식입니다.

이 문서는 세그멘테이션 언어의 기본 개념과 구문을 설명하고, 다양한 사례에 대한 세분화 기준 구축의 포괄적인 예제를 제공합니다.

## 기본

사용자 기반의 각 장치에는 **Tag 값**을 통해 특정 속성이 연결되어 있습니다.

예를 들어, Jane이라는 사용자가 도쿄에 살고 나이가 28세라고 가정해 보겠습니다. 해당 사용자의 장치에는 다음과 같은 Tag가 설정됩니다:

*   Name: Jane
*   City: Tokyo
*   Age: 28

Jane을 타겟으로 하려면 다음과 같이 세그먼트를 설명해야 합니다:

`T("Name", eq, "Jane") * T("Age", eq, 28) * T("City", eq, "Tokyo")`

이 조건의 조합은 세그멘테이션 언어에서 사용자 그룹, 즉 오디언스 세그먼트를 설명하는 데 사용되는 **필터 표현식**입니다.

## 필터 표현식

필터 표현식은 필요한 세그먼트를 설명하는 조건 또는 조건의 조합을 포함하는 문자열입니다.

### 조건

각 조건은 해당 조건에 지정된 기준과 일치하는 장치 세그먼트를 설명합니다.

예를 들어, 다음 조건은 도쿄에 사는 사용자 세그먼트를 구축합니다:

`T("City", e, "Tokyo")`

여기서

*   T는 Tag(조건 유형)입니다.
*   eq는 적용할 연산자입니다.
*   "Tokyo"는 사용자의 장치와 연결된 Tag 값입니다.

#### 조건 유형

세분화를 위해 다음 조건 유형을 사용할 수 있습니다:

*   **A** (Application) – 특정 앱이 설치된 장치 세그먼트를 설명합니다. 별칭: **App**, **Application**;
*   **T** (Tag) – 지정된 Tag 값이 있는 장치 세그먼트를 설명합니다.
*   **AT** (App-scoped tag) – 특정 애플리케이션 내에서 태그 값을 찾습니다. 첫 번째 인수로 앱 코드가 필요합니다. 별칭: **Tag**;
*   **Event** – 특정 Pushwoosh 이벤트를 트리거한 장치 세그먼트를 설명합니다.
*   **Geo** – 특정 지리적 반경 내의 장치 세그먼트를 설명합니다.
*   **BTTS** – 최적 발송 시간을 기반으로 한 장치 세그먼트를 설명합니다.
*   **Updated** – 마지막 업데이트 타임스탬프를 기반으로 한 장치 세그먼트를 설명합니다.
*   **Segment** – 코드로 다른 필터/세그먼트를 참조합니다.

### 조건 연산

정교한 세그먼트를 구축하기 위해 필터 표현식 내의 조건에 다음 연산을 적용할 수 있습니다:

#### 합집합 (+)

세그먼트를 결합합니다. 즉, 지정된 조건 중 하나 이상을 만족하는 사용자들의 새로운 세그먼트를 구축합니다.

<img src="/filters-segmentation-language-1.webp" alt=""/>

예를 들어, 도쿄나 오사카에 사는 사용자를 타겟팅하려면 다음 조건으로 세그먼트를 설명해야 합니다:

`T("City", eq, "Tokyo") + T("City", eq, "Osaka")`

<Aside type="note">
논리적 **선언(OR)**에 해당합니다. **or** 연산자로도 작성할 수 있습니다.
</Aside>

#### 교집합 (\*)

조건에 의해 설명된 두 세그먼트에 모두 속하는 사용자 세그먼트를 구성합니다. 따라서 지정한 각 조건을 모두 준수하는 사용자만 포함됩니다.

<img src="/filters-segmentation-language-2.webp" alt=""/>

다음 표현식은 도쿄에 살면서 이름을 지정한 사용자 세그먼트를 설명합니다:

`T("City", eq, "Tokyo") * T("Name", any)`

<Aside type="note">
논리적 **연결(AND)**과 유사합니다. **and** 연산자로도 작성할 수 있습니다.
</Aside>

#### 차집합 (\\)

설명된 세그먼트 중 하나에 속하고 다른 하나에는 속하지 않는 사용자 세그먼트를 구축합니다.

<img src="/filters-segmentation-language-3.webp" alt=""/>

도쿄에 살지만 이름을 알려주지 않은 사용자는 다음과 같이 설명됩니다:

`T("City", eq, "Tokyo") \ T("Name", any)`

<Aside type="note">
논리적 **부정(NOT)**에 해당합니다. **not** 연산자로도 작성할 수 있습니다.
</Aside>

#### 괄호

필터 표현식에서 조건으로 수행할 연산의 순서를 결정합니다.

예를 들어, 다음 필터 표현식은 먼저 12345-67890 구독자 중 나이가 18세인 세그먼트를 얻은 다음, 해당 세그먼트의 모든 남성을 뺍니다:

`( A("12345-67890") * T("Age", eq, 18) ) \ T("Gender", eq, "Male")`

## Tag 조건 연산자

각 Tag 유형에 대해 고유한 연산자가 적용됩니다.

### 정수 Tag 연산자

*   **eq** - 지정된 값과 같음
*   **noteq** - 지정된 값과 다름
*   **lte** - 지정된 값보다 작거나 같음
*   **gte** - 지정된 값보다 크거나 같음
*   **in** - 지정된 값 중 하나
*   **notin** - 지정된 값 중 어느 것과도 다름
*   **between** - 지정된 범위 내
*   **any** - 태그에 대해 어떤 값이든 설정된 장치
*   **notset** - 태그에 대해 값이 설정되지 않은 장치

<Aside type="note" title="정수 Tag 구문 예제">
`T("int", eq, 42)`
</Aside>

### 문자열 Tag 연산자

*   **eq** - 지정된 값과 같음
*   **noteq** - 지정된 값과 다름
*   **startswith** - 지정된 접두사로 시작
*   **endswith** - 지정된 접미사로 끝남
*   **contains** - 지정된 하위 문자열을 포함
*   **in** - 지정된 값 중 하나와 같음
*   **notin** - 지정된 값 중 어느 것과도 다름
*   **any** - 태그에 대해 어떤 값이든 설정된 장치
*   **notset** - 태그에 대해 값이 설정되지 않은 장치

<Aside type="note" title="문자열 Tag 구문 예제">
* `T("str", eq, "kangaroo")` - 정확히 일치
* `T("str", startswith, "kang")` - "kang"으로 시작
* `T("str", endswith, "roo")` - "roo"로 끝남
* `T("str", contains, "nga")` - 문자열 어디에서나 "nga"를 포함
</Aside>

### 리스트 Tag 연산자

*   **in** - 지정된 태그 값 중 하나를 가진 장치
*   **notin** - 장치와 연결된 지정된 태그 값이 없음
*   **any** - 태그에 대해 어떤 값이든 설정된 장치
*   **notset** - 태그에 대해 값이 설정되지 않은 장치

<Aside type="note" title="리스트 Tag 구문 예제">
`T("list", notin, ["kangaroo", "raccoon"])`
</Aside>

### 날짜 Tag 연산자

*   **eq** - 지정된 날짜와 같음
*   **noteq** - 지정된 날짜와 다름
*   **lte** - 지정된 날짜 이전 또는 같음
*   **gte** - 지정된 날짜 이후 또는 같음
*   **in** - 지정된 날짜 중 하나와 같음
*   **notin** - 지정된 날짜 중 어느 것과도 다름
*   **between** - 지정된 범위 내
*   **any** - 태그에 대해 어떤 값이든 설정된 장치
*   **notset** - 태그에 대해 값이 설정되지 않은 장치
*   **match** - 지정된 연도의 월과 월의 일과 일치합니다.

<Aside type="note" title="match 연산자 예제">


* `AT("XXXXX-XXXXX", "Date tag", match month 4 day 1)` - "Date tag"가 연도에 관계없이 4월 1일로 설정된 장치.
* `AT("XXXXX-XXXXX", "Date tag", match month "now" day 13)` - "Date tag"가 현재 월의 13일로 설정된 장치.
* `AT("XXXXX-XXXXX", "Date tag", match month "now" day "now+2")` - "Date tag"가 모레로 설정된 장치. 일반적인 사용 사례: 생일 축하 메시지.
</Aside>

<Aside type="note" title="기념일 및 생일 세그먼트를 위한 Match 연산자 예제">
생일이나 기념일과 같은 반복되는 달력 날짜를 기반으로 [사용자를 세분화](/ko/product/audience-data-and-segmentation/segmentation/create-segments/anniversary-segments)할 수 있습니다. 이 경우 연도는 무시되고 월과 일만 고려됩니다.

* `AT("XXXXX-XXXXX", "birthday", match month "now" day "now")`
   **오늘이 생일인 사용자를 타겟으로 합니다** (오늘과 같은 월, 같은 일).
   *사용자의 실제 생일에 생일 축하 메시지나 특별 혜택을 보낼 때 사용하세요.*

* `AT("XXXXX-XXXXX", "birthday", match month "now" day "now+N")`
   **N일 후에 생일인 사용자를 타겟으로 합니다** (같은 월, 같은 일, 오늘로부터 N일 후).
   *사용자를 미리 준비시키기 위해 사용하세요. 예를 들어, 카운트다운 메시지나 다가오는 이벤트 알림을 보낼 수 있습니다.*

* `AT("XXXXX-XXXXX", "birthday", match month "now" day "now-N")`
   **N일 전에 생일이었던 사용자를 타겟으로 합니다**.
   *늦은 생일 축하 메시지나 피드백 요청과 같은 후속 조치에 사용하세요.*
* `AT("XXXXX-XXXXX", "birthday", match month "now" day N)`
   **연도에 관계없이 현재 월의 N번째 날이 생일인 사용자를 타겟으로 합니다**.
   *특정 날짜와 연관된 고정된 월간 캠페인을 계획할 때 사용하세요 (예: 매월 10일에 월간 로열티 보상).*
</Aside>

*   **daysago eq** - 현재 날짜로부터 지정된 일수 전과 같음
*   **daysago noteq** - 현재 날짜로부터 지정된 일수 전과 다름
*   **daysago lte** - 현재 날짜로부터 지정된 일수 전보다 작거나 같음
*   **daysago gte** - 현재 날짜로부터 지정된 일수 전보다 크거나 같음
*   **daysago between** - 지정된 일수 사이

<Aside type="note" title="daysago 연산자 예제">

* `T("Date tag", daysago, eq, 0)` - 현재 날짜 00:00부터 현재 시각까지
* `T("Date tag", daysago, eq, 1)` - 전날 00:00부터 현재 날짜 00:00까지
* `T("Date tag", daysago, gte, 1)` - 현재 날짜 00:00까지의 모든 시간
* `T("Date tag", daysago, lte, 7)` - 6일 전 00:00부터 현재 시각까지
* `T("Date tag", daysago, between, [2,7])` - 7일 전부터 2일 전까지.
</Aside>

*   **minutesago lte** - 현재 시각으로부터 지정된 분 수 이전 또는 같음
*   **minutesago gte** - 현재 시각으로부터 지정된 분 수 이후 또는 같음

<Aside type="note" title="minutesago 연산자 예제">

* `T("Date tag", minutesago, lte, 30)` - 지난 30분;
* `T("Date tag", minutesago, gte, 60)` - 60분 이상 전;
* `T("Date tag", minutesago, lte, 1)` - 지난 1분 이내.
</Aside>

*   **daysahead** - 현재 날짜(UTC)로부터 N일에서 M일 사이(양 끝 포함)

<Aside type="note" title="daysahead 연산자 예제">

`daysahead`는 `[from, to]` 간격(오늘 UTC 자정으로부터의 일수, 양 끝 포함)을 사용합니다. `daysago`와 달리 하위 연산자가 없으며 간격 형식만 있습니다.

* `T("Date tag", daysahead, [0, 0])` - 현재 날짜 00:00부터 23:59:59까지
* `T("Date tag", daysahead, [1, 1])` - 다음 날 00:00부터 23:59:59까지
* `T("Date tag", daysahead, [2, 5])` - 지금으로부터 2일 후 시작부터 5일 후 끝까지의 모든 순간
</Aside>

<Aside type="note" title="날짜 연산자 예제">
* `T("Date tag", eq "2022-12-05 00:00:00")`
</Aside>

### 불리언 Tag 연산자

*   **eq** - 지정된 값과 같음
*   **noteq** - 지정된 값과 다름
*   **any** - 태그에 대해 어떤 값이든 설정된 장치
*   **notset** - 태그에 대해 값이 설정되지 않은 장치

<Aside type="note" title="불리언 Tag 구문 예제">
 `T("bool", eq, true)`
</Aside>

### 가격 Tag 연산자

*   **eq** - 지정된 값과 같음
*   **noteq** - 지정된 값과 다름
*   **lte** - 지정된 값보다 작거나 같음
*   **gte** - 지정된 값보다 크거나 같음
*   **in** - 지정된 값 중 하나와 같음
*   **notin** - 지정된 값 중 어느 것과도 다름
*   **between** - 지정된 범위 내
*   **any** - 태그에 대해 어떤 값이든 설정된 장치
*   **notset** - 태그에 대해 값이 설정되지 않은 장치

<Aside type="note" title="가격 Tag 구문 예제">
`T("price", between, ["4.2", "6.9"])`
</Aside>

### 버전 Tag 연산자

*   **eq** - 지정된 값과 같음
*   **noteq** - 지정된 값과 다름
*   **lte** - 지정된 값보다 작거나 같음
*   **gte** - 지정된 값보다 크거나 같음
*   **in** - 지정된 값 중 하나와 같음
*   **notin** - 지정된 값 중 어느 것과도 다름
*   **between** - 지정된 범위 내
*   **any** - 태그에 대해 어떤 값이든 설정된 장치
*   **notset** - 태그에 대해 값이 설정되지 않은 장치

<Aside type="note" title="버전 Tag 구문 예제">
`T("version", lte, "4.2")`
</Aside>

## Event 조건 연산자

<Aside type="note">
이벤트 조건은 앱에 따라 다르므로 필터 표현식에 이벤트 이름과 함께 앱 코드를 지정해야 합니다.
</Aside>

### Event 횟수

*   **count gte** - 이벤트를 n번 이상 또는 정확히 n번 트리거한 장치
*   **count lte** - 이벤트를 n번 미만 또는 정확히 n번 트리거한 장치
*   **count eq** - 이벤트를 정확히 n번 트리거한 장치
*   **count noteq** - 이벤트를 n번이 아닌 횟수로 트리거한 장치

<Aside type="note" title="Event 횟수 구문 예제">
 `Event("11111-11111", "Level reached", count gte 10) // 11111-11111은 앱 코드입니다`
</Aside>

### Event 날짜

*   **date gte** - 지정된 날짜 이후 또는 정확히 해당 날짜에 이벤트를 트리거한 장치
*   **date lte** - 지정된 날짜 이전 또는 정확히 해당 날짜에 이벤트를 트리거한 장치
*   **date eq** - 지정된 날짜에 정확히 이벤트를 트리거한 장치
*   **date noteq** - 지정된 날짜가 아닌 다른 날에 이벤트를 트리거한 장치
*   **date in** - 지정된 날짜 중 하나에 이벤트를 트리거한 장치
*   **date notin** - 지정된 날짜가 아닌 다른 날에 이벤트를 트리거한 장치
*   **date between** - 지정된 기간 내에 이벤트를 트리거한 장치
*   **date daysago eq** - 이벤트 트리거 날짜가 현재 날짜로부터 지정된 일수 전과 같음
*   **date daysago noteq** - 이벤트 트리거 날짜가 현재 날짜로부터 지정된 일수 전과 다름
*   **date daysago lte** - 이벤트 트리거 날짜가 현재 날짜로부터 지정된 일수 전보다 작거나 같음
*   **date daysago gte** - 이벤트 트리거 날짜가 현재 날짜로부터 지정된 일수 전보다 크거나 같음
*   **date daysago between** - 이벤트 트리거 날짜가 지정된 일수 사이임
*   **date daysahead** - 이벤트 트리거 날짜가 현재 날짜로부터 지정된 일수 내에 있음 (간격은 양 끝을 포함하며, 전체 의미는 위의 날짜 태그 연산자를 참조하세요)
*   **date minutesago lte** - 이벤트 트리거 날짜가 현재 시각으로부터 지정된 분 수 이전 또는 같음
*   **date minutesago gte** - 이벤트 트리거 날짜가 현재 시각으로부터 지정된 분 수 이후 또는 같음

<Aside type="note" title="Event 날짜 구문 예제">

- `Event("11111-11111", "Level reached", date gte "2022-01-01 01:02:03")`
- `Event("11111-11111", "Level reached", date in ["2022-01-01 01:02:03", "2022-01-01 02:03:04"])`
- `Event("11111-11111", "Level reached", date between "2022-01-01 01:02:03" "2022-01-01 02:03:04")`
- `Event("11111-11111", "Level reached", date daysahead 0 7)` - 다음 7일 이내에 트리거 날짜가 있는 이벤트
- `Event("11111-11111", "Level reached", date minutesago lte 30)` - 지난 30분 이내의 이벤트
- `Event("11111-11111", "Level reached", date minutesago gte 60)` - 60분 이상 전의 이벤트

</Aside>

### Event 플랫폼

이벤트가 트리거된 플랫폼으로 이벤트를 필터링합니다.

*   **platforms** - 플랫폼 목록 (예: ["ios", "android"])

<Aside type="note" title="Event 플랫폼 구문 예제">
`Event("11111-11111", "Level reached", platforms ["android", "ios"], count gte 5)`
</Aside>

### Event 속성

이벤트 조건은 이벤트 속성 값을 기반으로 필터링할 수 있습니다. 속성은 해당 연산자와 함께 다양한 데이터 유형을 지원합니다.

#### 정수 Event 속성

*   **attribute "name" eq** - 속성이 지정된 값과 같음
*   **attribute "name" noteq** - 속성이 지정된 값과 다름
*   **attribute "name" gte** - 속성이 지정된 값보다 크거나 같음
*   **attribute "name" lte** - 속성이 지정된 값보다 작거나 같음
*   **attribute "name" between** - 속성이 지정된 범위 내에 있음
*   **attribute "name" in** - 속성이 지정된 값 중 하나와 같음
*   **attribute "name" notin** - 속성이 지정된 값 중 어느 것과도 다름
*   **attribute "name" any** - 속성에 대해 어떤 값이든 설정됨
*   **attribute "name" notset** - 속성에 대해 값이 설정되지 않음

<Aside type="note" title="정수 속성 구문 예제">

* `Event("11111-11111", "Purchase", attribute "amount" eq 42)`
* `Event("11111-11111", "Purchase", attribute "amount" between 10 100)`
* `Event("11111-11111", "Purchase", attribute "amount" in [10, 20, 30])`

</Aside>

#### 문자열 Event 속성

*   **attribute "name" eq** - 속성이 지정된 값과 같음
*   **attribute "name" noteq** - 속성이 지정된 값과 다름
*   **attribute "name" startswith** - 속성이 지정된 접두사로 시작
*   **attribute "name" endswith** - 속성이 지정된 접미사로 끝남
*   **attribute "name" contains** - 속성이 지정된 하위 문자열을 포함
*   **attribute "name" in** - 속성이 지정된 값 중 하나와 같음
*   **attribute "name" notin** - 속성이 지정된 값 중 어느 것과도 다름
*   **attribute "name" any** - 속성에 대해 어떤 값이든 설정됨
*   **attribute "name" notset** - 속성에 대해 값이 설정되지 않음

<Aside type="note" title="문자열 속성 구문 예제">

* `Event("11111-11111", "Page View", attribute "url" startswith "https://example.com")`
* `Event("11111-11111", "Page View", attribute "url" endswith ".html")`
* `Event("11111-11111", "Page View", attribute "url" contains "/products/")`
* `Event("11111-11111", "Button Click", attribute "button_name" in ["submit", "cancel"])`

</Aside>

#### 불리언 Event 속성

*   **attribute "name" eq** - 속성이 true 또는 false와 같음
*   **attribute "name" noteq** - 속성이 true 또는 false와 다름

<Aside type="note" title="불리언 속성 구문 예제">
`Event("11111-11111", "Feature Toggle", attribute "enabled" eq true)`
</Aside>

#### 날짜 Event 속성

*   **attribute "name" eq** - 속성이 지정된 날짜와 같음
*   **attribute "name" noteq** - 속성이 지정된 날짜와 다름
*   **attribute "name" gte** - 속성이 지정된 날짜 이후 또는 같음
*   **attribute "name" lte** - 속성이 지정된 날짜 이전 또는 같음
*   **attribute "name" between** - 속성이 지정된 날짜 범위 내에 있음
*   **attribute "name" in** - 속성이 지정된 날짜 중 하나와 같음
*   **attribute "name" notin** - 속성이 지정된 날짜 중 어느 것과도 다름
*   **attribute "name" daysago eq/noteq/gte/lte/between** - 며칠 전과 관련된 속성
*   **attribute "name" daysahead from to** - 현재 날짜로부터 지정된 일수 간격 내의 속성 (간격은 양 끝을 포함하며, 전체 의미는 위의 날짜 태그 연산자를 참조하세요)
*   **attribute "name" minutesago gte/lte** - 몇 분 전과 관련된 속성
*   **attribute "name" any** - 속성에 대해 어떤 값이든 설정됨
*   **attribute "name" notset** - 속성에 대해 값이 설정되지 않음

<Aside type="note" title="날짜 속성 구문 예제">

* `Event("11111-11111", "Subscription", attribute "start_date" eq "2022-01-01 01:02:03")`
* `Event("11111-11111", "Subscription", attribute "start_date" between "2022-01-01 00:00:00" "2022-12-31 23:59:59")`
* `Event("11111-11111", "Subscription", attribute "start_date" daysago lte 30)` - 지난 30일 이내
* `Event("11111-11111", "Subscription", attribute "renewal_at" daysahead 0 30)` - 다음 30일 내 갱신
* `Event("11111-11111", "Subscription", attribute "start_date" minutesago gte 60)` - 60분 이상 전

</Aside>

#### 가격 Event 속성

*   **attribute "name" eq** - 속성이 지정된 가격 값과 같음
*   **attribute "name" noteq** - 속성이 지정된 가격 값과 다름
*   **attribute "name" gte** - 속성이 지정된 가격보다 크거나 같음
*   **attribute "name" lte** - 속성이 지정된 가격보다 작거나 같음
*   **attribute "name" between** - 속성이 지정된 가격 범위 내에 있음
*   **attribute "name" in** - 속성이 지정된 가격 중 하나와 같음
*   **attribute "name" notin** - 속성이 지정된 가격 중 어느 것과도 다름
*   **attribute "name" any** - 속성에 대해 어떤 값이든 설정됨
*   **attribute "name" notset** - 속성에 대해 값이 설정되지 않음

<Aside type="note" title="가격 속성 구문 예제">
`Event("11111-11111", "Purchase", attribute "total_price" between 10.00 50.00)`
</Aside>

#### 리스트 Event 속성

*   **attribute "name" in** - 속성이 지정된 값 중 하나를 포함
*   **attribute "name" notin** - 속성이 지정된 값 중 어느 것도 포함하지 않음
*   **attribute "name" any** - 속성에 대해 어떤 값이든 설정됨
*   **attribute "name" notset** - 속성에 대해 값이 설정되지 않음

<Aside type="note" title="리스트 속성 구문 예제">
`Event("11111-11111", "Cart Update", attribute "product_ids" in ["prod-123", "prod-456"])`
</Aside>

## 추가 조건 유형

### Geo 조건

지정된 반경 내의 지리적 위치를 기반으로 장치를 타겟팅합니다.

**구문:** `Geo("<app-code>", <latitude>, <longitude>, <range-in-km>)`

<Aside type="note" title="Geo 구문 예제">
`Geo("11111-11111", 53.2734, -7.77832031, 100.05)` - 좌표로부터 100.05km 이내의 장치
</Aside>

### BTTS 조건

최적의 알림 발송 시간(하루 중 시간, 0-23)으로 장치를 타겟팅합니다.

**연산자:**
*   **any** - 설정된 최적 발송 시간 값이 있음
*   **eq** - 정확한 시간 일치
*   **noteq** - 시간과 다름
*   **gte** - 시간보다 크거나 같음
*   **lte** - 시간보다 작거나 같음

<Aside type="note" title="BTTS 구문 예제">

* `BTTS("11111-11111", eq 10)` - 최적 시간이 10:00인 장치
* `BTTS("11111-11111", gte 18)` - 최적 시간이 18:00 이후인 장치
* `BTTS("11111-11111", any)` - 최적 시간 값이 있는 장치

</Aside>

### Updated 조건

마지막 업데이트 타임스탬프로 장치를 필터링합니다.

**연산자:**
*   **gte** - 지정된 날짜 이후 또는 해당 날짜에 업데이트됨
*   **lte** - 지정된 날짜 이전 또는 해당 날짜에 업데이트됨
*   **between** - 날짜 범위 내에서 업데이트됨

<Aside type="note" title="Updated 구문 예제">

* `Updated("11111-11111", gte "2022-01-01 00:00:00")` - 2022년 1월 1일 이후에 업데이트된 장치
* `Updated("11111-11111", lte "2022-12-31 23:59:59")` - 2022년 12월 31일 이전에 업데이트된 장치
* `Updated("11111-11111", between "2022-01-01 00:00:00" "2022-12-31 23:59:59")` - 2022년에 업데이트된 장치

</Aside>

### Segment 조건

코드로 다른 필터/세그먼트를 참조합니다.

<Aside type="note" title="Segment 구문 예제">
`Segment("11111-11111", "22222-22222")` - 코드 "22222-22222"를 가진 필터 참조
</Aside>

## 애플리케이션 조건 장치 존재 플래그

애플리케이션 조건은 장치 및 토큰 필터링을 제어하기 위한 추가 플래그를 지원합니다:

*   **with_tokens** - 푸시 알림 토큰이 있는 장치
*   **without_tokens** - 푸시 알림 토큰이 없는 장치
*   **with_devices** - 등록된 장치가 있는 사용자
*   **without_devices** - 등록된 장치가 없는 사용자/프로필

<Aside type="note" title="애플리케이션 플래그 구문 예제">

* `A("11111-11111", ["ios", "android"], [with_tokens])` - 푸시 토큰이 있는 장치
* `A("11111-11111", ["ios", "android"], [without_tokens])` - 푸시 토큰이 없는 장치
* `A("11111-11111", [], [with_devices])` - 장치 기록이 있는 모든 장치
* `A("11111-11111", ["ios", "android"], [without_tokens, with_devices])` - 토큰은 없지만 장치 기록이 있는 장치

</Aside>

## 필터 표현식 예제

<Aside type="note">
JSON 쿼리를 작성할 때, 따옴표(`"`)와 백슬래시(`\`)를 백슬래시(`\`)로 이스케이프해야 합니다.
예제 요청은 [/exportSegment](/ko/developer/api-reference/segmentation-filters-api/#exportsegment)를 참조하세요.
</Aside>

### 기본 예제

1. 앱이 설치되어 있고 푸시 토큰이 있는 iOS 및 Android 장치:

```json
A("11111-11111", ["ios","android"], [with_tokens])
```

2. 앱이 설치되어 있지만 푸시 토큰이 없는 iOS 및 Android 장치:

```json
A("11111-11111", ["ios","android"], [without_tokens])
```

3. 푸시 토큰 유무에 관계없이 앱이 설치된 iOS 및 Android 장치:

```json
A("11111-11111", ["ios","android"], [with_tokens, without_tokens])
```

4. 앱에서 무언가를 구매한 모든 앱 구독자:

```json
AT("11111-11111", "In-App Purchase", gte, 1)
```

### 고급 예제

5. 지난 7일 동안 앱을 연 도쿄의 사용자:

```json
T("City", eq, "Tokyo") * Event("11111-11111", "App Open", date daysago lte 7)
```

6. 지난 30일 동안 50달러 이상 구매한 사용자:

```json
Event("11111-11111", "Purchase", attribute "total_price" gte 50.00, date daysago lte 30)
```

7. 이름이 "J"로 시작하거나 "e"로 끝나는 사용자:

```json
T("Name", startswith, "J") + T("Name", endswith, "e")
```

8. 최근에 구매하지 않은 뉴욕 100km 이내의 활성 iOS 사용자:

```json
A("11111-11111", ["ios"], [with_tokens]) * Geo("11111-11111", 40.7128, -74.0060, 100) \ Event("11111-11111", "Purchase", date daysago lte 30)
```

9. 최적 발송 시간이 오전 9시에서 오후 5시 사이인 사용자:

```json
BTTS("11111-11111", gte 9) * BTTS("11111-11111", lte 17)
```

10. 지난 1시간 동안 Android 또는 iOS에서 특정 이벤트를 트리거한 사용자:

```json
Event("11111-11111", "Button Click", platforms ["android", "ios"], date minutesago lte 60)
```

11. 지난 3개월 동안 업데이트되었고 앱 버전이 4.2 이상인 장치:

```json
Updated("11111-11111", gte "2024-07-01 00:00:00") * AT("11111-11111", "App Version", gte, "4.2")
```