ebson

[AI 활용과 개발] 카카오 빌더 개발문서 참고하여 필수 테이블 설계하기 본문

KAKAO CHATBOT

[AI 활용과 개발] 카카오 빌더 개발문서 참고하여 필수 테이블 설계하기

ebson 2024. 5. 8. 21:26

카카오 빌더 에서 스킬서버로 요청하는 SkillPayload 의 테이블 설계하기

카카오톡 채널과 연동하기 위한 챗봇을 생성하면 빌더 GUI를 만날 수 있다. 여기서 시나리오와 블록을 생성할 수 있고 챗봇을 스킬 서버와 연동할 수 있다. 챗봇에 대한 통계 데이터 분석결과를 확인하고 개발 채널 및 운영 채널에 배포하는 등 챗봇 운영 전반에 필요한 작업을 할 수 있다. 그리고 관리자가 등록하지 않은 발화 이더라도 카카오톡 채널 챗봇이 똑똑하게 알아듣고 가장 관련있는 블록과 연결할 수 있도록 하는 머신러닝 기능도 제공한다. 블록에 연결되는 인텐트(사용자의 발화)를 편집하거나 스킬 서버를 통하지 않고 곧바로 응답 말풍선을 출력하도록 하는 것도 가능하다. 

 

카카오톡 채널 챗봇에서 스킬 서버를 호출하여 응답받은 결과를 카카오톡 채널의 말풍선으로 출력하도록 하려면 좌측 스킬 탭을 선택하고 스킬 서버의 요청 URL을 등록하면 된다. 이와 같이 스킬을 등록하면 챗봇이 스킬 서버를 호출할 때에 시나리오, 블록, 사용자 발화 데이터 등을 담은 SkillPayload 를 함께 요청한다. 스킬 서버에서는 이 SkillPayload 의 데이터를 기반으로 알맞은 비즈니스 로직을 실행하고 비즈니스 로직 실행 결과에 따른 사용자가 받아야 할 적절한 응답 말풍선에 대한 데이터를 응답할 수 있어야 한다. 

 

카카오 비즈니스 가이드 문서 - 스킬 요청 데이터 형식 1/2 (https://kakaobusiness.gitbook.io/main/tool/chatbot/skill_guide/answer_json_format)

 

카카오 비즈니스 가이드 문서 - 스킬 요청 데이터 형식 2/2 (https://kakaobusiness.gitbook.io/main/tool/chatbot/skill_guide/answer_json_format)

 

 

한편, 위 캡처 화면에서 context 항목은 SkillPayload의 구성 목록 중에 생략되었는데, 이는 context가 필수 값이 아니기 때문인 것 같다. 카카오톡 채널 챗봇에서 context 는 사용자와 카카오톡 채널 챗봇이 주고 받은 대화의 문맥을 의미한다고 생각하면 된다. 예를 들어, '가격 조회' 라는 메시지를 사용자가 입력했다면 앞선 대화에서 커피를 주문하고 있었는지, 꽃을 주문하고 있었는지에 따라서 다른 비즈니스 로직과 응답 메시지가 필요할 것이다. 이때 이와 같은 케이스들을 구분하기 위해 필요한 것이 context 이다. 

 

카카오톡 채널 챗봇으로부터 스킬 서버로 요청되는 데이터 중 SkillPayload 에서 가장 중요한 부분은 userRequest와 context이다. 사용자가 입력한 메시지가 어느 시나리오의 어느 블록으로 연결되었으며 어떤 문맥에서 발화한 메시지인지에 따라 스킬 서버에서 알맞은 비즈니스 로직을 수행하고 적절한 응답 메시지에 대한 데이터를 응답할 수 있어야 한다. 이를 위해 다음과 같이 빌더 요청 데이터에 대한 테이블을 설계할 수 있다. 채널, 시나리오, 블록, 블록 콘텍스트 데이터를 구분하여 저장하고 연관관계를 맺어줄 수 있다.

 

 

  • BUILDER_V1_CHANNEL - 챗봇이 연결된 카카오톡 채널에 대한 데이터 
  • BUILDER_V1_SCENARIO - 카카오톡 채널에서 입력된 메시지에 대하여 챗봇으로 연결된 시나리오에 대한 데이터 
  • BUILDER_V1_BLOCK - 카카오톡 채널에서 입력된 메시지에 대하여 챗봇으로 연결된 블록에 대한 데이터 
  • BUILDER_V1_BLOCK_CONTEXT - 카카오톡 채널에서 입력된 메시지에 대하여 챗봇과의 대화 문맥을 구분하기 위한 데이터 

 

 

카카오톡 채널 챗봇 빌더 스킬 요청 데이터에 대한 테이블 설계 1/2

 

카카오톡 채널 챗봇 빌더 스킬 요청 데이터에 대한 테이블 설계 2/2

 

 

스킬서버에서 카카오 빌더 로 응답하는 SkillResponse 의 테이블 설계하기

이상의 테이블을 사용하여 빌더 요청 데이터를 바탕으로 알맞은 비즈니스 로직을 수행했다고 가정하고 적절한 응답 메시지를 챗봇이 출력하도록 하려면 챗봇 빌더에서 요구하는 형식에 맞추어 응답 메시지를 구성해야 한다. 카카오 비즈니스 문서에서는 SkillResponse 데이터가 version/template/context/data 의 총 네가지로 구성되어 있다고 소개하고 있다. 

 

카카오톡 채널 챗봇 빌더가 요구하는 SkillResponse 형식 1/3

 

카카오톡 채널 챗봇 빌더가 요구하는 SkillResponse 형식 2/3

 

카카오톡 채널 챗봇 빌더가 요구하는 SkillResponse 형식 3/3

 

 

스킬 응답의 version 필드의 값은 현재 2.0으로 고정되어 있고, template 필드가 응답 메시지를 구성하는 핵심 데이터이다. context 필드는 빌더 요청 데이터의 context 필드와 마찬가지로 챗봇과 사용자가 나눈 대화의 문맥을 의미한다. SkillRequest 의 context 필드의 값이 그대로 SkillResponse 으로 전달될 수도 있고 context가 추가되거나 변경될 수도 있을 것이다. 이와 같이 오고 가는 context 에 대한 설정을 빌더에서 블록마다 input 컨텍스트와 output 컨텍스트의 이름으로 설정할 수 있다. 한편, data 필드를 통해 응답 메시지를 생성할 수도 있는데, 간단한 텍스트 출력에 이용할 수 있을 것이다. 

 

이상의 SkillResponse 에 대한 데이터도 SkillRequest 데이터와 같이 데이터베이스 테이블에서 관리할 필요가 있다. 비즈니스 로직을 스킬 서버에서 모두 수행했다고 가정하고 적절한 응답 메세지에 대한 데이터를 테이블들로부터 조회하기 위해 다음과 같이 테이블을 설계하고 연관관계를 맺어 줄 수 있을 것이다. 

 

  • SKILL_RES_V1_VERSION - 스킬 응답의 버전에 대한 데이터 (현재 고정 값이므로 필수x)
  • SKILL_RES_V1_TEMPLATE - 스킬 응답의 템플릿 필드에 대한 데이터로 응답 텍스트 및 카드와 캐러셀 데이터를 저장
  • SKILL_RES_V1_CONTEXT - 스킬 응답의 컨텍스트 필드에 대한 데이터로 대화 문맥에 대한 데이터
  • SKILL_RES_V1_CONTEXT_PARAM - 스킬 응답의 컨텍스트 필드 내로 추가할 수 있는 파라미터 데이터
  • SKILL_RES_V1_DATA - 스킬 응답의 데이터 필드에 대한 데이터로 템플릿 필드 대신 응답 메시지를 구성할 수 있음

 

 

카카오톡 채널 챗봇으로의 스킬 응답에 대한 테이블 설계 1/3

 

카카오톡 채널 챗봇으로의 스킬 응답에 대한 테이블 설계 2/3

 

카카오톡 채널 챗봇으로의 스킬 응답에 대한 테이블 설계 3/3

 

 

이후 포스팅에서 다룰 내용

이상과 같이 하고 스킬 서버에서 SkillRequest, SkillResponse 에 대응하는 클래스들을 생성해 테이블들과 매핑할 수 있을 것이다. 특히SkillResponse 의 template 필드를 자바 코드만으로 구성할 수도 있지만, 테이블 데이터를 기반으로 구성할 수도 있다. 이는 다른 포스팅에서 다루겠다.

 

한편, 스프링 웹서버에서 비즈니스 로직을 수행하는 방법은 크게 두가지인데, 첫번째는 SQL 으로 로직을 수행하는 것이고 두번째는 자바 코드로 로직을 수행하는 것이다. 필자는 JPA를 최대한 효율적으로 활용하려는 목적으로 최소한의 SQL만 사용할 계획이다. 그래서 두번째 방법으로 비즈니스 로직을 수행하되 필요한 경우 Mybatis를 사용해 복잡한 SQL문을 사용할 수 있도록 할 것이다. 이 방법으로 이점을 얻는 방법은 SQL문 하나를 두고 뜯어보는 것보다는 가독성과 유지보수성이 좋도록 자바 코드로 비즈니스 로직을 작성하는 것이다. 이상 비즈니스 로직을 작성하는 것에 대한 내용도 다른 포스팅에서 다루겠다. 

 

이상으로 카카오톡 채널과 연동한 챗봇을 사용하기 위해 스킬 서버 개발 가이드 문서를 참고해 SkillRequest 와 SkillResponse 에 대한 기본 테이블들을 설계해 보았다. 가이드 문서만 참고하면 이해할 수 있는 기본적인 내용들에 대한 것이지만, 이해했다고 생각되어도 글로 작성해야 확실히 내 지식이 된다고 생각한다. 앞으로 글쓰기 연습을 위해서라도 간단한 내용들이더라도 최대한 기록으로 남겨둘 수 있으면 좋겠다. 간단한 내용들이더라도 ChatGPT 또는 다른 AI 를 접목한 기술을 활용해 개발하는 것이 얼마나 효율적인지, 구글 검색한 결과만큼 유효한 결과물을 만들어낼 수 있는지 등을 실험하는 과정들이 모두 기록으로 잘 남을 수 있으면 좋겠다. 

 

Comments