Develiper
Develiper
🎻 루키 파트너
📚 학습반장

[지진아의 카톡봇 따라잡기 3탄] 산넘고 물건너 바다 건너서 천신만고 끝에 PerplexBot w/FastAPI 서버 카톡봇 성공

카톡봇 아주 간단한 버전은 성공했는데,

Android emulator가 자꾸 말썽이라서 노가다 작업에 지쳐서 의욕이 좀 떨어져있었고,

Perplexity API 가져와서 검색 기능을 해 주는 카톳봇을 Fast API 서버 구축하여 만드는 작업을 하다가 서버와 사투를 벌이고 기진맥진.....

더불어 FastAPI 서버 구축까지는 어찌어찌하다가 겨우 성공했는데,

카톡봇과 어떻게 연결하는 것인지 몰라서 헤매다가 실패하고 전의 상실 상태.....


그러다가 정신 좀 차리고 짱구를 굴려보면서 전체 구조가 어떻게 이루어져야 하는지 열심히 추측해봅니다. 내가 생각한 구조가 맞는지 Jun님에게 문의하여 확인받고 나서야 이제 얼추 감이 잡힙니다.

개발자/IT 출신이 아니어서 이 모든 것들이 낯설고 생소하고 처음 해보는 것들이고, 용어도 낯설기만 해서 어렵게 느껴졌는데, 사실 상식과 논리로만 생각해보면 너무나 당연하면서도 단순한 구조였더군요. 안해봐서 이런 개념을 잡기가 어려웠던 것일 뿐, 개념 자체는 사실 쉬운 거네요

최종적으로 정리한 PerplexBot w/ FastAPI 서버의 구조는 다음과 같습니다.

한국어의 다양한 단계를 보여주는 타임 라인

이렇게 구조가 잡히자 머리 속이 환해지는 느낌과 이제서야 제대로 해 볼 수 있겠다 싶었습니다.

중간 중간 에러가 발생해도 버티고 작업하면 결국에는 성공할 수 있겠다라는 자신감~

처음에 이 구조가 명확하게 잡히지 않아서 너무 힘들었던 것 같아요

가이드에는 나와 있지 않아서 emulator에 Rhino Java Script로 코드를 넣어주어야 한다는 것을 인식하기 어려웠거든요.


Jun님이 추천해주신 Bluestacks 를 깔고 시작해봅니다. (Android studio에 질려버려서요...)

확실히 게임용으로 만들어진 것이라 그런지 훨씬 더 가볍고 안정적(물론 100% 안정적이지는 않습니다만)인 느낌이었고, 작업하기가 훨씬 더 수월했습니다.

Bluestacks에 카카오톡을 설치하고 메신저봇R도 설치합니다.

그리고 위에 토글 할 수 있는 창 전환 기능을 통해서 카카오톡과 메신저봇R을 왔다갔다 하면서 설정을 하고 테스트를 진행합니다.

✅ Bluestack과 알림(cache) 처리 구조: 정확한 이해

1. ❌ Bluestack이 PC의 알림 캐시를 받아오는 구조는 아님

  • Bluestack은 Android 에뮬레이터입니다.

  • 즉, 실제 Android OS처럼 자체적으로 Notification Manager를 가지고 있으며,
    카카오톡 앱은 Bluestack 내에서 직접 실행되고, Bluestack 안에서 알림을 생성합니다.

  • 따라서, Windows의 알림 캐시나 시스템 Notification Center와는 무관합니다.

정확히 말하면: Bluestack 내의 가상 안드로이드 시스템이 자체적으로 카카오톡 알림을 받고 표시함

메신저봇R에 원래 작동하던 수다맨 코드를 넣고 제대로 작동하는지 테스트 해봅니다.

됩니다.

그럼 이제 다음 단계로 넘어가야죠


'검색' 이라는 키워드를 trigger 삼아서 검색에 붙은 내용을 Perplexity AI에 가서 API로 가져와 답변을 생성하는 Perplex 봇을 만들기로 합니다.

스터디장님의 BotFather와 대화하면서 전체 설계를 confirm 받고 대화하면서 쭉쭉 뽑아봅니다.

시스템 구성도 (전체 아키텍처 요약)

[사용자]

↓ (오픈카톡 메시지)

[수다맨 계정 on Bluestack]

↓ (Trigger 단어 '검색' 탐지)

[Bluestack 알림 감지 + 메시지 추출]

↓ (HTTP 요청)

[FastAPI 서버 @ DigitalOcean]

↓ (쿼리 정제 및 AI 요청)

[Perplexity AI API]

↓ (답변 수신)

[FastAPI 서버]

↓ (답변 반환)

[Bluestack]

↓ (카카오톡 채팅방 메시지 전송)

[사용자에게 답변 표시]

그리고 중간에 파싱이라는 말이 나오길래 뭔지 몰라서 물어서 배워봅니다.

🧩 "파싱"이란 무엇일까? (초등학생 눈높이 설명)

🎒 쉬운 예시부터!

만약 친구가 너에게 이렇게 말했어:

✉️ "내일 뭐 입을까 궁금해 검색"

이 말을 들은 너는 이렇게 생각할 수 있어:

  • "오! 친구가 뭔가를 검색하고 싶어 하는구나!"

  • 그런데 전체 문장을 살펴보니 "검색"이라는 단어는 명령 같은 역할이야

  • 그래서 너는 "내일 뭐 입을까?"만 꺼내서 검색하면 되겠지!


🎨 이걸 컴퓨터로 비유하면:

  • 컴퓨터가 어떤 문장을 읽고

  • 필요한 부분만 골라내는 것
    바로 파싱(parsing)이라고 해! 💡


📦 그림으로 정리하자면:

arduino

복사편집

[전체 문장] → "내일 뭐 입을까 궁금해 검색" ↓ [필요한 부분만 골라내기 = 파싱] ↓ "내일 뭐 입을까 궁금해"

BotFather 와 대화하면서 최종적으로 Rhino Java Script 코드를 작성했습니다.

당연히 짜준 코드로 실행해보니 안됩니다. 그럼 그렇지....

이때부터 사투가 다시 벌어집니다.

매번 안되서 캡처 화면 보여주면서 안된다, 제대로 된 코드 내놔라 하면

자기는 코드 잘 짠 것 같은데, 니가(즉 내가) 알림 제대로 켠 것 맞냐? 설정 제대로 한 것 맞냐? FastAPI 서버 구축 제대로 했다더니 제대로 한 것 맞냐? 그러면서 은근히 개깁니다.

이렇게 옥신각신하다가 이러면 무한루프에 빠질 것 같아서 정신 차려보니

원래 Sudaman_v1은 정상 작동하니 알림 설정 문제는 아닌 것 같아서 증거자료를 보여주고,

원래 FastAPI 구축은 제대로 했던 증거 자료를 보여주면서

Sudaman_v1 정상 작동하는 코드를 주면서 참고하면서 다시 제대로 코드 짜봐라 하니

개기지 않고 다시 코드를 만들어줍니다.

이 코드를 넣고 돌려보니 PerplexBot이 정상 작동합니다.

확실히 개길 때는 증거로 밟아주고, 잘 작동하는 코드를 참고시켜서 작업하니

제대로 되는 것 같습니다.


DigitalOcean에 가입하고 한땀한땀 ChatGPT에게 물어가며 Droplet을 설정합니다.

6$/month 선택하시면 됩니다.

SSH key 방식을 선택했고, 모든 과정은 BotFather와 하나하나 상의하면서 진행했습니다.

그리고 스터디장님이 알려주신대로 과정을 하나하나 밟아갔습니다.

이후 서버 실행을 해보니 정상 작동하는 것을 확인했습니다.
(물론 이것도 한 번에 바로 되진 않더군요. 몇 번 시행착오 겪고 끙끙대다 성공했습니다.)

이렇게 FastAPI 설정 및 구축을 완료합니다.

서버 개념이 아직도 생소하고 사용하는 용어나 cmd 창에서 하는 방식 등등 모두 낯설기만 합니다.


서버 자동 실행 관점에서 스터디장님이 알려주신대로 세팅을 또 따라합니다.

시스템 서비스에 대한 �메시지를 보여주는 컴퓨터 화면

그리고 Github를 통한 버전관리와 코드 파일 업로드 라는 것을 또 따라해봅니다.

git 사용과 명령어 습득, github 사용법과 commit, push, pull 등의 개념을 처음 익혀보고 실습해보는 시간이었습니다.

역시 한 번에 바로 되지 않고 캡쳐해가면서 봇파더에게 물어보면서 끙끙대면서 많은 시간을 사용하면서 끝내 성공했습니다.

이건 뭐 중간보스들이 너무 많아서 최종 보스 만나기 전에 전사하는 느낌입니다.

스터디장님이 공유해주신 python 코드들을 다운받아서 Sudaman 캐릭터에 맞게, 그리고 저의 API key, 서버 주소 등을 넣어 변경해서 github에 올리고 서버에 파일들을 심는 작업까지 했습니다.

당연히 이것도 한참 걸렸고, 에러 나서 계속 헤매면서 캡쳐뜨고 물어가면서 진행했습니다

캡쳐는 나의 무기!!! ㅎㅎ

이게 서버에서 제대로 작동해서 Perplexity API를 가져와서 답변하는지 테스트하고 에러 잡고, 디버깅하고 하면서 역시 끙끙대고 많은 시간과 노력을 투자했습니다.

어찌어찌해서 결국은 성공!

근데 어떻게 성공했는지는 잘 기억이 나지 않을 정도로 사투끝에 성공~

이제 모든 것이 세팅되었으니 카톡에서 제대로 작동하는지 테스트 해봅니다.

결국 성공했습니다.

정말 하얗게 불태웠다........

험난한 여정이었고,

카톡봇의 구현 원리와 방식을 좀 더 이해했고,

서버라는 개념을 조금은 알 수 있었던 경험이었습니다.

도움주신 복받어김현우 스터디장님, 샘호트만 버디님, Jun 님 감사합니다.

4
2개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요