# 시작하기

## API Drag 서비스에 오신것을 환영합니다!

API Drag 서비스는, 온라인에서 제공되는 OPEN API를 활용하여 쉽고 빠르게 Macro 서비스를 구현할 수 있는 플랫폼입니다.

원하는 기능을 마우스로 손쉽게 Drag and Drop 하여 편집하고 Flow를 만드신 다음 배포하여, 반복적인 업무를 자동화 해 보세요.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FB9S8iRJUR9Ryno9yb8mE%2Fborder3px-apidrag-darg%26drop.gif?alt=media&amp;token=94261fdb-a3ec-4893-a5dd-7817a4a0d5ce" alt=""><figcaption></figcaption></figure>

## Macro 서비스란  무었인가요?

Macro 서비스란 독립적인 여러개의 서비스를 하나로 묶어 자동화 처리하는 서비스를 말합니다. 구글, 카카오, 네이버 등 거대 ICT 기업들과 정부에서는 다양한 분야에서 OPEN API 제공을 통해 편리한 기능들을 제공하고 있습니다.&#x20;

저희 API Drag 서비스에서는 OPEN API 서비스들을 묶어서 하나의 Macro 서비스로 만들어주는 기능을 제공하고 있습니다.&#x20;

## 기본적인 코딩능력이 필요한가요?

저희 API Drag는 코딩을 최소화 하고 간단한 UI 구성과 설정만으로도 완벽하게 동작하는 Macro 서비스를 작성할 수 있습니다. 하지만 약간의 코딩 상식이 보태진다면 적은 시행착오로 풍부한 Macro 서비스를 만들 수 있습니다.

'기본  개념 이해하기' 챕터부터 천천히  따라오시면 기본적인 코딩의 개념부터 이해하기 쉽게 잘 설명 해드립니다.

저희 API Drag 사용방법이 궁굼하시다면 '기본 개념 이해하기' 챕터로 이동해보세요.&#x20;


# 기본 개념 이해하기

{% hint style="info" %}
**Drag and Drop:** Drag and Drop 은 마우스 끌어다 놓기 액션의 영어식 표현입니다. PC 환경에 마우스의 활용이 보편화 되면서 'Click', 'Mouse over', 'Mouse move' 등의 이벤트가 UX에 많이활용이 되었는데,  Drag and Drop 은 복합적인 마우스 이벤트를 하나로 묶어 처리하게 됨으로서 풍부한 UX 표현이 가능하게 되었습니다. Drag and Drop 은 DND 로도 표현 됩니다.
{% endhint %}

## OPEN API

{% hint style="info" %}
**API:** Application Programming Interface 의 약자입니다. API의 맥락에서 애플리케이션이라는 단어는 고유한 기능을 가진 모든 소프트웨어를 나타냅니다. 인터페이스는 두 애플리케이션 간의 서비스 계약이라고 할 수 있습니다
{% endhint %}

네이버 검색, 카카오 메시지보내기, 구글 캘린더 등을 사용해보신적이 있나요? 일반적인 사용자들은 이러한 서비스를 이용하기 위해 해당 서비스를 제공하는 사이트를 방문하여 서비스를 이용하거나 해당앱을 설치하여 사용할 수 있습니다.

하지만 이런 서비스를 활용하여 다양한 파생 서비스를 개발하기 위해서는 사용자기 직접 사이트에 방문하거나 앱을 설치하는 방식으로는 개발을 할 수 없습니다.

이러한 서비스와 온라인으로 연결하여 해당 서비스를 요청하고 데이터를 받을 수 있는 통신채널이 있어야 다양한 파생 서비스가 만들어질 수 있는데, 이렇게 컴퓨터 스스로 온라인으로 연결하고 서비스를 제공받는 방식이 Application Programming Interface 즉, API 입니다.

OPEN API는 어떠한 앱이나 프로그램이 자격을 갖추면, 온라인상에서 해당 API 서비스에 접근하는 것을 허용하는 개념인 OPEN이 추가된 개념입니다.

## RESTful API

{% hint style="info" %}
**RESTful:** REST는  Representational State Transfer의 줄임말입니다. 데이터 자원을 이름으로 구분하여 해당 데이터 자원의 상태를 주고받는 모든 것을 의미합니다. RESTful은 REST의 원칙을 따르는 시스템 혹은 그러한 환경을 의미합니다.
{% endhint %}

Representational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처입니다. REST는 처음에 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌습니다. REST 기반 아키텍처를 사용하여 대규모의 고성능 통신을 안정적으로 지원할 수 있습니다. 쉽게 구현하고 수정할 수 있어 여러 플랫폼에서 사용할 수 있습니다.

RESTful은 HTTP 프로토콜의 인프라를 그대로 사용하여 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없기때문에 많은 API 서비스 구축에 활용되고 있습니다. 또한 RESTful API의 장점으로는 쉬운 확장성, 유연성, 독립성 등의 특징이 눈에띄는 방식입니다.

이러한 이유로, 위에서 설명한 대형 ICT 기업들의 OPEN API는 대부분 RESTful API 환경에서 서비스가 제공되고 있습니다.

## JSON 구조

{% hint style="info" %}
**JSON:** JavaScript Object Notation의 약자입니다. JSON은 Javascript 데이터의 구조를 쉽게 표현하기 위한 문자 기반의 표준 포맷입니다.

**Map:** 키와 값으로 구성되는 데이터 구조로, 하나의 Map 안에 여러개의 키와 값이 쌍으로 저장됩니다. 원하는 값을 찾기 위해서는 키를 이용합니다.

**Array:** 인덱스 주소에 값이 저장되는 구조로 원하는 값을 찾기 위해서는 인덱스 주소를 이용합니다.
{% endhint %}

JavaScript 에서 복잡한 구조의 데이터를 저장하고, 전송하기 위해서 사용되는 문자기반의 포맷입니다.  일반적으로 다른 코딩언어의 경우 데이터 구조를 정형화 하기 위해 Map 이나 Array 등의 객체를 제공하지만 JavaScript에서는 이러한 Map, Array를 보다 쉽게 사용할 수 있는 환경을 위해 JSON 구조를 제공하고 있습니다.

JSON의 기본 구조는 **'{'** 와 **'}'** 사이에 **키:값** 의 형태를 취합니다. 예를들어 우리반에 홍길동과 친구와 전우치라는 친구가 있다는 내용을 JSON으로 표현하자면 아래와 같습니다.

```javascript
우리반 = {
    "홍길동":{
        "성별":"남자",
        "키":175
    },
    "전우치":{
        "성별":"남자",
        "키":177
    }
};
```

API Drag 서비스는 JavaScript를 인식하도록 되어있기 때문에, JavaScript의 데이터구조인 JSON을 기본 데이터 구조로 활용합니다.

{% content-ref url="/pages/vArXTlg46fTPwP7XliM7" %}
[JSON 구조](/quick-start/concepts/json)
{% endcontent-ref %}

## 자격증명

API Drag 서비스는 다양한 OPEN API 서비스를 조합하여 Macro 서비스를 제작하는 서비스입니다. API Drag 에서 제공하고 있는 Kakao, Naver, Google OPEN API 서비스는 누구나 사용할 수 있는 OPEN 서비스이지만 적정한 자격을 갖추어야 서비스를 제공합니다. 그리고 이러한 서비스를 사용할 자격을 갖고있음을 증명하는 것이 자격증명입니다.

저희 API Drag는 다른 웹 서비스와 다르게 이메일 주소를 이용한 회원가입이나 ID/Password 방식의 가입방법을 제공하지 않습니다. 그 이유는 Kakao, Naver, Google 의 OPEN API 서비스를 제공하기 위해 해당 서비스의 자격증명을 득하는 절차를 거쳐야 하기 때문입니다.

저희 API Drag 서비스에서 Google OPEN API를 이용하여 Macro 서비스를 구현하기를 원하신다면 회원가입시에 구글 계정으로 회원계정을 생성해야 합니다. 그리고 Kakao, Naver 서비스를 같이 사용하시기를 원하신다면 Kakao 계정으로 로그인 혹은 회원가입을 해야 하고, Naver 계정으로도 회원가입 혹은 로그인을 해야 합니다.&#x20;

하지만, 두 종류의 OPEN API를 활용하기 위해 로그인 페이지나 회원가입 페이지로 이동할 필요는 없습니다. 해당 자격증명이 필요한 상황이 되면, API Drag 프로젝트  편집기에서 사용자에게 자동으로 로그인을 요청할 것입니다.

{% content-ref url="/pages/oF0LrRxiI4YbQGVTY1J2" %}
[자격증명](/quick-start/concepts/authentication)
{% endcontent-ref %}

## 프로젝트

{% hint style="info" %}
**Trigger:** Macro 서비스가 동작하도록 최초의 이벤트가 발생하는 것
{% endhint %}

API Drag 서비스는 Macro 서비스를 제공하기 위한 최소 단위를 프로젝트로 정의하고 있습니다.

Macro 서비스를 제작하기 위해서 가장 먼저 프로젝트를 생성하고, 프로젝트 편집기로 이동하여 Macro 서비스를 제작합니다.

프로젝트를 생성하고 Macro 서비스를 제작한 후, 배포를 하게되면 개발을 위한 일련의 과정은 마무리가 된 것입니다. 하지만 이 Macro 서비스는 스스로 동작하지 않을 것입니다. 그 이유는 이 Macro 서비스가 실행되기 위한 Trigger가 등록되지 않았기 때문입니다. Trigger의 동작은 프로젝트 단위로 등록하고 동작합니다.

## 동작 Trigger

{% hint style="info" %}
**서브도메인:** 보통 도메인은 apidrag.com 의 포맷입니다. 서브 도메인은 이 apidrag.com 앞에 추가적인 주소가 붙는 것인데, 사용자가 요청한 서브도메인이 angel 이라면 Trigger의 서브도메인은 **angel.api.apidrag.com** 이 됩니다.
{% endhint %}

Trigger의 방식은 다양합니다. API Drag 서비스에서는 **스케쥴링**과 **HTTP호출** 두 종류의 Trigger를 제공하고 있습니다.&#x20;

스케쥴링은 동작하는 시간을 지정하고, 해당 조건에 만족하는 상황이 되면 반복적으로 등록된 프로젝트를 실행하는 방식입니다.

{% content-ref url="/pages/9mDY16k27FQ2B2Uaoblm" %}
[스케쥴링](/quick-start/scheduling)
{% endcontent-ref %}

HTTP호출은 앞에서 설명한 RESTful API 와 동일한 개념으로 이해하시면 됩니다. 사용자가 등록한 서브도메인 주소를 이용하여 웹 주소를 Listening 하고 있는 프로젝트가 있고, 외부로 부터 HTTP 요청이 들어오면 동작하게 됩니다.

## Agency

API Drag 서비스는 누구나 쉽게 OPEN API를 활용할 수 있는 쉬운 기능을 제공합니다. 하지만 어느정도 기초 ICT 지식이 수반되어야 함은 부정할 수 없습니다.&#x20;

변수, 조건문, 반복문 등의 가장 기본적인 코딩 개념도 없는 사용자는 API Drag 서비스를 이용하여 Macro 서비스를 개발하는데 제약이 있습니다. 이 경우 전문가의 도움을 받아보는 것도 좋은 방법입니다.&#x20;

주변에 IT 전문가가 있다면 API Drag 계정을 알려주고 개발을 의뢰할 수 있지만, 이 경우 로그인 정보를 알려주어야 하는 보안상 문제가 발생할 수 있습니다.

이런 상황이라면 IT 전문가에게 API Drag 계정을 생성하게 하고 Agency로 지정해 보세요. 서로 다른 계정으로 개발 도움을 받을 수 있기 때문에 내 계정을 안전하게 지킬 수 있습니다.

{% content-ref url="/pages/9kimtsELKC3vnThQhBRw" %}
[Agency](/quick-start/agency)
{% endcontent-ref %}

## 아이템 블록

아이템은 코딩블록입니다. API Drag 에서  제공하는 아이템 블럭은 독립적인 기능 동작을 하는 블럭이며, 이러한 아이템 블럭을 서로 엮어서 Flow를 만들고 아이템 블럭에 동작 방식을 설정하여 Macro 서비스가 완성됩니다.

예를 들면 Branch 블럭은 들어오는 데이터의 조건에 따라 분기를 해 주는 동작을 하는 아이템 블럭이며, Assign 블럭은 데이터 값을 새로 만든 데이터 변수에 할당 해 주는 동작을 하는 아이템 블럭입니다.

사용자는 프로젝트 편집기에서 왼쪽에 제공되는 블럭을 편집기로 Drag and Drop 하여 위치 시키고, 아이템 블럭과 아이템 블럭 사이를 연결하여 Flow 를 만듭니다.

{% content-ref url="/pages/NUy5H5RMJBFxAOaTFHBw" %}
[아이템 블록](/quick-start/concepts/item)
{% endcontent-ref %}


# Coding 기초

API Drag는 초보자도 쉽게 Macro 서비스를 개발할 수 있도록 하는 것을 목표로 합니다. 하지만 보다 풍부한 기능을 구현하기 위해서는 아래 초보적인 수준의 코딩 개념을 익히는 것을 추천드립니다.&#x20;

저희 튜토리얼에서 제공하는 기초 개념만 알고 있으면 저희 API Drag 서비스를 이용하여 다양한 Macro 서비스를 개발할 수 있습니다.

## 데이터 타입

API Drag 서비스는 JavaScript 언어를 인식하고 사용할 수 있습니다. 또한 Project 편집기 내 아이템 블럭에서 사용할 수 있는 모든 데이터의 타입을 JavaScript 기준에 맞추었습니다.&#x20;

JavaScript 가 아닌 다른 언어에서는 다양한 데이터 타입이 사용되지만, JavaScript에서 변수는 데이터 타입을 구분하지 않습니다. 다만, 데이터를 변수에 담을 때의 형태에 따라 자동으로 데이터 타입을 구분합니다. 따라서 아래 제공하는 세 종류의 데이터 타입의 구분만 이해하시면 API Drag를 이용하시는데 문제가 없습니다.

#### string

문자열 데이터입니다. 보통 <mark style="color:red;">**"**</mark> 와 <mark style="color:red;">**"**</mark> , 또는 <mark style="color:red;">**'**</mark> 와 <mark style="color:red;">**'**</mark> 사이에 존제하는 문자 전체를 문자열이라고 합니다.

예를 들면 **"동해물과 백두산이"** 와 **"1234"** 모두 문자열입니다.

#### number

숫자형 데이터에는 Short, Integer, Long, Float, Double 등 데이터의 크기에 따라 다양하게 존재합니다. 그러나 JavaScript에서는 이러한 데이터타입을 구분하지 않고 number 타입 하나로 취급합니다.

코딩시에 변수에 숫자형 데이터를 답고 싶다면 키보드 자판위에 숫자와 소숫점을 위한 <mark style="color:red;">.</mark> 기호로 구성된 데이터면 충분합니다. 여기에 양수와 음수를 구분하기 위해 (-) 를 앞에 붙여주면 음수 데이터가 됩니다.

예를 들면 **1234**, **123.4**, **-3456** 등이 number 데이터입니다.

#### boolean

boolean 은 참/거짓 데이터를 담을 수 있는 데이터형입니다.&#x20;

변수에 값을 담을 때에는 따옴표문없이자 **true** 혹은 **false** 를 지정하면 되지만, 문자열처럼 보인다고 "true" 나 "false" 로 하게되면 boolean 데이터형이 아니라 문자형으로 인식하게 되기 때문에 주의 하셔야 합니다.

boolean 형 데이터는 주로 판단 용도로 사용 됩니다. 아래 설명하게 될 조건문에서는 필수이므로 간단하지만 잘 기억해두세요.

## 변수와 상수

{% hint style="info" %}
**블록:** 코딩은 블록과 블록으로 영역을 구분하여 작업을 수행합니다. 하나의 블록은 "<mark style="color:red;">{</mark>" 와 "<mark style="color:red;">}</mark>" 로 감싸인 내부 영역을 하나의 블록으로 취급합니다.
{% endhint %}

위에서 데이터타입에 대하여 설명을 드렸습니다. 데이터타입은 메모리에 존재하는 실질적인 값입니다. 그러나 우리는 코딩에서 그 값을 바로 사용할 수 없습니다. 그래서 그 값을 대표하는 변수를 선언하여 대신 활용하게 됩니다.

변수라는 뜻은 그 한자 의미에서도 알 수 있듯 변한다는 의미입니다. 코딩에서 변수를 선언하면, 그 변수 안에 들어있는 값은 변할 수 있다는 뜻 입니다.&#x20;

변수의 반대 키워드로는 상수가 있습니다. 상수는 한번 선언이 되면 값을 바꿀 수 없다는 의미입니다.

JavaScript 에서 변수를 선언하는 방법 2가지와 상수 선언 1가지에 대하여 알아보겠습니다.

1. **const** : 상수 선언을 위한 키워드 입니다. 최초에 상수를 선언하면 그 값을 바꿀 수 없습니다.
2. **let** : 변수를 선언하는 방법 중 1가지 입니다. let로 선언한 변수는 그 값은 변경될 수 있지만 동일 블록 내에서는 재선언 할 수 없습니다.
3. **var** : 변수를 선언하는 방법 중  마지막 입니다. 이 방법은 언제든 값을 바꿀 수 있고 재선언도 가능한 방법입니다.

이제 변수와 상수를 선언하는 예제를 보겠습니다.

```javascript
const COUNTRY_CODE = 82;

var company = "Apple";
let memberName = "홍길동";
let age = 33;
let weight = 78.3;
let isKind = true;

var company = "Samsung"; //company 변수 재선언
memberName = "전우치";
age = 32;
weight = 77.6;
isKind = false;
```

위 예제를 보시면 다양한 데이터 타입과, 변수 및 상수 선언 방법에 대하여 제시를 하였습니다. 앞서 설명드린 내용을 잘 읽어보시면서 예제의 패턴들을 비교해 보세요.

## 조건문

조건문은 코딩의 흐름을 제어하는 기능으로, 조건의 맞고 틀림을 이용하여 개발자가 미리 준비해 놓은 흐름으로 유도할 수 있도록 합니다.

조건문은 모두 if, else if, else 키워드로 표현이 됩니다.&#x20;

**if** 문장에서 조건을 제시하여 맞는다면 그 내부의 코딩 영역(블록)을 수행할 것이고, 맞지 않는다면 내부의 코딩 영역(블록)을 Skip 하고 지나갈 것입니다.

**else if** 키워드는 if 키워드 다음에 올 수 있습니다. 만약 if 키워드에 의해 검증한 조건이 맞지 않는다면 다음 블록으로 지정된 else if 블록 조건을 검증하게 됩니다. if 키워드는 조건문에 한번 사용되지만 else if 키워드는 원하는 만큼 여러번 사용이 가능합니다.

**else** 키워드는 조건문에 필수는 아니지만, 항상 조건문의 마지막에 단 한번 사용할 수 있습니다. 조건문의 흐름에서 if와 else if 의 조건에 맞지 않았다면 마지막에 만나는 else 를 수행하게 될 것입니다.

아래 몇가지 패턴의 조건문 예제를 보겠습니다.

```javascript
const hwangab = 60;
let age = 51;
let decision = "";

if(age < hwangab){
    decision = "Still baby.";
}else if(age == hwangab){
    decision = "Hmm, boy!";
}else{
    decision = "Finally, man.";
}
```

```javascript
let nationality = "Korean";
if(nationality != null){
    console.log(nationality);
}

if(nationality == "American"){
    console.log("Speak English.");
}else{
    console.log("Do you speak Korean?");
}
```

{% hint style="info" %}
**null :** 변수에 어떠한 값도 할당되지 않았다는 의미입니다. 가끔 공백문자와 혼동하는 경우가 있는데, 공백문자 선언을 보면 **let empty = "";** 와 같이 선언되는데, 이는 공백인 문자가 변수에 할당 된 것이지 null과는 구분이 되어야 합니다.
{% endhint %}

## 반복문

코딩을 단순하게 정의를 하자면, '**조건문을 통해 흐름을 제어하고 반복문을 통해 자동화를 하는 것이다**.' 라고 말할 수 있습니다. 앞에서 조건문을 알아봤으니 이제 반복문을 알면 코딩의 기초는 모두 끝납니다.

반복문의 키워드는 for 와 while 두 종류가 있습니다. for 키워드의 경우 반복의 횟수를 중심으로 순환하는 방식이라면 while 은 조건이 만족하거나 만족하지 않는 기준을 중심으로 순환하는 방식입니다.

#### for문 예제

```javascript
for(let i=0; i<10; i++){
    console.log(i);
}
```

#### 실행결과

```
0
1
2
3
4
5
6
7
8
9
```

위 for 문장을 해설하자면, 우선 **i** 라는 변수에 **0**을 할당합니다. 그리고 그 값이 10보다 작은지 조건을 확인하고, 조건을 만족한다면 블록 안으로 진입해서 변수 i 에 할당되어 있는 0을 프린트 합니다. 그리고 블록의 마지막을 만나기 때문에 다시 for 문장으로 돌아갑니다.

이 때에는 **i++** 을 먼저 수행합니다. i++ 을 풀어서 설명하자면 i = i + 1; 과 같은 의미입니다. 이렇게 1이 증가한 i 의 값은 1이 되며, 다시 10보다 작은 조건에 만족하는지 다시 점검합니다. 그리고 조건을 만족한다면 다시 블록으로 진입하여 다시 i 값인 1 을 프린트 합니다.

이 과정을 10보다 작은 경우 반복하기 때문에, 프린트 되는 i 의 값은 0 \~ 9 까지 입니다.

#### while문 예제

```javascript
let i = 0;

while(i<10){
    console.log(i);
    i++;
}
```

#### 실행결과

```
0
1
2
3
4
5
6
7
8
9
```

위 while문 역시 실행 결과는 for문 코드와 동일합니다. 하지만 변수의 선언과 변수의 변화가 일어나는 위치가 다릅니다.

실행 절차를 설명드리면, 우선 **i** 라는 변수에 **0**을 할당하였습니다. 그리고 while 문 조건 비교에서 i의 값이 10보다 작은지 검증합니다. 조건이 만족하면 블록 내부를 수행합니다. 블록 내부에는 i 의 값을 프린트하는 코드와 i 의 값을 증가시키는 코드가 존재합니다.

이렇게 반복되는 수행을 통해 i 의 값은 계속 증가하여 10이 되었을 때, while 의 조건에 만족하지 않기 때문에 반복수행이 끝나게 됩니다.

while 키워드의 동작방식과 for 키워드의 동작방식을 비교하기 위하여 위 예제를 제시했지만 while의 경우 보다 다양한 조건 검증을 통한 반복작업 수행이 가능합니다.

아래 또 다른 예제를 보겠습니다.

```javascript
let isHappy = true;
let anger = 0;

while(isHappy){
    console.log("Live together.");
    if(anger == 5){
        isHappy = false;
    }
    anger++;
}

console.log("Moved home.");
```

이번 두번째 예제는 첫 예제보다는 조금 복잡하게 구성을 해 봤습니다. 제가 제시한 예제 외에도 더 많은 케이스가 존재하지만 기초에서는 이 정도만 이해하셔도 완벽합니다.


# JSON 구조

JSON 은JavaScript Object Notation의 약자입니다. JSON은 Javascript 데이터의 구조를 쉽게 표현하기 위한 문자 기반의 표준 포맷입니다. JSON은 다양한 형태의 데이터를 일관된 규격에 맞게 정리하기 쉬우며, 이러한 데이터를 묶어서 저장하거나 전송하기 편리하기 때문에 JavaScript 의 핵심 데이터 구조로 활용되고 있습니다.

API Drag 의 메모리 구조는 JSON의 구조로 운영이 되기 때문에, 아래 설명을 잘 읽고 이해해 주세요.

## Map

JSON 구조에서 가장 중요한 개념입니다.

Map을 간단히 설명드리자면 출석부와 같습니다. 선생님이 출석부에서 여러분의 이름을 호명하면, 여러분은 자동으로 "네!" 하고 대답을 할 것입니다. Map 데이터구조에도 이름표가 있어서 호출만 하면 자동으로 이름표에 연결되어 있는 데이터가 튀어나옵니다.

아래 Map 예제를 보겠습니다.

```javascript
let product = {
    "color":"red",
    "width":200,
    "height":150,
    "price":35000,
    "model":"mod-0001",
};

```

위에서 보시는 것과 같이 product 라는 변수에서 원하는 이름표 즉, color 를 호출하면 "red" 라는 값이 즉시 튀어나오게 되어 있습니다. 여기에서 color 는 **Key** 가 되고 red 는 **Value**가 됩니다. 이러한 Key와 Value 가 한 쌍을 이룬 데이터 구조를 **Map** 이라고 합니다.

## Array

JSON은 Map 구조로 부터 시작을 하지만 그 내부에 Array 가 포함될 수 있으며, 자주 활용되기 때문에 같이 설명을 드리겠습니다.

Array는 순서대로 데이터가 나열되어 묶인 구조입니다. 그리고 데이터를 꺼내오기 위해서는 데이터가 위치한 Index를 활용합니다. Map이 이름표를 이용해서 호출했다면 Array는 번호를 호출하는 방식으로 이해하시면 쉬울 것 같습니다.

코딩에서 문법적으로 Array는 아래와 같이 사용합니다.

```javascript
let productList = [
    "prod-0001",
    "prod-0002",
    "prod-0003",
    "prod-0004",
    "prod-0005"
];
```

위 예제를 보시면 문자열 값의 연속이라는 것을 아실 수 있습니다. 이러한 데이터 구조에서 "prod-0003" 을 찾기 위해서는 productList\[2] 로 값을 꺼내올 수 있습니다. 하지만 우리가 목록 내부에 어떤 값이 들어있는지 알 수 없기 때문에, 반복문을 이용해서 Index 0번 부터 마지막 Index 까지 반복 확인하는 작업을 통해 원하는 값이 들어있는 Index를 확인해야 합니다.

"prod-0003"을 찾는 코드를 한번 보시겠습니다.

```javascript
for(let i=0; i<productList.length; i++){
    if(productList[i] == "prod-0003"){
        console.log("Find prod-0003");
        break; //원하는 값을 찾았으니 반복문 블록 밖으로 이동.
    }
}
```

## 복합 데이터 구조

JSON은 처음 시작을 Map으로 하지만 그 내부에 담을 수 있는 값은 다양합니다.&#x20;

Map의 Key는 문자열이어야 하지만 Value에 해당하는 부분은 string, number, boolean, Map, Array 등 다양한 데이터가 위치할 수 있습니다.

아래 JSON의 다양한 구조를 보겠습니다.

```javascript
let products = {
    "pencil":{
        "model-1":{
            "color":"red",
            "price":2000,
            "stocks":[
                {"serial":"a-001", "stock-date":"2023.04.01"},
                {"serial":"a-002", "stock-date":"2023.04.01"},
                {"serial":"a-003", "stock-date":"2023.04.01"}
            ]
        },
        "model-2":{
            "color":"orange",
            "price":2300,
            "stocks":[
                {"serial":"bc-001", "stock-date":"2023.03.10"},
                {"serial":"bc-002", "stock-date":"2023.03.10"},
                {"serial":"bc-003", "stock-date":"2023.03.10"}
            ]
        }
    },
    "remover":{
    ...
    },
    "note":{
    ...
    }
}
```

위 예제를 보시면 Map 안에 Array가 위치하고, Array 안에 Map이 위치하는 복잡한 구조를 하고 있습니다.

하지만 이런 복잡한 구조를 가장 잘 표현하고 쉽게 사용할 수 있도록 하는 것이 JSON 입니다.

## JSON 데이터 활용하기

이번에는 JSON 데이터를 이용하여 값을 꺼내오고 변경하는 방법을 알아보겠습니다.

#### Map 구조 활용하기

Map 구조는 키와 값의 쌍으로 구성된다고 설명하였습니다. 위 예제코드에서 products 를 활용해서 값을 가져오고 새로운 값을 넣는 방법을 알아보겠습니다.

```javascript
let products = ...

console.log(products.pencil.model-1.color); // red 로 출력됨

products.pencil.model-1.color = "yellow"; // color를 yellow 로 바꿈

console.log(products.pencil.model-1.color); // yellow 로 출력됨

products.pencil.model-1.length = 20; // 길이 라는 새로운 Map을 추가함

console.log(products.pencil.model-1.length); // 20 이 출력됨
```

#### Array 구조 활용하기

이번에는 어떻게 Array 에 값을 넣고 빼는지 알아보겠습니다.

```javascript
let products = ...

console.log(products.pencil.model-2.stocks[0].stock-date); // 2023.04.01 가 출력됨

products.pencil.model-2.stocks[0].stock-date = "2023.01.15" // stock-date 를 변경

console.log(products.pencil.model-2.stocks[0].stock-date); // 2023.01.15 가 출력됨

products.pencil.model-2.stocks.push({"serial":"a-004", "stock-date":"2023.04.05"});
//새롭게 Array가 추가됨

console.log(products.pencil.model-2.stocks[3].stock-date); // 2023.04.05 가 출력됨
```


# 아이템 블록

API Drag 서비스는 아이템 블록 단위로 기능을 구현하고 있습니다. API Drag 서비스의 프로젝트 편집기 화면을 보면 왼쪽 영역에 아이템 블록 목록이 있고, 이러한 아이템블록 목록 중에서 필요한 아이템 블록을 선택하여 편집 영역으로 끌어와 위치시킵니다.&#x20;

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FB9S8iRJUR9Ryno9yb8mE%2Fborder3px-apidrag-darg%26drop.gif?alt=media&amp;token=94261fdb-a3ec-4893-a5dd-7817a4a0d5ce" alt=""><figcaption></figcaption></figure>

아래 이미지는 프로젝트 편집기 왼쪽의 아이템 블록 목록입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FuTsCDBM6fPPwcSCj0p3m%2F00001.jpg?alt=media&amp;token=8a9954fa-ebc2-4002-8466-7ef0fc0daea0" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
아이템 블록의 오른쪽에 Dot 세개가 세로로 연결되어있는 부분을 클릭하면 해당 아이템 블록의 **상세 메뉴얼 페이지로 이동**합니다.
{% endhint %}

아이템 블록의 목록을 보면 Controls, Input Data, Output Data, Web Service, API Service 카테고리를 보실 수 있습니다.

**Controls** 카테고리는 Branch, Loop, Assign 아이템 블록으로 구성되어 있는것을 보실 수 있는데, 이러한 아이템 블록은 Flow를 제어하는 아이템 블록들입니다.

**Input Data** 는 데이터를 읽어오는 아이템 블록 카테고리입니다. API Drag 에서는 Google Sheets 에서 데이터를 읽어오거나, 사용자가 직접 업로드 한 CSV 파일에서 데이터를 읽어올 수 있도록 기능을 제공하고 있습니다.

**Output Data**는 처리한 최종 결과를 저장할 수 있도록 기능을 제공합니다. 카테고리 안에는 Google Sheets, Text File, 그리고 Email 아이템 블록을 제공하고 있습니다. Google Sheets 는 정규화 된 데이터를 Google Sheet 에 등록하는 기능을 제공하고, Text File 은 csv 타입이나 txt 타입 선택을 통해 데이터를 저장합니다. 마지막으로 Email 아이템 블록은 모든 처리 결과를 파일로 만들어서 이메일로 전송할 수 있는 기능을 제공합니다.

**Web Service** 카테고리에서는 외부 웹 서버에 RESTful로 연결하여 데이터를 수신할 수 있는 Http Request 아이템 블록을 제공합니다. 그리고 사용자가 지금 만들고 있는 Macro 서비스를 외부에 RESTful 서비스로 제공할 수 있도록 기능을 제공하는 Http In 아이템 블록과 Http Response 아이템 블록이 있습니다.

아래 프로젝트 편집기에서 간단한 **Flow 편집**을 통해 아이템 블록이 어떻게 연결되는지 간단한 이미지를 보시겠습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FyPbrCJJ3Gf0avxtPidPi%2F00002.jpg?alt=media&amp;token=a86c3a8d-541f-42eb-a859-0e568fbe7652" alt=""><figcaption></figcaption></figure>

아이템 블록은 마우스를 이용해 화면에 적당하게 배치하고 서로 연결하여 Flow 를 편집합니다. 그리고 잘못 연결을 했다면 연결선을 지우고 다시 연결할 수 있으며, 화면에서 필요없는 아이템 블록은 선택하여 삭제할 수 있습니다.

#### 설정팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FZdVWmRywZyhpiP9YbEl5%2F00024.jpg?alt=media&amp;token=6a6c579f-6453-4d29-8473-e0eaaba1eddb" alt=""><figcaption></figcaption></figure>

프로젝트 편집기에 올려진 아이템 블록에서 위와 같이 클릭을 하면, 설정팝업을 확인할 수 있습니다.


# 메모리 구조

일반적인 코딩과는 다르게 API Drag 서비스는 제한된 환경에서 제한된 기능을 제공합니다. 이런 환경적인 제약 때문에 API Drag는 모든 메모리 구조를 자유롭게 사용하도록 할 수 없기 때문에, 다음의 몇 가지 메모리 구조를 제공하고 있습니다.

#### global

global 메모리 구조는 하나의 Macro 서비스 내에서 언제든, 어디서든 접근이 가능한 구조 입니다.

처음 Macro 서비스가 실행되면 global 메모리 구조가 만들어지고, Macro 서비스가 종료됨과 동시에 사라집니다. 사용자는 언제든 아이템 블록 내에서 global 의 메모리에 접근하여 값을 등록하고, 값을 읽을 수 있습니다.

아래는 global 메모리 구조에 접근하는 예제 입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FGoNR6SshK95ug1WlvTYI%2F0003.jpg?alt=media&amp;token=7ec9d783-309d-42f9-8921-d7c552af88c7" alt=""><figcaption></figcaption></figure>

위 예제는 Assign 아이템 블록을 이용하여 global 메모리 영역에 uName라는 변수를 선언하고, 그 값으로 "홍길동"이라는 값을 할당하는 예제입니다.

아래 이미지는 위 이미지와 연결하여 global 메모리 영역에 있는 uName 변수의 값을 glogal 메모리 영역에 있는 temp 변수에 다시 옮기는 예제입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2Fei0zJizTz8FaPyXN5G2V%2F00004.jpg?alt=media&amp;token=865c23a8-af02-4c59-8440-b22261211bf1" alt=""><figcaption></figcaption></figure>

#### msg

msg 메모리 영역은 global 메모리 영역과 마찬가지로 Macro 서비스가 처음 실행하면서 만들어지는 메모리 영역입니다. 그러나 API Drag 서비스는 이 msg 영역을 기본 메모리 영역으로 사용을 하고 있습니다.&#x20;

API 호출과 관련 된 아이템 블록들은 외부 OPEN API를 호출하고 그 결과값을 받습니다. 그리고 이렇게 수신한 메시지를 항상 msg 메모리 영역에 payload 변수에 갱신을 하고 있습니다. 그리고 Input Data 카테고리 내 아이템 블록들도 msg.payload 에 확보한 데이터를 갱신합니다.

사용자가 이 메모리 영역을 custom 영역으로 사용을 하고자한다면, msg.payload 를 제외하고 사용을 하시면 됩니다. 그러나 msg.payload 에 사용자의 변수를 선언하시게 된다면, 언제든 아이템 블록에 의해 새롭게 바뀔 수 있다는 것을 염두에 두어야 합니다.

#### loop

loop 영역은 Loop 아이템 블록의 하위에서 생성되며, 그 내부에서만 사용을 할 수 있습니다.

Loop 아이템 블록을 사용하고, 그 내부에서만 사용되어야 하는 값은 loop 메모리 영역을 활용하시면 됩니다. API Drag 서비스에서는 Loop 아이템 블록의 반복 설정에 따라 loop 메모리 영역 안에 loop.index, loop.key, loop.value 변수를 활용하여 값을 전달합니다. 그리고 전달받은 값을 loop.payload 에 등록하여 전달합니다.

아래는loop 메모리 영역의 활용 예제 이미지입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F2XWsbzboGCbhTjmh2q1C%2F00005.jpg?alt=media&amp;token=72f97966-d4bd-43e9-b498-c40ca8174473" alt=""><figcaption></figcaption></figure>


# 자격증명

## 토큰

{% hint style="info" %}
**사용자:** API Drag에 회원가입하고 Macro 서비스를 구현하는 사용자

**사용자 서비스:** 위 사용자가 API Drag 와 관련 없이 제공하고 있는 서비스

**API 서비스:** Google, Naver, Kakao 등에서 제공하는 OPEN API 서비스

**회원:** API 서비스에서 제공하는 토큰정보와 매칭되는 사용자
{% endhint %}

자격증명 설명은 개념이 혼동될 수 있기 때문에 용어부터 정의하고 시작하겠습니다. 아래 설명에 사용되는 용어는 위 힌트를 기준으로 진행하겠습니다.

API Drag 서비스에서 자격증명에서  토큰은 크게 두 개념으로 나뉩니다.

#### owntoken

우선 API Drag 에 가입하기 위해 사용한 Google, Naver, Kakao 로그인 서비스를 통해 API Drag 서비스는 사용자의 각 로그인 서비스 별 개인토큰을 획득합니다. 뒤에 다시 설명이 나오겠지만 이러한 개인 토큰을 API Drag 서비스에서는 **owntoken** 이라고 표현합니다.

owntoken은 API Drag에서 직접 관리하게 됩니다.

Macro 서비스를 구축하는 과정에서 Google, Naver, Kakao 의 자격증명이 필요한 경우, 사용자에게 추가적인 로그인 및 권한 승인을 요청할 수 있습니다.

다시 설명 드리면, 예를들어 사용자가 API Drag 에 Kakao 간편가입을 통해 API Drag 서비스에 가입을 하게되면, Kakao 로 부터 사용자의 토큰을 수신하게 됩니다. 그리고 Macro 서비스 구현 중 Google 아이템 블록을 편집기에 Drag and Drom 을 하게되면, 편집기는 Google의 자격증명 획득을 위해 Google 로그인 팝업을 띄워서 Google 로그인 절차를 진행해야 합니다.

다른 예로, Kakao 간편가입을 한 사용자가 Kakao 메시지 전송 기능 구현을 위해 아이템 블록을 편집기에 Drag and Drop 하는 경우에도, Kakao의 메시지전송 권한 획득을 위해 다시한번 Kakao 로그인을 요청하는 경우도 있습니다.

#### custom token

**사용자 서비스**에서 **회원**들을 대상으로 Google, Naver, Kakao 로그인 서비스를 사용하고 토큰을 획득하여 활용하고 있을 수 있습니다. 그리고 그 사용자 서비스에서 OPEN API 연동을 편리하게 하기위해 저희 API Drag 서비스를 활용할 수 있습니다. 이런 경우 API Drag 서비스는 사용자 서비스와 API 서비스 사이에서 연계를 해 주는 Gateway 역할을 하게 됩니다.&#x20;

이 경우에 사용자 서비스에서 API Drag 서비스에서제공하는 회원의 토큰을 API Drag 입장에서는 custom token 으로 용어를 정의하고 있습니다.

**custom token**은 API Drag에서 관리하는 대상이 아니라, 그냥 수신해서 API 서비스로 제공하는 연계 Data 중 하나일 뿐입니다. 즉, custom token 의 관리는 사용자 서비스에서 **직접 관리**를 해야합니다.

## Agency

위 토큰 챕터에서는 토큰과 관련한 자격증명에 관하여 설명을 하였습니다.

Agency 챕터에서는 API Drag 서비스 내에서 Agency를 활용한 개발에 관한 설명입니다.

API Drag 서비스는 누구나 쉽게 Macro 서비스를 개발할 수 있도록 한다는 컨셉으로 개발이 되었습니다. 하지만 기본개념 이해하기 수준의 코딩에 대한 수준을 필요로 합니다. 또한 OPEN API 에 대한 이해도 역시 필요합니다. 이러한 경우 직접 Macro 서비스를 개발할 수 없는 사용자는 API Drag 서비스를 사용할 수 없을 지 모릅니다.

Macro 서비스 개발을 할 수 없는 사용자가 서비스를 필요로 하는 경우, 전문가에게 로그인 정보를 제공하고 서비스 개발을 의뢰할 수 있습니다. 이 경우 **로그인 정보**를 노출하게 되기 때문에 **보안**에 문제가 발생할 수 있습니다.

API Drag 서비스는 이러한 보안에 문제가 될 상황에 대비하여 Agency 개념을 도입했습니다.

사용자와 Agency 는 각자 API Drag 서비스에 가입을 하고, 사용자가 Agency 지정을 하게 되면, Agency 는 그 **권한을 이양**받아서 Macro 서비스를 개발하고 사용자에게 제공할 수 있습니다.


# Flow 작성

## 아이템 블록 Drop

Flow 작성을 위해서 가장 첫 순서는 아이템 블록을 편집 영역에 Drop 하는 것 입니다.

API Drag 편집기 왼쪽에 아이템 리스트를 확인하고 필요한 아이템 블록을 선택하고, 마우스로 끌어와 편집 영역에 Drop 하세요.

## 아이템 블록 연결

한개 이상의 아이템 블록을  편집 영역에 올려놓았다면, 이제 두 개의 아이템 블록을 연결할 수 있습니다. 두개의 아이템 블록 중 먼저 수행되어야 할 아이템 블록의 뒤쪽에 있는 사각형 포인트를 마우스로 끌어와서 연결할 아이템 블록 위에  떨어뜨리세요.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FXnZOtoAQZneL3bPR54nN%2F00006.jpg?alt=media&amp;token=8a23db68-411c-45d4-89e0-789f8574604a" alt=""><figcaption></figcaption></figure>

## 아이템 블록 연결 취소

연결이 잘못되었으면 삭제할 수 있습니다. 선이 연결 된 사각형 포인트를 마우스로 클릭하면 빨간 테두리가 선택되었다는 표시를 해 줍니다. 이렇게 삭제할 선을 선택하고 키보드 **del** 키를 누르면 선이 삭제됩니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FoMeVtOlj2NZZyTXrq4gY%2F00007.jpg?alt=media&amp;token=1442ac06-467a-4f28-a7f0-bfb964d95816" alt=""><figcaption></figcaption></figure>

## 흐름제어

흐름을 제어하는 아이템 블록은 Branch와 Loop 두개의 아이템 블록이 있습니다.

우선 Branch 아이템 블록은 조건에 따라 흐름을 제어하는 아이템 블록입니다. 뒤에 Branch 아이템 블록 설정에 대한 설명에서 보다 자세한 설정 방법 등을 설명 드리겠지만 여기에서는 어떻게 Flow를 위해 연결을 하는지만 설명을 하겠습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FDyuLfVZiVpyMTcoeVMW2%2F00008.jpg?alt=media&amp;token=54d8c64f-08c2-4917-828b-7561c6a8d38b" alt=""><figcaption></figcaption></figure>

위 이미지에서는 Branch 가 어떻게 연결이 되는지 두 종류의 예를 보여드립니다. Branch 내부 설정을 통해 흐름의 포인트를 추가할 수 있습니다. 각각의 포인트에는 흐름이 지나갈 수 있는 조건을 설정할 수 있습니다. 설정의 조건에 만족한다면 흐름은 포인트에 연결 된 선을 통해 다음 아이템 블록 수행으로 진행합니다.

다음은 두번째 흐름제어 아이템 블록인 Loop 설명을 드리겠습니다. Loop 블록 아이템의 특징은 반복의 조건이 만족하면 흐름을 계속 반복하고, 조건이 만족하지 않을 때 반복블록을 벗어나 다음 단계를 수행하게 됩니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FNsaMEzvVm66HqtrBDtwv%2F00009.jpg?alt=media&amp;token=c3b7e895-536c-48cc-b5a0-46910253f39e" alt=""><figcaption></figcaption></figure>

위 Loop 아이템 블록을 보시면 회색 포인트가 두개가 존재하며, 각 포인트에 네모 아이콘과 세모 아이콘이 있습니다. 세모아이콘의 흐름은 조건이 만족하는 경우 수행하는 반복 구간입니다. 그리고 반복작업이 끝나고 반복의 조건이 맞지 않는 상태가 되면 네모 아이콘의 포인트로 흐름이 이동하게 됩니다.


# 데이터 컨트롤

API Drag는 코딩의 지식이 많지 않아도 쉽게 데이터를 컨트롤 할 수 있게 대부분의 데이터 타입을 자동화 할 수 있도록 기능을 제공하고 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FiM4WohOnZ9KgM2VamkXN%2F00010.jpg?alt=media&amp;token=ba6d19aa-7f7e-471e-a133-e088f9be2d8e" alt=""><figcaption></figcaption></figure>

위 이미지는 Assign 아이템 블록에서 데이터를 설정하는 부분인데, 왼쪽 영역과 오른쪽 영역으로 분리되어 있습니다. 왼쪽 영역은 데이터를 받을 영역이고 오른쪽 영역은 값을 제공하는 영역입니다.

오른쪽의 값을 제공하는 영역을 보시면 아래와 같이 다양한 항목들이 보입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FwF6eqTRiXqm0bHoLtPkQ%2F00011.jpg?alt=media&amp;token=deeca67b-70c4-420d-ae92-e1c0078ffd14" alt=""><figcaption></figcaption></figure>

위에 보이는 항목 중에 문자, 숫자, true/false 는 코딩의 기초에서 설명드린 string, number, boolean 의 데이터 타입입니다. 나머지 항목은 아래 하나씩 확인 해 보겠습니다.

#### 타임스탬프

날짜와 시간 데이터입니다. 해당 항목을 선택하면 시스템에서 제공하는 현재 시간과 데이터가 왼쪽에 지정한 변수로 입력 됩니다.

#### 코드입력

사용자의 기능 확장 편의성을 제공하기 위해 직접 코딩을 하여 데이터를 만들 수 있는 항목을 제공하고 있습니다. JavaScript 코딩으로 동작하며 해당 코딩의 마무리는 항상 값을 return 하는 코드로 마무리가 되어야 합니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FtN9KQhsrvV2RJP5Ef7Sj%2F00032.jpg?alt=media&amp;token=c68fa9f3-fd4d-4692-ab0b-9dc6cb959324" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FTInweKt8CturDCGIXOxj%2F00012.jpg?alt=media&amp;token=c80deb69-aba6-4e6c-b509-ee6f8bb566a1" alt=""><figcaption></figcaption></figure>

#### JSON

JSON 타임의 데이터도 전용 에디터를 이용하여 아래와 같이 데이터를 생성할 수 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FyVoeHh9iAVrNcfbGoGFP%2F00013.jpg?alt=media&amp;token=95386f07-81c4-4584-99d3-442f782d1ea5" alt=""><figcaption></figcaption></figure>

#### 배열

배열로 구성되어 있는 데이터를 원하신다면 배열 항목을 선택하고 아래와 같이 값을 지정할 수 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F6WIziqDu3lW1nSmKVyWg%2F00014.jpg?alt=media&amp;token=b84a18c8-4224-48cd-b4a3-7c855c00dafb" alt=""><figcaption></figcaption></figure>

Assign 아이템 블록 외에 특수한 아이템 블록들은 특수한 형태로 값을 제공해야 하는 경우가 있다. 예를 들면 아래와 같은 **쉼표 다중입력**은 선택한 값들이 쉼표로 구분되어 값이 등록된다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FvvVdz6MGbQ3d4VLL7kbT%2F00015.jpg?alt=media&amp;token=43ef3874-a22d-4ac9-b596-8ace28c0a688" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FXiACSyTjGOnYTNOVncMB%2F00016.jpg?alt=media&amp;token=2ad77950-faee-434e-9630-e3bd12d266c8" alt=""><figcaption></figcaption></figure>


# 테스트 및 디버그

## 테스트

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FzmsSGpFcO8diCkbmeqd5%2F00017.jpg?alt=media&amp;token=e5eeb192-64af-489f-b265-2146e2b9264f" alt=""><figcaption></figcaption></figure>

Flow를 작성하고 정확한 설정을 했으면, 실행을 하여 그 결과를 미리 테스트 해 볼 수 있습니다. 실행버튼을 클릭하면 Macro 서비스가 실행되고, Log console에 로그가 출력됩니다.&#x20;

사용자가 확인하고 싶은 로그가 있으면, 데이터 컨트롤의 코딩 기능을 이용하여 아래와 같이 콘솔에 출력을 테스트 해볼 수 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FQYzYD5UDbrY0x3T86zwg%2F00019.jpg?alt=media&amp;token=29fa2081-2a9c-4e7f-a85f-d2dfcaf6143b" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FLtVskGIncRwCd5jC1FrD%2F00020.jpg?alt=media&amp;token=f627eb17-b3df-4016-8f28-2826199dc133" alt=""><figcaption></figcaption></figure>

## 디버그

디버그 기능은 보다 상세한 정보를 제공합니다. 우선 테스트 기능과 마찬가지로 콘솔을 통해 서버 로그를 제공합니다. 그리고 아이템 블록마다 Call stack 을 제공하고, Call stack 을 선택하면 해당 stack 의 메모리 데이터 상태를 볼 수 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FkwB4PDLUiqDZNAEABCEg%2F00018.jpg?alt=media&amp;token=f767c22c-0b75-4215-bb9b-34181cdedd35" alt=""><figcaption></figcaption></figure>

그리고 디버깅이 Loop 구간에 들어서 시간이 오래걸린다면, 임시 정지 기능을 통해 Call stack 의 메모리 상태를 확인하고, 재 실행을 할 수도 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FnJzW2mKvTMESV8a7aQui%2F00021.jpg?alt=media&amp;token=996c50a5-78ae-41b6-9ad2-0222890d69e7" alt=""><figcaption></figcaption></figure>


# 스케쥴링


# Agency


# Controls

코딩의 가장 기본적인 변수 선언 및 할당, 제어문, 반복문을 아이템 블록을 이용하여 Flow를 제어할 수 있는 아이템들 입니다.


# Branch

## 아이템 블록

Branch 아이템 블록은 조건을 검증하여 그 결과 에 따라 Flow 를 제어하는 기능을 가지고 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FK1qX9RuxxadRnX5tGi34%2F00023.jpg?alt=media&amp;token=011e3234-fbaa-4a32-9393-14f0fb183be7" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FDjp7eLGipKp6qvuwRlzh%2F00022.jpg?alt=media&amp;token=55417369-f870-4cb2-8acc-f5080bc5c711" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FEJh8GqP96NEt46uZydcJ%2F00025.jpg?alt=media&amp;token=70ee7141-34c1-4512-ad0c-a9187e1019d9" alt=""><figcaption></figcaption></figure>

## 설정 필드

### 검증 할 필드

검증 되어야 할 값을 설정해 줍니다.&#x20;

선택 항목은 **global, msg, loop, 코드입력** 중 선택할 수 있습니다.

### 검증조건

검증 할 필드의 값이 어떤 조건인지를 확인하는 필드 입니다. 추가 버튼을 클릭하여 여러개의 검증 조건을 만들 수 있으며, 그 조건에 따라 Flow 를 연결할 수 있습니다.

### 비교 부호

\== : 검증 할 필드와 검증조건이 같은 값

!= : 검증 할 필드와 검증조건이 다른 값

\=> : 검증 할 필드의 값이 검증조건과 같거나 큰 경우

\=< : 검증 할 필드의 값이 검증조건과 같거나 작은 경우

\> : 검증 할 필드의 값이 검증조건의 값 보다 큰 경우

< : 검증 할 필드의 값이 검증조건의 값 보다 작은 경우

has key : 검증 할 필드의 Object안에 검증조건에서 제시한 키가 존재하는 경우

is between : 검증 할 필드의 값이 검증조건 값의 사이에 존재하는 경우

contains : 검증 할 필드의 Object 안에 검증조건에서 제시한 값이 존재하는 경우

match regex : 검증 할 필드의 값이 검증조건에서 제공한 정규 표현식에 일치하는 경우

is true : 검증 할 필드의 값이 true 인 경우

is false : 검증 할 필드의 값이 false 인 경우

is null : 검증 할 필드가 null 인 경우

is not null : 검증 할 필드가 null 이 아닌 경우

is type of :  검증 할 필드 값의 타입이 검증조건에서 제공한 타입과 일치하는 경우

is empty : 검증 할 필드의 Object 가 비어있는 경우

is not empty : 검증 할 필드의 Object 가 비어있지 않은 경우


# Loop

## 아이템 블록

설정한 조건에 따라 반복구간을 반복하고, 조건을 완료하면 반복구간 밖으로 나와서 다음 Flow를 수행합니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FBgRkcLseLw47JVMdTsC1%2F00026.jpg?alt=media&amp;token=52949bf9-c482-496a-9b5d-e3ed3a4b1e01" alt=""><figcaption></figcaption></figure>

위 아이템 블록의 오른쪽 사각형 포인트 중 **세모 아이콘**은 **반복구간**으로의 Flow 진입 연결이 되고, **사각형 아이콘**은 반복구간의 **수행이 완료**되면 연결되는 Flow 입니다.

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FyYjCNF1DrfzzlsFLfNjB%2F00027.jpg?alt=media&amp;token=0b3f1987-9206-4fe5-a1a9-a0eb73d81c43" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FBsXgwkZkjjKObvVhYtTi%2F00028.jpg?alt=media&amp;token=48196a70-5183-4f97-8622-cce4cc01d338" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F4TabUeniVd2YmoBvpjEd%2F00029.jpg?alt=media&amp;token=c4ebeb09-376f-4e15-b86f-e5d6f9b003b6" alt=""><figcaption></figcaption></figure>

## 설정 필드

### <mark style="color:blue;">반복방식 : 횟수</mark>

반복횟수를 지정하여 고정 된 횟수를 반복하는 옵션입니다.

#### index 초기값

반복을 하면서 index 가 loop 의 파라미터로 전달이 되는데, index가 횟수를 반복 할 수록 증가됩니다. index 가 증가하기 위한 최초 값을 설정합니다. 사용자의 필요에 따라 설정하면 됩니다.

#### index 증가값

Loop 아이템 블록이 1회 반복할때 마다 증가시켜 줄 index 의 값입니다.

#### 반복횟수

Loop 아이템 블록의 반복 횟수를 지정합니다.

### <mark style="color:blue;">반복방식 : 조건</mark>

조건이 만족하는 경우에 계속 Loop 아이템 블록을 벗어나지 않고 Flow를 수행합니다.

#### 검증할 필드

검증 되어야 할 값을 설정해 줍니다.&#x20;

선택 항목은 **global, msg, loop, 코드입력** 중 선택할 수 있습니다.

#### 검증조건

검증 할 필드의 값이 어떤 조건인지를 확인하는 필드 입니다.&#x20;

#### 비교부호

\== : 검증 할 필드와 검증조건이 같은 값

!= : 검증 할 필드와 검증조건이 다른 값

\=> : 검증 할 필드의 값이 검증조건과 같거나 큰 경우

\=< : 검증 할 필드의 값이 검증조건과 같거나 작은 경우

\> : 검증 할 필드의 값이 검증조건의 값 보다 큰 경우

< : 검증 할 필드의 값이 검증조건의 값 보다 작은 경우

has key : 검증 할 필드의 Object안에 검증조건에서 제시한 키가 존재하는 경우

is between : 검증 할 필드의 값이 검증조건 값의 사이에 존재하는 경우

contains : 검증 할 필드의 Object 안에 검증조건에서 제시한 값이 존재하는 경우

match regex : 검증 할 필드의 값이 검증조건에서 제공한 정규 표현식에 일치하는 경우

is true : 검증 할 필드의 값이 true 인 경우

is false : 검증 할 필드의 값이 false 인 경우

is null : 검증 할 필드가 null 인 경우

is not null : 검증 할 필드가 null 이 아닌 경우

is type of :  검증 할 필드 값의 타입이 검증조건에서 제공한 타입과 일치하는 경우

is empty : 검증 할 필드의 Object 가 비어있는 경우

is not empty : 검증 할 필드의 Object 가 비어있지 않은 경우

#### 최대 반복 횟수

조건검증의 방식은 조건이 만족하는 경우 Loop 아이템 블록을 벗어나지 않기 때문에, Flow 가 무한 반복되는 문제가 발생할 수 있습니다. 이러한 오류를 방지하고자 최대 반복 횟수를 설정합니다. 기본값은 10으로 등록되며, 사용자의 상황에 맞추어 적당한 값을 등록하면 됩니다.

#### 조건검증 위치

조건 검증의 방식에 따라 조건검증을 먼저 수행하고 구간 수행을 하는 경우와, 무조건 구간을 진입하여 수행을 한 뒤에 조건을 검증하는 방식이 있습니다.&#x20;

### <mark style="color:blue;">반복방식 : 배열</mark>

#### 반복대상 아이템

배열이나 Map 타입의 Object가 제공되면, 해당 Object 내부의 요소들을 반복구간으로 하나씩 전달합니다.

### 반복구간 전송 데이터

#### Original payload

Loop 아이템 블록 앞의 Flow 에서 만들어진 payload 를 전달합니다.

#### index

반복구간에서 증가하는 index 값을 전달합니다.

#### key

반복방식이 배열인 경우에만 전달이 가능합니다. 전달하는 Object 의 타입이 Map 이면 key가 전달되지만, 배열인 경우에는 배열의 index 값이 전달됩니다.

#### value

반복방식이 배열인 경우에만 전달이 가능합니다. 전달하는 Object의 값을 전달합니다.


# Assign

## 아이템 블록

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FeosxLG95QhJBFS1RvWto%2F00030.jpg?alt=media&amp;token=a5da97ad-64a0-4626-89a1-a76d014e316f" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FSRVqJeKKB2gF7gxi4Ck1%2F00031.jpg?alt=media&amp;token=340c7f39-1f62-44c0-8ce7-682f0e6a9bb0" alt=""><figcaption></figcaption></figure>

## 설정 필드

### 값할당

#### 왼쪽 영역(Target)

값을 할당 할 Target 입니다. global/msg 영역에 값을 할당할 수 있으며, Assign 아이템 블록이 Loop 아이템의 반복 구간안에 위치한다면, loop 영역에 값을 할당할 수 있습니다.

#### 오른쪽 영역(Source)

할당 할 실제 값 입니다. 위 예제는 고정 된 값을 예제로 드렸지만, 다양한 타입의 값을 할당할 수 있습니다.

문자 : string 타입의 고정 값을 설정할 수 있습니다.

숫자 : number 타입의 고정 값을 설정할 수 있습니다.

true/false : boolean 타입의 고정 값을 설정할 수 있습니다.

타임스탬프 : 현재 날짜와 시간의 타임스탬프 값을 날짜 타입으로 설정할 수 있습니다.

코드입력 : JavaScript 코딩을 직접 구현하여 값을 설정할 수 있습니다. return 값이 설정됩니다.

JSON : JSON 코드를 직접 작성하여 값을설정할 수 있습니다.

배열 : JSON  코드를 이용한 배열을 작성하여 설정할 수 있습니다.

global : global 메모리 영역의 값을 불러와 할당할 수 있습니다.

msg : msg 메모리 영역의 값을 불러와 할당할 수 있습니다.


# Input Data

데이터를 읽어올 수 있는 기능을 제공합니다. 직접 코딩하는 환경이 아니기 때문에, 미리 준비한 Google Sheets 데이터를 읽어오는 아이템 블록과, CSV 파일을 직접 업로드 하여 읽어올 수 있도록 기능을 제공하고 있습니다.


# Google Sheets

## 아이템 블록

구글 Sheets 서비스를 이용하여 Sheets 의 데이터를 읽어오는 아이템 블록입니다. 읽어온 데이터는 msg 메모리 영역의 payload 에 등록됩니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FfvsqAxO8h8FhzI75cnyM%2F00034.jpg?alt=media&amp;token=98e52a56-6ca9-446e-9522-e040afaa6b29" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FrL4wuHVsET647IYrlb5j%2F00033.jpg?alt=media&amp;token=665f1f12-bb43-45bf-a9d1-fbce504c9f05" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Spreadsheet ID

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FVMFswRN9SI1PxVUvGAe1%2F00035.jpg?alt=media&amp;token=87989c7c-02b3-428e-ab9b-37d6e6f6b8a5" alt=""><figcaption></figcaption></figure>

구글 Sheets 서비스를 실행하면 위 이미지와 같이 인터넷 브라우저의 주소창에서 ID를 확인할 수 있습니다.

### Sheet 이름

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FbAPpLcbNPnM8vKLMeOa9%2F00036.jpg?alt=media&amp;token=0bdafe97-3aa6-43ab-b818-b83c5d34ef3f" alt=""><figcaption></figcaption></figure>

구글 Sheets 하단 왼쪽에 보시면 위 이미지와 같은 Sheet 이름을 확인하실 수 있습니다.

### Input 영역

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FUaA3sWIafMB15GcW10Sv%2F00037.jpg?alt=media&amp;token=33e0664b-9c3b-4017-8c7e-e497cb675c2f" alt=""><figcaption></figcaption></figure>

데이터를 읽어오는 영역을 설정합니다.&#x20;

위 이미지와 같이 설정 팝업에서 영역 설정이 가능하며, column 과 시작하는 row 는 선택이 가능하지만 읽어오는 마지막 row 는 문서의 끝까지 읽어오도록 되어 있습니다.


# CSV File

## 아이템 블록

CSV 파일을 작성하여 직접 업로드 하고, 해당 파일을 읽어오는 아이템 블록입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FKGzNV8LKPt6W4LcvEfdF%2F00038.jpg?alt=media&amp;token=0d30f689-9957-4c58-af48-7a2b741138e6" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FoKfXrmvU3ASb6paLhZZk%2F00039.jpg?alt=media&amp;token=a70056f3-97a2-4554-a6b0-cd20fa6a1256" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Text File

업로드 버튼을 통해 csv 파일을 직접 업로드 하여 해당 데이터를 읽어오는 아이템 블록입니다. csv 파일을 업로드 하세요.

엑셀에서 파일 저장시, **CSV UTF-8(쉼표로 분리)** 옵션을 선택하고 저장하셔야 오류가 없습니다.

### Input 영역선택

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FPzjGElg7XE6aN82azHYr%2F00040.jpg?alt=media&amp;token=c18b58fe-ed20-4d18-98a7-82fa8ee0ab92" alt=""><figcaption></figcaption></figure>

데이터를 읽어오는 영역을 설정합니다.&#x20;

위 이미지와 같이 설정 팝업에서 영역 설정이 가능하며, column 과 시작하는 row 는 선택이 가능하지만 읽어오는 마지막 row 는 문서의 끝까지 읽어오도록 되어 있습니다.


# Output Data

처리한 데이터를 출력하는 기능을 제공합니다. 출력 방향은 Google Sheets, TXT/CSV 파일로 저장하는 기능이 있으며, 첨부파일이 있는 이메일로전송하는 기능을 제공합니다.


# Google Sheets

## 아이템 블록

구글의 Sheets 에 데이터를 등록하는 아이템 블록입니다. 생성한 데이터를 구글 Sheets 에 등록하는 방법은 **새파일에 쓰기, 갱신하기, 이어쓰기, 키 매칭** 의 방식이 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2Fd7vrkbyqZMvB6aWKcV4l%2F00041.jpg?alt=media&amp;token=c85dec87-87ed-42f9-b93b-d2eea802ec08" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FEU01WeXdxThHciXAthMB%2F00042.jpg?alt=media&amp;token=0e2b110f-6a41-41c4-9c5f-d187a2ede581" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FG1EgrAGA4IpIS3LoCkYh%2F00043.jpg?alt=media&amp;token=e6350440-91fd-45cb-af93-ca7feb903d6a" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FhvjxDJBygZvC2Ji8QSpU%2F00044.jpg?alt=media&amp;token=ea29d4d2-1e7a-4202-a673-9243f4a5bd77" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FP31hwbgqa31XKA1jBxRi%2F00045.jpg?alt=media&amp;token=52553022-eef2-4a33-b80b-3c0b0806a1d1" alt=""><figcaption></figcaption></figure>

## 설정 필드

### <mark style="color:blue;">쓰기방식 : 새 파일에 쓰기</mark>

**년도 + 월 + 날짜 + 시간 + 분 + 초 + "-apidrag-gen"** 포맷으로 새로운 Sheets 파일을 생성하고 데이터를 등록합니다.

#### 입력 Data 지정

Sheets 에 등록 할 데이터를 지정합니다. 지정 된 데이터는 \[\[col1, col2, col3],\[col1, col2, col3],\[col1, col2, col3]] 형태의 배열이어야 합니다.

### <mark style="color:blue;">쓰기방식 : 갱신하기</mark>

지정한 구글 Sheets 의 내용을 새로운 내용으로 갱신합니다.

#### Spreadsheet ID

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FVMFswRN9SI1PxVUvGAe1%2F00035.jpg?alt=media&amp;token=87989c7c-02b3-428e-ab9b-37d6e6f6b8a5" alt=""><figcaption></figcaption></figure>

구글 Sheets 서비스를 실행하면 위 이미지와 같이 인터넷 브라우저의 주소창에서 ID를 확인할 수 있습니다.

#### Sheet 이름

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FbAPpLcbNPnM8vKLMeOa9%2F00036.jpg?alt=media&amp;token=0bdafe97-3aa6-43ab-b818-b83c5d34ef3f" alt=""><figcaption></figcaption></figure>

구글 Sheets 하단 왼쪽에 보시면 위 이미지와 같은 Sheet 이름을 확인하실 수 있습니다.

#### 입력 Data 지정(생략)

### <mark style="color:blue;">쓰기방식 : 이어쓰기</mark>

지정한 구글 Sheets 의 내용의 가장 하단에 새로운 데이터를 이어 붙입니다.

#### Spreadsheet ID(생략)

#### Sheet 이름(생략)

#### 입력 Data 지정(생략)

### <mark style="color:blue;">쓰기방식 : 키 매칭</mark>

지정한 구글 Sheets 의 **키 컬럼**의 값과 새로운 데이터의 **매핑 키 컬럼**의 값을 비교하여 **ROW 기준**으로 맞추어서 지정한 삽입위치 컬럼에 데이터를 등록합니다.

#### Spreadsheet ID(생략)

#### Sheet 이름(생략)

#### Sheet 키 컬럼

새롭게 만들어진 데이터와 비교되어 질 원본 데이터의 컬럼을 의미합니다.&#x20;

#### 삽입 위치 컬럼

Sheet 키 컬럼의 데이터와 일치하는 새로운 데이터의 ROW 를 등록할 때, 삽입 위치 컬럼 위치에서 부터 등록합니다.

#### 입력 Data 지정(생략)

#### 매핑 키 컬럼 Index

Sheet 키 컬럼과 비교할 새롭게 만들어진 데이터의 컬럼 Index 입니다.


# Text File

## 아이템 블록

TXT 파일이나 CSV 파일에 데이터를 등록하는 아이템 블록입니다. 데이터를 등록하는 방법은 **갱신하기, 이어쓰기, 키 매칭** 의 방법이 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FbVNKhn4wfHiCxYmKLIbt%2F00046.jpg?alt=media&amp;token=c10e2ab6-df06-465b-9046-65040ca4453d" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F8XK6VUqhufc5tZfz3wRZ%2F00047.jpg?alt=media&amp;token=ae494703-42fe-4291-8f99-502cb44acc69" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2Fp0vc5dm6EkW9rYtkZuQR%2F00048.jpg?alt=media&amp;token=6cef1da7-72d6-42a0-b5cf-326aa4b3a605" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FCDS2mB5xDTvgrmMF2osp%2F00049.jpg?alt=media&amp;token=c36d25e5-b8b7-4cb3-bc85-0a8bae97090e" alt=""><figcaption></figcaption></figure>

## 설정 필드

### <mark style="color:blue;">쓰기방식 : 갱신하기</mark>

항상 새로운 데이터로 파일을 갱신합니다.

#### **Target Text File**

생성하고자 하는 파일이 이름을 입력하고, 파일의 타입 csv/txt 을 선택하신 후에 링크생성 버튼을 클릭하세요. 서버에 비어있는 파일을 생성하고, 설정팝업 화면에는 다운로드 링크가 제공됩니다.

#### **입력 Data 지정**

생성된 파일에 등록 할 데이터를 지정합니다. 지정 된 데이터가 텍스트 데이터이거나 Map 데이터인 경우에는 COLUMN과 ROW 로 이루어진 정형화된 데이터가 아닌 텍스트 형태로 파일에 쓰기가 됩니다. 그러나 \[\[col1, col2, col3],\[col1, col2, col3],\[col1, col2, col3]] 형태의 배열인 경우에는 정형화된 데이터로 등록이 됩니다.

파일의 타입이 txt 인 경우 컬럼을 <mark style="color:red;">탭</mark>으로 구분하여 저장하고, csv 인 경우에는 <mark style="color:orange;">","</mark> 로 구분하여 저장됩니다.

### <mark style="color:blue;">쓰기방식 : 이어쓰기</mark>

존재하는 데이터에 줄바꿈 하여 새로운 데이터를 추가합니다.

#### **Target Text File(생략)**

#### **입력 Data 지정(생략)**

### <mark style="color:blue;">쓰기방식 : 키 매칭</mark>

현재S존재하는heet 키 컬럼의 값과 새로운매데이터의핑 키 컬럼 Index 의 값을 비교하여, Sheet 키 컬럼과 같은 ROW 에 새로운 데이터의 ROW 를 추가합니다.

#### **Target Text File(생략)**

#### Sheet 키 컬럼

새롭게 만들어진 데이터와 비교되어 질 원본 데이터의 컬럼을 의미합니다.&#x20;

#### 삽입 위치 컬럼

Sheet 키 컬럼의 데이터와 일치하는 새로운 데이터의 ROW 를 등록할 때, 삽입 위치 컬럼 위치에서 부터 등록합니다.

#### **입력 Data 지정(생략)**

#### 매핑 키 컬럼 Index

Sheet 키 컬럼과 비교할 새롭게 만들어진 데이터의 컬럼 Index 입니다.


# Email

## 아이템 블록

처리한 결과를 이메일을 통해 전송할 수 있습니다. 이메일 본문 내용 작성도 가능하고, 파일을 생성하여 첨부하는 것도 가능한 아이템 블록입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FenFyVSd6hxTaCuUuav7x%2F00050.jpg?alt=media&amp;token=10e7cad0-9ebc-48cd-a6f8-17c470be13a5" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FnytM3cJGr1ApL2aj5vyr%2F00051.jpg?alt=media&amp;token=2016ee79-cca6-4f0a-84b0-35ddcf754457" alt=""><figcaption></figcaption></figure>

## 설정 필드

### 발신자 이름

이메일 발신자 주소는 <no-reply@bucketerm.com> 으로 고정이 됩니다. 그리고 발신자 이름은 사용자가 등록한 이름으로 발송 됩니다.

### 수신자 주소

이메일을 수신 할 주소 목록을 배열 형태로 제공받습니다.

### 참조 주소

이메일을 참조로 수신하게 될 주소 목록을 배열 형태로 제공받습니다.

### 제목

이메일 제목입니다.

### 본문 파라미터

이메일 본문 작성시에 **${parameterKey}** 패턴으로 값을 입력하면 파라미터로 제공되는 Map 의 Value 로 값을 대체하여 작성합니다.

### 본문 편집

본문은 HTML 문서로 작성할 수 있습니다. 본문 내용이 동적으로 변경되어야 된다면, 본문 파라미터를 이용하여 문서 작성을 하시면 됩니다.

### 첨부파일명

메일에 파일을 첨부하실 수 있습니다. 첨부파일명을 입력하시고, 첨부파일 타입을 선택하시면 됩니다.

### File contents

생성된 파일에 등록 할 데이터를 지정합니다. 지정 된 데이터가 텍스트 데이터이거나 Map 데이터인 경우에는 COLUMN과 ROW 로 이루어진 정형화된 데이터가 아닌 텍스트 형태로 파일에 쓰기가 됩니다. 그러나 \[\[col1, col2, col3],\[col1, col2, col3],\[col1, col2, col3]] 형태의 배열인 경우에는 정형화된 데이터로 등록이 됩니다.

파일의 타입이 txt 인 경우 컬럼을 <mark style="color:red;">탭</mark>으로 구분하여 저장하고, csv 인 경우에는 <mark style="color:orange;">","</mark> 로 구분하여 저장됩니다.&#x20;


# Web Service

HTTP  프로토콜을 이용하여 외부 서비스를 호출하거나, HTTP 서버로서 서비스를 제공할 수 있습니다.


# Http Request

## 아이템 블록

외부 시스템에 HTTP 요청을 보내서 그 결과를 받을 수 있는 아이템 블록입니다. API Drag 에서 제공하고 있는 API 목록을 통해 다양한 OPEN API를 호출할 수 있지만, 혹시 API Drag 에서 아직 제공되지 않는 OPEN API 호출이 필요하다면 Http Request 를 통해 호출할 수 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FFzoCBbFuOVSpZyxigf2J%2F00052.jpg?alt=media&amp;token=b16bfca0-6f2f-4bc3-b16f-feb1f73773ee" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F64XL5lWIxxP4eOkBqXXO%2F00055.jpg?alt=media&amp;token=9e3f50e0-3f26-46bc-ac79-b10ecd22e118" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Method

* GET
* POST
* PUT
* DELETE
* PATCH

위 다섯가지 Method 가 제공됩니다. 서비스를 제공하는 서버의 API 문서를 기준으로 선택합니다.

### URL

서비스를 제공하는 서버의 API 문서를 기준으로 URL 을 입력합니다. 경로 매개변수가 사용되는 경우에는 **'{'** 와 **'}'** 사이에 경로 매개 변수 필드의 Key 이름을 입력하면 전송 시 경로 매개변수의 Value 로 대체하여 호출됩니다.

### 경로 매개 변수

서비스를제공하는U서버의R   API 문서에서 경로 매개 변수를 정의하였다면, 해당 경로 매개 변수 패턴에 맞게 값을 입력해서 호출해야 됩니다. URL 에 경로 매개 변수 패턴을 입력하고, 해당 값을 이 항목에서 Map 형태로 제공해 주어야 합니다.

### 쿼리 매개 변수

쿼리 매개 변수는 URL 뒤에 ?를 붙이고 key1=value1\&key2=value2 형태로 호출하는 방법입니다. 쿼리 매개 변수를 위해 URL 에 직접 고정 값을 붙일 수 있지만, 동적으로 값이 변한다면 이 항목에 Map 형태로 데이터를 제공하세요. 서비스 호출시에 쿼리 매개 변수 패턴에 맞는 값으로 변경하여 서비스를 호출합니다.

### 요청 본문

서비스를 제공하는 서버의 API 문서에 Requestbody 가 정의되어 있다면, 이 항목을 통해 값을 전달할 수 있습니다. 요청본문의 구성은 Map과 Array 를 이용하여 구성합니다. 서비스의 API 문서를 분석하여 데이터구조를 구성하시면 됩니다.

### 인증

인증 구성은 서비스를 제공하는 서버의 API 문서에 정의되어 있습니다. 해당 문서를 확인 후 알맞은 인증종류를 선택하시면 됩니다. 만약 인증을 요구하지 않는다면 **인증을 사용** 체크박스를 지우세요.

> Basic 인증

ID 와 패스워드를 사용하는 가장 기본적인 인증입니다. 보안 문제로 인해 많이 사용되지 않는 방식입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FnOJ2pQvw9onDq1kQDA3g%2F00058.jpg?alt=media&amp;token=f223d338-189b-4e31-9e53-b780b75d1310" alt=""><figcaption></figcaption></figure>

> Digest 인증

Basic 인증보다는 보안성을 강화한 인증방식입니다. 호출하는 대상 서비스에서 Digest 인증을 사용한다면, ID 와 패스워드를 발급받아 입력하시면 됩니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FIngBLPTXS0XfjTBeWqaj%2F00059.jpg?alt=media&amp;token=d45a827e-4c2e-410f-879a-9887d5a68901" alt=""><figcaption></figcaption></figure>

> Bearer 인증

OPEN API 에서 가장 보편적으로 많이 사용하고, 가장 안전한 인증방식입니다. 호출하는 대상 서비스에서 Bearer 인증을 사용한다면, 토큰를 발급받아 입력하시면 됩니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F0b8netV2vdaLPDfLb5jO%2F00060.jpg?alt=media&amp;token=efa1ed70-f943-4ac2-8b73-8fc9cea888a1" alt=""><figcaption></figcaption></figure>

### 수신타입

* UTF 문자열
* JSON 오브젝트
* HTML
* XML
* SCRIPT

Http 호출을 하고 그 결과를 어떠한 방식으로 수신할지에 대한 설정입니다.

서비스를 제공하는 서버의 API 문서를 기준으로 수신타입을 등록하세요. OPEN API 서비스들은 보통 JSON 오브젝트 타입의 수신타입을 가장 많이 사용합니다.

### Header

* Accept : 위 **수신타입**과 같은 기능입니다. **수신타입**에 설정하지 않고 Header에 값을 설정이 가능하지만, **수신타입**에 값을 설정하면 Header 의 Accept 는 **수신타입**의 값으로 갱신됩니다.
* Accept-Encoding
* Accept-Language
* Authorization : 위 **인증** 설정과 같은 기능입니다. 위 **인증**에서 지원하지 않는 기능이 있다면 이 곳 Header 에서 직접 값을 설정할 수 있습니다. **인증**에 값을 설정하면 이 곳 헤더의 Authorization 값은 **인증**에 설정 한 값으로 갱신됩니다.
* Content-Type
* Cash-Control
* User-Agent
* Location
* 일반 : 위 항목 외에 추가 Header 설정이 필요하다면 Key 와 Value 를 사용자가 직접 입력하여 사용할 수 있습니다.


# Http In

## 아이템 블록

API Drag 를 서버로 등록하여 API 서비스를 제공하게 해 주는 아이템 블록입니다. 테스트/디버그 상태에서는 외부에서 1회 후출 후 Macro 서비스가 종료 됩니다. 정식으로 서비스를 배포하면, 항상 HTTP 호출에 대한 대기를 합니다. 기본 개념 이해하기 항목에서 **동작 Trigger** 설명을 드렸습니다. Http In은 Http 호출시에 동작하는 Trigger 입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FkV7oOzqntxfanJPaRA7d%2F00053.jpg?alt=media&amp;token=3aa328d9-5478-43ed-a6fc-c906b1098da2" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FmoPh6venMrVLhHbvCRcw%2F00056.jpg?alt=media&amp;token=e0a6a641-9e5e-41b4-a136-e91860b25878" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Method

* GET
* POST
* PUT
* DELETE
* PATCH

서비스를 제공하기 위한 Method 입니다. 서비스를 위한 적당한 Method 를 선택하세요.

### URL

API Drag 가입 후 처음 Http In 아이템 블록을 프로젝트 편집기 위에 Drop 하시면, Subdomain 생성 팝업을 확인하실 수 있습니다. 적당한 Subdomain을 결정하시어 입력하시면, 위 설정 팝업 화면에서 보시는 것 같은 angel 이라는 서브도메인과 함께 나머지 도메인 주소를 확인하실 수 있습니다.&#x20;

URL 항목은 이런 도메인 주소 뒤에 붙을 호출 경로를 추가해 주시면 됩니다.

Subdomain은 API Drag 내에서 유일한 값이어야 하며, 그 뒤에 붙는 주소는 Subdomain 내에서 유일한 경로여야 합니다.


# Http Response

## 아이템 블록

항상 Http In 블록 아이템과 쌍을 이루는 아이템 블록입니다. Http In 에서 수신한 요청에 대하여Http Response 를 통해서 응답을 합니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FipOOmIyZzE0dJlhI6gRo%2F00054.jpg?alt=media&amp;token=adc25696-287d-4e18-a550-215a9010c4a1" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FgFUZimvrmNAv8B6S39uJ%2F00057.jpg?alt=media&amp;token=04c20d71-7979-406c-ae10-8f0062746297" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Status Code

응답의 결과 코드를 입력합니다.&#x20;

<https://developer.mozilla.org/ko/docs/Web/HTTP/Status> 페이지에서 다양한 HTTP 응답코드를 확인하실 수 있습니다.

### Header

응답 메시지의 헤더를 설정합니다.

* Content-Type
* Location
* Content-Disposition
* 일반 : 위 항목 외에 추가 Header 설정이 필요하다면 Key 와 Value 를 사용자가 직접 입력하여 사용할 수 있습니다.

### 응답 본문

응답하고자 하는 본문을 지정합니다.


# Http Redirect

## 아이템 블록

Http In 아이템 블록을 통해 들어온 요청을 다른 주소로 Redirect 합니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FkBGvZFr8QZUP5ZEEVO3s%2F00092.jpg?alt=media&amp;token=3e498a01-fab9-4050-ad79-a9a8cdb86f40" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2Fl4VSPKoQdLYcr0AeKNJC%2F00093.jpg?alt=media&amp;token=b16c72f7-5549-4fe4-a847-4aeef2809926" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Redirect URL

Http In 아이템 블록을 통해 들어온 요청을 Redierct 하기 위한 타겟 주소입니다.

### 쿼리 매개 변수

다른 주소로 Redirect 할 때 필요한 쿼리 매개변수를 추가할 수 있습니다.&#x20;

앞에서 설정 된 global/loop/msg 메모리 영역에 값을 지정합니다.

{% hint style="info" %}
쿼리 매게변수에 지정 된 값은 {key:value} 형태의 JSON 값이어야 합니다.

예를들어 msg.queryParams.code = 'somecode' 그리고 msg.queryParams.state = 'online' 와 같이 설정되어 있다면 Redirect 주소는 <mark style="color:blue;">**<https://www.domain.com/?code=somecode\\&state=online>**</mark> 와 같이 전달됩니다.
{% endhint %}

## 프로젝트 구성

Http Redirect 아이템 블록은 Http In 아이템 블록과 항상 쌍으로 구성되어야 합니다. 아래 이미지를 참조해 주세요.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FnfMSUtLkWc991JqnoZz7%2F00094.jpg?alt=media&amp;token=0be84385-a223-4f60-896d-7f0626a60fa9" alt=""><figcaption></figcaption></figure>


# API References


# 카카오 로그인


# 로그인

## 아이템 블록

카카오톡 로그인 아이템 블록은 카카오톡 로그인 서비스를 제공하기 위한 Gateway 역할을 합니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FcLeE8uo7oCIDjCyLrzPv%2F00061.jpg?alt=media&amp;token=62e1959a-d412-457d-83d7-d3f16fe2ca9c" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FOveojFW8DNSpDIFYdNpk%2F00062.jpg?alt=media&amp;token=42971f77-ab7e-44e2-a4a8-c9ea9aeced6e" alt=""><figcaption></figcaption></figure>

## 설정 필드

### 앱 REST API 키

Kakao Developers 사이트에서 앱을 등록하고 발급받을 수 있습니다.&#x20;

내 애플리케이션 > 앱 설정 > 요약정보 경로에서 확인하세요.

### Redirect URI

인가 코드를 전달받을 서비스 서버의 URI 입니다. 이 항목은 Kakao Developers 사이트에서 미리 Redirect URI 항목에 등록되어 있어야합니다. API Drag 서비스를 통해 Redirect 이후 서비스를 구현하고자 한다면, API Drag 의 Http In 아이템 블록에서 제공하는 서브도메인을 활용하면 됩니다.

\[내 애플리케이션] > \[카카오 로그인] > \[Redirect URI]에서 등록합니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FGkXYdZSIK115qnAZpcSe%2F00066.jpg?alt=media&amp;token=a9a4d435-4d18-438e-aade-930bcdfcfd28" alt=""><figcaption></figcaption></figure>

### 추가항목 동의목록

<mark style="color:blue;">추가 항목 동의 받기</mark> 요청 시 사용합니다.\
사용자에게 동의 요청할 동의 항목 ID 목록입니다.\
동의 항목의 ID는 <mark style="color:blue;">사용자 정보</mark> 또는 \[내 애플리케이션] > \[카카오 로그인] > \[동의 항목]에서 확인 가능\
쉼표(,)로 구분해 여러 개 전달 가능합니다.\
\
**주의**: OpenID Connect를 사용하는 앱의 경우, `scope` 파라미터 값에 `openid`를 반드시 포함해야 합니다. 미포함 시 ID 토큰이 재발급되지 않습니다.

### 로그인 화면 종류

* 로그인 화면

존 사용자 인증 여부와 상관없이 사용자에게 카카오계정 로그인 화면을 출력하여 다시 사용자 인증을 수행하고자 할 때 사용합니다.&#x20;

카카오톡 인앱 브라우저에서는 이 기능이 제공되지 않습니다.

* 카카오 신규가입 화면

사용자에게 카카오계정 신규 가입 후 로그인하도록 하기 위해 사용합니다.&#x20;

<mark style="color:blue;">카카오계정 가입 페이지</mark>로 이동 후, 카카오계정 가입 완료 후 동의 화면 출력합니다.

* 화면 보이지 않기

사용자에게 동의 화면과 같은 대화형 UI를 노출하지 않고 인가 코드 발급을 요청할 때 사용합니다.

인가 코드 발급을 위해 사용자의 동작이 필요한 경우 에러 응답 전달합니다.

### 서비스 약관

<mark style="color:blue;">약관 선택해 동의 받기</mark> 요청 시 사용합니다.

동의받을 약관 태그 목록이며, 약관 태그는 \[내 애플리케이션] > \[간편가입]에서 확인 가능합니다.

쉼표(,)로 구분된 문자열 값 목록으로 전달합니다.

### 전달 파라미터

카카오 로그인 과정 중 동일한 값을 유지하는 임의의 문자열(정해진 형식 없음)입니다.

<mark style="color:blue;">Cross-Site Request Forgery(CSRF)</mark> 공격으로부터 카카오 로그인 요청을 보호하기 위해 사용하며, \
각 사용자의 로그인 요청에 대한 `state` 값은 고유해야 합니다.

인가 코드 요청, 인가 코드 응답, 토큰 발급 요청의 `state` 값 일치 여부로 요청 및 응답 유효성 확인이 가능합니다.

로그인 과정의 처음에서 마지막 단계까지 전달 할 데이터가 있으면 활용이 가능합니다.

### ID 토큰 검증 문자열

<mark style="color:blue;">OpenID Connect</mark>를 통해 ID 토큰을 함께 발급받을 경우, <mark style="color:blue;">ID 토큰 재생</mark> 공격을 방지하기 위해 사용\ <mark style="color:blue;">ID 토큰 유효성 검증 시</mark> 대조할 임의의 문자열(정해진 형식 없음)

## 로그인 프로젝트 구성

OAuth 로그인 과정은 복잡합니다. 아래 예제를 보고 그 흐름을 이해해 보세요.

> 1. Http In 아이템 블록을 이용하여 웹 호출에 대한 Listen 상태를 만들어야 합니다. 사용자가 브라우져나 프로그램을 통해서 접근 할 주소를 적절히 <mark style="color:blue;">Http In 아이템 블록</mark>의 설정에 등록하면 됩니다. 그리고 <mark style="color:blue;">로그인 아이템 블록</mark> 설정은 위 설정 필드 챕터를 참고하여 설정하시면 됩니다.

<div><figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FKwJl8J53CHcz1eXkCCxD%2F00063.jpg?alt=media&amp;token=f941df78-08d5-4b46-ba76-7c76277857f3" alt=""><figcaption></figcaption></figure> <figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FBecOQXrKYq1NODKsajsH%2F00068.jpg?alt=media&amp;token=783b2e12-2a58-4510-9e0a-8f04afb2f48f" alt=""><figcaption></figcaption></figure></div>

> 2. 사용자가 브라우져나 프로그램을 통해 위 주소로 접근하면 아래와 같이 Kakao 로그인 화면이 나옵니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FBb6iLZ0HS9lyGsaT5xSh%2F00065.jpg?alt=media&amp;token=331f60ac-8cac-4e8d-90e2-59a205a7663c" alt=""><figcaption></figcaption></figure>

> 3. 위 로그인화면에서 ID / PW 를 입력하면 아래 미리 등록한 Redirect URI 주소로 [토큰 받기](https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-token) 요청에 필요한 인가 코드가 <mark style="color:blue;">code</mark> 파라미터를 통해 전달됩니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FGkXYdZSIK115qnAZpcSe%2F00066.jpg?alt=media&amp;token=a9a4d435-4d18-438e-aade-930bcdfcfd28" alt=""><figcaption></figcaption></figure>

> 4. 처음 생성한 Project 와 별도로 새로운 Project 를 만들고 Redirect URI 호출에 대비하여 Http In 아이템 블록을 이용하여 아래와 같이 구성을 해야 합니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FbIjG2Qk95pvTP6dEpByo%2F00067.jpg?alt=media&amp;token=1319180f-45e8-4bd4-aab8-325a2c3949b5" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F4epPgAzWRQJnu1epj2lW%2F00064.jpg?alt=media&amp;token=54d7e52f-e424-4a8f-bc74-cdd57dbfbd77" alt=""><figcaption></figcaption></figure>

> 5. Http Response 의 응답은 아래와 같이 정상 응답으로 설정하시면 됩니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FkxdCyvv87qOz5oyKXa1E%2F00069.jpg?alt=media&amp;token=1a58ecd8-852b-48ef-a4d0-64ec3c27ed57" alt=""><figcaption></figcaption></figure>


# 카카오 로그아웃

## 아이템 블록

로그아웃은 사용자가 카카오 로그인을 통해 발급받은 토큰을 만료시키는 기능입니다. 사용자가 서비스에서 로그아웃할 때 이 API를 호출하여 더 이상 해당 사용자의 정보로 카카오 API를 호출할 수 없도록 합니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2Fk5jSUwz1ZRrWn0VdAkfr%2F00076.jpg?alt=media&amp;token=465290e1-8536-4fee-91ab-229638853b47" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F7bVfvzzPj8OR6KBhGJoe%2F00077.jpg?alt=media&amp;token=24fa90a5-62d8-43ec-97f4-890e5609d293" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Access Token

사용자 인증 수단이며, 사용자 정보를 요청하고자 하는 사용자를 구분하는 키 입니다.

## 응답

응답 관련 내용은 아래 링크를 통해  카카오 API 문서를 확인해 보세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#logout-response>


# 서비스 로그아웃

## 아이템 블록

로그아웃 시 <mark style="color:blue;">**카카오계정도 동시에 로그아웃**</mark> 처리하고 싶다면 서비스 로그아웃 기능을 사용합니다. 카카오계정과 함께 로그아웃은 서비스만 로그아웃할 것인지, 카카오계정도 함께 로그아웃할 것인지 선택할 수 있는 <mark style="color:blue;">**연결 페이지를 제공**</mark>합니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FBvVQ9aQRHFCbGCw1XHnx%2F00078.jpg?alt=media&amp;token=80268df8-202b-4d80-98f3-54c870c21b4f" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2Fqwxzz2zPGyBi8UgMzgwY%2F00079.jpg?alt=media&amp;token=d611122c-5876-4967-83f2-e2997d8ba861" alt=""><figcaption></figcaption></figure>

## 설정 필드

### 앱 REST API 키

Kakao Developers 사이트에서 앱을 등록하고 발급받을 수 있습니다.&#x20;

내 애플리케이션 > 앱 설정 > 요약정보 경로에서 확인하세요.

### Redirect URI

서비스 회원 로그아웃 처리를 수행할 Logout Redirect URI 콜백주소입니다.

&#x20;\[내 애플리케이션] > \[카카오 로그인] > \[Logout Redirect URI]에 등록된 값 중 하나

### 전달 파라미터

카카오 로그인 과정 중 동일한 값을 유지하는 임의의 문자열(정해진 형식 없음)입니다. [Cross-Site Request Forgery(CSRF)](https://en.wikipedia.org/wiki/Cross-site_request_forgery) 공격으로부터 카카오 로그인 요청을 보호하기 위해 사용합니다.\
각 사용자의 요청에 대한 `state` 값은 고유해야 하며, 인가 코드 요청, 인가 코드 응답, 토큰 발급 요청의 `state` 값 일치 여부로 요청 및 응답 유효성 확인이 가능합니다.

## 서비스 로그아웃 프로젝트 구성

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FRmCkD6V6ciaIVBEt0tZf%2F00083.jpg?alt=media&amp;token=d911c8c8-9a7d-45eb-8b5c-349f6b469f34" alt=""><figcaption></figcaption></figure>

서비스 로그아웃 처리를 위해서는 위와 같이 서비스 로그아웃 요청을 우선 수행합니다.

서비스 로그아웃 처리를 요청하면 아래와 같은 페이지로 전환이 되며, 로그아웃 종류를 사용자가 선택할 수 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FAasYD8KbA6anh1W7VEXl%2F00084.jpg?alt=media&amp;token=fb701ef0-14d4-4e7b-9177-bdf700df89d1" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FTlYzsXBKaZHskf4BubZD%2F00082.jpg?alt=media&amp;token=0fdf85de-4f26-4a48-bdef-c6444c06e8a5" alt=""><figcaption></figcaption></figure>

로그아웃 처리가 완료되면 위와 같이 콜백 주소로 호출이 됩니다. 해당 호출을 이용하여 로그아웃 후처리를 진행해 주세요.

## 응답

응답 관련 내용은 아래 링크를 통해  카카오 API 문서를 확인해 보세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#logout-of-service-and-kakaoaccount-response>


# 연결하기

## 아이템 블록

연결하기 API는 <mark style="color:blue;">**자동 연결을 \[사용 안함]**</mark>으로 설정한 앱에서 앱과 사용자를 수동으로 연결하는 기능입니다. 자동 연결은 카카오 로그인 완료 시 앱과 사용자를 자동으로 연결하는 기능으로, 필요 시 카카오와 협의를 거쳐 자동 연결의 사용 여부를 설정할 수 있습니다.

> 연결하기는 자동 연결을 사용하지 않는 앱에서만 사용하는 API입니다. 사용 중인 앱의 자동 연결 사용 여부는 \[내 애플리케이션] > \[카카오 로그인] > \[로그인 시 앱 자동 연결] 메뉴에서 확인할 수 있습니다. 해당 설정이 노출되지 않는다면 자동 연결을 사용하는 앱입니다. \[로그인 시 앱 자동 연결] 설정이 노출된다면 자동 연결 사용 여부를 설정할 수 있는 앱으로, \[사용 안함]으로 설정돼 있을 경우 연결하기 API를 사용해야 합니다.

자동 연결을 사용하지 않는 서비스는 **반드시 연결하기를 호출해 사용자와 앱을 직접 연결**해야 합니다. 또한 사용자의 서비스 가입 상태와 앱 연결 상태가 일치하는지 확인하고 연결하기 및 연결 끊기를 사용해 사용자의 연결 상태를 관리해야 합니다. 따라서 반드시 필요한 경우가 아니라면 기본 설정인 자동 연결을 사용하는 것을 권장합니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FVTM7USE671k4lIdBUGDq%2F00080.jpg?alt=media&amp;token=a03b5820-bd6c-46b6-967c-069870786b87" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FeZVkolfjeibTdNKIyd9R%2F00081.jpg?alt=media&amp;token=f4265da5-4739-4a99-9742-e1bf4cff038a" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Access Token

사용자 인증 수단이며, 사용자 정보를 요청하고자 하는 사용자를 구분하는 키 입니다. 연결할 계정의 로그인 후 발급 된 토큰 정보를 제공해 주세요.

### 사용자 속성

{"key":"value"} 형태의 사용자 정보 리스트입니다. 연결하기 시 사용자 프로퍼티 값을 저장하고자 할 때 전달합니다.

자세한 항목은 아래 링크를 통해 확인해 주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/prerequisite#user-properties>

## 응답

연결하기 기능의 응답은 아래 링크를 통해 카카오 API 문서에서 확인해 주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#sign-up-response>


# 연결끊기

## 아이템 블록

연결 끊기는 앱과 사용자 카카오계정의 연결을 끊는 기능입니다. 연결 끊기 요청에 성공하면 해당 사용자 회원번호를 응답으로 받습니다. 또한 로그아웃이 함께 진행되어 액세스 토큰과 리프레시 토큰이 만료 처리됩니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FgdUQSyyS1wpEyQ4ixihN%2F00085.jpg?alt=media&amp;token=db9932f6-f98f-4ed8-b02b-5322e04b6577" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FIMTiX9TLNKHyVRtj4eW8%2F00086.jpg?alt=media&amp;token=1070d54d-88db-4687-b234-f6ddaf60c0cb" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Access Token

사용자 인증 수단이며, 사용자 정보를 요청하고자 하는 사용자를 구분하는 키 입니다. 연결을 끊을 계정의 토큰을 제공해 주세요.

## 프로젝트 구성

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FTH8QFH72GWTv9ogZO7X7%2F00087.jpg?alt=media&amp;token=688e9422-eb2c-423e-86d6-627877b0527b" alt=""><figcaption></figcaption></figure>

연결끊기 기능은 API Drag 서비스를 Gateway로 활용하는 기능만을 제공합니다. 즉, API Drag 에 생성되어 있는 계정을 연결끊기할 수 없습니다.&#x20;

위 샘플 구성을 보시면, 외부로 부터 요청을 받아 연결끊기 후 응답을 하는 구조로 구성되어 있습니다.

## 응답

연결끊기의 응답은 아래 링크를 통해 카카오 API 문서를 확인해 보세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#unlink-response>


# 토큰정보

## 아이템 블록

액세스 토큰의 유효성을 검증하거나 정보를 확인합니다. 토큰 만료 여부나 유효기간을 알 수 있어 갱신 과정에 활용할 수 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FN3ZRFmbnSqmYXNtx506F%2F00088.jpg?alt=media&amp;token=6b3b8835-1068-49d3-a48b-fb6e3649f0f2" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FFSyPhxSNTYutAs4KuGcA%2F00089.jpg?alt=media&amp;token=b4b1069a-2225-4131-b505-19bfe4d2d5f1" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Access Token

사용자 인증 수단이며, 사용자 정보를 요청하고자 하는 사용자를 구분하는 키 입니다. 정보를 조회하고자 하는 회원의 토큰 정보를 제공해주세요.

위 설정팝업 예제에서는 <mark style="color:blue;">**저장 된 내 토큰**</mark>을 선택했는데, 이는 API Drag 서비스 내에 생성되어 있는 본인의 계정 토큰 정보를 조회할 수 있습니다.

자체적으로 서비스하고 있는 앱의 회원 토큰 정보를확인하기 원하신다면 운영하시는 서비스의 회원 토큰을 제공해 주세요.

## 응답

응답 정보는 아래 링크를 통해 카카오 API 문서를 확인해 주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#get-token-info-response>


# 토큰발급

## 아이템 블록

카카오 API에 접근하기 위해서는 사용자 별 토큰을 발급해야 합니다. API Drag 내에 발급되어 있는 자신의 개인토큰을 이용하여 개인 서비스를 만들고자 한다면 <mark style="color:blue;">**'저장된 내 토큰'**</mark> 을 선택하여 서비스를 만들 수 있습니다. 그러나 자체 서비스를 운영하고 있으면서 그 서비스에 회원을 관리하고 있으시다면 <mark style="color:blue;">**API Drag 를 Gateway 용도**</mark>로 사용할 수 있습니다. 이런 용도로 API Drag를 활용하시는 경우에는 자체서비스에 연결되는 회원의 토큰을 발급받으셔서 회원 서비스를 제공해야 합니다. API Drag는 이러한 케이스를 위하여 로그인 아이템 블록과 토큰발급 아이템 블록을 제공하고 있습니다.

토큰발급 아이템 블록을 통해 발급되는 토큰은 API Drag와는 관련이 없습니다. 발급되는 토큰은 고객님의 서비스로 다시 전송하여 관리 하셔야 합니다. 고객님의 자체 서비스로 전송을 하기 위해서는 Http Request 블록 아이템을 이용하여 고객님의 웹서비스로 데이터를 전송하셔서 받으시면 됩니다.

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FcCL8PRpqQIBpSMXWtXYP%2F00071.jpg?alt=media&amp;token=434c7e2b-5c77-4373-ad1d-3646b72a064c" alt=""><figcaption></figcaption></figure>

## 설정 필드

### 앱 REST API 키

Kakao Developers 사이트에서 앱을 등록하고 발급받을 수 있습니다.&#x20;

내 애플리케이션 > 앱 설정 > 요약정보 경로에서 확인하세요.

### Redirect URI

인가 코드를 전달받을 서비스 서버의 URI 입니다. 이 항목은 Kakao Developers 사이트에서 미리 Redirect URI 항목에 등록되어 있어야합니다. API Drag 서비스를 통해 Redirect 이후 서비스를 구현하고자 한다면, API Drag 의 Http In 아이템 블록에서 제공하는 서브도메인을 활용하면 됩니다.

\[내 애플리케이션] > \[카카오 로그인] > \[Redirect URI]에서 등록합니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FGkXYdZSIK115qnAZpcSe%2F00066.jpg?alt=media&amp;token=a9a4d435-4d18-438e-aade-930bcdfcfd28" alt=""><figcaption></figcaption></figure>

### 인가코드

HttpIn 아이템 블록을 구현하고 로그인 Redirect 정보를 수신하면 msg 메모리 영역의 payload.queryparam.code 구조에 수신이 됩니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FV57fSHTfTDXxjGKAlf7y%2F00075.jpg?alt=media&amp;token=62f3fcc8-cb9c-483d-8f80-815232cf7cb3" alt=""><figcaption></figcaption></figure>

### Client Secret

토큰 발급 시, 보안을 강화하기 위해 추가 확인하는 코드입니다. Kakao Developers 사이트의 \[내 애플리케이션] > \[보안]에서 설정 가능합니다. ON 상태인 경우 필수 설정해야 합니다.

## 토큰발급 절차

토큰 발급을 위해서는 로그인 절차가 필요하고, 로그인 뒤에 Redirect를 통해 인가코드를 수신해야 합니다.    이에 대한 설명은 로그인 항목에서 1차례 설명을 했기 때문에 아래 링크롤 통해 다시한번 구조를 확인 해 보세요.

{% content-ref url="/pages/5nlm066AVCilyCHokC23" %}
[로그인](/kakao-api/references/kakao-login/login)
{% endcontent-ref %}

## 응답

토큰발급 아이템 블록 호출에 대한 응답 내용은 아래 링크를 통해 카카오 API 문서를 확인해 보세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-token-response>


# 토큰 권한검증

## 아이템 블록

사용자가 동의한 동의 항목의 상세 정보 목록을 조회합니다. \[내 애플리케이션] > \[카카오 로그인] > \[동의 항목]에 설정된 동의 항목의 목록과 사용자가 동의한 동의 항목의 상세 정보를 반환합니다. 사용자가 기존에 동의했던 동의 항목이라면 현재 앱에 사용하도록 설정돼 있지 않아도 응답에 포함됩니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2Fc8exweuSeM9Cma8lZBy7%2F00090.jpg?alt=media&amp;token=1ea8c236-ed13-4f96-9cb3-29a9448c7a60" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2Fd28kx0ZBxWrndfypbeNM%2F00091.jpg?alt=media&amp;token=5e7d3d67-fb75-49d7-bd0b-67bb6dda23a0" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Access Token

사용자 인증 수단이며, 사용자 정보를 요청하고자 하는 사용자를 구분하는 키 입니다. 정보를 조회하고자 하는 회원의 토큰 정보를 제공해주세요.

### 검증할 동의항목 목록

특정 동의 항목에 대한 동의 내역만 불러오려는 경우 사용할 수 있습니다. <mark style="color:blue;">**동의항목**</mark>의 ID 목록을 위\
설정팝업 예제와 같이 배열 타입으로 지정할 수 있습니다.

## 응답

자세한 응답 내용은 아래 링크를 통하여 카카오 API 문서 페이지에서 확인해 주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#check-consent-response>


# 토큰갱신

## 아이템 블록

카카오에서 발급 된 사용자 토큰은 유효기간이 짧습니다. 유효기간이 지나면 사용자가 다시 로그인 액션을 하지 않는 경우 해당 토큰을 사용할 수 없기 때문에, 앱에서 자동화 처리를 할 수 없습니다. 이 경우 <mark style="color:blue;">**Refresh Token**</mark> 을 저장해 두었다가 필요한 경우 토큰을 갱신하여 사용할 수 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FMNP762rXHnYMsMW92nCF%2F00095.jpg?alt=media&amp;token=622ef182-2c27-451c-90ca-f70357fbc6bd" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FuH7hxgoAG5TeftEXKsLV%2F00096.jpg?alt=media&amp;token=4154d0a2-ae69-4631-a74e-d82e6186be8e" alt=""><figcaption></figcaption></figure>

## 설정 필드

### 앱 REST API 키

Kakao Developers 사이트에서 앱을 등록하고 발급받을 수 있습니다.&#x20;

내 애플리케이션 > 앱 설정 > 요약정보 경로에서 확인하세요.

### Refresh Token

최초 토큰 발급 시 사용자 토큰과 함께 발급이 됩니다. Refresh Token 은 시스템에 잘 저장해 두었다가 토큰이 만료되었을 때 자동화 처리를 이해 사용합니다.

### Client Secret

토큰 발급 시, 보안을 강화하기 위해 추가 확인하는 코드입니다.&#x20;

Kakao Developers 사이트의 \[내 애플리케이션] > \[보안]에서 설정 가능합니다. ON 상태인 경우 필수 설정해야 합니다.

## 응답

토큰 갱신 아이템의 응답은 아래 링크를 통해 카카오 API  개발문서를 참조해 주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#refresh-token-response>


# 사용자 정보

## 아이템 블록

카카오 API의 토큰발급 아이템 블록을 통해 발급 된 토큰은 카카오 API의 모든 API를 호출하는데 사용되는 토큰입니다. 토큰이 발급되었다면 이 토큰을 이용하여 사용자 정보를 조회할 수 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F3Ah7jWdJzpg20CdXtxYm%2F00072.jpg?alt=media&amp;token=b90f7cca-c4eb-42ba-905b-eac452f10418" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FlXCsb5O1hnCuvv62eVwc%2F00073.jpg?alt=media&amp;token=01bc66a4-1494-467d-ae8f-7fc1515c0234" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Access Token

사용자 인증 수단이며, 사용자 정보를 요청하고자 하는 사용자를 구분하는 키 입니다.

## 응답

응답 내용은 카카오 API 개발자 페이지 링크를 통해 확인 바랍니다.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#req-user-info-response>


# 사용자 목록

## 아이템 블록

사용자 목록을 가져오는 권한은 앱의 관리자만이 가능한 권한입니다. 따라서 해당 아이템 블록을 사용하기 위해서는 별도의 서비스를 운영하고 있어야 하며, API Drag 서비스는 Gateway 서비스로만 활용하실 수 있습니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FYplV3oVRDBeCCMw3zrDH%2F00097.jpg?alt=media&amp;token=28b4f4d2-8a80-4fd5-a0bb-7db37f6d38fa" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FUAtx3Xqwg69qOeTxLiXi%2F00098.jpg?alt=media&amp;token=264acdf8-50ba-41cf-bccc-b06cb4cf7aab" alt=""><figcaption></figcaption></figure>

## 설정 필드

### App Admin Key

내 애플리케이션 > 앱 설정 > 요약정보 경로에서 아래와 같은 내용을 확인 하실 수 있습니다. 이 중 Admin 키 값을 입력하시면 됩니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F3jcoiVu3Yel9klXdGyqK%2F00099.jpg?alt=media&amp;token=56ba895d-28fb-48ec-a650-cb1b22c00fe2" alt=""><figcaption></figcaption></figure>

### 페이지당 조회수

한번 조회를 요청할 때 최대 조회할 사용자 ID 목록의 갯수 입니다.

### 페이지 시작 회원번호

전체 목록의 수가 페이지당 조회수를 초과할 때, 페이지를 나누어 조회해야 합니다. 이 경우 다음 페이지를 조회하는 기준이 되는 회원번호 입니다. 사용자 목록은 from\_id과 그보다 큰 회원 번호를 가진 사용자가 포함됩니다.

### 정렬방식

오름차순과 내림차순의 옵션이 있습니다. 설정팝업에서 선택하시면 됩니다.

## 응답

자세한 응답의 내용은 아래 링크를 통해 카카오 API 문서를 확인해주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#user-list-response>


# 여러 사용자 정보

## 아이템 블록

App Admin Key 를 통하여 앱에 연결되어 있는 모든 카카오 사용자 목록을 조회하는 아이템 블록입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2Fpt1uidpZgjVnrqXHKlil%2F00100.jpg?alt=media&amp;token=2ce0bf62-017b-4a7a-95b7-931138e37c98" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FdHcc4NG9MQAh9Gv1fndc%2F00101.jpg?alt=media&amp;token=503ec75d-f524-4c65-b82a-cca7c86d7c07" alt=""><figcaption></figcaption></figure>

## 설정 필드

### App Admin Key

내 애플리케이션 > 앱 설정 > 요약정보 경로에서 아래와 같은 내용을 확인 하실 수 있습니다. 이 중 Admin 키 값을 입력하시면 됩니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F3jcoiVu3Yel9klXdGyqK%2F00099.jpg?alt=media&amp;token=56ba895d-28fb-48ec-a650-cb1b22c00fe2" alt=""><figcaption></figcaption></figure>

### 조회 ID 목록

조회할 회원번호 목록을 배열 형태로 제공합니다. 최대 100명의 사용자 정보 요청 가능하며  <mark style="color:blue;">**응답 항목의 키 목록**</mark> 필드 를 제공하여 정보를 요청하는자경우, 최대 20명의 사용자 정보 요청이 가능합니다.

### 응답 항목의 키 목록

필수항목은 아닙니다. 정보를 요청할 때 원하는 항목을 지정하여 요청할 수 있습니다. 키 목록은 카카오 API 문서를 참조해주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/common#user-info-kakao-account>

## 응답

응답 내용은 아래 링크를 통하여 카카오 API 문서를 확인해 주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#user-info-list-response>


# 사용자 정보 저장하기

## 아이템 블록

카카오에 등록되어 있는 사용자 속성정보를 수정합니다.&#x20;

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FyFbzeOY21YIF9tguT6om%2F00102.jpg?alt=media&amp;token=7e503efd-318c-4058-9d93-650ebea083e7" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FEQYMqCBsbOlLYVCaOah1%2F00103.jpg?alt=media&amp;token=46db8d6c-9f73-465e-994b-91f0a9fd1374" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Access Token

사용자 인증 수단이며, 사용자 정보를 요청하고자 하는 사용자를 구분하는 키 입니다.

### 사용자 속성

{key : value}형식의 사용자 프로퍼티 키, 값 목록을 등록/수정합니다.

사용자 속성값은 내 애플리케이션 > 제품 설정 > 카카오 로그인 > 사용자 프로퍼티 에서 사용할 사용자 속성을 미리 등록 해 주어야 합니다. 아래는 사용자 속성 등록 예시입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FqUSj4FWvdViWVudZlZar%2F00104.jpg?alt=media&amp;token=4b0b8cfa-c96e-4e1a-a786-82f3d01efb34" alt=""><figcaption></figcaption></figure>

## 응답

요청에 대한 응답은 아래 링크를 통하여 자세한 내용을 확인해 주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#properties-response>


# 동의 철회하기

## 아이템 블록

사용자가 동의한 항목에 대해 동의를 철회합니다. 아래 <mark style="color:blue;">**토큰 권한검증**</mark> 링크를 통해 조회한 동의 항목 정보 중 동의 철회 가능 여부(`revocable`) 값이 `true`인 동의 항목만 철회 가능합니다. 동의 철회가 불가능한 동의 항목을 대상으로 요청한 경우 에러 응답을 받습니다.

{% content-ref url="/pages/aLl2VUFyhQ80iZ0PSgFc" %}
[토큰 권한검증](/google-api/references/google-login/verify-token)
{% endcontent-ref %}

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FojbkWtVIklV3r73qRk6g%2F00105.jpg?alt=media&amp;token=62453192-9327-4922-8058-3e47b138322f" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FQk0XmftH7YbKsQk16Dns%2F00106.jpg?alt=media&amp;token=20b9f273-1bc7-4d40-9fa8-35b12ce9e1b1" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Access Token

사용자 인증 수단이며, 사용자 정보를 요청하고자 하는 사용자를 구분하는 키 입니다.

### 철회할 동의항목 목록

동의를 철회할 동의 항목 ID 목록을 배열 형태로 입력합니다. 토큰 권한검증API 응답에서 동의 철회 가능 여부(revocable) 값이 true인 동의 항목만 철회 가능합니다.

문서로 자세한 내용을 확인하시려면 카카오  API 문서를 통해 확인해 주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#check-consent-response>

## 응답

응답 내용은 토큰 권한검증 내용과 동일합니다. 아래 링크는 카카오 API 문서의 동의내역 확인하기 링크입니다. 아래 링크를 통해 자세한 답변 내용을 확인 해 주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#check-consent-response>


# 동의한 약관

## 아이템 블록

특정 사용자가 어떤 약관들에 동의하고 로그인했는지 확인합니다.

[**카카오싱크**](https://developers.kakao.com/docs/latest/ko/kakaosync/common)를 도입한 서비스만 사용할 수 있는 기능입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FL78urYRgwSkgii3n2pmg%2F00107.jpg?alt=media&amp;token=51bb0ccb-ac19-414b-b48b-147059d302e1" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FTWIW4YsAs9esVtXdF0rn%2F00108.jpg?alt=media&amp;token=809353c0-4e42-42df-b5f1-2eb005b30940" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Access Token

사용자 인증 수단이며, 사용자 정보를 요청하고자 하는 사용자를 구분하는 키 입니다.

### 기타옵션

추가 동작을 요청하는 파라미터를 추가할 수 있습니다. 앱 설정 약관목록 옵션을 선택하실 수 있습니다.

## 응답

자세한 응답내용을 확인하시려면 아래 링크를 통해 카카오 API 문서를 확인해 주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#web-response>


# 배송지 가져오기

## 아이템 블록

Access Token 에 연결된 사용자의 배송지 정보를 가져옵니다

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FfYWlbxz2KtpmptEajGPG%2F00109.jpg?alt=media&amp;token=d932d4b6-f316-4192-a6f5-f87e2b764e9a" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F96xGOXTVZGARFZd8X6Nc%2F00110.jpg?alt=media&amp;token=2b4c2b03-d3c6-4527-b5f7-00663cdaf09e" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Access Token

사용자 인증 수단이며, 사용자 정보를 요청하고자 하는 사용자를 구분하는 키 입니다.

### 배송지 ID

배송지 정보가 많은 경우, 특정 배송지 정보만 얻고 싶을 때 배송지 ID 지정할 수 있습니다.

### 배송지 수정시간 기준

필수 값은 아닙니다.  여러 페이지에 걸쳐 응답이 제공될 때, 기준이 되는 배송지 `updated_at` 시각\
(해당 시각은미포함) 이전에 수정된 배송지부터 조회 합니다. 이전 페이지의 마지막 배송지의 `updated_at`을 다음 페이지 input으로 사용하세요.\
값을 0으로 전달하면 처음부터 조회

### 페이지당 조회수

2 이상 설정 가능합니다.  한 페이지에 포함할 배송지 목록의개수  입니다. (기본값: 10)

## 응답

상세한 응답 내용은 아래 링크를 통해 카카오 API 문서를 확인해 주세요.

<https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#shipping-address-response>


# 카카오톡 소셜


# 내 프로필 조회

## 아이템 블록

현재 로그인한 사용자의 카카오계정에 연결된 카카오톡 프로필 정보를 받는 기능입니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2F0lQKfZ1QoYUJbEUamcnK%2F00111.jpg?alt=media&amp;token=475d49cc-45ce-427e-8813-36e9e0facbc0" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FBs7qx4PVatOWBeHEdbi1%2F00112.jpg?alt=media&amp;token=ebbef388-eba1-4865-890b-f5b408cd3add" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Access Token

사용자 인증 수단이며, 사용자 정보를 요청하고자 하는 사용자를 구분하는 키 입니다.

## 응답

내 프로필 조회 아이템 블록의 자세한 응답은 아래 링크를 통하여 카카오 API 문서를 확인하세요.

<https://developers.kakao.com/docs/latest/ko/kakaotalk-social/rest-api#get-profile-response>


# 친구 목록 조회

## 아이템 블록

현재 로그인한 사용자의 카카오계정에 연결된 카카오톡의 친구 정보를 받아 옵니다.

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FgK0vgrNLLvuWU6sYpHkD%2F00113.jpg?alt=media&amp;token=b02d23dc-7510-4029-b0f9-f4d8c6b5950d" alt=""><figcaption></figcaption></figure>

## 설정 팝업

<figure><img src="https://1316000475-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqYk0i8X9mEtmaB9dGSVq%2Fuploads%2FvMMXPhdmDqxZ3F7IoAVA%2F00114.jpg?alt=media&amp;token=5e9124b3-38c2-4a69-aaeb-07b42312db13" alt=""><figcaption></figcaption></figure>

## 설정 필드

### Access Token

사용자 인증 수단이며, 사용자 정보를 요청하고자 하는 사용자를 구분하는 키 입니다.

### 시작 Index

친구 목록 조회의시작 지점입니다. (기본값: 0)

### 조회갯수

한 페이지에 가져올 친구 최대 수  입니다. (기본값: 10, 최대: 100)

### 정렬방식

친구 목록 조회의정렬 순서입니다.  오름차순 또는 내림차순 중 선택해주세요. (기본값:오름차순)

### 정렬기준

친구 목록 정렬 시 기준 설정을 해 주세요. <mark style="color:blue;">**즐겨찾기 친구 우선 정렬**</mark>과 <mark style="color:blue;">**닉네임 순서 정렬**</mark>이 있습니다. (기본값: 즐겨찾기 친구 우선 정렬)

## 응답

자세한 응답 내용은 아래 링크를 통해 카카오 API  문서를 확인해주세요.

<https://developers.kakao.com/docs/latest/ko/kakaotalk-social/rest-api#get-friends-response>


# 메시지


# 나에게 보내기


# 친구에게 보내기


# 나에게 템플릿 보내기


# 친구에게 템플릿 보내기


# 나에게 스크랩 보내기


# 친구에게 스크랩 보내기


# 푸시 알림


# 푸시 토큰 등록하기


# 푸시 토큰 보기


# 푸시 토큰 삭제하기


# 푸시 알림 보내기


# 톡캘린더


# 목록 가져오기


# 캘린더 생성하기


# 캘린더 수정하기


# 캘린더 삭제하기


# 일정 생성하기


# 일정목록 가져오기


# 일정 상세조회


# 일정 수정하기


# 일정 삭제하기


# 공개일정 생성하기


# 공개일정 목록 가져오기


# 공개일정 상세조회


# 공개일정 수정하기


# 공개일정 삭제하기


# 공개일정 캘린더에 추가하기


# 구독가능 캘린더 가져오기


# 구독하기


# 구독 해지하기


# 구독 게스트 일정 수정하기


# 공휴일 및 주요 기념일


# 로컬


# 주소 검색하기


# 좌표로 행정구역정보 받기


# 좌표로 주소 변환하기


# 좌표계 변환하기


# 키워드로 장소 검색


# 카테고리로 장소 검색


# 카카오스토리


# Page 64


# Page 63


# Page 62


# Page 61


# Page 60


# Page 59


# Page 58


# Page 57


# Page 56


# Page 55




---

[Next Page](/llms-full.txt/1)

