지난 글에서 루팅된 갤럭시 S9 위에 Termux + proot-distro로 서버 환경을 만든 이야기를 했습니다. 이번 글은 그 위에 실제로 올린 첫 번째이자 가장 중요한 서비스, 카카오톡 챗봇 “Iris” 이야기입니다.
Iris란
Iris는 루팅된 안드로이드 기기에서 카카오톡 클라이언트의 로컬 메시지 DB를 직접 읽고, app_process로 띄운 데몬이 HTTP API(127.0.0.1:3000)와 웹소켓 이벤트를 제공하는 프레임워크입니다. 카카오톡 자체의 공식 API가 아니라, 기기에 이미 로그인되어 있는 카카오톡 앱의 데이터를 활용하는 방식이라 루팅된 기기가 전제 조건입니다.
왜 포팅이 필요했나
원래는 “메신저봇R"이라는 Node.js 기반 봇으로 채팅 랭킹, 아이템 경제, 경마 게임, 미니게임, 경매, AI 질문 응답 같은 기능들을 이미 운영하고 있었습니다. 이번 작업은 그 기존 코드와 기획을 Iris(파이썬) 환경으로 전면 포팅하는 것이었습니다. 단순히 언어만 바꾸는 게 아니라, 프레임워크가 제공하는 이벤트/API 모델 자체가 다르기 때문에 상당 부분을 다시 설계해야 했습니다.

기능별로 파일을 쪼갠 구조
기능이 많다 보니 하나의 파일에 다 넣지 않고 역할별로 나눴습니다 — 관리자, 채팅 랭킹, 아이템 경제, 경마, 미니게임, 경매, AI 질문 응답, 그 외 기능 모음까지 총 9개 파일입니다. 메인 파일(irispy.py)이 봇 인스턴스를 띄우고, 나머지 파일들은 각자의 영역을 담당하며 필요할 때 메인의 객체(봇 인스턴스, DB 헬퍼 등)를 참조하는 구조입니다.
이렇게 나누고 보니 “각 파일이 메인 프로세스의 객체를 어떻게 공유해서 쓸 것인가"가 예상보다 까다로운 문제였습니다. 그 과정에서 실제로 겪은 순환참조 버그는 다음 글에서 자세히 다루겠습니다.
기존 기획을 최대한 그대로 재현
포팅하면서 원칙으로 삼은 건 “기존에 운영하던 기능과 밸런스를 최대한 그대로 옮긴다"는 것이었습니다. 새로 설계하고 싶은 유혹이 있었지만, 이미 검증된 기획(예: 경마 게임의 수수료 구조, 채팅 랭킹의 등급 체계)을 다시 만드느라 시간을 쓰는 것보다는 정확히 재현하는 데 집중했습니다. 대신 그 과정에서 발견한 실제 버그들 — 기존 코드에는 없었지만 새로 옮기면서 드러난 문제들 — 은 이 시리즈에서 하나씩 짚어보겠습니다.

🤖 이 포스팅은 AI의 도움을 받아 작성되었습니다.


💬 댓글