MixedCode

안녕하세요. 믹스드코드 강창훈입니다.

뜨거웠던 여름이 지나고 가을비와 함께 꿈을 현실로 만들기 좋은 계절, 가을이 찾아왔네요.오랜 휴식기를 가진 후 간만에 글을 작성하니 저 또한 작은 설렘이 생깁니다.

오늘부터 여러분들과 온라인을 통해 알아보고 직접 개발 및 서비스해보실 기술과 비지니스의 주제는 [챗봇]입니다.

상반기에 HTML5 WebSocket 과 Microsoft ASP.NET SignalR이란 기술을 이용해 웹기반 순수 HTML5 웹채팅 코드랩을 2회 진행했었는데요.
몇몇분의 챗봇에 대한 문의도 있었고 시장에서 챗봇수요가 급증하고 있다는 이야기를 주변에서 많이 듣고 있었던 상황에
마침 MS에서도 BOT Framework라는 AI기반 BotFramework을 출시 하였습니다.

다양한 개발언어와 서비스 방식을 지원하는 마이크로소프트 봇프레임워크 기반에서 챗봇을 직접 만들어 보는 코드랩 프로젝트를 본격적으로 시작해보도록 하겠습니다.
먼저 MS에서 이야기하는 BotFramework에 대해서 전반적인 내용을 알아보도록 하죠.


1.Microsoft BotFramework?

Bot Framework는 강력하고 인텔리전트 한 봇을 구축하고 연결하며 테스트,배포가 가능한 개발 프레임워크입니다.
.NET, Node.js 개발환경에서 C#,Javascript언어를 기본적으로 지원하며  REST 서비스 환경을 지원하여 각종 개발언어를 포괄적으로 지원합니다.
언어별 Bot Builder SDK 와 Bot Framework를 사용하여 봇을 빠르게 시작할 수 있습니다.

현재는 서비스 제공 초기 시점이라 그런지 서비스 소개 및 내용들이 수시로 바뀌는듯합니다. 처음 제가 BotFramework를  접했을때와 비교해보니 큰틀은 바뀌지 않았는데 부가 지원서비스들이 수시로 체계적으로 추가되고 있는 분위기입니다.

https://dev.botframework.com/
https://docs.microsoft.com/en-us/bot-framework/

MS에서 소개하는 BotFramework는  위에서 이야기한것처럼 강력하고 똑똑한  채팅,음성 기반의 챗봇을 빠르게 구축할수있는 개발,테스트,
배포환경을 제공하는 개발프레임워크 입니다.

기본적으로 지원되는 개발환경 및 언어로는 .NET(C#), Node.js(Javascript)이며 각종 개발언어 및 각종 Application에서도 쉽게 챗봇 서비스를 연결해 사용할수 있게 REST방식의 챗봇개발 환경도 지원합니다.

.NET 환경을 이용하는 경우 WPF,Winform,UWP(Windows10전용APP),Xamarin NativeApp(IOS,Android,UWP..),ASP.NET WebApplication등 각종 UI Application 기반에서
쉽고 빠르게 텍스트 또는 음성기반의 스마트한 챗봇 개발이 가능합니다.

Web기반에서의 챗봇개발은 BotFramework에서 REST방식(OPEN API방식)으로 챗봇과의 통신 인터페이스 개발할수 있는 각종 서비스를 제공해주므로 웹기반에서 실시간 메시징(RealTime  WEB) 기술을 제공해주는 인프라(NODE.JS,ASP.NET SignalR,각종 HTML5 WebSocket지원환경)환경에서도 쉽게 챗봇 서비스를 연결할수 있으며 챗팅웹 컨트롤까지  무료로 제공하고 있어 일반적인 웹사이트에서도 쉽게 웹채팅 구현 및 챗봇연결이 가능합니다.



2.BotFramework의 Bot에 대한 개념 소개
사용자가 대화 방식으로 상호 작용하는 앱으로 봇을 생각해보십시오. 봇은 텍스트, 카드 또는 음성으로 대화를 나눌 수 있습니다.
봇은 FAQ와 같은 기본 질의응답 패턴 매칭처럼 단순 할 수도 있고, 복잡한 대화 상태 추적과 기존 비즈니스 서비스와의 통합을 통해 인공 지능 기법의 정교한 조합이 될수도 있습니다.

Tip)카드?
단건의 응답 메시지에 다양한 정보를 다양한 형태로 한묶음으로 제공하는 방식을 말합니다.
사용자가 채팅으로 쇼핑몰 챗봇에 주문번호를 알려주고 해당 번호에 대한 주문/배송정보를 알려줘 물어보면
챗봇은 해당 주문번호와 관련된 하나의 결과 메시지를 주문번호,결제금액,주문일자,배송시작일자,도착예정일,배송주소지등을
하나의 블럭(카드처럼) 메시지로 구성해 응답 메시지를 한번에 카드형태로 정리해 보내는 방식을 말합니다.

Bot Framework를 사용하면 사용자와의 다양한 유형의 상호 작용을 지원하는 봇을 작성할 수 있습니다.
봇의 대화를 자연스런 대화방식(자연어 수준)으로도 설계 할 수 있습니다.

여러분의 봇은 사용자 선택이나 행동을 제공하는것과 같이 수많은 상호 작용을 할 수도 있습니다. 대화에는 간단한 텍스트 문자열이나 이미지 및 작업단추(버튼,링크)가 포함 된 복잡한 리치카드를 사용할 수 있습니다. 또한 자연 언어 기반 상호 작용기능을 추가하여 사용자가 자연스러운 표현 방법으로 봇과 상호 작용할 수있게 할수도 있습니다.

음식점,미용실 예약 일정을 잡는 봇의 예를 아래 시나리오와 실제 앱화면을 보면서 살펴 보겠습니다.
봇은 사용자의 의도를 파악하고, 작업버튼을 사용하여 서비스 가능한 일정목록 표시하고, 일정을 사용자가 선택했을 때 사용자가 선택한 정보를 표시 한 다음 약속의 세부 사항이 포함 된 축소된 카드를 보냅니다.


상기 첨부 그림은 미용실(챗봇)과 고객간 대화형으로 스케줄을 조정하고 예약을 확정하는 시나리오를 보여주고 있습니다.

봇은 급속하게 디지털 경험의 중요한 부분이되고 있습니다.
사용자가 서비스 또는 응용 프로그램과 상호 작용할 수 있도록 웹 사이트 또는 모바일 경험만큼 필수적인 요소가되고 있습니다
현재 스마트폰의 대부분의 앱들이 조만간(1~3년내) 챗봇기반의 앱으로 대체될거라는 전망하고 있습니다.

개발자들에게는 새로운 도전의 시기가 이미 시작되었습니다.
즉 이는 기존의 앱들이 인공지능 과 대화형 기반의 챗봇으로 대체된다는것을 의미하며 단순 앱개발기술이 아닌 자연어처리,인공지능,음성지원,머신러닝등
다양한 인공지능기술들이 보다 보편적이고 현실적으로 개발환경 및 서비스에 접목되는 시점이 도래했다는것을 의미합니다.

하지만 MixedCode와 Microsoft BotFramework가 있으니 걱정은 하지 않으셔도 됩니다.ㅋㅋ

금번 챗봇 프로젝트에서의 챗봇이란 용어는 단순 문자 메시지 기반의 챗봇이 아닌 텍스트,카드형,리치카드형,음성기반의 사용자와의
다양한 상호 대화 방식을 지원하는 봇을 의미하는것으로 챗봇으로 그 개념을 정리하도록 하겠습니다.


3.Bot Framework를 사용해야하는 이유?
봇을 쓰는 개발자는 모두 동일한 문제에 직면합니다.
봇은 기본 채팅I/O(Input/Output)를 필요로하며, 언어와 대화 기술이 있어야하며 사용자가 선호하는 대화 경험과 언어로 사용자와 연결해야합니다.
Microsoft Bot Framework는 이러한 문제를 해결하는 데 도움이되는 강력한 도구들과 지원기능들을 제공합니다


3.1 봇빌더 : Bot Builder(BOT SDK)
ChatBot(텍스트,카드,음성)을 쉽고 빠르게 만들 수 있도록  Bot Framework에는 .NET 및 Node.js 플랫폼 용의 풍부하고 완전한 기능을 갖춘 SDK(Software Development Toolkit)를 제공하는 Bot Builder가 포함되어 있습니다.
SDK는 봇과 사용자 간의 상호 작용을 훨씬 단순하게 만드는 기능을 제공합니다.
봇 빌더는 또한 봇을 디버깅 할 수있는 에뮬레이터와 빌딩 블록으로 사용할 수있는 샘플 봇을 제공합니다.


3.2 Bot Framework 포털: Portal
Bot Framework 포털을 사용하면 쉽게 봇을 관리 할 수 있습니다.
Bot Framework 포털은 봇을 등록, 연결 및 관리 할 수있는 편리한 장소를 제공합니다.
또한 웹 페이지에 봇을 삽입하는 데 사용할 수있는 진단 도구 및 웹 채팅 컨트롤을 제공합니다.

웹채팅 컨트롤 제공기능은 웹에서도 채팅UI를 개발하지 않아도 쉽게 챗봇 기능을 제공할수 있다는것인데요.
챗봇 서비스를 을 보다 쉽게 제공할수 있게 실시간 웹채팅 기능도 기본 제공한다는것인데 멋지네요.
저 같은 개발자 다 굶어 죽겠네요. ㅋㅋ


3.3 채널: Channel
Bot Framework는 봇과 사람을 연결하기위한 몇 가지 인기있는 (커뮤니케이션=통신)채널을 지원합니다.
사용자는 전자 메일, Facebook, Skype, 슬랙 및 SMS를 포함하여 작업 할 봇을 구성한 모든 채널에서 봇과 대화를 시작할 수 있습니다.

직접적인 채팅앱(웹) 인터페이스가 아닌 전통적이고 일반적인 커뮤니케이션 수단인 이메일,SMS 와 각종 SNS인
페북,스카이프,슬랙,카카오톡과 같은 다양한 통신채널과 챗봇을 연결하여 대화형 서비스를 제공할수 있습니다.


3.4 보다 스마트한 챗봇을 만들기 위한 지원서비스 제공
보다 스마트한 봇을 만들기 위해 Microsoft Cognitive Services(인지 서비스)를 활용하면 자연 언어 이해, 이미지 인식, 음성 등의
스마트하고 인텔리전스한 기능을 여러분의 챗봇에 추가할 수 있습니다.




4. ChatBot 과 BotFramework 요약

봇프레임워크 기반에서 챗봇을 개발하고 서비스할수 있는 환경에 대해 정리해보겠습니다.

.NET 및 Node.js 기술 기반에서 직접 BOT Framework를 이용해 개발하거나
REST기반으로 웹서버에 구축해둔 챗봇 API 서비스와
기존SNS매체,NativeApp,WebSite에서  실시간으로 통신하여 채팅하는 방식을 지원합니다.

4.1.챗봇 서비스 방식
4.1.1 채팅앱(NativeApp 또는 웹채팅 Application,웹채팅컨트롤)
-각종 SNS APP(카카오톡,밴드,페이스북 메신저,Skype),각종 SmartPhone 채팅 App,웹채팅사이트(동글동글,웹채팅컨트롤),모든 Application,이메일,SMS
-사용자 채팅 UserInterface(UI,UX) 및 Interaction 환경 제공

4.1.2 챗봇(BotFramework기반 채팅로봇서비스)서비스
-사용자 채팅 실시간 응대 채팅로봇(S/W) 구현
-채팅로봇에게 필요한 각종 데이터 및 정보제공과 관련 인프라 제공
-채팅로봇 수동훈련(로직,프로세스 수립) 및 자동훈련(머신러닝) 매카니즘 및 환경제공
-Cognitive Services(인지 서비스),인텔리전스 기능 제공


4.2 챗봇 개발 및 서비스 방식
BotFramework기반에서 ChatBot을 개발하고 서비스하는 방식은 크게 4가지로 아래와 같이 나뉩니다.
본인과 팀,회사에 적합한 개발방식 및 개발언어,플랫폼따라 아래 개발방식중 하나를 선택하여 개발을 진행하시면 좋을듯합니다.

4.2.1  .NET 기반에서 개발하는 방식
-Visual Studio 2017 개발툴과 .NET개발언어(C#) 기반에서 .NET용 Bot Builder SDK를 이용해 챗봇서비스를 개발하는경우
-.NET Framework 4.6 이상 환경에서 개발툴로 Visual Studio 2017 설치
-Visual Studio 2017 NugetPackage로 "Microsoft.Bot.Builder" 다운로드 설치하여 C#언어로 개발

4.2.2 Node.js 기반에서 개발하는 방식
-Node.js개발환경에서 Node.js 용 Bot Builder SDK를 설치해 챗봇 서비스를을 개발하는 경우
-Node.js 용 Bot Builder SDK는 npm 패키지로 제공되며npm명령어를 통해 설치가 가능합니다.
-Node.js 용 Bot Builder SDK는 웹 서비스 구축을 위한 인기 프레임워크 인 Express & Restify 기반에서 Javascript 언어로
웹서버 기반 REST 챗봇 API 서비스를 개발합니다.

4.2.3 Azure Bot Service 기반 개발 및 서비스 방식
-Microsoft Public Cloud 서비스인 Azure에서 제공해주는 Azure Bot Service를 이용해 개발하는 방식
-Azure Bot Service는 봇 개발을 목적으로 만들어진 클라우드 통합 환경을 제공하여 지능형 로봇을 한 곳에서 구축, 연결, 테스트, 배치 및 관리 할 수 ​​있습니다.
-Azure 편집기를 사용하여 C # 또는 Node.js 언어 기반에서 챗봇을 개발할 수 있습니다.
-서비스 또한 애저 클라우드 기반에서 통합서비스되어집니다.


4.2.4 REST 기반의 OPEN API 개발방식
-Bot Framework REST API를 사용하여 모든 프로그래밍 언어로 봇을 개발할수 있는 방식
-Bot Framework는 아래 세 가지 REST API를 제공합니다.
• Bot Connector REST API: Bot Framework Portal에서 구성된 채널에 메시지를 보내고받을 수 있습니다.
• Bot State REST API: Bot Connector REST API를 통해 수행되는 대화와 관련된 상태를 저장하고 검색 할 수 있습니다.
• Direct REST API:클라이언트 응용 프로그램, 웹 채팅 컨트롤 또는 모바일 응용 프로그램과 같은 자신의 응용 프로그램을
  단일 봇에 직접 연결할 수 있습니다.
 
BotFramework는 마치 검색서비스를 제공하는 구글,네이버,마이크로소프트 빙 처럼 검색서비스를 제공하기 위해 검색엔진로봇(소프트웨어)을 이용해
고객사이트의 접점에서 각종 정보를 수집해오면 검색엔진에서 인덱싱을하고  검색엔진사이트에서 각종정보를 제공하는 구조와
유사하다고 볼수 있습니다.


검색엔진서비스 = 사용자 <-->일반 웹사이트 <------>검색엔진로봇 <---->검색엔진 + 검색사이트(구글)<---->사용자
챗봇 서비스    = 사용자 <--->챗팅App,웹사이트 <--> 챗팅로봇 <---->챗봇프레임워크+ AI Infra + REST OPEN API <--->챗봇관리자(훈련),각종정보제공


챗봇 개발을 위한 Microsoft BotFramework에 대한 전반적인 내용에 대해 살펴보았습니다.
다음 시간에는 .NET 개발환경에서 간단한 챗봇을 하나 함께 개발해보고 점진적으로 개발방식 및 서비스 방식도 확대해 하나씩 알아가 보도록 하겠습니다. 

감사합니다.

*