재활용 방법을 공유할 수 있는 SNS의 기능과 쓰레기 사진을 업로드하면 어떤 쓰레기인지 객체 탐지를 통해 분류해주고, 이를 Gemini API와 연동해 어떻게 분리수거 하는지 알려주는 앱을 개발했습니다.
앱 깃허브 링크 | 서버 깃허브 링크 | AI 서버 깃허브 링크 | 문서 링크 팀 구성
프론트엔드(2) / 백엔드(2)
기술 스택
프론트엔드: Flutter, GetX
백엔드: Nest.js PostgreSQL, RabitMQ, Django, Huggingface
인공지능 서버의 과부하를 대비하기 위해 RabitMQ라는 메세지 큐 서비스를 도입했습니다. 그러나 이로 인해 프론트엔드에서 서버로 사진을 보냈을 때 언제 분류 결과를 이용 가능한지 판단하기 어려워 졌습니다.
백엔드에서 루프를 돌며 데이터베이스를 주기적으로 확인하고, 결과값이 갱신되었을 경우 이를 프론트엔드로 보내주도록 했습니다. 그러나 이 방식은 서버에 불필요한 부하를 주게된다고 생각해서 다른 방식을 생각해야 했습니다.
폴링 방식을 사용해 해결했습니다. 프론트엔드에서 유의미한 값을 받을 때 까지 정해진 횟수 만큼 정해진 시간초의 간격으로 요청을 보냅니다. 이후 값을 받았다면 Gemini API에 요청을 전송하고 그렇지 않다면 에러를 표현하도록 했습니다.
백엔드에서 트래픽을 분산하기 위해 RabbitMQ를 활용했을 때 발생하는 서버와 클라이언트 통신의 비 동기적 문제를 해결하는 방법 중 하나인 리트라이 매커니즘에 대해서 알게 되었습니다.
Tags