ILHAESSO - 3계층 도메인·간트·AI개인화
오늘의 목표와 맥락
AI 업무일지 SaaS를 화면을 보며 하루 종일 반복 개선했다. 큰 축은 네 가지였다.
- 프로젝트 > 테스크 > 일일업무 3계층 도입
- 간트차트를 실제로 쓸 수 있는 수준으로 다듬기
- 입력 UI(드롭다운·날짜·시간)를 일관된 커스텀 컴포넌트로 통일
- AI 결과 품질을 위한 개인화와, 워크스페이스 이동의 안정화
이전 세션에서 캘린더·슬라이딩 세션·AI 히스토리 등을 만들었고, 오늘은 그 위에 도메인 계층과 UI 완성도를 얹었다.
구현한 내용
3계층 도메인 (프로젝트 > 테스크 > 일일업무)
기존은 프로젝트와 일일업무 2계층뿐이라 "며칠~몇 주짜리 작업"을 담을 자리가 없었다. 중간 계층으로 테스크(work_tasks) 를 추가했다.
- 테스크는 프로젝트에 속하고
기간·상태(예정/진행 중/완료)를 가진다. - 일일업무에
task_id를 추가해 작업에 연결한다. 작업을 고르면 그 작업의 프로젝트로 정합성을 맞춘다. - 전용 화면(
/tasks)에서 프로젝트 선택 → 제목/기간/상태로 추가·인라인 수정, 하단에 테스크 간트(프로젝트 전체 일정 막대 + 각 테스크 막대).
간트차트
여러 차례 반복하며 형태를 바꿨다.
- 기본 표시를 오늘 기준 ±12개월로 두고 3/6/12/24개월 프리셋 제공.
- 프로젝트 열 고정 + 타임라인만 가로 스크롤, 로드 시 오늘 중심으로 스크롤.
- 상세 화면은 최종적으로 테스크 전용 간트 + 하단 풀 캘린더 로 정리했다. 테스크는 막대로 보고, 하단 캘린더의 일일업무를 클릭하면 상세 모달이 뜬다.
입력 UI 통일과 AI 개인화
Select / DatePicker / TimePicker를 body 포털 기반 커스텀 컴포넌트로 만들어 모든 화면의 네이티브select·date·time을 교체했다. 모달·사이드바에서도 잘리지 않는다.- 내 정보에 자기소개·업무 R&R 를 입력받아 일일 정리·보고서 프롬프트에 항상
작성자 정보블록으로 포함한다(원문에 없는 사실 추가 금지 가드 유지). - 프로젝트 색상 을 지정해 간트·캘린더에 반영하고, 선택 드롭다운·간트 이름 앞에 색상 점을 표시했다.
설계와 판단
색·폰트 대비 자동화
프로젝트 색을 배경으로 쓰면 글자가 안 보일 위험이 있었다. 색상 hex의 상대 휘도를 계산해 밝으면 검정, 어두우면 흰색 글자를 자동 선택하도록 lib/color.ts 에 헬퍼를 두었다. 사용자가 어떤 색을 골라도 텍스트가 항상 보인다.
간트 상세 축과 테스트 데이터 정합성
상세 간트가 엉뚱한 날짜 범위를 보인 원인은 샘플 일일업무가 프로젝트 기간 밖(작성 시점에 몰림) 이라는 데이터 불일치였다. 축을 프로젝트 기간 기준으로 고치고, 테스트 데이터를 기간 안으로 재배치해 근본 원인을 없앴다.
워크스페이스 이동 — A/B/D 처리, C 보류
이동 기능을 분석해 문제를 분리했다.
| 항목 | 문제 | 조치 |
|---|---|---|
| A | 이동 후 일일업무·테스크 캐시가 stale | 성공 시 전체 쿼리 무효화 |
| B | 이동 실패가 무음 | 전역 토스트 도입(우측 상단 적체·3초·진행바·수동 닫기) |
| C | 권한 체크 없음(아무 멤버나 이동) | 정책 결정 필요 → 보류 |
| D | 보고서 근거가 이동된 일지를 가리킴 | 근거 칩에 "어느 워크스페이스로 이동됨" 표시 |
이동 자체(엔트리·테스크·AI기록 동반 이동)는 라이브로 정상 확인했고, 남은 것은 이동 권한 정책이다.
검증한 내용
- 백엔드: 마이그레이션 0013(제목)·0014(테스크)·0015(프로필)·0016(색상)까지 적용,
alembic check드리프트 없음, 전체 테스트 통과, ruff clean. - 프론트: eslint·build 통과.
- 라이브 스모크: 3계층 연결, 간트 상세, AI 프롬프트에 작성자 정보 포함, 워크스페이스 이동·원복, 보고서 근거 이동 표시를 각각 확인했다.
다음 단계
- C: 이동 권한 정책(owner/admin 제한, 본인 엔트리만 이동 여부, 개인 워크스페이스 이동 허용 여부) 확정 후 구현
- 토스트를 일일업무 저장·AI 정리·보고서 생성 등 다른 동작에도 확장
- 보고서 근거 무결성: 표시에 그치지 말고 스냅샷/동반 이동 중 방향 결정