> ## Documentation Index
> Fetch the complete documentation index at: https://www.integrate.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ETL: 중급 Part01: User 변수 사용

> Integrate.io ETL에서 사용자가 직접 정의하는 User 변수를 사용해 Google Analytics 같은 데이터 소스의 추출 날짜 범위를 동적으로 설정하는 활용 예시와 표현식 작성 방법을 자세히 소개합니다. 운영 시 참고할 수 있도록 단계별로 정리했습니다.

Xplenty에서는 변수를 다루는 것으로 세밀한 설정이 가능합니다. 이번에는 사용자가 정의할 수 있는 User변수에 대해 소개하고 싶습니다.
사용예\*\* 1: 소스에서 데이터 취득 시의 날짜 범위를 동적설정\*\*

예) Google Analytics의 경우

### **Step1: 변수 설정**

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/intermediate-part01-ko/image-1.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=f1f7c5cad34516bbbbf931ce1cd428a0" alt="intermediate-part01-ko image 1" width="1051" height="365" data-path="images/creating-packages/intermediate-part01-ko/image-1.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/bTXMdfaDSHaXQDvMwOP8](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/bTXMdfaDSHaXQDvMwOP8))

이번 설정하는 변수는 이하의 2개입니다.(한국 시간대 기준)

**변수 이름**
**구하는 값**
**수식(Expression)**

**today\_ggl\_anl**

오늘 날짜

ToString(SwitchTimeZone(CurrentTime(),'Asia/Seoul'),'yyyy-MM-dd')

**from\_ggl\_anl**

오늘로부터 3개월 전의 날짜

ToString(SubtractDuration(SwitchTimeZone(CurrentTime(),'Asia/Seoul'),'P3M'), 'yyyy-MM-dd')

***

참고로 다른 예도 보시기 바랍니다.

**구하는 값**
**수식(Expression)**

1년 전의 일자
ToString(SubtractDuration(SwitchTimeZone(CurrentTime(),'Asia/Seoul'),'P1Y'), 'yyyy-MM-dd')

3시간 전의 일시
ToString(SubtractDuration(SwitchTimeZone(CurrentTime(),'Asia/Seoul'),'PT3H'), 'yyyy-MM-dd HH:mm:ss')

***

\*\*힌트: 기간 지정 값에 대하여
\*\*SubtractDuration 및 AddDuration 함수의 기간 지정에 사용되는 기호에 대한 자세한 내용은 다음과 같습니다.

P: 기간 표현의 시작 부분에 배치됨

*

Y: 연수

*

M: 월수

*

W: 주수

*

D: 일수

T: 시간 단위의 선두에 배치된다.

*

H: 시간수

*

M: 분수

*

S: 초수

예) "**P3Y6M4DT12H30M5S**"는 "3년 6개월 4일 12시간 30분 5초"의 기간을 나타냅니다.

자세한 내용은 이 페이지를([영어](https://en.wikipedia.org/wiki/ISO_8601#Durations) / [한글](https://ko.wikipedia.org/wiki/ISO_8601)) 를 참조하십시오.

**편리한 예**

**구하는 값**
**수식(Expression)**

월초 날짜의 계산
ToString(ToDate(ISOToMonth(SwitchTimeZone(CurrentTime(),'Asia/Seoul'))),'yyyy-MM-dd')

월말 날짜의 계산
ToString(AddDuration(ToDate(ISOToMonth(SwitchTimeZone(CurrentTime(),'Asia/Seoul'))),'P1M-1D'),'yyyy-MM-dd')

전월말 날짜의 계산
ToString(SubtractDuration(ToDate(ISOToMonth(SwitchTimeZone(CurrentTime(),'Asia/Seoul'))),'P1D'),'yyyy-MM-dd')

### **Step2: 변수를 사용한 조건 설정**

다음은 변수를 날짜 범위로 설정합니다. 참고로 변수를 사용하는 경우 변수 이름 앞에 `$`를 붙이면 변수로 인식됩니다.

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/intermediate-part01-ko/image-2.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=57ae75c0bb0cf8798716b02b0be299e7" alt="intermediate-part01-ko image 2" width="1001" height="576" data-path="images/creating-packages/intermediate-part01-ko/image-2.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/8230E0NmROZkCOVHGaUz](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/8230E0NmROZkCOVHGaUz))

\*\*구현 시의 중요한 포인트
\*\***변수는 패키지 실행시에만 참조됩니다.** 이 원칙을 잊지 않도록주의하십시오.

이 때문에, 패키지 작성중에 올바르게 데이터를 취득할 수 있을지 어떨지를 데이터 소스의 프리뷰 기능으로 확인할 수 없습니다. 패키지 작성중에는 고정값을 입력한 다음에 올바르게 동작하는 것을 검증 후, 고정값을 변수에 옮기는 것이 좋습니다.
사**용예 2: RestAPI의 인증 정보(액세스 토큰) 취득에 사용**

예) Marketo의 경우

### **Step1: 변수 설정**

변수 화면에서 액세스 토큰을 검색하는 데 필요한 변수를 설정합니다.

*

**BaseURL** :  '[https://test.base.integrate.io/rest](https://test.base.integrate.io/rest)'

*

**ClientID** : 'Str\_Client\_ID'

*

**ClientSecret** : 'Str\_Client\_Secret'

또한 위의 변수를 사용하여 Curl Function에서 액세스 토큰을 검색하는 식을 설정합니다.

**accessToken** :`JsonStringToMap(Curl(CONCAT($BaseURL,'/identity/oauth/token?grant_type=client_credentials&client_id=',$ClientID,'&client_secret=',$ClientSecret),'GET','&#123;"accept":"application/json"&#125;')#'body')#'access_token'`

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/intermediate-part01-ko/image-3.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=56caa335fd073b51ac1660e29e0060eb" alt="intermediate-part01-ko image 3" width="1025" height="404" data-path="images/creating-packages/intermediate-part01-ko/image-3.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/iLdXlyWvSGyiV93uQLM7](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/iLdXlyWvSGyiV93uQLM7))

**힌트** : 변수의 설정 순서로 accessToken은 식에서 사용하는 변수보다 아랫 순서로 정의해야 합니다. 이것으로 변수 "accessToken"에 토큰 값이 설정됩니다.

### **Step2: 변수를 사용하여 조건 설정**

다음은 Rest API 컴포넌트에서 URL과 헤더 정보를 Step1의 변수를 사용하여 설정하는 것만으로 완료됩니다.

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/intermediate-part01-ko/image-4.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=9e96edfddf70bc4eb44f08c22fd07d6f" alt="intermediate-part01-ko image 4" width="1096" height="829" data-path="images/creating-packages/intermediate-part01-ko/image-4.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/Zq3dTc5vRe2cLRIgKlgA](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/Zq3dTc5vRe2cLRIgKlgA))
**사용예 3: SQL문 안에서 변수 사용**

**주의하세요!!** : Workflow SQL 태스크, DB 컴포넌트, BigQuery 등의 DWH 커넥터안에서 기술하는 SQL문에 변수를 이용할 경우는 아래와 같이 기술해 주세요.

**※ 변수의 전후에 홑 따옴표를 붙인다**

**변수의 종류**
**변수를 사용한 SQL**

수치형
SELECT \* FROM tableA Where price >= **\$\{변수명}**

문자열형 / 날짜형
SELECT \* FROM tableA BETWEEN **'$&#123;start_date&#125;' **AND **'$\{end\_date}'**

## \*\*\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/intermediate-part01-ko/image-5.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=832a01eb6a809703810fe63db4df7e7d" alt="intermediate-part01-ko image 5" width="1034" height="461" data-path="images/creating-packages/intermediate-part01-ko/image-5.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/nVznqz73RyC1qu9rpw7W)\[](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/nVznqz73RyC1qu9rpw7W\)\[)

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/intermediate-part01-ko/image-6.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=35fc67636e61ffce64a888a5f27bf694" alt="intermediate-part01-ko image 6" width="1109" height="829" data-path="images/creating-packages/intermediate-part01-ko/image-6.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/qA5mCdLeSnq31LiEEwpW](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/qA5mCdLeSnq31LiEEwpW))\*\*

## **MongoDB의 경우**

`&#123;"\\$and": [&#123;"LastModifiedDate": &#123;"\\$lt": &#123;"\\$date": "$last_modified"&#125;&#125;&#125;, &#123;"CreatedDate": &#123;"\\$gte": &#123;"\\$date": "$created_at"&#125;&#125;&#125;, &#123;"SLA__c": "Bronze"&#125;]&#125;`
※ MongoDB 소스 컴포넌트의 필터 조건으로 변수를 사용하는 경우는, `"$last_modified"`같이 「\$변수명」을 이중 따옴표로 둘러싼다
**Workflow 변수와 Dataflow 변수의 관계 이해**

Workflow 패키지 레벨의 변수는 Dataflow 레벨의 변수를 겹쳐쓰기(재정의)하는 데 사용할 수 있습니다.

## **예 1: Workflow 변수와 Dataflow 변수가 모두 같은 변수이름인 경우**

Workflow 변수를 Dataflow 변수에 할당해야 합니다.

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/intermediate-part01-ko/image-7.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=bcdf9615da3b3a17cf0fb901e2001f76" alt="intermediate-part01-ko image 7" width="1049" height="286" data-path="images/creating-packages/intermediate-part01-ko/image-7.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/C25jx85fT3uqPejP1T4C)\[](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/C25jx85fT3uqPejP1T4C\)\[)

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/intermediate-part01-ko/image-8.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=cac98dcba4a7d819991a97c5cd0747a2" alt="intermediate-part01-ko image 8" width="1106" height="804" data-path="images/creating-packages/intermediate-part01-ko/image-8.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/i9tS34vQVeWuNp2iOz08](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/i9tS34vQVeWuNp2iOz08))

## **예 2: Workflow 레벨에서만 변수가 정의된 경우**

Workflow의 Dataflow에서 해당 Dataflow에 정의되지 않은 변수를 사용하더라도 Workflow 수준에서 값이 설정된 경우 해당 Dataflow 작업은 Workflow 변수의 값을 사용하여 실행됩니다.

## **변수 표기법 참고:**

SQL에서 변수를 지정하는 방법 :  **$&#123;변수이름&#125; **일반 패키지의 URL 및 파일 경로 등 :  **$변수이름**
마치며

변수를 사용하면 유연한 작업을 구현할 수 있습니다. 이것 이외에도 사용법은 다양하지만, 파일 스토리지(취득 혹은 보존시)등에서의 사용 예를 알고 싶은 경우는, [이 블로그](https://www.integrate.io/jp/blog/xplenty-storage-ja/)(일본어)도 체크해 보세요.

\<!-- notionvc: b06abe89-d9da-4f98-90f2-fb2f08bb69e8 -->

##

\<!-- Google Tag Manager hidden fields -->

\<!-- End Google Tag Manager hidden fields -->

\<!-- Text input-->

Get Started

Free 7-day trial. Easy setup. Cancel any time
