|
참여 인원 : 5명 / 개발 주기 : 9개월 / 2024 인천대학교 컴퓨터공학부 캡스톤디자인 장려상 👑 소개 영상 |
|
|
👤 : "너... P야? 그러면 우리 서비스를 사용해봐!"
- 일정의 마감일과 예상 소요 시간을 입력하면 자동으로 스케줄링 완료
- 입력된 사용자의 일정 완료도를 반영한 스케줄링 진행
- 고정적인 일정 (학교 시간표, 알바) 이외의 시간들을 효율적으로 사용
- 지속적인 알림 시스템으로 일정 리마인드
기술 스택 | 상세 내용 | |
---|---|---|
백엔드 | Spring Boot 3.2.3 / Spring Security, Java 17 |
라이브러리: Spring Data JPA, JWT, OAuth2.0, Thymeleaf 인프라: Firebase, AWS RDS |
프론트엔드 | Next.js, React, React-Native | 주요 라이브러리: Axios, React-Hook-Form |
협업 | Notion, Postman | 협업 툴로 프로젝트 관리 및 API 문서화 |
1. 로그인 & 회원가입 , 기본 일정 등록
- 일반 로그인 & Kakao & Naver OAuth2.0 모두 지원
- 에브리타임 계정을 입력하여 현재 시간표의 수업 일정 등록
- 기본적으로 고정되는 수면, 아침, 점심, 저녁 시간들에 대한 일정 등록
2. 고정 일정 등록
- 알바 혹은 개인적인 일정 등록 (일반 카테고리)
- 시간 시간과 종료 시간을 입력
- 오늘 하루 해당 일정 이후에 아무런 스케줄을 잡고 싶지 않다면 '이후 일정 비우기' 버튼 사용 -> 종료 시간이 자동 24:00으로 배치
3. 스케줄링 할 일정 등록
- 마감일이 존재하는 일정 (과제 등) 등록
- 일정의 시작 날짜와 마감 날짜 설정
- '자동 스케줄링' 버튼 입력 후 해당 일정을 완료하기까지 필요한 시간 지정
- 완료 버튼을 누르면 자동 스케줄링이 진행되며 시간 날짜와 마감 날짜 사이의 빈 구간에 일정 배치
4. 스케줄링된 일정에 완료도 입력
- 스케줄링이 완료된 일정은 Progress가 0%인 상태
- 해당 일정에 완료도 반영 후 재스케줄링
- 만약 100%로 설정하면 이후의 스케줄링된 일정은 삭제
5. FCM을 사용한 지속적인 알림
- 일정 시작 시간과 완료 시간에 맞춰 알림 생성
- 하루 24시간을 10분 단위(총 144칸) 로 나누어 시간 단위를 세분화
- 고정 일정(수업, 아르바이트 등) 을 우선 배치한 뒤, 남은 시간은 ‘잉여 시간 구간’으로 정의
- 사용자가 입력한 일정은 예상 소요 시간과 마감일을 포함하며, 이를 기반으로 하루 중 해당 일정이 차지해야 할 시간 비중을 계산
- Best Fit 알고리즘을 응용하여 잉여 시간 구간 중 가장 적절한 영역에 일정을 배정
- 시간 자원의 낭비를 최소화하고 효율성 극대화
|
|
- Job(일정)을 관리하는 과정에서 중복되는 필드가 많아 객체 지향 상속 구조 기반의 엔티티 계층 설계
- 해당 과정에서 단일 테이블 전략과 조인 전략 중 어떤 전략을 사용할 지 고민
비교 실험 진행
- 실제 운영 환경을 고려해 조인 전략 vs 단일 테이블 전략 간 성능 실험 진행
- 단일 테이블 전략이 오히려 성능이 낮았지만, 엔티티 유형을 구분하는 dtype 컬럼에 인덱스 적용을 통해 성능 튜닝
- 10만 건의 더미 데이터를 테스트 한 결과 조회 시간이 172ms에서 40.6ms로 약 4배 향상.
최종적으로 단일 테이블 전략 선택!!
이에 관련하여.. (이미지 클릭 시 이동합니다)