<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dguri_.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Wed, 12 Dec 2018 00:02:30 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>dguri_.log</title>
            <url>https://images.velog.io/thumbnails/dguri_/ec9e6d50-fd65-11e8-bfc8-cdaa6eb909bc-IMG1586.JPG</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. dguri_.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dguri_" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[네이버 클로바에 나만의 스킬을 만들어보자! - (2) AWS API Gateway과 Lambda를 이용하여 서버 구성하기]]></title>
            <link>https://velog.io/@dguri_/%EB%84%A4%EC%9D%B4%EB%B2%84-%ED%81%B4%EB%A1%9C%EB%B0%94%EC%97%90-%EB%82%98%EB%A7%8C%EC%9D%98-%EC%8A%A4%ED%82%AC%EC%9D%84-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EC%9E%90-2-AWS-API-Gateway%EA%B3%BC-Lambda%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@dguri_/%EB%84%A4%EC%9D%B4%EB%B2%84-%ED%81%B4%EB%A1%9C%EB%B0%94%EC%97%90-%EB%82%98%EB%A7%8C%EC%9D%98-%EC%8A%A4%ED%82%AC%EC%9D%84-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EC%9E%90-2-AWS-API-Gateway%EA%B3%BC-Lambda%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0</guid>
            <pubDate>Wed, 12 Dec 2018 00:02:30 GMT</pubDate>
            <description><![CDATA[<h1 id="네이버-클로바에-나만의-스킬을-만들어보자---2-aws-api-gateway과-lambda를-이용하여-서버-구성하기">네이버 클로바에 나만의 스킬을 만들어보자! - (2) AWS API Gateway과 Lambda를 이용하여 서버 구성하기</h1>
<p>지난 포스트에서 우리가 어떤 스킬을 만들어볼지 알아보았습니다. 이번 시간엔 AWS API Gateway와 AWS Lambda를 이용하여 서버를 구성해보도록 할 것 입니다.</p>
<h2 id="목차">목차</h2>
<ol>
<li><p><a href="https://velog.io/@dguri_/%EB%84%A4%EC%9D%B4%EB%B2%84-%ED%81%B4%EB%A1%9C%EB%B0%94%EC%97%90-%EB%82%98%EB%A7%8C%EC%9D%98-%EC%8A%A4%ED%82%AC%EC%9D%98-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EC%9E%90-1-%EB%93%A4%EC%96%B4%EA%B0%80%EA%B8%B0-%EC%A0%84%EC%97%90">들어가기 전에</a></p>
</li>
<li><p><em>(현재글) AWS의 API Gateway과 Lambda를 이용하여 서버가 없는 API서버 구성하기</em></p>
</li>
<li><p>Node.js를 이용하여 국가 또는 수도 맞추기 게임 코드 작성하기</p>
</li>
<li><p>Clova Console에 Extension 기본 정보 등록하기</p>
</li>
<li><p>Clova Console에서 모델을 빌드하고 테스트 해보기</p>
</li>
</ol>
<h2 id="서버를-따로-구성하는-이유">서버를 따로 구성하는 이유</h2>
<p><img src="https://images.velog.io/post-images/dguri_/585d4670-fda1-11e8-87c7-dd937857b68c/CEKInteractionStructure.png" alt="CEK_Interaction_Structure.png"></p>
<p>앞서 시간에 보여드렸던 CEK 동작 구조를 보면 Clova Side는 사용자의 발화를 무슨 의미 인지 인식하는 역할만 합니다. 그래서 우리는 이제 인식된 발화를 가지고 그에 대한 결과를 처리해야 하기 때문에 서버를 따로 구성하려고 합니다.</p>
<h2 id="구성하기-전에">구성하기 전에</h2>
<p>우리는 API Gateway와 Lambda에 대해 알아야 합니다.</p>
<h3 id="api-gateway는">API Gateway는?</h3>
<p>쉽게 말하면 &quot;문지기 역할&quot;을 하는 서비스입니다.
GET 방식의 요청이 왔을 때 POST 방식의 요청으로 바꿔서 다른 곳으로 연결 시켜줄 수도 있고, 어떠한 URI로 요청이 왔을 때 어디로 가야할지 연결해주는 역할도 합니다.
우리는 이 서비스를 이용하여 퍼블릭 웹상에 Lambda를 연결해주려고 사용합니다.</p>
<blockquote>
<h4 id="api-gateway-요금-2018년-12월-9일-기준-서울-리전-기준">API Gateway 요금 (2018년 12월 9일 기준, 서울 리전 기준)</h4>
<ul>
<li>프리 티어 : 수신된 API 호출 1백만 건(월별)</li>
<li>처음 3억 3천 3백만 건까지 : 3.50 USD(백만 건당)</li>
</ul>
<p>자세한 사항은 <a href="https://aws.amazon.com/ko/api-gateway/pricing/">API Gateway 요금표</a>를 참고하시면 될 것 같습니다.</p>
</blockquote>
<h3 id="lambda는">Lambda는?</h3>
<p>서버를 관리할 필요가 없는... EC2도 우리 눈에 실체의 서버는 없지만 환경구성이라던지, 오토스케일링이라던지 그런거 <strong>관리할 필요없이 코드를 실행가능 하게 해주는 서비스</strong>입니다.
우리가 작성한 코드를 업로드만 하면, 알아서 Lambda가 코드 실행 및 확장하는 것을 처리합니다.
그리고 이 튜토리얼에서도 EC2를 사용하지 않는 것은 <del>EC2 구성하는 것부터 환경 설정까지 너무 많은 내용을 다루기 귀찮아서가 아닙니다.</del> Lambda는 요청 수 및 요청에 소요 시간의 초 단위의 과금체계를 갖고 있어서, EC2처럼 껏다 켯다 할 필요가 없습니다. 그리고 프리티어 기간이 지나도 무료할당량을 제공합니다. <del>결국, 다 돈 때문이죠...</del> 그리고 새로운 것도 해보는 것도 재밋잖아요.</p>
<blockquote>
<h4 id="lambda-요금-2018년-12월-9일-기준-서울-리전-기준">Lambda 요금 (2018년 12월 9일 기준, 서울 리전 기준)</h4>
<ul>
<li>프리 티어(무기한 제공) : 월별 1백만 회의 무료 요청과 월별 400,000GB-초 컴퓨팅 시간 <del>(저도 감이 잘 안와요..., AWS 과금 체계란...)</del></li>
</ul>
<p>자세한 사항은 <a href="https://aws.amazon.com/ko/lambda/pricing/">Lambda 요금표</a>를 참고하시면 될 것 같습니다.</p>
</blockquote>
<h2 id="lambda랑-api-gateway-간단히-구성해보기">Lambda랑 API Gateway 간단히 구성해보기</h2>
<p>API Gateway를 통해 Lambda를 요청해서 Hello Clova!라는 결과를 반환하도록 해봅시다.</p>
<h3 id="1-1-lambda-생성하기">1-1. Lambda 생성하기</h3>
<ol>
<li><p><a href="https://console.aws.amazon.com/">AWS Console</a>에 접속합니다. 우측 상단의 리전명을 잘 기억하세요! 나중에 어느리전에 만들었는지 까먹으면...
<img src="https://images.velog.io/post-images/dguri_/3962f600-fda8-11e8-bbaa-e7757b6b9b4c/image.png" alt="image.png"></p>
</li>
<li><p><strong>[서비스]</strong> 메뉴를 클릭하여 <strong>[컴퓨팅]</strong> 탭에 <strong>[Lambda]</strong> 를 클릭합니다.
<img src="https://images.velog.io/post-images/dguri_/501ed0d0-fda8-11e8-bbaa-e7757b6b9b4c/image.png" alt="image.png"></p>
</li>
<li><p>람다 초기화면에 접근하면 이런 화면이 나올 것 입니다. 이런 화면이라면 <strong>[함수 만들기]</strong> 아니라면, <strong>[함수 생성]</strong> 을 클릭합니다.
<img src="https://images.velog.io/post-images/dguri_/c86afa60-fda7-11e8-bbaa-e7757b6b9b4c/image.png" alt="image.png"></p>
</li>
<li><p>아래와 같이 작성하고 <strong>[함수 생성]</strong> 버튼을 누릅니다.
<img src="https://images.velog.io/post-images/dguri_/e8e19420-fdac-11e8-bbaa-e7757b6b9b4c/image.png" alt="image.png"></p>
<ul>
<li>이름 : lambda 함수의 이름을 지정합니다.</li>
<li>런타임 : Node.js 8.10</li>
<li>역할 : 기존 역할 선택</li>
<li>기존 역할 : lambda_basic_execution</li>
</ul>
</li>
</ol>
<h3 id="1-2-lambda-코드-수정하기">1-2. Lambda 코드 수정하기</h3>
<ol>
<li><p><strong>[함수 코드]</strong> 탭으로 이동하여 아래와 같이 작성하여 줍니다.</p>
<pre><code class="language-js">exports.handler = async (event) =&gt; {
 // TODO implement
 const response = {
     statusCode: 200,
     body: JSON.stringify(&#39;Hello Clova!&#39;),
 };
 return response;
};</code></pre>
</li>
<li><p>우측 상단의 <strong>[저장]</strong> 버튼을 클릭하여 적용합니다.</p>
</li>
</ol>
<h3 id="1-3-lambda-테스트하기">1-3. Lambda 테스트하기</h3>
<ol>
<li><p>우측 상단의 <strong>[테스트]</strong> 버튼을 클릭합니다.</p>
</li>
<li><p>아래와 같이 입력하고 <strong>[생성]</strong> 버튼을 클릭합니다.
<img src="https://images.velog.io/post-images/dguri_/3f5545d0-fdae-11e8-9070-cf3ca8514ed7/image.png" alt="image.png"></p>
</li>
<li><p>우측 상단의 <strong>[테스트]</strong> 버튼을 다시 클릭하고, 아래와 같은 결과를 반환한다면, 성공적으로 반영된 것입니다. 
<img src="https://images.velog.io/post-images/dguri_/76757cd0-fdb1-11e8-9070-cf3ca8514ed7/image.png" alt="image.png"></p>
</li>
</ol>
<h3 id="2-1-api-gateway-생성하기">2-1. API Gateway 생성하기</h3>
<ol>
<li><p>람다의 <strong>[Designer]</strong> 탭에서 <strong>[API 게이트웨이]</strong> 를 선택합니다.
<img src="https://images.velog.io/post-images/dguri_/81851a30-fdb2-11e8-bbaa-e7757b6b9b4c/image.png" alt="image.png"></p>
</li>
<li><p><strong>[트리거 구성]</strong> 탭에서 아래와 같이 작성하고, <strong>[추가]</strong> 버튼을 클릭 후, 우측 상단의 <strong>[저장]</strong> 버튼을 클릭합니다.
<img src="https://images.velog.io/post-images/dguri_/b8798da0-fdb2-11e8-bbaa-e7757b6b9b4c/image.png" alt="image.png"></p>
<ul>
<li>API : 새 API 생성</li>
<li>보안 : 열기</li>
<li>API 이름 : HelloClovaAPI</li>
<li>배포 단계 : default</li>
</ul>
</li>
<li><p><strong>[Designer]</strong> 탭에서 방금 추가한 <strong>[API 게이트웨이]</strong> 를 클릭하면 아래와 같이 엔드포인트가 나타난다.
<img src="https://images.velog.io/post-images/dguri_/8fc16670-fdb3-11e8-9070-cf3ca8514ed7/Untitled-2.png" alt="Untitled-2.png"></p>
</li>
<li><p>해당 엔드포인트를 클릭 후 아래와 같은 화면이 나오면 성공한 것이다.
<img src="https://images.velog.io/post-images/dguri_/e529b810-fdb3-11e8-b98e-eb014ab4155f/image.png" alt="image.png"></p>
</li>
</ol>
<h2 id="serverless를-이용하여-lambda를-배포해-보자">Serverless를 이용하여 Lambda를 배포해 보자</h2>
<p>앞의 방법으론, 콘솔에 직접 접근하여 소스코드를 수정하거나 압축하여 업로드하는 방법으로 해야합니다. 우리는 이 방법을 조금 더 편하게 하기 위해 라인 한 줄이면 자동으로 배포해주는 Serverless를 이용해보려고 한다.</p>
<h3 id="0-사전-준비-환경">0. 사전 준비 환경</h3>
<ul>
<li>Node.js</li>
<li>AWS CLI : <a href="https://docs.aws.amazon.com/ko_kr/streams/latest/dev/kinesis-tutorial-cli-installation.html">설치방법</a></li>
</ul>
<h3 id="1-1-aws-사용자-액세스키-발급받기">1-1. AWS 사용자 액세스키 발급받기</h3>
<p>Serverless가 자동으로 배포하기 위해선 사용자의 AWS에 접근할 수 있는 사용자 키가 필요합니다. 그러니 생성해보도록 합시다.</p>
<blockquote>
<h4 id="주의">주의</h4>
<p>생성된 키는 AWS의 모든 접근 권한이 담긴 키이므로 <strong>안전하게 보관</strong>해야 합니다.</p>
</blockquote>
<ol>
<li><p><a href="https://console.aws.amazon.com/iam/home">AWS IAM 관리 콘솔</a>에 접속합니다. </p>
</li>
<li><p>좌측 탭의 <strong>[사용자]</strong> 버튼을 클릭 후 <strong>[사용자 추가]</strong> 버튼을 클릭합니다.
<img src="https://images.velog.io/post-images/dguri_/ba660210-fdb7-11e8-abd5-6d266e3c9f98/image.png" alt="image.png"></p>
</li>
<li><p>아래와 같이 입력 후, <strong>[다음: 권한]</strong> 버튼을 클릭합니다.
<img src="https://images.velog.io/post-images/dguri_/f014fd30-fdb7-11e8-9070-cf3ca8514ed7/image.png" alt="image.png"></p>
<ul>
<li>사용자 이름 : clova.serverless (편하신 걸로 하시면 됩니다.)</li>
<li>액세스 유형 : 프로그래밍 방식 액세스만 선택</li>
</ul>
</li>
<li><p><strong>[기존 정책 직접 연결]</strong> 을 선택 후 <strong>[AdministratorAccess]</strong> 정책을 선택하고 <strong>[다음: 태그]</strong> 버튼을 클릭합니다.
<img src="https://images.velog.io/post-images/dguri_/54b6dc40-fdb8-11e8-abd5-6d266e3c9f98/image.png" alt="image.png"></p>
</li>
<li><p>아무것도 안입력해도 됩니다. <strong>[다음: 검토]</strong> 버튼을 클릭합니다.</p>
</li>
<li><p>아래와 같이 입력되었는지 확인 후 <strong>[사용자 만들기]</strong> 버튼을 클릭합니다.
<img src="https://images.velog.io/post-images/dguri_/e3f5d9b0-fdb8-11e8-abd5-6d266e3c9f98/image.png" alt="image.png"></p>
</li>
<li><p><strong>액세스 키</strong>와 <strong>비밀 액세스 키</strong>는 꼭 필요하니, 중요한 곳에 보관해두기 바랍니다.
<img src="https://images.velog.io/post-images/dguri_/51799620-fdb9-11e8-abd5-6d266e3c9f98/Untitled-3.png" alt="Untitled-3.png"></p>
</li>
</ol>
<h3 id="1-2-aws-cli에-발급받은-사용자-액세스-키-프로파일-형식으로-등록하기">1-2. AWS CLI에 발급받은 사용자 액세스 키 프로파일 형식으로 등록하기</h3>
<ol>
<li><p>터미널에 아래와 같이 입력합니다.</p>
<pre><code class="language-bash">$ aws configure --profile clova</code></pre>
</li>
<li><p>그 후 아래와 같이 입력합니다.</p>
<pre><code class="language-bash">AWS Access Key ID [None]: 발급받은 액세스 키
AWS Secret Access Key [None]: 발급받은 액세스 시크릿 키
Default region name [None]: ap-northeast-2
Default output format [None]: json</code></pre>
</li>
<li><p>&#39;clova&#39; 라는 프로파일로 AWS CLI 프로파일이 생성되었습니다.👏👏👏</p>
</li>
</ol>
<h3 id="2-1-serverless-설치하기">2-1. serverless 설치하기</h3>
<ol>
<li><p>터미널에 아래와 같이 입력합니다.</p>
<pre><code class="language-bash">$ npm install serverless -g</code></pre>
</li>
<li><p>그 후 아래와 같이 입력합니다.</p>
<pre><code class="language-bash">$ sls</code></pre>
</li>
<li><p>아래와 같이 나온다면 정상적으로 설치된 모습입니다.👏👏👏
<img src="https://images.velog.io/post-images/dguri_/f4fa1830-fdbc-11e8-abd5-6d266e3c9f98/image.png" alt="image.png"></p>
</li>
</ol>
<h3 id="3-1-프로젝트-초기-구성">3-1. 프로젝트 초기 구성</h3>
<ol>
<li>터미널에 아래와 같이 입력한다.<pre><code class="language-bash">$ sls create -t aws-nodejs -p api-capital-quiz -n api-capital-quiz</code></pre>
<ul>
<li>t : 초기 템플릿</li>
<li>p : 프로젝트 경로</li>
<li>n : 프로젝트 서비스 명</li>
</ul>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[네이버 클로바에 나만의 스킬을 만들어보자! - (1) 들어가기 전에]]></title>
            <link>https://velog.io/@dguri_/%EB%84%A4%EC%9D%B4%EB%B2%84-%ED%81%B4%EB%A1%9C%EB%B0%94%EC%97%90-%EB%82%98%EB%A7%8C%EC%9D%98-%EC%8A%A4%ED%82%AC%EC%9D%98-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EC%9E%90-1-%EB%93%A4%EC%96%B4%EA%B0%80%EA%B8%B0-%EC%A0%84%EC%97%90</link>
            <guid>https://velog.io/@dguri_/%EB%84%A4%EC%9D%B4%EB%B2%84-%ED%81%B4%EB%A1%9C%EB%B0%94%EC%97%90-%EB%82%98%EB%A7%8C%EC%9D%98-%EC%8A%A4%ED%82%AC%EC%9D%98-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EC%9E%90-1-%EB%93%A4%EC%96%B4%EA%B0%80%EA%B8%B0-%EC%A0%84%EC%97%90</guid>
            <pubDate>Tue, 11 Dec 2018 16:51:06 GMT</pubDate>
            <description><![CDATA[<h1 id="네이버-클로바에-나만의-스킬을-만들어보자---1-들어가기-전에">네이버 클로바에 나만의 스킬을 만들어보자! - (1) 들어가기 전에</h1>
<p>클로바 앱 또는 디바이스를 통해 나만의 음성인식 서비스를 개발하는 것을 목표로 <strong>CEK 콘솔에 기본 서비스 정보를 등록하는 것부터 발화에 대한 결과를 제공하기 위해 AWS 상에 Lambda를 이용한 서버 구현까지 함께 해보는 글</strong>입니다.
글쓴이는 처음으로 포스팅하다보니 재미없을 수도 있고, 두서없을 수 도 있지만 최대한 노오력해보도록 하겠습니다!</p>
<h2 id="목차">목차</h2>
<ol>
<li><p><em>(현재글) 들어가기 전에</em></p>
</li>
<li><p><a href="https://velog.io/@dguri_/%EB%84%A4%EC%9D%B4%EB%B2%84-%ED%81%B4%EB%A1%9C%EB%B0%94%EC%97%90-%EB%82%98%EB%A7%8C%EC%9D%98-%EC%8A%A4%ED%82%AC%EC%9D%84-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EC%9E%90-2-AWS-API-Gateway%EA%B3%BC-Lambda%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0">AWS의 API Gateway과 Lambda를 이용하여 서버가 없는 API서버 구성하기</a></p>
</li>
<li><p>Node.js를 이용하여 국가 또는 수도 맞추기 게임 코드 작성하기</p>
</li>
<li><p>Clova Console에 Extension 기본 정보 등록하기</p>
</li>
<li><p>Clova Console에서 모델을 빌드하고 테스트 해보기</p>
</li>
</ol>
<h2 id="개발환경">개발환경</h2>
<ul>
<li><p><strong>Naver Clova</strong> : 자연어 처리</p>
</li>
<li><p><strong>AWS Lambda</strong> : 서버 관리가 없이 코드를 실행하고, 사용한 만큼만 비용을 지불하는 시스템</p>
</li>
<li><p><strong>AWS API Gateway</strong> : API 서비스의 문지기 역할을 해주는 서비스</p>
</li>
</ul>
<h2 id="언어">언어</h2>
<ul>
<li><strong>Node.js 8.10</strong> : 글쓴이가 익숙하고 AWS Lambda가 지원하는 Node.js 버전 중 최신 버전</li>
</ul>
<h2 id="클로바clova는">클로바(Clova)는?</h2>
<p>NAVER가 개발 및 서비스하고 있는 인공지는 플랫폼 서비스입니다. Clova 사용자의 음성이나 이미지를 분석하여 사용자가 원하는 정보나 서비스를 제공해줍니다.
우리는 클로바에서 제공해주는 개발 킷인 Clova Extension Kit(이하 CEK)를 이용하여 튜토리얼을 할 것입니다.</p>
<h3 id="cek는">CEK는?</h3>
<p>외부 서비스나 IoT 기기를 제어할 수 있는 <strong>Clova Skill</strong>을 서비스할 수 있도록 필요한 도구와 인터페이스를 제공해줍니다.
여기서, <strong>Clova Skill을 서비스하는 것이 결국 우리의 궁극적인 목표</strong>입니다. 왜냐하면, 클로바 사용자는 Clova Skill을 통해서 클로바 상에서 여러가지 기능을 수행하기 때문입니다.</p>
<h3 id="cek의-동작-구조">CEK의 동작 구조</h3>
<p><img src="https://images.velog.io/post-images/dguri_/51f9e980-fd94-11e8-abd5-6d266e3c9f98/CEKInteractionStructure.png" alt="CEK_Interaction_Structure.png">
CIC(클로바 디바이스, 클로바 앱 등)으로 부터 입력된 사용자의 발화를 인식하여, CEK에 <strong>등록한 Interaction 모델</strong>을 참조하여 사용자의 발화를 분석합니다.</p>
<h2 id="우리의-튜토리얼-목표는">우리의 튜토리얼 목표는</h2>
<p>사용자에게 국가 또는 수도 퀴즈 봇 서비스를 제공하는 것입니다.
Extension을 만들기에 앞서, 먼저 세무 목표와 사용 시나리오를 수립해야 합니다. 이 포스트에선 아래와 같은 세부 목표와 사용 시나리오를 이용해서 튜토리얼을 진행할 것입니다.</p>
<h3 id="세부-목표">세부 목표</h3>
<ol>
<li><p>서비스 호출 : 사용자가 &quot;국가 수도 퀴즈 봇 시작해줘&quot;나 &quot;국가 수도 봇에서 수도 퀴즈 하자&quot;, &quot;나라 수도 봇에서 국가 퀴즈 하자&quot; 등으로 호출 할 수 있다.</p>
</li>
<li><p>사용 제안 또는 추천</p>
<ol>
<li><p>퀴즈 봇이 시작되면 국가 퀴즈 또는 수도 퀴즈를 할 것인가에 대한 안내를 받을 수 있다.</p>
</li>
<li><p>퀴즈가 시작되면 문제 다시 듣는 법, 다시 푸는 법, 문제 넘기는 법, 정답 제출하는 법에 대해 안내를 받을 수 있다.</p>
</li>
</ol>
</li>
<li><p>퀴즈 종류 선택 및 시작 : 국가 또는 수도의 퀴즈를 선택할 수 있다.</p>
</li>
<li><p>정답 제출 : 사용자는 퀴즈 중에 정답을 제출하고 결과를 들을 수 있다.</p>
</li>
<li><p>문제 다시 듣기 : 사용자는 퀴즈 중에 그 턴의 문제를 다시 들을 수 있다.</p>
</li>
<li><p>문제 넘기기 : 사용자는 문제를 넘길 수 있다.</p>
</li>
<li><p>문제 정답 확인 : 정답을 모르는 경우 정답을 받을 수 있다.</p>
</li>
<li><p>종료 : &quot;그만&quot; 등의 문장으로 서비스를 종료할 수 있으며, 퀴즈 중에 그만 할 경우 퀴즈의 결과를 들을 수 있다.</p>
</li>
</ol>
<h3 id="사용-시나리오">사용 시나리오</h3>
<ol>
<li><p>(사용자, 세부 목표 #1) : 국가 수도 퀴즈봇 시작해줘</p>
</li>
<li><p>(익스텐션, 세부 목표 #2-1) : 안녕하세요. 국가 수도 퀴즈봇 입니다. 국가를 맞추고 싶으시다면 국가 퀴즈, 수도를 맞추고 싶으시다면 수도 퀴즈라고 말해보세요.</p>
</li>
<li><p>(사용자, 세부 목표 #3) : 수도 퀴즈하자.</p>
</li>
<li><p>(익스텐션, 세부 목표 #2-2, #3) : 수도 퀴즈를 시작합니다. 제가 먼저 수도를 말하면 도전자님은 국가 이름을 말하시면 돼요. 만약 문제를 다시 듣고 싶으시다면 다시 들을래, 넘기고 싶으시다면 넘겨줘, 정답이 궁금하시다면 정답이 뭐야라고 말씀하시면 돼요. 자 이제 퀴즈를 시작합니다. 대한민국의 수도는?</p>
</li>
<li><p>(사용자, 세부 목표 #4) : 서울</p>
</li>
<li><p>(익스텐션, 세부 목표 #4) : 정답!, 미국의 수도는?</p>
</li>
<li><p>(사용자, 세부 목표 #5) : 다시 들을래</p>
</li>
<li><p>(익스텐션, 세부 목표 #5) : 으음, 잘 들으셔야돼요! 미국의 수도는?</p>
</li>
<li><p>(사용자, 세부 목표 #4) : 로스엔젤레스</p>
</li>
<li><p>(익스텐션, 세부 목표 #4) : 삐! 틀렸어요. 미국의 수도는?</p>
</li>
<li><p>(사용자, 세부 목표 #4) : 워싱턴</p>
</li>
<li><p>(익스텐션, 세부 목표 #4) : 정답!, 브라질의 수도는?</p>
</li>
<li><p>(사용자, 세부 목표 #7) : 넘겨줘</p>
</li>
<li><p>(익스텐션, 세부 목표 #7, #4) : 문제를 넘깁니다. 일본의 수도는?</p>
</li>
<li><p>(사용자, 세부 목표 #9) : 그만</p>
</li>
<li><p>(익스텐션, 세부 목표 #9) : 퀴즈를 그만합니다. 총 3문제 중 2문제를 풀었습니다.</p>
</li>
</ol>
<p>이상 우리가 이 튜토리얼 시리즈를 통해 무엇을 만들어 볼지 알아보았다.
아마 이 포스트를 끝까지 보게 된다면 여러분들은 이를 통해 여러가지로 창의적으로 변경해볼 수 있게 될 것 입니다. 
임베디드를 좋아하시는 분들은 <strong>음성인식 Home IoT</strong>를 만들어 볼 수 있을 것이고, 로스트아크를 좋아하시는 분들은 <strong>음성인식 로스트아크 대기열 알리미</strong> 등등 만들어 보실 있게 될 것 입니다.</p>
<h2 id="다음-포스트에선">다음 포스트에선</h2>
<ul>
<li>API Gateway와 AWS Lambda를 이용하여 서버 환경을 구성해보도록 하자.</li>
</ul>
<h2 id="참고">참고</h2>
<ul>
<li><p>[Clova Extension Kit 개요] (<a href="https://developers.naver.com/console/clova/guide/CEK/CEK_Overview.md">https://developers.naver.com/console/clova/guide/CEK/CEK_Overview.md</a>)</p>
</li>
<li><p>[Clova Extension 디자인 가이드라인] (<a href="https://developers.naver.com/console/clova/guide/Design/Design_Guideline_For_Extension.md">https://developers.naver.com/console/clova/guide/Design/Design_Guideline_For_Extension.md</a>)</p>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>