PlanMate는 전문직 준비생들을 위한 학습 관리 및 커뮤니티 플랫폼입니다. 사용자가 효율적으로 학습 시간을 관리하고, 학습 패턴을 분석하며, 필요한 정보를 공유할 수 있도록 다양한 기능을 제공합니다.
역할 | 이름 |
---|---|
🖥️ FrontEnd | 이성훈 |
🛠️ BackEnd | 김호진 |
🎨 디자인 | 박소현 |
📝 기획 | 김인서 |
- Front : React Typescript Redux
- Back : Java Spring
- Version & Issue Management : Git & Github
- Tools : Notion, Slack, Figma
- Service : Vercel
- Design : Figma
- 컴포넌트 파일: PascalCase (예: TimerButton.tsx)
- 훅 파일: camelCase, 'use' 접두사 사용 (예: useTimerItem.ts)
- 스타일 파일: styled.ts로 통일
- 유틸리티 파일: camelCase (예: dateUtils.ts)
- 기능별로 폴더 구분 (예: components, hooks, utils)
- 각 페이지나 주요 컴포넌트별로 하위 폴더 생성
- 컴포넌트 로직과 스타일을 분리 (컴포넌트 파일과 styled.ts 파일)
- 큰 컴포넌트의 경우, 로직을 별도의 훅으로 분리
- React Query 관련 훅은 hooks/mutations 폴더에 분리
- .ts 및 .tsx 확장자 사용
- 타입 정의 파일 사용 (types.ts)
- Redux 사용 (상태 관리 모듈)
- styled-components 사용 (styled.ts 파일들)
- JSDoc 주석을 활용하여 주요 함수와 훅, 컴포넌트 설명
항목 | 규칙 | 예시 |
---|---|---|
변수 | camelCase | totalTime, studyHours |
상수 | UPPER_SNAKE_CASE | MAX_HOURS |
함수 | camelCase | calculateTotalTime() |
컴포넌트 | PascalCase | PostItem |
인터페이스, 타입 | PascalCase | UserType |
이벤트 핸들러 | 'on' 접두사 사용 | onSubmit |
커밋 타입 | 설명 |
---|---|
Feat | 새로운 기능 추가 |
Fix | 버그 수정 |
Remove | 파일 삭제 |
Design | 디자인 |
Rename | 이름 변경 |
Move | 파일 이동 (디렉토리 구조 변경) |
Style | 코드 포맷팅, 세미콜론 누락 등 (코드 변경 없음) |
Refactor | 코드 리팩토링 |
Test | 테스트 코드 추가 또는 수정 |
Chore | 빌드 프로세스 또는 보조 도구 변경 |
- Typescript
- React
- Redux
- styled-components
- framer-motion
- draft-js
- 배포 가능한 안정적인 버전의 코드를 관리합니다.
- 로컬에서 작업한 브랜치의 변경 사항을 머지합니다.
- 새로운 기능 개발이나 버그 수정을 위해 로컬에서 브랜치를 생성합니다.
- 작업 완료 후 로컬에서 메인 브랜치로 머지합니다.
- 깃허브에는 메인 브랜치의 변경 사항만 푸시합니다.
- 로컬 브랜치를 통해 메인 브랜치의 안정성을 유지할 수 있었습니다.
- 기능별로 작업을 분리하여 체계적인 개발이 가능했습니다.
- 개발 당시 협업 경험 부족으로 깃허브에서는 단일 브랜치를 사용했습니다.
- 하지만 로컬 브랜치에서 충분히 다양한 깃 관련 CLI 명령어에 익숙해졌고, 이 경험 덕분에 이후 팀 프로젝트에서 적절히 활용하고 있습니다.
- 프로젝트 경험을 통해 브랜치 활용의 중요성을 깨달았습니다.
- 향후에는 깃허브에서도 브랜치를 적극 사용하여 협업과 코드 리뷰를 원활히 진행할 계획입니다.
- 노션을 활용하여 이슈를 관리하고 우선순위를 정했습니다.
- 코드의 일관성과 유지보수성을 위해 내부 구조에 주의를 기울였습니다.
이 간단한 브랜치 전략은 프론트엔드 개발을 혼자 진행하게 된 이 프로젝트에서 효과적이었으며, 추후 협업 상황에 맞게 조정할 수 있는 능력을 기를 수 있었습니다.
프로젝트 구조가 방대해 다음과 같이 요약하였습니다.
자세한 구조는 소스코드 참고
┣ 📂api # API 관련 함수 및 타입 정의
┣ 📂assets # 이미지, 아이콘 등 정적 자원
┣ 📂components # 재사용 가능한 React 컴포넌트
┣ 📂constants # 상수 정의
┣ 📂hooks # 커스텀 React 훅
┣ 📂modules # 상태 관리 모듈 (Redux)
┣ 📂pages # 페이지 컴포넌트
┣ 📂utils # 유틸리티 함수
┣ 📜App.tsx # 앱의 메인 컴포넌트
┣ 📜index.tsx # 앱의 진입점
┗ 📜router.tsx # 라우팅 설정
- 1차 개발: 2023.05 ~ 2023.08
- 2차 개발: 2024.01 (1개월)
PlanMate 프로젝트를 개발하면서 다음과 같은 부분에 특히 주의를 기울였습니다.
- React Query의 Mutation 등을 활용하여 데이터 관리와 상태 업데이트를 효율적으로 처리
- 자연스러운 애니메이션 구현으로 사용자 인터페이스의 반응성 향상
- Calendar와 Scheduler 컴포넌트를 직접 구현하여 프로젝트의 특성에 맞는 맞춤형 기능 제공
- 어제와 오늘의 공부량을 그래프로 시각화하여 직관적인 비교 가능
- 모바일 환경을 고려한 반응형 레이아웃 구현으로 다양한 디바이스에서의 사용성 보장
- Redux를 활용한 효율적인 상태 관리
- 체계적인 디렉토리 구조 설계로 코드의 가독성과 유지보수성 향상
- JSDoc 주석을 활용한 문서화로 개발 편의성 증대
- 프론트엔드 개발을 혼자 진행했지만, 향후 팀 협업을 고려한 코드 구조와 컨벤션 적용
이러한 노력을 통해 사용자 친화적이면서도 기술적으로 견고한 애플리케이션을 구현하고자 하였습니다.
default.mp4
- 과목 추가: "과목 추가" 버튼을 통해 사용자가 새로운 과목을 추가할 수 있습니다.
- 과목 시간 측정: 각 과목별로 독립적인 타이머가 있어 공부 시간을 측정할 수 있습니다. 타이머가 실시간으로 업데이트되어 현재 공부 중인 시간을 정확히 보여줍니다.
- 과목 편집: 과목명 변경, 색상 변경 등의 편집 기능이 있습니다.
- 과목 삭제: 불필요한 과목을 삭제할 수 있습니다.
- 휴식 타이머: 공부를 정지하면 자동으로 휴식 타이머가 시작됩니다. 이는 실험적인 기능으로, 사용자의 전체 휴식 시간을 추적합니다.
- 총 공부 시간: 좌측 상단에 오늘의 총 공부 시간이 표시됩니다.
- 과목별 공부 시간 비율: 원형 그래프를 통해 각 과목의 공부 시간 비율을 시각적으로 보여줍니다.
- 과목별 상세 시간: 각 과목별로 오늘 공부한 시간이 표시됩니다.
- D-Day 표시: D-Day 페이지에서 고정한 D-Day를 타이머 페이지에서 확인할 수 있습니다.
- D-Day 링크: D-Day 설정 페이지로의 빠른 접근을 위해 타이머 페이지에 직접 링크가 제공됩니다.
이 페이지를 통해 사용자는 자신의 학습 패턴을 더 잘 이해하고 시간 관리 능력을 향상시킬 수 있으며, 중요한 날짜를 놓치지 않고 학습 계획을 세울 수 있습니다.
통계 페이지는 사용자의 학습 데이터를 시각적으로 표현하여 학습 패턴과 진행 상황을 쉽게 파악할 수 있도록 설계되었습니다.
- 월별 캘린더 형태로 학습 데이터를 표시
- 각 날짜에 해당하는 학습 시간을 한눈에 확인 가능
- 날짜별 총 공부 시간에 따라 색상 강도가 달라짐
- 학습량이 많을수록 더 진한 색상으로 표시되어 직관적인 파악 가능
- 선택한 날짜의 시간대별 학습량을 그래프로 표시
- 하루 중 가장 집중적으로 학습한 시간대를 쉽게 확인 가능
- 어제와의 학습량 비교를 통한 동기부여 가능
- 원형 그래프를 통해 각 과목의 학습 시간 비율을 시각화
- 과목 간 학습 시간 균형을 한눈에 파악 가능
이 페이지를 통해 사용자는 자신의 학습 패턴을 객관적으로 분석하고, 더 효율적인 학습 계획을 수립할 수 있습니다. 시각적으로 명확한 데이터 제공으로 사용자의 학습 동기 부여와 자기 관리를 돕습니다.
https://github.com/user-attachments/assets/39a09c93-02f5-4664-a5d8-634688e0ba66
- 사용자는 캘린더에 드래그&드랍 방식으로 쉽게 학습 시간을 추가할 수 있습니다.
- 각 과목에 대해 사용자 정의 색상을 설정할 수 있어 시각적으로 구분하기 쉽습니다.
- 과목을 클릭하면 시간, 제목, 색상 등을 수정할 수 있는 편집 모달이 활성화됩니다.
- 과목 위에 마우스를 올리면 우측 상단에 삭제 버튼이 나타나며, 클릭 시 해당 과목을 삭제할 수 있습니다.
- 좌측 상단의 화살표 버튼을 클릭하여 이전 주차의 스케줄을 확인할 수 있습니다.
- 사용자는 상단의 태그를 클릭하여 관심 있는 분야의 게시물만 필터링할 수 있습니다.
- 예: #감정평가사, #회계사 등
- 각 페이지에서 최대 10개의 게시물을 표시하여 사용자가 쉽게 탐색할 수 있도록 합니다.
createPaginationNumbers
함수를 통해 페이지네이션을 최적화하여, 현재 페이지 주변의 번호를 효과적으로 표시합니다.- 총 페이지 수가 10 이하인 경우 모든 페이지 번호를 표시하며, 그 이상일 경우 현재 페이지를 중심으로 10개의 번호를 보여줍니다.
default.mp4
- draft-js를 활용한 텍스트 편집기가 구현되어 있습니다.
- 굵게(B), 기울임꼴(I), 밑줄(U) 등의 기본적인 텍스트 스타일링 옵션이 제공됩니다.
- 글자 크기 조절, 서식 지정 등의 추가 옵션도 있습니다.
- 제목 입력란 옆에 태그를 선택할 수 있는 드롭다운 메뉴가 있습니다. 현재 "#기타"가 선택되어 있습니다.
- 편집기 본문에 글을 작성할 수 있습니다. 현재 샘플 텍스트가 입력되어 있습니다.
- 페이지 하단 우측에 초록색 "등록" 버튼이 있어, 작성한 글을 게시할 수 있습니다.
- "등록" 버튼 옆에 "취소" 버튼이 있어, 글 작성을 취소하고 이전 페이지로 돌아갈 수 있습니다.
- 사용자의 이름과 이메일 주소가 상단에 표시됩니다.
- "D-DAY 관리" 섹션이 있어 중요한 날짜를 확인하고 관리할 수 있습니다.
- "더보기 >" 버튼을 통해 D-DAY 설정 페이지로 이동할 수 있습니다.
- "작성한 글" 탭에서 사용자가 작성한 게시글 목록을 확인할 수 있습니다.
- 각 게시글의 제목, 작성 날짜, 조회수, 좋아요 수, 댓글 수가 표시됩니다.
- "작성한 댓글" 탭을 통해 사용자가 작성한 댓글 목록을 볼 수 있습니다.
- "스크랩한 글" 탭에서 사용자가 스크랩한 게시글 목록을 확인할 수 있습니다.
- "작성한 글", "작성한 댓글", "스크랩한 글" 탭을 통해 각 카테고리별로 내용을 필터링할 수 있습니다.
- 게시글 목록 하단에 페이지 번호가 표시되어 여러 페이지의 내용을 탐색할 수 있습니다.
이 마이페이지는 사용자의 활동 내역을 한눈에 볼 수 있게 구성되어 있으며, D-DAY 관리 기능을 통해 중요한 일정도 함께 관리할 수 있도록 설계되었습니다. 사용자는 자신의 글쓰기 활동, 댓글 활동, 관심 있는 글 등을 효과적으로 관리하고 확인할 수 있습니다.
D_DAY.mp4
고정된 D-DAY가 타이머 페이지에 별도로 표시된 모습
- 사용자는 중요한 날짜를 D-DAY로 설정하고 관리할 수 있습니다.
- 왼쪽 패널에 설정된 D-DAY 목록이 표시됩니다.
- D-DAY를 클릭 시 해당 D-DAY로 캘린더가 이동하고 수정 모드가 활성화됩니다.
- 수정 모드에서 삭제도 가능합니다.
- D-DAY 좌측 핀 버튼 클릭 시 해당 D-DAY를 고정할 수 있습니다.
- 고정된 D-DAY는 초록색 배경을 가지며 타이머 페이지에 별도로 표시되어 강조됩니다.
- 오른쪽 패널에서 새로운 D-DAY를 추가할 수 있습니다.
- 제목 입력란에 D-DAY의 이름을 입력할 수 있습니다.
- 캘린더 인터페이스를 통해 D-DAY 날짜를 쉽게 선택할 수 있습니다.
- 연도와 월을 상단에서 선택할 수 있으며, 날짜는 캘린더에서 직접 클릭하여 선택합니다.
- 날짜 선택 후 하단의 '등록' 버튼을 클릭하여 새로운 D-DAY를 저장할 수 있습니다.
- 새로운 D-DAY가 추가되면 왼쪽 패널의 목록이 실시간으로 업데이트됩니다.
- 사용자 친화적인 인터페이스로 설계되어 있어 쉽고 빠르게 D-DAY를 관리할 수 있습니다.
- 설정된 D-DAY 정보는 타이머 페이지 등 다른 페이지에서도 표시되어 사용자가 중요한 날짜를 항상 인지할 수 있게 합니다.
이 D-Day 페이지를 통해 사용자는 중요한 시험일정이나 목표 날짜를 효과적으로 관리하고, 학습 계획을 세우는 데 도움을 받을 수 있습니다. 직관적인 인터페이스와 실시간 업데이트 기능은 사용자 경험을 향상시키고, 학습 동기 부여에 기여합니다.
PlanMate 프로젝트는 제가 프론트엔드 개발자로서 성장하는 데 있어 중요한 시작점이 되었습니다. Typescript, React, Redux, Github, React Query 등 모든 기술이 처음이었지만, 프로젝트에 대한 열정으로 완성할 수 있었습니다.
이 프로젝트는 다양한 기능과 넓은 디자인으로 인해 마크업부터 CSS, 기능 구현까지 모든 과정을 경험할 수 있는 기회였습니다. 이를 통해 CSS에 대한 이해도가 크게 향상되었고, Typescript에 익숙해질 수 있었으며, React와 Redux의 사용에 있어 실전 경험을 쌓을 수 있었습니다. 특히 깃허브에서는 단일 브랜치만 사용했지만, 로컬에서는 다양한 브랜치를 활용하며 Git CLI 명령어에 익숙해질 수 있었습니다. 이는 이후 팀 프로젝트에서 협업 능력을 발휘하는 데 큰 도움이 되었습니다.
PlanMate는 단순한 프로젝트 이상의 의미를 가집니다. 개발 과정에서 부딪힌 수많은 시행착오와 문제 해결 경험은 저를 한 단계 성장시켰고, 프론트엔드 개발자로서의 자신감을 갖게 해주었습니다. 이 프로젝트는 앞으로도 제가 새로운 기술을 학습하고 역량을 발전시키는 데 있어 소중한 자산이 될 것입니다. PlanMate 개발을 통해 얻은 경험을 바탕으로, 앞으로도 사용자 중심의 인터페이스 설계와 효율적인 상태 관리, 클린 코드 작성 등 프론트엔드 개발의 베스트 프랙티스를 추구하며 성장해 나가고자 합니다. 이 프로젝트는 제 개발자 인생에 있어 값진 첫걸음이었으며, 앞으로도도 끊임없이 도전하고 배우겠습니다.