모아모아는 다음과 같은 기술로 아이들의 금융 이해력과 부모님을 이어주는 페어런트 테크입니다.
Backend
Python과 Django를 사용하여 안정적인 서버 환경을 구축하고, Django REST Framework로 API를 효율적으로 관리합니다.
Frontend
HTML, CSS, JavaScript를 활용하여 깔끔하고 직관적인 사용자 인터페이스를 제공합니다. 추후 웹 & 앱 크로스 플랫폼을 염두한 디자인으로 사용자가 어떤 디바이스를 이용하던 편리하게 사용할 수 있게 설계되었습니다.
Database
MySQL과 Redis, Docker를 사용하여 대규모 데이터 처리에도 효율성을 유지 합니다.
LLM
OpenAI GPT-4o-mini와 Langchain을 통해 어린이들과의 대화를 분석하고, 쉽고 자연스러운 용돈 기록을 돕습니다.
로그인 시스템
카카오 로그인 API을 사용하여 부모님에게 간편하고 빠른 로그인 절차를 지원합니다. 또한 부모님은 자녀의 회원가입을 진행하고, 자녀들은 부모님이 만든 계정으로 이용 가능합니다.
버전 관리
Git과 Github를 활용하여 협업을 체계적으로 관리하고, 코드의 일관성을 유지합니다.
기술적 의사결정
인메모리 vs Redis
초기에는 메모리 기반으로 챗봇을 구현했으나, 안정적인 데이터 저장을 위해 Redis로 전환하여 대화 기록을 철저하게 관리할 수 있도록 개선했습니다.
단순 입력 vs OpenAI GPT-4o-mini
아이들이 자연스럽게 용돈을 기록할 수 있도록, 단순 입력 방식이 아닌 강력한 자연어 처리 기술인 OpenAI GPT-4o-mini를 활용하여 아이들의 입력을 분석하고 카테고리를 자동으로 분류합니다.
월산 결산 vs 실시간 용돈 현황 확인
초기에는 매달 한 번씩 잔액을 결산하는 방식이었지만, 부모님이 언제든 자녀의 용돈 사용 내역을 확인할 수 있도록 실시간 용돈 현황 확인할 수 있도록 전환하였습니다. 또한 이전 달 용돈 사용 내용도 확인할 수 있습니다.
트러블 슈팅
날짜 인식 문제
사용자들이 입력한 '오늘', '어제'와 같은 상대적 날짜 표현이 하루 전으로 기록되는 문제가 발생했습니다. 이는 타임존 설정과 날짜 파싱 로직에 문제가 있었으며, 이를 수정하여 현재는 정상적으로 작동 중입니다.
성능 문제
초기에는 데이터가 쌓일수록 시스템의 응답 속도가 느려지는 성능 저하 문제가 발생했습니다. 이를 해결하기 위해 비동기 처리를 고려했으나, 데이터 구조를 최적화하는 방식으로 성능을 개선하고 문제를 해결했습니다.
프롬프트 작성 문제
AI 챗봇의 프롬프트 작성 중, 카테고리나 금액과 같은 사용자 입력이 의도한 대로 응답이 나오지 않는 문제가 있었습니다. 이는 프롬프트 구조가 지나치게 복잡하거나, AI 모델이 요구사항을 정확히 파악하지 못한 데서 비롯되었습니다.
문제 해결을 위해 프롬프트를 간결하고 명확하게 수정하여, 날짜와 금액 처리가 올바르게 이루어지도록 하였으며, AI의 응답을 더 직관적으로 유도할 수 있었습니다
차트 새로고침 문제
프론트엔드에서 JSON 데이터를 차트로 표시할 때, 자동으로 갱신되지 않고 새로고침을 해야만 업데이트 되는 현상이 있었습니다. 차트를 새로 그리기 전에 기존 차트 요소를 JSON 초기화 하여 d3.js를 활용하여, 차트를 다시 그를 때 기존의 SVG 요소를 제거한 뒤 새로운 데이터를 기반으로 차트를 렌더링 하여 실시간으로 데이터가 반영될 수 있게 변경했습니다.
월간 결산에서 실시간 현황으로 변경하는 문제
LLM에서 바로 가져오는 Json 부분과 디비에서 Json 가져오는 부분을 실시간 데이터를 처리할 수 있도록 필터링 범위를 유연하게 설정 하며 날짜 범위를 월간에서 일간 혹은 실시간으로 조정해야 하였으며 스크립트 부분에서도 LLM에서 가져오는 Json 데이터 값과 디비에서 가져오는 json 데이터 값을 처리하여 반영하도록 하였으며 LLM부분에서는 로딩이 길어 감시 기다려주세요 라는 메시지 표시 하도록 처리 하였습니다.