공부의 숲은 사용자가 학습 목표를 설정하고 집중할 수 있도록 돕는 학습 관리 서비스로 타이머 기능, 습관 형성, 포인트 시스템 등을 활용하여 사용자가 자신의 학습 습관을 개선하고 동기 부여를 받으며 효율적으로 학습할 수 있도록 한다.
기능 | 작업 |
---|---|
습관 | 습관 생성 API |
습관 조회 API | |
습관 수정 API | |
습관 삭제 API | |
오늘의 습관 체크 API | |
오늘의 습관 해제 API | |
오늘의 습관 기능 테스트 |
기능 | 작업 |
---|---|
습관 | 오늘의 습관 페이지 |
습관 모달창 | |
오늘의 습관 및 모달창 반응형 | |
habitAPI.js | |
집중 | 반응형 수정 |
상세 스터디 | 이모지 기능 디자인 개선 |
공통 | Header 반응형 |
모든 페이지 디자인 틀 통일 및 개선 |
기능 |
---|
중간, 최종 발표자료(PPT) 제작 |
팀 노션 제작 및 관리 |
기술 스택 | |
---|---|
언어 및 런타임 | JavaScript |
BE 프레임워크 | Express |
DB & ORM | PostgreSQL |
Prisma | |
FE 프레임워크 | React |
Vite | |
React Router | |
스타일링 | CSS Modules |
SCSS | |
상태 관리 | useState |
useEffect | |
라이브러리 | axios |
dayjs | |
배포 | render |
netlify | |
협업 | Discord |
Notion | |
zep | |
github |
문제 상황
→ 사용자가 오늘의 습관을 삭제하더라도 이전 주차의 기록에는 영향을 주지 않아야 한다. 즉, 체크된 이력이 없다면 습관기록표에 나타나지 않지만, 삭제 전 하루라도 체크된 이력이 있으면 습관 기록표에는 계속 나타나야 하는 로직이 필요했다. 또한 이 로직은 일주일 단위로 동작해야 했다.
원인 분석
→ 기존 로직은 체크 이력 관리가 복잡하게 얽혀 있어 삭제와 관련된 조건을 명확히 처리하기 어려웠다. 습관을 삭제했을 때 관련된 기록의 유무에 따라 UI에 반영되도록 하는 로직이 명확히 정리되지 않았다.
해결 방안
→ 습관의 주간 체크 이력을 isActive(Boolean) 값으로 관리하여, 일주일 단위 배열로 저장하였다. 이후 습관을 삭제할 때, 해당 주간 배열의 값이 모두 false일 경우 습관기록표에서 완전히 사라지도록 하고, true가 한 번이라도 존재할 경우 기록표에 유지되도록 로직을 단순화 및 정비하였다. 이를 통해 복잡했던 삭제 이후 로직을 명확하게 정리하고 유지보수성을 높일 수 있었다.
이번 초급 프로젝트로 혼자서 개발할 때는 알지 못했던 점들을 많이 알게되었다. 생각보다 사람들의 코드 구조와 사고방식이 서로 많이 다르다는 것과 협업할 시 컨벤션과 merge, 코드 리뷰, 소통 등의 중요성을 뼈저리게 느끼게 되었다. 제대로된 개발 프로젝트가 처음이다보니 나중에 맞추면 되겠지라는 생각으로 대충 정했던 것들이 나중에 큰 장애물이 되었었다. 물론 문제들을 해결하는 과정에서 많은 것도 배울 수 있었지만, 앞으로 진행될 프로젝트에서는 하나하나 다 맞추고 시작해야겠다는 다짐을 했다.
중복 코드 제거
→ 반복되는 로직은 공통 컴포넌트로 분리하여 재사용성을 높임
유사 기능 컴포넌트 통합 및 정리
→ 같은 역할을 하는 컴포넌트들을 통일하여 코드 일관성 유지함(PointDisplay로 통합)
가독성을 위한 코드 정리
→ 주석을 꼼꼼하게 작성하고 코드 스타일을 일정하게 유지함
기능 단위로 폴더 구조 설계
→ study, focus, habit 등으로 나눠 기능별로 폴더 구성함
→ 유지보수와 협업 시 파일 찾기 쉬웠음
초기 API 명세 및 백엔드 구조 선제적 설계
→ 프론트 작업 시 필요한 데이터 흐름이 명확해져 개발이 수월하게 진행되었음
타이머 새로고침 시 데이터 유지 기능 추가
→ 현재는 새로고침 시 데이터가 초기화되는데, 로컬 스토리지나 서버 연동을 통해 상태를 유지할 수 있도록 개선해야함
스타일 코드의 일관성 강화
→ SCSS의 mixin, extend 등 기능을 활용하여 코드 재사용성과 유지보수성 향상
성능 최적화 고려
→ 렌더링 최적화, 메모리 관리 등 성능 측면에서의 고민은 부족했던 부분으로, 향후 더 나은 사용자 경험을 위해 고려해야한다고 생각함
협업 시 Git 사용 방식 개선
→ 병합 과정에서 충돌이 자주 발생했으므로, 브랜치 전략 및 커밋 컨벤션 등을 팀 차원에서 명확히 정하고 공유하는 과정이 필요함