[SW Maestro] Petdori

🗺️ Overview

반려동물 종합 건강 관리 서비스입니다.


📓 Before Starting

소프트웨어 마에스트로에서 진행한 프로젝트다.

우리 팀은 반려동물의 건강을 통합 관리할 수 있는 서비스를 기획했다. 기존의 진행했던 기획에서 급하게 변경된 것이었다.

반려동물 건강과 관련한 도메인으로 서비스를 개발하기로 결정하고, 이후 미팅에서 반려동물 건강과 관련한 기능들을 제시했다. 산책 경로 추천 및 기록 기능, 건강 수치 대시보드 기능, 사료 추천 기능 등이 있었다.

나는 반려동물 건강 수치 수집 및 시각화, 이를 기반으로 한 사료 추천 기능을 하고 싶었는데, 팀원은 산책 경로 추천 및 기록 나아가 주변 산책하는 강아지 위치 확인(나이키 러닝 클럽 생각하면 된다.)하는 기능을 더 하고싶어했다.

두 기능을 모두 넣자니 서비스의 정체성과 방향이 달라서 규모가 커지고 선택과 집중이 안된다는 단점이 있었다.

멘토님의 조언에 따라 '반려동물 건강 관리'라는 도메인 안에서 각자 각자 원하는 기능을 구현하고 합치는 식으로 해결방안을 찾았다.

원래 Flutter로 개발했었다. 프로젝트 종료 후 웹/앱 접근이 가능하고 생산성도 좋고(왜냐면 계속 새로운 기능 넣고 테스트를 해봐야해서) 상대적으로 라이브러리 생태계도 좋고 개인적으로도 더 좋아하는 React로 리뉴얼했다. 이때 백엔드도 생각난 김에 아키텍처를 대규모 개선했다. (여기부터는 개인으로 진행했다.)


📘 Service Highlights

아래는 실시간 혈당 변화량을 확인할 수 있는 메인 대시보드다.

아래 페이지는 두 번째 센션로, 주간 반려동물의 혈당 및 기타 건강 수치 레포트 형식으로 보여주는 페이지다.

다음은 사료 추천 페이지다. 현재는 카테고리로 필터링하여 사료를 추천받는 기능만 있다.

다음은 모바일 환경으로 접속하였을 때 화면이다.


🛠️ Tech Stack

Spring Boot, Java, QueryDSL, SLF4J, Docker, MySQL, Github Action, AWS EC2, AWS Route 53,


📔 Architecture

아키텍쳐 변경과 관련된 구체적인 내용(시도했던 아키텍쳐, 최종 선택 이유, 어려웠던 점, 기술 스택 선정 이유 등)은

👉🏻 여기를 참고하면 된다.


📕 Contributions

혈당 데이터 파이프라인 구축

  • IoT sensor 데이터를 얻기 위해 LibreView 사이트에서 1시간 마다 혈당 데이터를 크롤링

  • Airflow와 Kafka를 활용한 센서 데이터 파이프라인 설계 및 구축

  • 원본 csv파일을 AWS s3에 업로드 한 후, 가공된 혈당 데이터를 MySQL 서버에 저장

  • 최대/최소, 스파이크 회수, 평균 혈당 등의 계산이 필요한 수치는 Native Query(SQL) 작성

사료 데이터 크롤링

  • Selenium을 사용하여 danawa.com에서 개/고양이 사료 정보를 가져오고 mongoDB에 저장

  • 주기적 크론잡 설정 Airflow로 관리

Spring Boot 활용한 Backend API 서버 개발

  • JavaSpring Boot을 활용한 백엔드 RESTful API 개발

  • WebSocket, STOMP을 활용하여 화면단으로 실시간 데이터 전송

  • Redis로 자주 호출되는 사료 데이터 캐싱 및 세션 관리를 통한 응답 시간 단축

  • Spring Boot Scheduler 주긱적으로 데이터 가져와서 최신화 하도록 설정

인프라

  • 모니터링 :

    • k6를 통한 서버 부하 테스트 진행.

    • Prometheus/Grafana를 통해 서버 메트릭 및 CPU 사용량 모니터링

  • 로깅 시스템 :

    • Filebeat를 사용하여 spring boot의 로그 수집.

    • ElasticSearch에서 Kibana로 데이터 시각화

  • 배포 :

    • Dockerize 후 AWS EC2에 배포


🔥 Challenge

▫️ 혈당 데이터 실시간성 유지

▫️ 데이터 파이프라 개선을 통한 효율성 개선

▫️ 혈당 데이터 정확성 신뢰도 유지

▫️ 추천 알고리즘 차별화, 정교화

▫️ 외부 도메인 전문가와의 협업


🎖️ Achievements


📒 Dev Log

▫️ 기획

  • 비즈니스 계획

    • 비즈니스 모델 캔버스

    • 시장 조사

    • 타겟층 분석

    • 설문조사

    • 인터뷰

  • 서비스 기획

    • 페르소나 (Persona)

    • 유저 시나리오 (User Scenario)

    • 요구사항 명세서 (Requirements Specification)

    • 화면흐름도 (Screen Flowchart)

    • 화면설계서 (Wireframe)

    • 기능명세서 (Functional Specification)

  • 마켓 리서치

  • 도메인 전문가 인터뷰 / 협업

  • 목표 설정

  • 백도어 테스팅

▫️ 고도화 전

  • 백엔드 개발

    • 스프링 부트로 API 만들기

    • 크롤러 만들기

    • 캐시 붙이기

    • 모니터링 시스템 구축하기

    • 로깅 시스템 구축하기

  • 데이터 엔지니어링

    • 시각화 테스트

    • 데이터 클렌징

    • 데이터 중복 처리

  • 프론트엔드 개발

    • 플러터 기반 대시보드 개발하기

  • 기타

    • Jira & Confluence 활용하기

    • ChatGPT 활용하기

▫️ 고도화 후

  • Flutter -> React

  • 크롤러 수정하기

  • 혈당 데이터 파이프라인 스케줄러에서 Airflow로 변경하기

  • 외부 데이터 수집 과정에 Kafka 추가하여 안정성 높이기

  • 실시간성 보장을 위해 STOMP 붙이기

Last updated