본문 바로가기

일상/Hackathon

사내 해커톤 참가 후기 - 챗봇 application 개발 경험기

작년 11월경 12월까지 일정으로 사내 해커톤이 열렸다.

우리 회사에서는 국내외에서 활발히 이루어지고 있는 개발문화이자 축제인 해커톤을 2016년 부터 열었으며 3회째를 맞이했다.


1등 상금 500만원, 본선진출자 airpod증정, 리얼포스 키보드 증정 등 다양하고 멋진 상품이 기다리고 있었다.


나(개발자)와 동기형(비개발자)은 해커톤에 참가하기로 마음을 먹었고 ideation을 시작했다.


Ideation

시작은 순탄하지 않았다. 이번 대회는 독특하게도 일반적인 해커톤처럼 12시간/24시간의 제한을 두고 하는 것이 아니라 일반 공모전 처럼 예선/본선 이루어져 있었다. 이렇기에 회사일과 개발을 병행해야 하는 일정 상 최대한 기존에 알고있던 기술과 빠르게 개발할 수 있는 기술 위주로 진행하기로 결정하였다.

지난 18년 중순에 참여한 홍콩해커톤(포스팅 바로가기)에서 AWS LEX를 활용한 챗봇을 개발한 경험이 있던 나로서는 챗봇을 통한 제품을 만들면 좋겠다고 생각했다.

챗봇은 여러 분야에서 다양하게 고객들에게 제공되고있다. 이렇게 다양한 시장 가운데 어떻게 하면 더욱 사내 구성원들에게 설득력있게 발표를 할 것인지에 초점을 맞추고 고민하였다.(사내 구성원이 투표를 통해 시상) 오랜 고민 끝에 사내에서 사용하는 사내 채팅플랫폼에 챗봇을 붙여보기로 결정하였다.



잔디, Slack 등 여러 사내 채팅플랫폼이 있지만 모두 사람간의 상호작용을 위한 것이지 각자 개개인의 일정관리와 같은 것들은 사내 웹을 이용해야만 했고, 이것은 업무에 context switching으로 작용하여 업무의 효율을 낮추고 있다고 생각했다. 그렇기에 seamless하고 연속성있는 업무를 위해 채팅플랫폼에 챗봇을 붙여 일정관리, 개발관리, 연락처확인 등 여러 작업들을 채팅플랫폼 안에서 수행하고자 하는 방안을 생각했다.


Development

해커톤 혹은 공모전의 특성상 개발에 시간을 많이 잡아먹을 수록 효율이 떨어진다. 간단하고 설득력있는 Business model과 완성도있는 제품 결과물만이 우리에게 수상의 영광을 안겨줄 것이라고 생각했다. 그렇기에 아래와 같은 기술들을 사용하여 개발을 진행하였다.

# Android
# Amazon Web Service LEX
# EC2

개발도중 가장 첫번째로 나온 허들은 챗봇의 사용성이였다. AWS LEX는 오직 영어만 지원했고 한글은 지원하지 않았다. 이에 따라 한글기반의 챗봇플랫폼이 필요했는데 여러 수소문 끝에 LG에서 만든 danbee.Ai 챗봇 플랫폼을 사용하기로 결정하였다. 


danbee.Ai는 1달에 10,000번의 대화가 무료로 가능했으며 강력한 한글 NLP(자연어 처리)와 손쉬운 대화흐름(chatflow)를 drag&drop으로 만들 수 있었기에 빠른 prototype개발에 적합했다.

# Android
# Amazon Web Service LEX  → danbee.Ai
# EC2

EC2는 챗봇과 연동하는 Jenkins를 올리기 위해 발급받아서 사용하였다. danbee.Ai는 SaaS형태의 챗봇플랫폼이므로 따로 서버가 필요하지는 않았다.


1 개발자로 구성된 2인조팀이라 모든 개발은 나의 의사결정 기반으로 이루어 졌다. 하루 10시부터 19시까지 업무를 마치고나면 개발할 수 있는 시간은 저녁 2~3시간 밖에 없었다. 다소 쉽지 않았지만 개발해야 할 기능들에 대해 명확히 정의하고 UI/UX는 기존에 여러 application들을 기반으로 benchmarking하여 최대한 결과물을 빠르게 뽑아내는데 집중했다.



최종적으로 개발된 아키텍쳐는 상기와 같다. 중앙에 있는 챗봇(P.Bot이라 명명)은 danbee.Ai와 함께 통신을 하여 사용자의 입력을 NLP를 통해 의도추론을 하게되고, 의도추론으로 어떤 의도였는지 확인 되면 대화흐름(chatflow)를 타게된다. 최종적으로 P.Bot은 사용자에게 적절한 결과물을 주게되는 형태다.



danbee.Ai에서는 chatbot을 쉽게 만들 수 있도록 단계적으로 도와주는데 그 중에서도 상기와 같이 사용자 등록 예문을 통한 의도추론을 정의(definition)하는 것은 아주 효과적이였다. 사용자가 '일정예약' 이라는 의도를 가지고 적게될 많은 예문들을 미리 적을 수 있게 되어있다. 상기와 같은 방식으로 등록을 하게되면 NLP를 통해 확률적으로 '일정예약'/'사용자검색'/'젠킨스동작' 과 같은 여러 의도 중 하나가 선택되게 되고 아래와 같은 chatflow를 타게 된다.



상기와 같은 drag&drop가능한 node들을 통해 각종 slot이 채워지게 되고, 결과물은 사용자에게 return하게된다.




chatbot을 개발하는 모든 과정은 우측의 chatflow simulation창을 통해 debugging하면서 고쳐가며 설정 가능하다. 아주 편리하고 단계적으로 설정가능하도록 되어 있게 때문에 개발자뿐만 아니라 기획자, 디자이너 등 업종에 관계없이 누구든지 쉽게 사용가능하다.


UI/UX

이런 대회를 하게 되면 가장 신경쓰이는 것이 UI/UX라고 해도 과언이 아니다. 결국 청중, 심사위원들에게 보여지는 것은 우리가 지난 24시간, 48시간 동안 잠 못자고 개발하던 그 과정이 아니라 바로 결과물이기 때문이다. 또한 디자이너가 없는 팀이라 더욱 신경이 쓰이고 어깨가 무거웠다.

안드로이드개발을 시작한지 7년이 다 되어 가지만, 채팅 application을 처음 개발하기 때문에 사전조사가 필요했다. Line, Slack, 잔디 등 많은 application이 배치한 대화형 User Interface를 참고하여 기본 틀을 만들었다.

      



가장 최근글이 아래에 내려오게 하고 대화가 많아질 수록 상단 scroll로 올라가는 전형적인 chat application UI를 적용하였다. 그런데, 이번에 발표하고자 하는 제품은 일반적인 채팅형태의 챗봇이 아니라 업무용 채팅플랫폼이며 이에 챗봇이 업무를 도와주는, 쉽게 말하면 비서역할을 하는 것이다. 그러므로 더욱 Rich한 정보를 사용자에게 제공하기 위해서는 상기와 같은 제한된 채팅UI가 아닌 더욱 확장된 형태의 UI가 필요했다. 이때 IBM의 해커톤 수상작의 UX가 기억에 떠올랐다.


IBM은 Call for Code라고 하여 IT를 통해 여러 자연재해을 극복할 수 있는 방안을 주제로한 해커톤을 열었는데, 그 중 1등 수상작은 기술면에서나 UX면에서나 모두 뛰어났다.



1등 수상작은 clusterDuck이라는 IoT(사물인터넷) device를 사용하여 홍수가 발생한 지역의 통신망을 ad-hoc network를 통해 연결, 각 기점을 중심으로 통신망을 펼쳐, 재해 중에 필요한 보급, 약품, 대피소 등을 wifi를 통해 전달하는 기술이다.

수상작 소개 기사(wired) : https://www.wired.com/story/ibm-call-to-code-winner-clusterducks/


여기서 눈여겨 본것은 이 작품의 web Dashboard page였다.


약품, 대피소 등이 표시된 대시보드


지도가 표시된 대시보드


좌측에는 챗봇을 통해 사용자가 원하는 내용을 작성하면 우측에 지도 및 각종 정보가 나오도록 하는 방식이였다. 위와 같은 UI는 사용자에게 어렵지 않게 채팅application을 사용을 유도하면서도 각종 정보를 우측에 배치하여 마치 web browsing을 하듯이 쉽게 정보를 받아 들일 수 있기에 훌륭한 User Experience 경험을 제공해줄 수 있을 것이라 생각했다. 이에 따라 위 UI를 이번 작품에 벤치마킹하여 개발했다.



P.Bot의 메인화면은 좌측과 우측으로 나뉘어져 있고 좌측에는 사용자와 BOT이 채팅을 할 수 있도록 하였고, 우측에는 각종정보 및 navigation을 배치하였다.


연락처 조회 화면


젠킨스 build 확인 화면


Result

예선까지 작품을 모두 개발 완료했고, 예선발표까지 완벽하게 끝냈지만, 안타깝게도 본선에는 진출하지 못했다. 작품의 완성도는 뛰어났지만 적절한 Business model을 설명하지 못하고 활용가능성에 대해 좀더 집중해서 이야기하지 못한것이 아마 예선탈락의 원인이지 않을까 생각했다. 본선참가작품을 보다보니 조금더 노력해볼걸 조금 다르게 생각해볼걸하는 아쉬움도 있었다.


본선 참가 작품들은 현재 service하고 있는 제품에 Machine learning을 붙이거나 접근방법을 비틀어 적용하여 참신성, 기술력이 매우 뛰어난 작품들로 이루어졌다.


Lessons learned

아쉽게 본선에 참가하지 못했지만, 결과물은 원래 생각했던거 보다 훨씬 만족스럽게 뽑아내서 다행이라는 생각이 들었다. 이번 대회를 통해 얻은 가장 큰 수확은 사용자에게 제공되는 효과적인 UI/UX에 대해 한번더 생각해보는 기회를  가진것이 아닌가 싶다. 사실 개발에 집중하다 보면 고객의 관점을 놓치기 쉽다. 결국 개발자가 만드는 많은 것들이 고객들에게 제공된다. 사용자가 어떻게 사용할지, 어떻게 사용하면 효과적으로 제품에 몰입할 수 있을 지 고민하면서 기능을 개발한다면 제품은 완성도가 높이지게 되고, 제품을 사용하는 고객, 제품을 만드는 개발자 둘다 만족도가 높아질것임에 틀림없다.


반응형

'일상 > Hackathon' 카테고리의 다른 글

2019 SKT Ideathon 참가 후기  (254) 2019.07.07
홍콩 해커톤 Smartone 참가 후기  (377) 2019.01.22