brunch

You can make anything
by writing

C.S.Lewis

by 으뉴아빠 Oct 22. 2024

RAG Chatbot 구축기

GenAI 이전(2019년)의 회고

처음의 시작은 언제나 그랬다. 


깊이 있는 고민 없이 순간의 목표에 이끌려 무작정 달려가곤 했다. 나에게 꿈이란 대단한 무언가가 아닌, 내 앞에 놓인 작은 성취에 불과했다. 


chatGPT 4o를 활용한 그림

초등학교 때는 반장이 되어 칭찬을 받고 싶었고, 중학교에 들어가서는 친구들 사이에서 게임을 잘한다는 이유로 인기를 얻고 싶었다. 그때의 나에게 인기란, 그저 함께 웃고 떠들 수 있는 친구들이 많다는 것이었고, 그것만으로 충분히 행복했다. 고등학교에 들어가서는 좋은 대학에 가야 한다는 목표가 생겼다. 치열한 경쟁 속에서 나 역시 휩쓸리듯 그 흐름에 몸을 맡겼다. 대학 시절엔 예쁜 이성을 만나고 좋은 직장을 얻는 것이 목표였다. 직장에 들어가서는 좋은 평가와 인정을 받기 위해 애썼다. 그렇게 나는 순간적인 끌림과 임시적인 목표에 따라 흘러가듯 살아왔다.





하지만 뿌리 깊은 삶의 목표가 없었기에, 인생은 점점 흥미를 잃어갔다. 간절히 원하는 것도, 열망하는 것도 없으니 내 삶은 마치 바람에 떠밀려 가는 배처럼 흔들렸다. 삶에 대한 집착도 없었고, 그렇다 보니 위기가 닥쳐올 때마다 무기력하게 흔들리기 일쑤였다. 

chatGPT 4o를 활용한 그림


인생이 재미가 없었고 오래 살고 싶다는 마음도 없었다. 진정으로 재미를 느낄 만한 것도 찾기 어려웠다. 학문이란 것도 결국 사람이 만든 규칙일 뿐이니, 마음만 먹으면 어떤 학문이든 익힐 수 있다는 자신감은 있었다. 실제로 마음만 먹으면 적당한 성과를 얻어내곤 했으니, 더 이상 신선한 자극은 없었다. 무엇을 해도 똑같은 패턴의 반복처럼 느껴졌다. 주어진 목표를 이루면, 그다음 목표가 나타나고, 또다시 그 목표를 향해 달려가는 끝없는 반복. 어느 순간부터 그것이 지겨워지기 시작했다.






chatGPT 4o를 활용한 그림

그러던 어느 날, 나의 삶에 작은 전환점이 찾아왔다. 기존의 패턴과는 다른 호기심이 마음속 깊이 스며들었다. 만약 나의 성격을 그대로 복사한 AI가 있다면, 내가 세상을 떠난 후에도 남은 사람들에게 '나라면 이렇게 했을 것이다'라고 말해줄 수 있지 않을까? 나의 생각과 가치관이 누군가에게는 작은 도움이 되지 않을까? 물론 지금 생각해보면 자의식 과잉이었다는 생각이 들지만, 그때는 그 엉뚱한 생각이 나를 움직이게 했다. 꼭 거창한 이유가 아니더라도, 나중에 내 딸이 아빠를 그리워할 때 마치 나처럼 이야기할 수 있는 챗봇이 있다면 얼마나 좋을까 하는 마음이었다. 그 단순하고도 사소한 바람에서 시작된 일이었다. 딸이 세상 어딘가에서 외로움을 느낄 때, 마치 나와 대화하는 듯한 느낌을 받을 수 있다면, 그것만으로도 내 존재가 계속 이어지는 것처럼 느껴질 것 같았다.



그렇게 AI에 대한 관심이 생겼다. 이후, 회사에서 고객의 채널을 통합하고 히스토리와 패턴을 관리하는 프로젝트가 시작되었다. 나는 단지 AI에 관심이 있고 신기술을 좋아한다는 이유로 이 프로젝트에 투입되었다. 목표는 고객이 상담원에게 연결되기 전에 그들의 의도를 필터링해 줄 수 있는 챗봇을 구축하는 것이었다. 아무도 기대하지 않았던 기능이었고, 사실 처음에는 언급조차 되지 않았던 기능이었다. 하지만 내게는 기대와 상관없이 그저 나 자신을 만족시키고자 하는 호기심과 원하는 시스템을 구축하고자 하는 욕구가 있었다. 그래서 아무도 주목하지 않는 시스템에 대해 방대한 계획을 세우고, 하나씩 실행에 옮기기 시작했다. 프로젝트를 통해 구글 Dialogflow 기반의 챗봇을 구축하고, 이를 다양한 채널에서 운영할 수 있는 파이프라인을 설계하며, 지식 관리 DB를 구축하고, 고객 친화적인 UI/UX 설계, 실시간 상담원 연결까지.. 나는 열정을 쏟아부어 안정적인 시스템을 완성해냈다. 그렇게 나는 성공적으로 프로젝트를 완성했지만, 개인적인 호기심을 충족하기 위한 결과는 실망스러웠다. 의도(Intent)와 개체(Entity), 그리고 대화를 이어가기 위한 맥락(Context)을 활용하는 방식은 지나치게 규칙적이고 정형화되어 있었다. 인간적인 온기나 자유로움은 전혀 느껴지지 않았다. 개선되지 않는 한계속에서 인간의 복잡성과 자유로움은 기계가 쉽게 모방할 수 없는 영역처럼 보였다. 나는 1세대 챗봇들이 유행하던 시절, IBM Watson, Dialogflow, 오픈 빌더, 네이버 Clova 등 다양한 플랫폼을 활용해 수많은 챗봇을 개발했지만, 이러한 한계를 극복하는 방법을 찾지 못했다. 


 현재 이 프로젝트의 결과로 챗봇은 전담 팀까지 생길 만큼 큰 시스템으로 성장했다. 나는 DevOps 수준의 인프라 구축부터 운영까지 전반적인 지식을 얻게 되었고, 개인적으로도 큰 성장을 이루었다. 그러나 그 끝에 남은 것은 AI의 한계를 경험하고 난 후의 공허함이었다. 더 이상의 흥미를 찾기 어려웠다.


이 당시 프로젝트를 통해 얻게된 지식을 대략 정리해보면 다음과 같다. 해당 지식은 단순한 개념 이해를 넘어, 실제로 직접 설계하고 구축하며, 프로토타입 이상의 개발까지 수행 가능함을 기준으로 한다.


. 메시징 플랫폼 활용 챗봇 구축
- Facebook Message API를 활용한 챗봇 구축
- Kakao Open Builder를 사용한 챗봇 구축

- IBM Waston을 사용한 챗봇 구축

- Lex, Clova를 활용한 음성 챗봇 구축


. Google Dialogflow
-  Google Dialogflow에서 엔티티 및 인텐트 관리
- 웹훅 연결 후, JSON response 값을 활용한 응답 분석


. 데이터베이스 연동 및 챗봇 응답 분석

- JSON response를 DB의 Primary Key로 활용하여 챗봇 답변과의 연결


지식 관리 및 API 설계

- 지식 관리를 위한 별도의 게시판 생성 및 API 프로토콜 설계


OAuth 기반 시스템 로그인 연동

- OAuth를 활용한 시스템 간 로그인 공유
- CI 값을 활용한 고객 인식  

백엔드 개발 및 기능 검증

- Node.js를 활용한 백엔드 구축 및 기능 설계/검증  

다국어 처리 아키텍처 설계

- 한/중/영/일 언어별 분기를 위한 효율적인 아키텍처 설계 : 언어 코드 별 공통 intent(=동일 pk)를 가진 답변으로 연결되지만 각 언어 값(ko, cn, en, jp)로 표현되도록 설계


AWS 인프라 구축 및 배포

- EC2 Autoscaling, S3, CloudFront, Lambda, API Gateway를 포함한 AWS 인프라 구축 및 직접 배포

  * 컨테이너(Docker) 이전의 방식으로 배포 (약 5년 전)  


평가 데이터 자동 수집

- Google Spreadsheets의 App Script를 사용하여 챗봇 평가 데이터 자동 수집 기능 구축


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari