Solo Full-Stack · 2024

FitLog

식단·운동·체중을 날짜별로 기록하고, 커뮤니티에서 건강 정보를 공유하는 풀스택 건강 관리 웹 애플리케이션

GitHub
4
핵심 모듈
REST
API 설계
Full
스택 구현
Solo
기획·개발
Screenshots
화면 미리보기
mobile-1.png
대시보드
mobile-2.png
식단 기록
mobile-3.png
운동 기록
mobile-4.png
체중 차트
mobile-5.png
커뮤니티
mobile-6.png
프로필
desktop-1.png
대시보드
desktop-2.png
음식 검색 & 추가
desktop-3.png
커뮤니티
desktop-4.png
프로필
User Story
이런 상황을 해결합니다

기록하고, 분석하고, 공유하는 건강 관리의 전체 흐름을 하나의 앱에서

01 — Meal
식단 기록
음식 DB 검색이나 직접 입력으로 날짜별 칼로리·영양소를 기록해요
02 — Exercise
운동 기록
운동 종류·강도·시간을 입력하면 소모 칼로리가 자동 계산돼요
03 — Weight
체중 추이
체중 변화를 그래프로 한눈에 확인하고 목표를 관리해요
04 — Community
정보 공유
게시글·댓글·좋아요로 건강 정보를 나눠요
Features
주요 기능

기획부터 API 설계, UI까지 전부 혼자 구현했어요

Core
날짜별 건강 기록 대시보드

날짜 네비게이터로 과거·현재 기록을 자유롭게 탐색해요. 식단·운동·체중이 하나의 화면에 통합되어 있고, 각 섹션은 독립적인 API와 컴포넌트로 구성돼 있어요.

Meal
식단 관리

음식 DB 검색(공공 영양 데이터), 즐겨찾기, 직접 입력, 직접 등록 4가지 방식으로 식단을 추가해요. 탄수화물·단백질·지방 배지로 영양 정보를 바로 확인할 수 있어요.

음식 DB 검색즐겨찾기영양소 표시
Exercise
운동 기록

달리기·수영·헬스 등 프리셋 또는 직접 입력으로 운동을 추가해요. 낮음·중간·높음 강도 선택 시 시간 기반 칼로리가 실시간 계산되어 표시돼요.

칼로리 자동 계산강도 선택
Weight
체중 추이 차트

Chart.js 그라데이션 영역 차트로 체중 변화를 시각화해요. 최신 체중 배지, 엔터키 저장, 빈 상태 가이드까지 세세한 UX를 신경 썼어요.

Chart.js그라데이션 차트
Community
커뮤니티

Toast UI 에디터로 게시글을 작성하고, 카테고리 필터·인기순 정렬로 탐색해요. 계층형 댓글(대댓글), 게시글·댓글 좋아요, 이미지 첨부를 지원해요.

Toast UI Editor계층형 댓글좋아요
Profile
프로필 & 설정

프로필 사진 업로드, 닉네임 변경, 비밀번호 변경 기능. 작성 게시글 수·댓글 수·최근 운동 기록을 활동 요약으로 보여줘요.

이미지 업로드활동 요약
Tech Stack
기술 스택

프론트부터 백엔드·DB까지 혼자 선택하고 구현했어요

Frontend
React 18
Chart.js
Toast UI Editor
Axios
react-modal
Backend
Spring Boot
Spring Security
Spring Data JPA
Hibernate
Database
PostgreSQL
JPA 스키마 자동화
API & 외부
공공 영양 DB API
FatSecret API
Multipart 파일 업로드
Dev Experience
개발하며 해결한 문제들

설계 결정과 트레이드오프를 직접 경험했어요

Problem

react-modal의 style.contentbackground: transparent를 설정하면 CSS 클래스의 배경색이 무시되어 모달이 투명하게 보이는 문제가 있었어요.

Solution

overlay에 flexbox 중앙 정렬을 적용하고 style.content에서 시각적 속성을 완전히 제거했어요. CSS 클래스가 배경과 외형을 전담하게 분리해서 해결했어요.

Problem

즐겨찾기 API가 foodId만 저장하는 구조라 목록 조회 시 음식명·칼로리 등 상세 정보가 없어 프론트에서 undefined가 표시됐어요.

Solution

즐겨찾기 조회 API를 재설계해 Food·UserFoodInfo 테이블을 조인하고 음식 상세 정보를 함께 반환하도록 수정했어요. foodType에 따라 올바른 테이블을 선택해 조회해요.

Problem

운동 기록이 로컬 state에만 저장돼 새로고침하면 사라졌어요. 날짜 이동 시에도 해당 날짜의 운동 기록을 불러오지 못했어요.

Solution

Exercise 엔티티·레포지토리·컨트롤러를 백엔드에 새로 구현하고, 프론트도 날짜 기반 API 조회·저장·삭제로 전환했어요. 대시보드의 selectedDate를 props로 전달해 날짜 연동도 완성했어요.