보르테소 · 커피 기록 앱

기간  — 

마신 커피의 맛과 원두를 기록하는 앱입니다. Flutter 앱과 Spring Boot API를 만들었습니다.

커피 카드 사진에서 원두 정보를 읽어 기록을 채우는 앱

FlutterDartJava 17Spring Boot 3.5Spring SecurityJPAMariaDBRedisMinIOGoogle Cloud VisionOpenAI APIDockerJenkinsProxmox

  • 핫⁠·⁠아이스, 컵 노트, 메모를 남기는 컵 기록
  • 맛 감각 평가와 기록 분석
  • 기록 달력과 연속 기록
  • Google 로그인

카드 정보를 손으로 옮겨 적는 일

문제
커피 카드에 적힌 산지, 농장, 고도, 가공 방식, 품종, 컵 노트 같은 원두 정보를 사용자가 직접 입력해야 했습니다.
해결
카드 사진을 MinIO에 올리고 Google Cloud Vision으로 글자를 읽었습니다. 읽은 글자는 OpenAI API에 넘겨 원두 정보 항목별 JSON으로 정리했습니다. 커피와 관계없는 글자면 커피 카드가 아니라는 오류를 돌려줬습니다. 카드 사진은 임시 경로에 두었다가 사용자가 기록을 저장할 때 정식 경로로 옮겼습니다.

장비 한 대에서 서비스 운영

문제
API, 데이터베이스, 파일 저장소, CI, 모니터링을 집에 둔 서버 한 대에서 돌려야 했습니다.
해결
Proxmox 위에 프록시, CI, 모니터링, 파일 저장소, 데이터베이스, API를 VM⁠·⁠LXC 6개로 나눴습니다. API 서버는 2대로 띄우고 컨테이너 로그는 Dozzle로 모아 봤습니다. Jenkins는 Proxmox가 설치된 서버를 거쳐 API VM에 SSH로 접속해 새 이미지를 받아 띄웠습니다. 배포 뒤에는 상태 확인 주소를 최대 20번 호출하고 성공⁠·⁠실패를 푸시 알림으로 보냈습니다.

아키텍처

Proxmox 위의 프록시, CI, 모니터링, 파일 저장소, 데이터베이스, API 서버와 외부 OCR·AI 연결을 보여 주는 vortesso 배포 구조도
홈서버의 Proxmox 위에 서비스를 VM⁠·⁠LXC 6개로 나누고 API 서버 2대를 띄운 구성입니다.