본문 바로가기
기타 이모저모

[Project-버버두] 개발기 #2 : 개발

by beeny-ds 2024. 9. 23.
4월부터 6월까지 가계부 서비스 버버두(Budget Buddy 너두? 나두!)를 개발했다.
처음 진행하는 사이드 프로젝트였기에 개발기를 남긴다.
개발기는 1. 기획, 2. 개발, 3. 서빙 4. 우여곡절 순으로 포스팅하겠다.
본 포스팅은 2. 개발에 해당한다.

 

목차

1. RnR 정의

2. 카톡 챗봇 기능 확인

3. 기능 개발

4. 기능 시연


 

1. RnR 정의

개발을 수행하는 인원은 총 2명이었다.

NLP 연구원인 나, 안드로이드 개발자(편의상 `안개`라 부르겠다.) 둘이서 진행했다.

가장 먼저 정했던건 어떤 프로그램 언어를 사용할지, 각자의 RnR 및 협업 방식은 어떻게 할지였다.

 

프로그램 언어는 감사하게도 안개님이 배려해주셔서 Python 으로 정했다.

각자의 RnR 의 경우, 아래와 같이 나눴다.

  • 나: 고객의 Text 를 처리하여 구글 스프레드 시트와 연동하는 모듈 개발
  • 안개님: 서버와 카톡 챗봇 기능을 연결하는 기능 개발 (Ngnix, FastAPI 활용한 배포 모듈 개발)

협업 방식은 다음과 같다.

각자 개발하고 필요시 중간중간 미팅 요청합시다.
개발이 어느 정도 끝나 두 기능을 merge 하는 단계가 되면 만나서 같이 기능 구현합시다.

만나서 개발한건 1번이지만 미팅은 한... 3번 정도?? 했던 것 같다.


 

2. 카톡 챗봇 기능 확인

카톡 챗봇 기능을 확인한 이유는 우리 서비스의 핵심 기능을 카톡에서 제공하는 기능을 활용하여 어떻게 구현할 수 있을지 검토하기 위함이었다. 우리 서비스의 핵심 기능은 다음과 같다.

  • 지출 내역을 카톡 메세지로 입력했을 때 구글 스프레드 시트에 지출 내역이 자동 저장되는 기능
  • 최근 지출 내역을 카톡으로 확인할 수 있는 기능
  • 지출 통계치를 카톡으로 확인할 수 있는 기능 (Pre-defined Category 에 따른 통계치 제공)

---

 

카카오톡 챗봇은 사용자와 상호작용하기 위해 다양한 기능을 제공한다.

대표적인 개념은 발화와 블록이다.

  • 발화: 사용자가 보내는(보낼 것으로 기대되는) Text
    • 사용자가 카톡 플친에 보낸(보낼) 메세지라 생각하면 된다.
  • 블록: 해당 '발화'에 따른 처리 방식
    • 사용자의 예상 발화에 따라 봇이 수행할 액션과 응답할 내용을 설정할 수 있다.
      ex) 간단히 함수라고 생각하면 좋다.
    • 블록은 개발자에 의해 커스터마이징하여 사용자에게 다양한 형태로 응답할 수 있다.

사용자 발화에 따라 원하는 블록이 실행된다. 예를들어

사용자 발화 중 '지출 내역' 이 포함된 경우 → [지출 내역 블록] 이 실행됨

예상 발화에 의해 실행할 블록을 설정하는 일종의 text 기반 category 분류를 해주게 된다.

 

 

그렇다면 블록은 구체적으로 뭐가 있을까?

블록에는 [ 웰컴 블록, 폴백 블록, 텍스트형, 이미지형, 이미지+버튼형 ] 등 다양하게 존재한다.

  • 웰컴 블록은 사용자가 봇에 처음 진입했을 때 사용자를 환영하는 블록이다.
  • 폴백 블록은 봇이 사용자의 응답을 알아듣지 못했을 때 자동으로 실행되는 블록이다.
  • 텍스트형은 말 그대로 사용자 발화에 대해 자동으로 텍스트를 보내주는걸 의미한다.

나머지 블록들은 사진으로 알아보자. (자세히 설명한 블로그가 많다. 그걸 참고하기 바란다.)

이미지형 / 이미지+버튼

 

 

이런식으로 카톡에서 Pre-define 되어 있는 기능들을 확인하여 우리 서비스를 어떻게 개발할지 설계하기 위한 논의를 진행하였다.

많은 블록이 있지만 NLP 전문가인 내 입장에서는 모든 Text 가 폴백 블록으로 들어가는게 가장 편했다.

왜냐하면.... 카톡이 제공하는 발화를 분석하여 자동으로 블록으로 지정해주는 기능이 어떻게 동작하는지 상세하게 알 수 없기 때문이다. 의도대로 동작을 안 할 바에야 모듈을 통해 내가 직접 분류해서 다 처리하는게 확실하다는 생각으로 사용자의 모든 발화를 폴백 블록으로 넘겼다.


 

3. 기능 개발

앞서 1. RnR 정의에서 나의 역할은 '고객의 Text 를 처리하여 구글 스프레드 시트와 연동하는 모듈 개발' 이라 했다.

github 을 통해 안개님과 소통하며 모듈을 개발했다.

모듈을 간단하게 설명하면...

1. 지출 내역 입력 기능
- 사용자의 발화인 Text 를 분석하여 [카테고리, 금액, 날짜, 사용 내역] 으로 구분
- 사용자의 구글 스프레드 시트에 입력
2. 지출 내역 확인 기능
- 사용자의 발화인 Text 를 입력으로 받으면 사용자의 구글 스프레드 시트에서 최근 지출 내역 7개를 return
3. 지출 통계치 확인 기능
- 사용자의 발화인 Text 를 분석하여 어떤 통계치를 확인하고 싶은지 분류
- 사용자의 구글 스프레드 시트에서 확인하고자 계산된 통계치를 return

 

이 중 1번, 2번에 대해서만 개발하고 3번은 Stop 해뒀다. (이것저것 할게 많아서 Stop 했다가 아예 Drop 이 된 느낌이지만...)

 

---

 

안개님의 경우, 서버와 카톡 챗봇 기능을 연결하는 기능을 개발했다.

AWS 에서 프리티어로 대여한 서버(EC2)를 활용하여 개발을 진행했다.

OS 는 amazon linux latest version 이었다.

 

Ngnix 로 FastAPI 를 Public ipv4 로 접근 가능하게 하여 개발했다.

서비스의 주요 기능인 ['지출 내역 입력', '지출 내역 확인', '지출 통계치 확인'] 에 대한 함수를 통해 카톡과 연동시켰다.

 

사용자 구분을 위해서는 카톡에서 제공하는 사용자의 고유 ID 를 활용하였다.

사용자 식별정보 확인

 

위 json 구조를 확인하면 사용자 발화와 사용자 id 를 얻을 수 있다.

사용자 id 를 활용하여 사용자별로 사용하는 구글 스프레드시트와 연결시켜 재정 관리를 할 수 있는 Procss 를 개발했다.


 

4. 기능 시연

개발에 대한 상세한 설명은 하지 않아서 뭘 했다는건지 이해하기 어려울 수 있다.

때문에 기능이 동작하는 영상을 추가했다.

 

아래 기능은 1. 지출 내역 입력 기능이다.

지출 내역 입력 시연

 

아래 기능은 1. 지출 내역 확인 기능이다.

지출 내역 확인 시연

 

통계치를 자동으로 저장하는 기능은 구글 스프레드 시트에서 Apps Script 를 활용하여 트리거를 통해 자동화하였다.

편의상 통계치 화면만 사진으로 확인해보자.

통계치 워크 시트

 

상세한 내용이 궁금하면 개인적으로 연락을 주기 바란다.


 

느낀점,,

개발 초기, 카톡 플친 기능을 충분히 검토하지 못하여 삐걱거린 우여곡절이 있었다.
완전 초기 기능 설계에는 많은 걸 사용자에게 제공하자는 취지로 이것저것 설계하였으나 카톡에서 제공하는 기능의 한계에 의해 구현할 수 없었다.
결국 줄이고 줄여 가장 필요한 기능만 제공하자.! 라는 결론이 나왔다.

다음부터는 API 를 통해 개발할 때 해당 API 가 어디서부터 어디까지 기능을 제공하는지, 설계와 비교했을 때 한계는 무엇인지 등 상세하게 확인해야 한다는 생각을 했다.

아니... 설계 및 기획 전에 시장조사와 동시에 제공하는 API 기능을 검토할 필요가 있다.

그렇지 않으면 설계한 내용을 수정해야만 하는 불상사가 발생하더라...

프로토타입 개발이었기에 망정이지... 아니었으면 이건 큰 실수다.

뭐... 이렇게 배우는거지... 허허

반응형

댓글