디미고 급식+

한국디지털미디어고등학교 급식을 보여주는 앱.

Overview

디미고 급식+는 학생들이 급식을 앱 또는 위젯을 통해 빠르게 확인할 수 있게 만든 앱입니다. AI 기능을 도입하여 급식들 중 특식은 다른 색깔로 표시됩니다.

Motivation

원래 급식을 보여주는 사이트가 있었지만, 매번 사이트에 들어가야 하는 점과 메뉴가 많아 한눈에 들어오지 않는 점이 불편했습니다. 이에 위젯 기능을 사용하면 편리하겠다는 생각에 네이티브 앱 개발을 시작하였고, 맛있는 메뉴들이 한눈에 들어오게 AI 기술을 도입하였습니다.

Screenshots

서비스 화면

디미고 급식+ screenshot 1
디미고 급식+ screenshot 2
디미고 급식+ screenshot 3
디미고 급식+ screenshot 4

Stack

기술 선택 이유

Android Jetpack

안드로이드 네이티브 기능인 위젯을 만들기 위해 사용했습니다.

Spring Boot

급식 API, GPT API 등의 사용과 급식 메뉴 저장을 서버에서 하기 위해 사용했습니다.

Docker

백엔드 서버를 Docker로 배포하여 편하게 관리하기 위해 사용했습니다.

PostgreSQL

급식 데이터 및 특식 여부를 저장하기 위해 사용했습니다.

OpenAI SDK

GPT API를 통해 메뉴 중 특식을 선별하기 위해 사용했습니다.

Key Features

  • 앱 접속 시 오늘 급식 메뉴 및 특식 확인
  • 위젯 추가를 통한 홈 화면에서 메뉴 확인

Architecture

  • presentation/application/domain/infrastructure 레이어로 나눠 UI, 비즈니스 로직, 데이터 접근 책임을 분리했습니다.
  • Android 앱은 Room을 사용해 급식 데이터를 로컬에 캐싱하고, 위젯에서도 빠르게 급식 정보를 표시할 수 있도록 했습니다.
  • Jetpack Glance를 사용해 안드로이드 앱 위젯을 구현했습니다.
  • 백엔드는 외부 급식 데이터를 가져와 PostgreSQL에 캐싱하고, 캐시된 데이터를 먼저 제공한 뒤 변경 여부를 확인해 갱신하도록 구성했습니다.
  • OpenAI API를 별도 provider로 분리해 메뉴 목록에서 특식 여부를 자동 분류하도록 했습니다.

Result

제 친구들과 후배들 포함 약 40명가량이 앱을 사용했고 AI를 활용한 첫 프로젝트라는 점에서 의의가 있었습니다.

Troubleshooting

문제와 해결

백엔드에서 빠른 속도를 위해 한 번 급식 메뉴를 받아오면 캐싱을 했는데 메뉴가 변경될 경우 이를 반영하지 못하는 문제

캐싱을 기본적으로 사용해서 사용자에게 메뉴를 빠르게 제공하는 동시에 매번 메뉴를 받아와 변경될 경우 업데이트를 해서 해결했습니다.

메뉴 중 특식을 선별해야 하는데 수동으로 하기엔 시간이 오래 걸리고 불편했던 문제

GPT API를 사용해 특식을 자동으로 선별해 문제를 해결했습니다.