Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 70 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,73 @@
# BackEnd
# Calio Backend

**AI 기반 개인 일정 관리 서비스의 백엔드 서버입니다.**
자연어 입력, AI 채팅, 벡터 시맨틱 검색을 통해 스마트한 일정 관리를 제공합니다.

## 시스템 아키텍처

```mermaid
graph TB
Client["Client\n(Web / Mobile App)"]

subgraph App["Spring Boot Application · Java 21 · Port 8080"]
direction TB
Security["JWT Filter + Spring Security"]

subgraph Features["Feature Domains"]
direction LR
Auth["Auth\n(OAuth 2.0)"]
Schedule["Event / Todo\n(Recurrence)"]
AI["Chat / NLP /\nSuggestion"]
Util["Briefing / Reminder\n/ Friend / Member"]
end
end

subgraph Storage["Data Layer"]
direction LR
MySQL[("MySQL 8.0\nRelational DB")]
Redis[("Redis 7.2\nCache")]
Qdrant[("Qdrant\nVector DB")]
end

subgraph External["External Services"]
direction LR
OAuth["OAuth Providers\nNaver · Google · Kakao"]
OpenAI["OpenAI\nGPT-4o-mini"]
Upstage["Upstage\nEmbedding API"]
end

Client -->|"REST API (HTTPS)"| Security
Security --> Features
Auth -->|"OAuth Flow"| OAuth
AI -->|"Chat / NLP / Suggestion"| OpenAI
Schedule & AI -->|"Generate Embeddings"| Upstage
Upstage -->|"Store Vectors"| Qdrant
Features -->|"Read / Write"| MySQL
Features -->|"Cache"| Redis
AI -->|"Semantic Search"| Qdrant
```

## 기술 스택

| 분류 | 기술 |
|------|------|
| Language | Java 21 |
| Framework | Spring Boot 4.0.1, Spring Security, Spring Data JPA |
| Database | MySQL 8.0, Redis 7.2, Qdrant (Vector DB) |
| AI / NLP | OpenAI GPT-4o-mini, Upstage Embedding API |
| Auth | JWT, OAuth 2.0 (Naver · Google · Kakao) |
| Infra | Docker, Docker Compose |
| Docs | Swagger / OpenAPI |

## 주요 기능

- **AI 채팅**: GPT-4o-mini 기반 일정 관리 챗봇
- **자연어 파싱 (NLP)**: 자연어 문장에서 일정/할 일 자동 추출
- **AI 제안**: 사용자 패턴 기반 일정 및 할 일 자동 추천
- **시맨틱 검색**: 벡터 임베딩을 활용한 의미 기반 일정 검색
- **반복 일정**: RRULE 기반 복잡한 반복 규칙 지원
- **소셜 기능**: 친구 연결 및 일정 공유
- **브리핑**: 일일 일정 요약 제공

## 커밋 메시지 컨벤션

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ private Map<String, Object> buildCreateSchedule(String dateHint) {
props.put("scheduleType", enumProp("일정 유형 — '몇 시에', '오전/오후 N시' 등 구체적 시간이 명시된 약속·미팅·회의면 EVENT; 날짜만 있거나 시간 없이 할 일·체크리스트 성격이면 반드시 TODO", "EVENT", "TODO"));
props.put("title", strProp("제목"));
props.put("isRecurring", boolProp("반복 여부"));
props.put("startTime", strProp("시작 시간 ISO-8601 (EVENT 필수). " + dateHint));
props.put("endTime", strProp("종료 시간 ISO-8601 (EVENT 필수)"));
props.put("startTime", strProp("시작 시간 ISO-8601 (EVENT 필수). 날짜 범위 일정(예: '수요일부터 금요일')은 시작일 00:00:00 설정. " + dateHint));
props.put("endTime", strProp("종료 시간 ISO-8601 (EVENT 필수). 날짜 범위 일정(예: '수요일부터 금요일')은 종료일 23:59:59 설정."));
props.put("startDate", strProp("시작 날짜 yyyy-MM-dd (TODO 필수, 반복TODO는 첫 발생일). " + dateHint));
props.put("dueTime", strProp("할 일 수행 시각 HH:mm (TODO 전용, '오후 7시' 등 시간이 언급된 경우 반드시 설정)"));
props.put("location", strProp("장소 (EVENT 선택)"));
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/prompts/chat-system-prompt.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
- 대상 일정이 명확하게 하나 있으면 바로 함수를 호출해요. 사용자에게 다시 확인하거나 되묻지 말아요.
- 어떤 일정인지 특정되지 않을 때만 askForClarification을 사용해요.
- 날짜나 시간 없이 일정을 등록하기 어려울 때도 askForClarification으로 물어봐요.
- '수요일부터 금요일', '3일부터 5일까지' 등 날짜 범위가 주어진 일정은 startTime을 시작일 00:00:00, endTime을 종료일 23:59:59로 설정하고 isAllDay=true로 등록해요.

[현재 제공 가능한 기능]
- 일정 및 할 일 자연어 등록/수정/삭제
Expand Down