Skip to content

Pinit-Scheduler/pinit-task

Repository files navigation

PinIt Backend

AI와 통계로 사용자의 하루를 설계하는 일정 관리 서비스 PinIt 의 백엔드 서버


🌟 Product Vision

PinIt 이 추구하는 핵심 목적은 다음 세 가지입니다.

  1. 사용자의 통계 기록 및 피드백

    • 사용자의 일정/집중 시간/업무 시간을 지속적으로 기록
    • 주간·월간 단위의 리포트와 피드백을 제공하여 “시간 쓰는 습관”을 개선
  2. AI와 상호작용하며 복잡한 일정을 구체화

    • “이 프로젝트 2주 안에 끝내고 싶은데, 어떻게 쪼개야 하지?” 같은 의문에 대해
    • AI가 작업을 쪼개고, 각 작업을 캘린더 상의 슬롯에 구체적인 계획으로 배치하는 것을 목표

이 저장소는 위 목적을 달성하기 위한 백엔드 도메인·API·비즈니스 로직을 담당합니다.


🧱 Tech Stack

  • Language: Java
  • Framework
    • Spring Boot (Web, Validation 등)
    • Spring Data JPA
  • Persistence
    • JPA(Hibernate)
    • Querydsl (타입 세이프한 조회용)
  • Database: MySQL (로컬/운영 환경에서 사용)
  • Build: Gradle (Gradle Wrapper 포함)
  • Test: JUnit 5, Spring Test 등

정확한 의존성 버전 및 설정은 build.gradle, src/main/resources 설정 파일을 참고하세요.


🧩 Domain Overview

1. Schedule (일정 도메인)

사용자가 실제로 수행하는 “할 일/작업”에 해당합니다.

  • 일정 타입 (집중 작업, 행정 작업, 짧은 업무 등)
  • 중요도 / 긴급도
  • 예상 소요 시간
  • 마감 일자
  • 현재 상태 (예정, 진행 중, 완료 등)
  • 고정 일정 여부 (캘린더 상에서 움직일 수 있는지 여부)

2. Dependency (일정 관계 도메인)

일정 간 “선후 관계”를 관리하는 도메인입니다.

  • from 일정이 먼저 끝나야 to 일정을 시작할 수 있음
  • 일정 간 사이클 검사를 통해 잘못된 의존 관계를 방지
  • 일정 삭제 시 관련 의존 관계를 적절히 처리

복잡한 의존관계/사이클 검사는 “복잡한 일정(프로젝트)”을 AI와 함께 구체화할 때 핵심이 되는 도메인입니다.

3. Member / User (사용자 도메인)

사용자의 시간 사용 패턴 및 환경을 담는 도메인입니다.

  • 계정 정보 (아이디, 닉네임 등)
  • 생활 패턴 (수면 시간, 식사 시간, 쉬는 날 등)
  • 이번 주 집중 시간, 업무 시간 등의 집계 정보

이 정보들을 기반으로, **AI 추천 시 “그 사람에게 맞는 플랜”**을 만들 수 있도록 설계합니다.


🔧 주요 기능 (백엔드 기준)

1. 일정 관리 API

  • 일정 생성

    • 일정의 기본 정보(제목, 타입, 마감일, 중요도, 긴급도, 예상 소요 시간 등)를 입력받아 생성
  • 일정 조회

    • 특정 날짜의 일정 목록 조회
    • 주간 단위 일정 조회 (ex. /schedules/week)
  • 일정 상세 조회

    • 단일 일정의 상세 정보 반환
  • 일정 수정 (PATCH)

    • 변경된 필드만 부분 업데이트
    • DTO에 없는 필드가 null 로 덮어씌워지는 문제를 피하기 위해 **“Patch 전용 객체/도메인 로직”**을 두는 방향으로 설계
  • 일정 삭제

    • 삭제 시 관련 의존관계를 포함한 도메인 규칙을 지키도록 구현

2. 일정 의존관계 관리

  • 일정 간 선행/후행 관계 등록

  • 일정 삭제 시, 연관된 의존관계 정리

  • 사이클 검사

    • 사용자의 모든 의존 그래프를 기반으로 위상 정렬 등으로 사이클 여부 검사
    • 잘못된 의존관계로 인해 계획이 꼬이는 것을 방지

3. 통계 및 피드백을 위한 데이터 수집

(구현/설계 범위에 맞추어 점진적으로 확장)

  • 일/주 단위 집중 작업 시간 집계
  • 일/주 단위 일반 업무 시간 집계
  • 통계 API를 통해 프론트에서 시각화 및 피드백 화면 구성

🤖 AI 연동 방향성 (Roadmap)

이 백엔드는 AI와 상호작용하기 위한 도메인/데이터 기반을 제공하는 것을 목표로 합니다.

  1. 간단한 일정 추천

    • 3시간 정도 걸릴 것 같은 일정이 있을 때,
    • 사용자의 남은 시간/우선순위/집중 시간 통계 등을
    • 강화학습 모델에 전달하여 일정을 수행할 시점을 추천받는 기능
    • RLHF 기반으로 사용자의 시간 관리 성향을 반영하는 AI
  2. 복잡한 일정 쪼개기

    • “TOEIC 900점, 2개월 안에” 같은 일정을 등록하려 할 때
      • LLM에게 일정 검토 요청
      • 목표를 달성 가능한 단위 작업으로 분해
      • 각 작업들 간 선후관계(Dependency) 생성
      • 각 작업을 캘린더 상의 슬롯으로 배치하는 로직/AI 연동

현재 저장소는 도메인/데이터/트랜잭션 레이어를 먼저 단단하게 다지는 것에 초점을 두고 있으며, AI 연동은 별도 서비스(OpenAI 등)와 HTTP 또는 메시지 큐로 연동하는 형태를 염두에 두고 있습니다.


📡 API 문서

API 문서


📝 설계 하이라이트

  • DDD 지향 설계

    • 일정, 의존관계, 사용자 통계를 각각의 도메인으로 바라보고, 도메인 규칙(사이클 검사, 선행 완료 조건 등)을 도메인 레이어에 집중
  • 명령형보다 선언형에 가까운 Patch 설계

    • HTTP PATCH에서 필드별 조건문/switch-case 대신 “Patch 객체 → 도메인 메소드” 형태로 적용하여 가독성과 유지보수성 향상
  • 트랜잭션 경계 분리

    • 일정과 의존관계를 별도 애그리거트로 바라보고
    • UX 관점에서 “일정 삭제 실패/롤백” 같은 문제를 최소화하도록 설계

About

일정 관리/실행 서비스 Pinit의 일정 관리/실행 기능을 담당하는 마이크로서비스

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •