신입 개발자로써 일을 하다보면 갈증나는 상황이 몇 가지 있다.
설계 관점에서의 방향성 (개발 흐름)
기획 분석을 통해 테이블 설계부터 시작하여, 어떻게 프로그래밍 할 것인가. 를 단번에 떠올리기 쉽지 않다.
그러나 이건 익숙함의 문제라고 여기고 있다. 즉, 더 많은 프로젝트를 해낼 수록 채워지는 갈증이랄까.
코딩 관점에서의 올바름
내가 지금 하고 있는 코딩이 소위 말하는 클린 코드일까? 간단하게는 네이밍좀 잘하고 싶은 마음에서 부터 출발해서 레이어 관련한 패턴을 바꾸면 더 나아질까? 로 이어지는 의문은 페어 프로그래밍과 코드 리뷰를 통해서 많이 좋아진다고 하지만 그런 문화가 없는 개발팀에 속한 사람들도 분명 있기 때문에 지속적인 커뮤니티 활동으로 극복하는 것이 옳다고 생각한다.
도메인의 이해도
어떻게 설계해야할 지도 알고, 이렇게 해야 좋은 코드인지 알아도, 도메인을 이해하고 있지 않으면 당장 우리가 제공하는 서비스에서 나는 어떤 일을 하지? 에 대한 답을 내릴 수 없다. 막연히 주어지는 일만 하기엔 특정 기간에 업무가 쏠렸다가, 여유로웠다가 한다. 좀 더 확실히 공수 기간을 산정하고 업무를 찾아서 하거나 내 업무 시간을 효율적으로 관리하려면 반드시 해결해야만 하는 갈증이다.
다양한 갈증을 해결하기 위해 여러 방면으로 노력하고 있지만, 지금부터는 도메인을 이해할 때다.
지금까지 내가 한 일, 그래서 하는 일이 뭐냐고 질문 받으면 나는 웹 개발을 했고, 하고 있다. 라고 말할 것이다.
하지만 이제부터 나는 챗봇 서비스의 개발에 기여하고 있다. 라고 말할 때인 것이다.
카카오는 인공지능 기술을 이용하여 카카오톡 채널 챗봇과 카카오미니 보이스봇을 제공하고 있다.
그러나 현재 카카오에서 이를 자체적인 서비스로서 일반 사용자들(기업)에게 제공하고 있진 않다.
다시 말해, 챗봇과 보이스봇을 제작할 수 있는 도구와 가이드라인을 제공해주는 데에 그친다.
그래서 우리 회사를 포함한 몇몇 회사는 실제 사용자들(기업)들에게 기업에 대한 정보와 필요한 기능에 대한 정보만으로 카카오에서 제공해주는 도구를 활용해 챗봇 서비스를 온전한 서비스의 형태로 제공하고 챗봇에 쌓이는 데이터를 다양한 방법으로 통계 및 분석할 수 있도록 도와주고 있다.
오픈 빌더: 위에서 언급한 카카오에서 제공하는 도구 중의 하나로 챗봇을 제작하는 데 필요한 값을 받아서 제작을 도와준다.
카카오 채널: 보통 은행이나 어떤 기업들의 광고를 카카오톡으로 전달받은 기억이 있을 것이다. 마치 친구에게서 온 듯한 형태의 메시지 이고, 실제로 플러스 친구라고 부르는데, 이러한 계정을 일반적으로 채널이라고 한다.
챗봇 관리자 센터: 카카오에서 제공하는 카톡 채널 챗봇과 보이스봇 을 설계하는 플랫폼이다.
카카오 비즈니스: 지금까지 위에 언급한 도구들을 사용하기 위해 가입해야 하는 플랫폼이다.
카카오 싱크: 카톡 채널주인(기업)이 메시지를 보내며 유저들과 소통할 때, 마케팅적인 차원에서 약관 동의 및 가입을 받고 싶을 때 사용한다. 정의하면 사이트 방문자가 회원가입시 약관 동의를 한 번에 진행하여 더 빠르게 가입할 수 있도록 도와주는 카카오 간편가입 서비스 이다.
알림톡: 카카오톡의 채널에서 발송되는 메시지 중에서 유저가 채팅을 할 수 없는, 말 그대로 알려주기 위한 카톡 메시지 형태를 알림톡 이라고 한다.
상담톡: 알림톡과 반대로 유저가 채팅 가능한 형태의 카톡 메시지를 상담톡 이라고 한다.
발화: 보통 사용자 발화라고 하는데, 사용자로 부터 입력받은 그 한마디를 의미. 즉 챗봇에서 대화 시작 지점이라고 생각해도 좋다.
엔티티: 봇이 이해할 수 있는 용어를 체계적으로 정리한 데이터 사전. 발화가 되었을 때 그 텍스트를 분석해서 나온 결과를 엔티티(사전)에 매칭시킨 뒤에 의도에 맞는 동작을 수행하게 된다.
엔티티의 구조: [엔티티 이름 / 대표 엔트리 / 동의어] 이렇게 3가지로 구성되어 있다. 예를 들어 커피 관련 업체에서 사용하는 챗봇이라면, [커피 / 카페모카 / 커피모카] 이런식으로 생각할 수 있다. 여기에 사용자가 카페모카 주문이라고 입력한다면 엔티티 속 엔트리 매칭을 통해 카페모카를 찾을 것이다.
시스템 엔티티: 위의 엔티티는 커스텀 엔티티였고, 자주 쓰이는 엔티티는 카카오측에서 자체적으로 관리해주고 있다. 예를 들면 날짜와 단위 같은 것들이고 이렇게 기본으로 내장되어 있는 엔티티를 시스템 엔티티라고 한다.
시나리오: 시나리오는 봇 안에서 사용자가 경험할 수 있는 서비스 단위이다. 예제를 들어서 설명하면 이해가 쉽다. 실제 카카오에서 들고 있는 예시인 금융서비스라고 생각해보자. 나는 신한은행을 쓰고 있으니 그냥 신한은행이라고 치면, 유저가 신한은행 챗봇에게 예금 알려줘라고 입력했다고 가정하자. 그럼 챗봇에 사전 등록되어있는 예금 관련 카테고리들이 순서대로 쭉 유저에게 전달되면서 버튼을 통해 필요한 데이터를 입력받는 등 유저와 핑퐁을 할 것이다. 이렇게 한 파트에서 정해져있는 전개 과정을 챗봇 서비스에서 시나리오 라고 한다.
블록: 블록은 사용자의 의도를 응대하는 가장 작은 단위다. 즉 여러 블록이 모여서 하나의 시나리오가 된다. 시나리오도 사실 몇가지 종류가 있지만 너무 상세한 내용이라 카카오의 가이드라인을 보는 편이 좋고, 기본 시나리오만 보면 그 안에 필수로 포함해야하는 요소로써 웰컴 블록과 폴백 블록, 그리고 탈출 블록이 있다. 블록이 가장 작은 단위라고 했으니 그냥 챗봇에서 날라오는 메시지 단 1개가 블록이라는 것 정도는 직감했을 것이다. 그 상황에서 처음 챗봇을 만나서 전달받는 메시지가 웰컴 블록인 것이고, 폴백은 사용자가 뭐라는 지 몰라서 뱉는거, 탈출은 대화 종료에서 쓰이는 블록이다.
발화 패턴: 블록을 만들때 쓰입니다. 챗봇이 사용자 발화를 인식할 수 있도록 패턴화 하는 것인데, 사용자가 ~~이렇게 말할 것이다 라고 예측했으면 그 내용을 토대로 그 발언 중에서 핵심 단어를 엔티티로 태깅하여 의도를 파악한다.
파라미터: 이것도 블록에서 쓰이는 건데, 에를 들어서 사용자의 의도가 이러이러 할 것이다. 라고 예측했으면 그 예측이 맞다는 것을 증명하기 위해 반드시 이런 저런 단어는 그 문장에 포함되어야 한다고 가정할 수 있고, 그때 그 단어들이 파라미터가 된다.
이벤트API: 일반적으로 챗봇은 사용자가 먼저 말을 걸면 대화가 시작되는 것으로 하지만, 반대로 흐름 상 챗봇이 먼저 말을 걸어야할 수도 있다. 그때 쓰이는 것이 이벤트 API 이다.
플러그인: 사용자가 뚱딴지 같은 답변을 할 수도 있기 때문에, 미리 정해둔 질문 또는 답변을 반드시 하도록 하는 것을 플러그인이라고 한다. 가끔 기업채널에서 오는 톡중에서 채팅을 직접 입력하는 것이 아니라 정해진 것중에 눌러가면서 챗봇과 대화할 때가 있는데 그게 바로 플러그인이다.
스킬: 따로 스킬서버를 만들어서 운영해야하는 것으로 어찌보면 개발자에겐 챗봇서비스에서 제일 중요한 개념이다. 대화에서 각종 요소들이 다양하게 바뀔 경우 등, 블록의 출력만으로는 한계가 있을 때 스킬을 활용해서 더 유연한 대화의 흐름을 제공할 수 있다.
개념 차원에서 용어 정리를 한 것일 뿐, 예를 들어 스킬 서버를 구성하려면 어떻게 해야되는 지 등의 정보는 담지 않았다.
그러한 내용은 실제 카카오 비즈니스에서 확인해보는 것이 120% 더 좋다.
마찬가지로 개발자의 관점에서 크게 필요하지 않은 것들은 배제했다.
학습, 분석, 봇테스트, 머신러닝 등이다.
챗봇 서비스를 하는 회사들이 다 우리와 같은 업무 분담을 갖는지는 모르겠지만, 챗봇 제작 듀토리얼 같은 것은 훑어볼 수는 있어도 개발자가 직접 할 필요는 없다.
보통 챗봇 제작자와 비슷한 직무의 사람들이 맡고 있기 때문이다.
챗봇에 대한 개념을 이해했다면 마지막으로 동작하는 흐름을 떠들어보자.
이런식의 대화가 오가면서 데이터가 쌓이고 그걸 머신러닝으로 분석하고 더 나은 응답 결과를 얻으며 대화 흐름을 만들어 나간다.
마지막으로 필요한 것은 아무래도 스킬서버 개발일 것이다. 내가 해서 개발을 공유해볼까 도 싶었지만, 이미 우리 서버는 스킬서버 구축이 되어있고 나는 혹시나 내가 맡은 추가적인 개발사항 들에서 스킬이 필요할 경우 스킬 개발을 하기 때문에 서버 구축은 애매한 것 같다.
그리고 무엇보다 가이드가 있으니, 필요한 사람들은 카카오 비즈니스에서 스킬 개발 가이드를 보는 편이 좋겠다!