1분반-알려줘
프로젝트 개요
기술개발 과제
국문 : 알람 모니터링 서비스 ‘알려줘’
영문 : Alarm Monitoring Service ‘Allyojo’
과제 팀명
알려줘
지도교수
이경재 교수님
개발기간
2024년 9월 ~ 2024년 12월 (총 4개월)
구성원 소개
서울시립대학교 컴퓨터과학부 2021920046 잘리너바 아이가늠(팀장)
서울시립대학교 컴퓨터과학부 2020920009 김성령
서울시립대학교 컴퓨터과학부 2018920054 정성엽
서울시립대학교 수학과 2020540023 이명규
서론
개발 과제의 개요
개발 과제 요약
본 프로젝트는 시니어 케어를 위한 알람 애플리케이션이다. 일반적인 알람 앱과 달리 '미션 수행'과 '보호자 관리' 기능을 통해 시니어의 일상생활을 체계적으로 관리한다.
알람은 단순 알림을 넘어 식사, 복약, 혈당관리 등의 시니어 맞춤 활동을 미션으로 제시하며, 카메라를 통한 비전 기술로 미션 수행 여부를 자동으로 검증한다.
또한 가족이나 보호자가 시니어의 일상 활동을 모니터링하고 관리할 수 있는 보호자 연동 시스템을 갖추고 있다. 이러한 기능들이 유기적으로 연결되어 시니어의 건강한 생활 관리와 보호자의 효율적인 케어를 동시에 실현한다.
개발 과제의 배경
우리는 더 건강한 삶을 위해 매일 수행해야 하는 필수적인 일들이 있다. 규칙적인 운동처럼 자발적으로 실천해야 하는 일들이 있는 반면, 약 복용이나 혈압 및 혈당 체크처럼 절대 놓쳐서는 안 되는 일들 도 있다.
질병관리청의 노인 만성질환 실태조사에 따르면, 65세 이상 노인의 59%가 고혈압을, 30%가 고지혈증을, 23%가 당뇨를 앓고 있다.
더불어 노인 10명 중 4명 이상이 5가지 이상의 약을 복용하고 있어, 정기적인 약 복용의 중요성이 매우 크다. 실제로 당뇨를 앓고 있는 필자의 할머니도 정시 복약을 잊어 질환이 악화된 경험이 있다.
이러한 상황에서 시니어 케어 어플리케이션의 필요성은 분명하다. 그러나 현재 시장의 알람 어플리케이션들은 대부분 수면과 기상에만 초점이 맞춰져 있다. 따라서 시니어의 건강 관리에 특화된 알람 어플리케이션은 이러한 시장의 수요를 충족시킬 수 있을 것으로 기대된다.
개발 과제의 목표 및 내용
1. 미션 알람
- 본 프로젝트의 어플리케이션은 단순한 알람을 제공하는 것이 아닌, 미션이 동반되는 '미션 알람'을 제공한다. 따라서 4가지 미션(혈당 관리, 혈압 관리, 복약 관리, 식사 관리)이 할당된 알람을 사용자는 등록할 수 있다.
- 알람은 정해진 시간에 Alert되며, 백그라운드에서도 동작할 수 있다. 알람이 Alert되면 어떤 미션인지를 알려주고, 바로 카메라를 사용할 수 있는 UI를 제공한다.
2. 미션 검증
- 정해진 미션을 제대로 수행했는지 확인하기 위해 컴퓨터 비전 기술을 사용한다. 이를 통해 미션 수행 여부를 판별한다.
- 미션 수행 여부를 판별함과 동시에 리포트에 제공할 데이터를 컴퓨터 비전 기술을 활용하여 추출한다. 혈당 / 혈압 미션의 경우 기기의 수치를 추출하고, 식사 관리의 경우 먹은 사진의 영양소를 1인분 기준으로 추출한다.
3. Todo 기능
- 어떤 날짜에 어떤 일을 수행해야하는지 사용자가 기록하고 관리할 수 있는 Todo 기능을 제공한다.
4. 엄격 모드
- 엄격 모드를 통해 미션 수행을 더욱 강제할 수 있다. 엄격 모드를 설정하지 않으면 미션 수행이 강제되지 않는다.
- 엄격 모드를 설정할 경우, 미션이 수행되지 않을 경우 계속해서 알람이 반복된다. 엄격 모드를 설정한 경우, 반복적인 알람 발생을 위해 알람 반복 시간을 설정해야만 한다.
- 불편한 사용자 경험을 최소화하기 위해 엄격모드를 사용하더라도 3회 이상 반복되는 경우, 알람을 종료할 수 있는 기능을 제공한다.
5. 리포트
- 리포트는 혈당 관리 / 혈압 관리 / 식사 관리의 미션에 한해서만 제공된다.
- 혈당 관리와 혈압 관리는 기존에 수행한 미션을 검증하는 과정에서 추출된 데이터를 활용하여 차트를 제공한다. 해당 미션들은 최대 한달까지 제공받을 리포트의 기한을 설정할 수 있다.
- 식사 관리의 경우, 당일 식사 미션에 대해서만 리포트 제공이 가능하다. 컴퓨터 비전을 통해 추출한 음식 데이터와 백엔드에 저장된 1인분 기준 음식 데이터를 기준으로 사용자의 나이와 성별을 감안하여 데이터를 제공한다.
6. 보호자 알람 생성
- 보호자는 시니어를 추가하고, 알람을 생성해줄 수 있다. 이를 통하여 시니어에게 미션 수행을 어느정도 강제할 수 있다.
- 다만, 보호자가 생성해준 알람도 시니어가 삭제할 수 있도록 하여 불편한 사용자 경험을 최소화하고자 한다.
7. 프리미엄 업그레이드
- 일반 회원과 프리미엄 회원으로 구분하여 어플리캐이션이 동작한다. 일반 회원의 경우 알람의 생성을 최대 3개로 제한하여 동작하도록 한다. 또한, 보호자 기능을 사용할 수 없다.
- 프리미엄 회원의 경우 알람 생성에 제한을 두지 않으며, 보호자 기능을 사용할 수 있다. 보호자와 시니어의 관계는 1:N의 관계를 형성하기 때문에 이러한 비즈니스 모델이 수익 창출을 극대화할 수 있을거라고 판단한다.
관련 기술의 현황
관련 기술의 현황 및 분석(State of art)
- 전 세계적인 기술현황
◇ 알람 앱의 발전 - 인터랙티브 알람 앱: 최근 사용자 참여를 유도하는 다양한 알람 앱들이 등장하고 있다. 예를 들어, 수학 문제를 풀거나, 특정 장소로 이동해야만 알람이 꺼지는 앱 등이 있다. 이러한 앱들은 사용자의 적극적인 행동을 유도하여 수면 관성(sleep inertia)을 줄이는 데 도움을 준다.- 사진 기반 알람 앱: 사용자가 특정 사물이나 장소의 사진을 찍어야 알람이 꺼지는 앱들이 있다. 이는사용자가 침대에서 벗어나 특정 행동을 취하도록 유도하여 기상 습관을 개선한다.
◇ 비전 기술과 건강 관리 - 이미지 인식 기술의 발전: 딥러닝과 머신러닝의 발전으로 이미지 인식 기술이 크게 향상되었다. 의료분야에서는 피부 질환 진단, 식품의 영양 성분 분석 등 다양한 응용이 이루어지고 있다.- 모바일 기기의 비전 기술 적용: 스마트폰의 카메라 성능 향상과 함께 모바일 앱에서 실시간 이미지 분석이 가능해졌다. 이는 사용자의 편의성을 높이고, 건강 관리에 직접적인 도움을 줄 수 있다.
◇ 건강 모니터링 및 리포트 - 헬스케어 앱의 대중화: 다양한 건강 모니터링 앱들이 사용자들의 활동량, 심박수, 수면 패턴 등을 추적하여 건강 관리를 지원하고 있다.- 데이터 시각화 및 분석: 수집된 데이터를 기반으로 사용자에게 이해하기 쉬운 리포트를 제공하여 자기관리에 대한 동기부여를 높이고 있다.
- 기술 로드맵
시장상황에 대한 분석
- 경쟁제품 조사 비교
‘알라미’, ‘삼성 기본 시계’, ‘잊지마 할 일’의 3가지 모바일 애플리케이션은 사용자가 해야 하는 일을하도록 도와준다는 공통점을 가지고 있다. 아래 표는 위 3가지 애플리케이션을 여러 비교 기준을 통해비교한 표이다.
- 마케팅 전략 제시
개발과제의 기대효과
기술적 기대효과
시니어 케어 애플리케이션의 부재를 시장 조사를 통해 확인할 수 있었다. 이러한 상황에서 시니어 케어 애플리케이션의 등장으로 다음과 같은 효과를 기대할 수 있다.
경제적, 사회적 기대 및 파급효과
경제적으로는 시니어의 적절한 건강관리를 통해 삶의 질을 향상시킬 수 있다, 또한 시니어를 위한 새로운 알람 애플리케이션 시장을 개척함으로써 관련 산업 발전의 계기가 될 수 있다.
사회적으로는 미션 수행을 통한 자가 관리로 보호자의 직접적인 관리 부담을 줄이고, 시니어의 독립적인 생활을 돕는다. 이는 고령화 사회에서 증가하는 시니어 케어와 보호자 부담 문제의 실질적인 해결책이 될 수 있을 것이다.
기술개발 일정 및 추진체계
구성원 및 추진체계
잘리너바 아이가늠 - AI 기능 구현 김성령 - BE, DBA 정성엽 - FE, 앱 디자인 이명규 - AI 기능 구현
설계
설계사양
사용자 정의
본 어플리케이션의 주 사용 타겟층은 ‘노인’과 ‘보호자’로 나뉜다.
- 노인본 어플리케이션의 메인 타겟이다. 50세 이상의 건강 관리에 많은 관심을 갖고 있는 노인을 대상으로 한다. 세부적으로, 혈압 및 혈당 관리, 규칙적인 식사 및 영양소 관리, 복약 지도 및 관리 목적 중 한 가지 이상에 해당하는 노인을 대상으로 한다.
- 보호자‘노인’의 보호자로서 노인의 건강 관리와 관련된 생활 습관을 지도하고, 혈압 및 혈당 등의 건강 관련 수치를 지속해서 추적하려는 사람들을 대상으로 한다.
사용자 별 요구사항
주 사용자 요구사항은 ‘노인’의 요구사항이며, ‘보호자’의 요구사항은 주로 ‘노인’의 어플리케이션 사용 결과에 대한 보고에 국한된다.
노인
- 노인이 건강을 관리하는 데에 도움을 주어야 한다.
- 노인이 해야 하는 일을 잊지 않고 하게 한다.
- 노인의 건강 관련 데이터는 알아보기 쉽게 표시되어야 한다.
- 사용하기 쉽고 직관적인 UI/UX를 제공한다.
보호자
- 노인의 어플리케이션 사용 결과에 대한 보고를 쉽게 볼 수 있어야 한다.
- 노인의 건강 관련 수치를 지속해서 추적할 수 있어야 한다.
- 노인의 생활 패턴 및 습관을 지도할 수 있어야 한다.
개념설계안
내용
상세설계 내용
■ Front-end ■
● React Native CLI
- React Native의 인터페이스를 사용하여 네이티브 모바일 애플리케이션을 개발한다.
- Android에서 알람 모듈을 조금 더 자유롭게 개발하기 위해 Expo가 아닌 CLI를 채택한다.
- Native 모듈과의 직접적인 통합으로 높은 성능과 네이티브스러운 사용자 경험을 제공한다.
● Recoil
- Facebook에서 개발한 React 전용 상태 관리 라이브러리이다.
- atom과 selector를 활용한 효율적인 전역 상태 관리를 목표로 사용한다.
- 알람 시스템: 현재 활성화된 알람, 그리고 사용자가 설정한 모든 알람의 상태를 저장하고 관리한다.
- Todo 기능: 현재 활성화된 Todo, 그리고 사용자가 설정한 모든 Todo의 상태를 저장하고 관리한다.
- 회원 정보: 로그인 상태, 프로필 정보 등의 전역 관리를 수행한다.
- 비동기 데이터 처리를 위한 selector 활용으로 서버 상태 관리 최적화를 수행한다.
- 컴포넌트 리렌더링 최소화를 통한 애플리케이션 성능 향상을 목표로 한다.
● Figma 3D Image Open Source
- Figma Community에서 제공하는 고품질 3D 디자인 리소스 활용하여 UI를 구성한다.
- 사용자 인터페이스 향상을 위한 다양한 3D 에셋 적용
- 아이콘, 일러스트레이션, 배경 요소 등
■ Back-end ■
● Spring boot
- 스프링 프레임워크를 기반으로 한 빠르고 간편한 백엔드 프레임워크이다. spring security, spring data JPA, spring validation등의 다양한 기능을 플러그인 방식으로 쉽게 확장시킬 수 있다.
● Spring security
- 스프링 프레임워크를 기반으로 한 보안 프레임워크이다. 이 어플리케이션에서는 토큰 기반 인증(JWT)을 사용하였으며, 인증 및 권한 부여 등의 작업을 용이하게 수행할 수 있다.
● Spring data JPA
- 데이터베이스와의 상호작용을 간단하게 만들어주는 ORM(Object Relational Mapping) 기술이다. JPA(Java Persistence API)는 객체와 관계형 데이터베이스 간의 매핑을 처리해주며, Spring Data JPA는 이를 스프링 환경에서 더 쉽게 사용하게 해준다.
● MySQL
- MySQL은 관계형 데이터베이스 관리 시스템(RDBMS)으로, 데이터를 테이블 형식으로 저장하고 SQL을 사용하여 데이터를 관리한다. 다양한 플랫폼에서 안정적으로 구동되며, 특히 Spring Boot와의 호환성이 뛰어나다.
● MariaDB
- MariaDB는 MySQL에서 파생된 오픈소스 관계형 데이터베이스 관리 시스템(RDBMS)으로, 높은 성능과 확장성을 제공한다.
- 배포 환경에 사용하여 데이터를 관리하였으며, MySQL과의 호환성이 뛰어나 별도의 추가적인 코드 수정 없이 마이그레이션을 진행할 수 있다.
■ 회원가입 - 본 어플리케이션은 사용자 건강과 관련된 민감한 개인정보를 다루므로 회원가입을 필수적으로 진행하여야 한다.
● CoolSms
- 메시지 발송 플랫폼 CoolSms를 활용하여 회원가입을 원하는 사용자의 전화번호를 인증한다.
- 네 자리 랜덤 번호를 생성해서 사용자에게 발송 후, 이를 올바르게 입력하면 해당 전화번호가 유효한 것으로 인증한다.
● BCryptPasswordEncoder
- 스프링 시큐리티 프레임워크에서 제공하는 클래스로 비밀번호를 암호화하는 데 사용한다.
- SHA-512 기반의 암호화 방식을 사용하며, 내부적으로 동적 Salt를 생성하여 동일한 입력값에 대해서도 매번 다른 암호화 결과를 생성한다.
- 회원가입 시 사용자의 비밀번호를 단방향으로 해시 처리한 후 데이터베이스에 저장한다.
- 인증 과정에서 사용자가 입력한 비밀번호를 동일한 방식으로 암호화한 후, 저장된 암호화된 값과 비교하여 유효성을 검증한다.
- 비밀번호 해시 값은 복호화할 수 없으며, 암호화된 결과값의 검증은 오직 입력값을 다시 암호화하여 비교하는 방식으로 이루어진다.
■ AI ■ - 본 어플리케이션은 사용자로부터 이미지를 입력받은 뒤, AI 모델을 통해 각 미션에 맞는 추론을 수행한다. 이후 추론 값을 적절히 처리하여 사용자에게 제공한다.
● Python
- Tensorflow와 PyTorch 등 딥러닝 프레임워크와의 높은 호환성을 제공한다.
- 이미지 처리 및 데이터 전처리를 위한 cv2, numpy 등의 라이브러리를 제공한다.
- AI 모델 배포를 위한 웹 프레임워크(Flask 등)를 제공한다.
● PyTorch / Tensorflow
- PyTorch는 모델 커스터마이징 및 복잡한 아키텍처 구현이 용이하다. 연구 및 학술 커뮤니티에서의 폭넓게 사용되어, 최신 논문 및 예제 코드의 가용성이 높다.
- Tensorflow는 정적 계산 그래프(static computation graph)를 통해 성능을 최적화하고, 실행 속도와 메모리 효율성을 극대화한다. GPU 및 TPU와의 강력한 통합으로 고성능 학습이 가능하다.
● Flask
- Flask는 마이크로 웹 프레임워크로서, 최소한의 기본 구조를 제공하기 때문에 필요한 라이브러리와 플러그인을 자유롭게 추가하여 확장할 수 있다. 따라서 AI 모델 배포를 위한 경량 API 서버를 구축하는 데 Django와 같은 더 무거운 프레임워크보다 적합하다.
- Flask는 Python 기반으로 동작하므로, PyTorch, TensorFlow 등 Python으로 구현된 AI 모델과 쉽게 통합할 수 있다.
■ 배포 ■
● CloudType
- CloudType는 GitHub와의 통합을 통해 코드를 자동으로 가져와 빌드하고, 별도의 서버 설정이나 복잡한 배포 과정 없이 비교적 간편하게 배포할 수 있다.
- Python(Flask, Django 등), Node.js, Spring Boot, Go 등 여러 언어와 프레임워크를 지원한다.
- 초기 단계에서 무료로도 시작할 수 있다.
- 본 어플리케이션에서는 DB 서버, BE 서버, AI 서버 배포에 활용하였다.
결과 및 평가
완료 작품의 소개
프로토타입 사진 혹은 작동 장면
- 어플리케이션을 실행하면 가장 먼저 볼 수 있는 화면이다.
- 아이디와 비밀번호, 그리고 보호자 여부를 체크하여 로그인을 진행한다.
- 회원가입을 진행하는 UI이다.
- 아이디, 비밀번호, 전화번호를 차례로 입력한다.
- 전화번호를 입력하면 인증번호를 받을 수 있다. 이 인증번호를 입력하여 전화번호 인증을 완료한다.
- 보호자 여부를 체크한다.
- 리포트 분석에 사용될 나이, 성별을 입력한다.
- 닉네임을 입력하여 회원가입을 마친다.
- 알람 메인 페이지에서는 현재 설정해놓은 알람을 조회할 수 있다.
- 하나의 알람은 반드시 하나의 미션을 포함하여야 한다.
- 아래 종을 누르면 새로운 알람을 설정할 수 있다.
- 알람 설정 페이지에서 알람 시각, 반복 여부, 엄격모드 여부, 미션, 진동 여부, 알람 볼륨, 반복 간격을 설정하여 새 알람을 만들 수 있다.
- 할 일 확인하기 페이지에서는 알람 이외에 잊지 않고 해야 할 일들을 등록할 수 있다.
- 할 일의 날짜와 시간, 제목, 추가 설명을 입력하여 할 일 등록을 마친다.
- 미션 모아보기 탭에서는 현재 수행 중인 미션을 한 눈에 확인할 수 있다.
- 매일 울리는 알람의 명우 ‘매일’ 탭에서, 그 외의 경우 ‘매주’ 탭에서 확인할 수 있다.
- 미션 확인하기 탭에서는 알람이 발생하였지만 인증을 바로 진행하지 않았을 때의 알람을 확인할 수 있다.
- ‘인증하기’ 버튼을 눌러 해당 알람에 대한 미션 수행 결과를 인증할 수 있다.
- 알람이 발생했을 때의 화면이다.
- ‘사진 찍기’ 버튼을 눌러 미션 인증을 진행할 수 있다.
- ‘알람 종료’ 버튼을 클릭하면 ‘알려줘 페이지 – 미션 확인하기’ 탭에서 확인할 수 있다.
- 리포트를 조회할 수 있는 화면이다.
- 수행한 적이 있는 미션을 선택한 후 기간을 선택하면 해당 미션에 대한 분석을 받을 수 있다.
- 리포트 조회 화면이다.
- 혈당 미션의 경우 미션 성공률과 기준 혈당과의 비교를 확인할 수 있다.
- 혈압 미션의 경우 미션 성공률과 수축기/이완기 혈압 변화, 그리고 고혈압 기준치와의 비교를 확인할 수 있다.
- 식사 미션의 경우 그 날 섭취한 식사 메뉴와 영양소, 그리고 하루 영양소 권장 섭취량과의 비교를 확인할 수 있다.
- 보호자로 로그인하였을 경우 볼 수 있는 화면이다.
- 보호자는 노인의 알람을 설정해줄 수 있다. 알람 세팅 과정은 노인과 동일하다.
- 보호자가 설정해 준 알람에 대한 리포트를 조회할 수 있다. 조회되는 내용은 노인의 리포트 조회 내용과 동일하다.
완료 작품의 평가
평가항목 | 평가방법 | 적용기준 | 개발 목표치 | 비중 (%) |
---|---|---|---|---|
1. 기능 구현의 충실도 | 모든 기능이 정상적으로 잘 동작하는지 확인한다. | 명세에 포함되어 있는 기능이 동작하지 않을 때마다 –1점, 미흡하게 동작하면 –0.5점 | 33점 | 50 |
2. AI 검증 로직의 정확도 | 테스트 셋을 활용하여 검증 로직의 정확도를 확인한다. | 목표 정확도 95% 이상, 1% 미달마다 –1점 | 30점 | 50 |
기능 구현의 충실도
○: 모든 기능이 의도대로 동작함
△: 기능은 동작하나 다소 미흡한 부분이 있음 (-0.5점)
❌: 기능이 동작하지 않거나 구현하지 못함 (-1점)
분류 | 평가 기능 | 평가 기준 | 평가 | 비고 |
---|---|---|---|---|
회원가입 | 유저 회원가입 | 유저 회원가입 과정이 원활하게 진행된다. | ○ | |
보호자 회원가입 | 보호자 회원가입 과정이 원활하게 진행된다. | ○ | ||
전화번호 문자 인증 | 전화번호 문자 인증이 원활하게 진행된다. | ○ | ||
아이디 중복 체크 | 아이디 중복 없이 가입이 가능하다. 아이디가 중복된 경우 적절한 피드백이 주어진다. | ○ | ||
로그인 | 유저 로그인 | 오류 없이 로그인이 진행된다. | ○ | |
보호자 로그인 | 오류 없이 로그인이 진행된다. | ○ | ||
아이디/비밀번호 찾기 | 아이디/비밀번호 찾기 기능을 사용할 수 있다. | ❌ | ||
알람 설정 | 시간 설정 | 알람의 시간이 잘 설정된다. | ○ | |
엄격 모드 | 엄격 모드가 설정된다. | ○ | ||
반복 설정 | 알람 반복 설정이 원활하게 동작한다. | ○ | ||
미션 추가 | 네 가지 미션 모두 잘 선택되고 반영된다. | ○ | ||
세부 알람 설정 | 진동, 알람 볼륨, 반복 간격이 잘 설정된다. | △ | 알람 볼륨이 잘 작동되지 않는다는 테스트 결과 존재 | |
알람 발생 | 알람 발생 페이지 | 알람이 발생한 경우 사용자에게 적절한 피드백을 제공한다. | ○ | |
사진 찍기 | 사진 찍기 기능이 잘 동작한다. | ○ | ||
알람 종료 기능 | 알람 종료 시 종료된 알람이 알려줘 페이지에 반영된다. 알람 종료 시 알람이 다시 울리지 않는다. | ○ | ||
알려줘 페이지 | 할 일 확인하기 | 사용자에게 적절한 UI를 제공한다. | ○ | |
할 일 추가 | 할 일이 원활하게 추가된다. | ○ | ||
할 일 수정 | 할 일이 원활하게 수정된다. | ○ | ||
할 일 삭제 | 할 일이 원활하게 삭제된다. | ○ | | |
미션 모아보기 | 진행 중인 미션이 잘 표시된다. | ○ | ||
미션 모아보기 UI | 사용자에게 적절한 UI를 제공한다. | ○ | ||
미션 확인하기 | 알람 종료된 미션이 잘 표시된다. | ○ | ||
미션 확인하기 - 인증 | 인증하기 버튼이 잘 동작한다. | △ | 인증 과정에서 오류가 발생했다는 테스트 결과 존재 | |
리포트 | 리포트 항목 선택 | 리포트 미션과 기간이 원활하게 설정된다. | ○ | |
혈압 리포트 조회 | 혈압 미션 리포트가 원활하게 조회된다. | ○ | ||
혈당 리포트 조회 | 혈당 미션 리포트가 원활하게 조회된다. | ○ | ||
식사 리포트 조회 | 식사 미션 리포트가 원활하게 조회된다. | ○ | ||
복약 리포트 조회 | 복약 미션 리포트가 원활하게 조회된다. | ❌ | ||
보호자 | 관리하는 유저 추가 | 유저의 전화번호를 입력하여 ‘관리하는 유저’로 등록할 수 있다. | ○ | |
유저 알람 추가 | 보호자의 유저 알람 추가 기능이 원활하게 잘 진행된다. | ○ | ||
유저 알람 수정 | 보호자의 유저 알람 수정 기능이 원활하게 잘 진행된다. | ○ | ||
유저 알람 삭제 | 보호자의 유저 알람 삭제 기능이 원활하게 잘 진행된다. | ○ | ||
유저 리포트 조회 | 관리하는 유저의 리포트를 조회할 수 있다. | ○ | |
AI 검증 로직의 정확도
- 식사 관리 AI
주요 성능 지표는 아래와 같다. 이때, Accuracy는 전체 데이터에서 올바르게 예측한 비율, Precision은양성 예측 중 실제 양성의 비율, Recall은 실제 양성 중 올바르게 예측한 비율, F1-Score는 Precision과 Recall의 균형을 나타내는 지표이다.
성능 지표 | 수치 |
---|---|
Accuracy (정확도) | 0.9 |
Precision (정밀도) | 0.986 |
Recall (재현율, Sensitivity) | 0.901 |
F1-Score (조화 평균) | 0.941 |
- 복약 관리 AI
주요 성능 지표는 아래와 같다. 이때, AP(Average Precision)는 한 클래스에서 Precision-Recall 곡선을 기반으로 계산된 단일 값이며, mAP(Mean Average Precision)는 여러 클래스에 대해 AP를 평균낸 값을 의미한다.
성능 지표 | 수치 | 비고 |
---|---|---|
mAP@.5 | 0.996 | IoU(Intersection over Union)가 0.5일 때의 평균 정밀도 |
mAP@.5:.95 | 0.867 | 더 엄격한 기준을 포함해 다양한 IoU 조건에서 모델의 성능을 평가 |
- 종합
분류 | 평가 기능 | 평가 기준 | 평가 | 비고 |
---|---|---|---|---|
AI 검증 | 식사 관리 AI | 음식 포함 여부를 잘 구분한다. | 5 | 목표 정확도인 95%보다 5% 작음 |
복약 관리 AI | 알약의 위치를 잘 탐지한다. | 10 | ||
혈압/혈당 관리 AI | 혈압, 혈당 수치를 잘 인식한다. | 10 | |
향후계획
어려웠던 내용들
- 김*령
- 프로젝트 설계 과정에서 기능의 정확한 명세를 작성하지 못했다. 따라서 개발 과정 중에 설계가 빈번하게 수정되고, 구현했던 내용을 다시 갈아엎는 경우가 몇 번 있었다.
- 사용해본 적 없는 기술들을 (스프링 시큐리티, JWT, DB 마이그레이션 등) 학습하고 이를 프로젝트에 적용시키는 데에 어려움을 겪었다.
- JWT를 활용한 로그인 인증 과정에서, 유저와 보호자를 분리해서 로그인 구현하는 부분이 상당히 어려웠다. 스프링 시큐리티는 디폴트로 한 개의 로그인 관련 구현체만을 요구하지만, UserDetails 관련 클래스와 GuardianDetails 관련 클래스를 분리하여 따로따로 구현하는 부분이 어려웠다.
- 테스트 개발 환경에서는 MySQL로 진행하였지만, 배포 과정에서 MariaDB로 마이그레이션하는 부분이 조금 헷갈렸다.
- 전반적인 스프링 시큐리티 환경 이해가 어려웠다. 필터 체인, 각 필터의 기능 및 이를 상속받아 구현하는 등, 적절히 이해하고 응용하는 부분이 어려웠다.
- 정*엽
- 단순히 푸쉬알람으로 구현을 진행할 수도 있었으나, 푸쉬 알람의 경우 로컬 환경에서 인터넷 연결 상태에 따른 알람 시간 정확도가 떨어지는 문제가 발생할 수 있다.
- 이러한 문제점을 극복하기 위해 실제 알람처럼 구현을 진행해야 했고, 이 과정에서 안드로이드 알람 모듈을 처음부터 직접 개발하여 기기의 내장 타이머를 사용할 수 있도록 해야 했다.
- 모듈을 직접 구현하면서, 안드로이드 모듈과 React Native를 연결하는 브릿지 과정에서 오류가 많이 발생했고, 이를 해결하는데 시간을 많이 할애했다.
- 유동적으로 어플리케이션을 구현하기 위해서는 API 명세를 깔끔하게 진행해야 한다. 관점의 차이는 있겠으나, 본 프로젝트에서는 BE와 API 통신을 진행할 때에는 최대한 데이터를 그대로 가져오도록 했다. BE에서 받아온 데이터를 FE쪽에서 적재적소에 맞게 데이터를 파싱하여 사용하는 방법을 채택했다.
- 이러한 방법을 채택하여 명세의 변경이 발생하더라도 API 수정을 최소화하도록 노력했지만, FE에서는 파싱 메서드가 길어지는 문제가 있었다. 하지만, 이러한 방법이 옳다고 생각한다.
- 이*규
- 이전까지는 AI 모델 서비스들이 어떤 식으로 제공되고, 배포되는지에 대한 고민 없이 AI의 아키텍처와 성능을 올리는 부분에 대해서만 공부하였다. 하지만 이번 프로젝트의 어플리케이션은 AI 서비스를 필요로 하기 때문에, 구현된 AI 모델에 대한 배포까지 요구하였다. 이전까지는 고민해 본 적 없는 비교적 새로운 분야의 지식을 익히는 부분이 비교적 어려웠다.
- 이번 어플리케이션은 다양한 모델을 필요로 하였다. 크게 3가지의 컴퓨터 비전 task를 수행하는 AI 모델(음식 사진인지 아닌지 분류하는 모델, 알약 사진인지 아닌지 분류하는 모델, 사진에 있는 디지털 숫자의 위치를 확인한 뒤 숫자를 인식하는 모델)을 구성해야 했다.
- 특히, 음식 사진을 분류하는 모델의 경우에는 어플리케이션의 기능 명세가 수정되면서, 어떤 음식인지까지 구분하는 것을 필요로 하게 되었고, 결국 오픈소스 멀티모달 모델과 OpenAI API를 활용하는 방식으로 진행하게 되었다.
- 잘*** ***늠
- 복약 관리 AI 모델 개발 과정에서 가장 큰 어려움은 적절한 데이터셋의 부재였다. 기존의 공개된 데이터셋이나 모델이 없었기 때문에, 약 사진 5000장을 수동으로 라벨링해야 했다. 데이터 라벨링 작업은 시간과 노력이 많이 소요되었으며, 이 데이터를 기반으로 YOLOv7 모델을 학습시켰다. 모델 학습에는 약 7시간이 걸렸고, 이후 결과를 평가하면서 다양한 평가 방법(mAP, Precision, Recall 등)을 적용해 성능을 확인했다. 이러한 과정은 번거로웠지만, 직접 데이터를 구축하고 검증해본 경험은 의미 있는 도전이었다.
- 식사 관리 AI 모델 또한 어려움이 많았다. 초기 목표는 음식 사진을 분류해 "식사 여부"만 판단하는 단순한 기능을 구현하는 것이었지만, 성능이 예상보다 저조했다. 특히 여러 개의 데이터셋 수집과 정리에 많은 시간이 소요되었으며, 데이터의 다양성과 질을 확보하는 데 한계가 있었다. 결국 자체 학습 모델 대신 API 사용으로 전환했지만, 이 과정에서 얻은 실패 경험을 통해 AI 모델 구축의 한계와 현실적 해결책을 배우게 되었다.
- AI API 활용은 처음 시도해본 영역이어서 초기 시행착오가 많았다. 처음에는 Google Vision API를 사용해보았으나 비전 관련 작업에서 성능이 만족스럽지 못했고, OpenAI API를 시도했지만 초기에는 잘 동작하지 않았다. 특히 비전 모델을 무료 플랜으로 사용했을 때 결과가 제대로 반환되지 않았고, 유료 플랜으로 전환하면서 비로소 원하는 결과를 얻을 수 있었다. 이 과정에서 AI API의 비용 효율성과 성능 최적화에 대한 실질적인 경험을 쌓을 수 있었다.
- 모델 학습과 검증의 반복도 쉽지 않았다. 학습된 모델의 성능이 기대에 미치지 못하면 원인을 분석하고 데이터를 다시 정리하거나 하이퍼파라미터를 조정하는 작업을 반복해야 했다. 이러한 반복적인 작업 속에서 시간 관리와 효율적인 작업 흐름의 중요성을 체감하게 되었다.
- 전반적으로 AI 파트를 맡으면서 단순히 모델 구현에 그치지 않고 데이터셋 구축, 모델 학습, 성능 평가, 그리고 실제 배포를 경험했다는 점이 가장 큰 도전이었다. 특히 처음 접한 AI API의 활용과 실제 애플리케이션에 적용하는 과정에서 실무적 역량을 한 단계 높일 수 있었다.
차후 구현할 내용
- FCM 서버 구현
- FCM 서버를 구현함으로써, 유저 및 보호자에게 적절한 푸시 알람을 제공하는 기능
- 리포트 기능 보충
- 식사 미션 리포트에서 좀 더 다양한 영양소에 대한 정보 제공
- 보편적인 건강정보 제공
- 노인 건강 관리 어플리케이션이라는 목적에 부합하게, 어플리케이션의 여러 요소에서 추가적인 건강 정보 제공
- 보호자 기능 강화
- 시니어 케어 어플리케이션 특성상, 보호자 - 시니어 사이의 '관리 체계'를 조금 더 다듬을 필요가 있다.
- 보호자가 생성해준 알람 수락/거절 기능
- 재미 요소 추가
- 어플리케이션에 재미 요소를 추가할 필요가 있다.
- 매달 완료한 미션 수 혹은 특정 조건에 맞춰 성장하는 캐릭터 추가
관련사업비 내역서
구성원 및 추진체계
구성원
이름 | 담당 업무 |
---|---|
잘*** *늠 | AI 기능 구현 |
김*령 | BE, DBA |
정*엽 | FE, 앱 디자인 |
이*규 | AI 기능 구현 |
추진체계
추진 내용 | 추진 기간 | 세부 내용 |
---|---|---|
기획 | 2024.09.01. ~ 2024.09.30. | 프로젝트 제안서, 경쟁력 분석 보고서 작성, 프로젝트 방향성 확정 및 주요 명세 확립 |
프로젝트 설계 | 2024.10.01. ~ 2024.10.23. | 각 도메인 세부 설계, 중간설계보고서 작성 |
프로젝트 구현 | 2024.10.24. ~ 2024.11.13. | 각 도메인 기능 구현 |
도메인 통합 및 프로토타입 발표 | 2024.11.14. ~ 2024.11.20. | FE, BE, AI 통합, 프로토타입 완성 및 발표 |
통합 테스트 및 최종 수정 | 2024.11.21. ~ 2024.12.18. | 통합 테스트, 사용자 테스트, 최종보고서 작성 |
개발사업비 내역서
항 목 (품명, 규격) |
수 량 | 단 가 | 금 액 | 비 고 | ||
---|---|---|---|---|---|---|
계 | 현금 | |||||
직 접 개 발 비 | openAI chatGPT 구독료 | 3 | 31 | 94 | 94 | 단가는 세 달 분을 3으로 나누고 소수점을 절삭함 |
claude 구독료 | 3 | 31 | 94 | 94 | 단가는 세 달 분을 3으로 나누고 소수점을 절삭함 | |
openAI API 구독료 | 1 | 7 | 7 | 7 | 소수점 절삭함 | |
프런트엔드 개발을 위한 테스트 입문 | 1 | 25 | 25 | 25 | ||
프런트엔드 개발을 위한 보안 입문 | 1 | 23 | 23 | 23 | ||
이것이 자바다 | 1 | 32 | 32 | 32 | ||
만들면서 배우는 클린 아키텍처 | 1 | 16 | 16 | 16 | ||
프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략 | 1 | 45 | 45 | 45 | ||
합 계 | |