챗봇 만들기 — 나를 위한 맞춤 단어장

Jeongsoo Park
BotHub.Studio (ko)
Published in
6 min readAug 21, 2017
CC-BY-SA @Blue Coat Photos

영어 공부를 할 때 가장 고민되는 것 중 하나가 단어 외우기였다.

요즘도 기술문서를 읽다가 모르는 단어가 나올 때가 있는데, 일일이 뜻을 찾아가면서 읽으면 시간이 너무 많이 걸리기 때문에 대충 문맥을 고려하여 뜻을 추측하면서 읽곤 한다. 그러다가도 영어 실력을 늘려야겠다는 생각이 들 때는 사전을 찾아 단어의 정확한 뜻을 파악해가면서 읽는다. 그런데 가끔 느끼는건, 전에 찾아봤던 단어들을 다시 찾는 경우가 생각보다 많다는 것이었다.

그래서 예전부터 이런 도구를 찾고 있었다. 단어를 찾으면 내가 찾았던 단어들의 목록을 나중에 확인할 수 있어서, 내 분야에 쓰이는 단어들을 집중적으로 익힐 수 있도록 도와주는 도구. 이를테면 사전과 단어장이 결합된 도구. 하지만 아직까지 딱 필요에 맞는 도구를 찾지 못했다.

설치형 사전 프로그램을 쓰면 집 컴퓨터와 회사 컴퓨터, 노트북을 오갈 수 없었다. 네이버 웹 사전에서 제공하는 단어장 기능을 쓰면 다소 해소가 되었지만, 스마트폰을 많이 사용하게 되면서 그것도 어려워졌다.

문득 ‘챗봇으로 이걸 만들어보면 어떨까?’ 하는 생각이 들었다. 메신저는 데스크탑으로도, 노트북으로도, 웹으로도, 모바일로도 접근이 가능하니까.

내가 필요로 하는 기능은 간단하다:

  • 단어를 입력하면 그 뜻을 보여준다.
  • 검색했던 단어들을 빈도와 함께 보여준다.

환경 준비

BotHub.Studio를 사용할 것이기에, 아래 문서를 참고하여 계정 생성 및 명령행 도구(CLI tool)를 준비하고 메신저와 연결을 완료한다.

챗봇 구현하기

단어 뜻 검색하기

우선 가장 간단하고 핵심적인 작업부터 동작하게 해보자. 메신저로 단어를 입력하면, 그 단어에 대응하는 사전 URL을 생성해서 버튼으로 돌려준다.

공개된 사전 API가 있어서 내용을 텍스트로 받아올 수 있으면 가장 좋겠지만, 간단하게 웹브라우저를 열어서 사전 웹사이트를 직접 방문하도록 만들었다. 사전은 Longman Dictionary of Contemporary English를 사용한다.

단어 검색 횟수 세기

단어를 검색할 때마다, 그 단어를 검색한 횟수를 세도록 한다.

BotHub.Studio는 유저별로 정보를 저장할 수 있는 key-value DB를 제공한다. BaseBot.get_user_data(), BaseBot.set_user_data()를 이용해 접근할 수 있다. 그 기능을 통해 단어 — 빈도수 형태의 dict로 빈도를 관리한다.

프로젝트별 저장소도 있는데, 나 이외에 다른 사람이 검색한 단어와 섞이지 않으려면 유저별 저장소를 사용하는게 적절해 보인다.

나중에 여러 사용자들이 찾아본 단어들을 비교해서, 내가 아직 모를만한 단어를 추천해주면 재미있을 것 같다.

검색 히스토리 보여주기

그동안 검색했던 단어들의 목록을 빈도순으로 정렬해서 보여준다.

postback button을 사용하면, 버튼에 표시되는 내용과 버튼을 클릭했을 때 webhook으로 보내주는 내용을 다르게 지정할 수 있다. 그렇게, 버튼에는 ‘Next list’라고 동일하게 표시되지만, 실제 내용은 /list <start_pos>와 같이 전달되도록 하여 다음 페이지 목록을 가져오도록 처리했다.

안내 메세지

마지막으로 안내 메세지를 넣어준다.

이제 기본적인 기능은 마무리가 되었다. 이제 아래 명령으로 실제 서버에 배포해서 봇에게 말을 걸어보자:

$ bothub deploy

텔레그램 계정이 있다면 WordbookBot에게 말을 걸어보자.

개인적인 용도로 만들어서 지금은 텔레그램 봇만 개설된 상태이다. 페이스북은 페이지를 개설해야 챗봇을 만들 수 있는데, 혼자 사용하기 위해 단어장용 페이지를 만들기는 다소 부담스러웠다.

후기

나만의 필요를 딱 채워주는 쓸만한 단어장이 없을까 찾아헤맸었는데, 갑자기 스친 생각 때문에 챗봇으로 뚝딱 만들어버렸다.

점차 발전시켜가면서 기능들을 추가하면 재미있을 것 같다:

  • 일정 시간이 지난 후에 검색해본 단어들 중에서 퀴즈를 낸다
  • 다른 사람들이 찾아본 단어들과 비교해서 어휘 수준을 알려준다
  • 나와 비슷한 사람들이 모르고 있던 어휘를 추천해준다

데스크탑 프로그램이나 웹, 앱으로 만들었더라면 개발할 거리가 더 많았을 것이다. 웹이라면 사용자를 구분하기 위해 로그인도 있어야 할테고, 데스크탑 프로그램이나 앱은 핵심 기능보다는 필수적으로 필요한 기본 골격을 만드는데 시간을 더 썼을 것 같다.

그런데 챗봇으로 만들면 간단한 텍스트 인터페이스만 구현하면 되니 간단히 만들 수 있었다. 마치 콘솔 프로그램을 작성한 것 같다. 마침 IDEO에서 발행한 글 중에도, 챗봇이 훌륭한 프로토타이핑 도구가 될 수 있다는 내용이 있다.

챗봇이라고 하면 인공지능을 떠올리는 경우가 많다. 그리고 곧이어 자연어를 얼마나 잘 이해하고 처리할 수 있는지가 화두가 된다. 하지만 인공지능을 결부시키기 이전에, 대부분의 사람들의 사용하고 있는 메신저를 UI로 활용한다는 점에 착안한다면 더 다양한 용도를 생각할 수 있을 것이다.

지금 BotHub.Studio를 방문해서 나만의 단어장을 만들어보자.

PS. 본 아티클 관련 문의는 BotHub.Studio Community를 통해 지원받으실 수 있습니다. 챗봇 도입 및 제휴 문의는 bothub@bothub.sutdio로 연락해주세요.

--

--