일기 작성 및 LLM 기반 AI 답변 기능을 제공하는 풀스택 애플리케이션입니다.
일기 목록을 확인하고 검색할 수 있는 메인 화면입니다.
개별 일기를 조회하고, AI 답변을 확인하거나 수정/삭제할 수 있는 화면입니다.
CursorDiary/
├── backend/ # Spring Boot 백엔드
│ ├── src/ # 소스 코드
│ ├── build.gradle # Gradle 빌드 설정
│ └── ...
├── frontend/ # React 프론트엔드 (예정)
└── readme.md # 프로젝트 문서
cd backend
./gradlew bootRun백엔드는 기본적으로 http://localhost:8080에서 실행됩니다.
cd frontend
npm install
npm run dev프론트엔드는 기본적으로 http://localhost:3000에서 실행됩니다.
- DiaryResponse
id(number, long): 일기 IDtitle(string, max 255): 제목content(string): 본문createdAt(string, datetime): 생성 시각aiReply(string|null): AI 답변 (없을 수 있음)
POST /api/diaries- Request Body (DiaryRequest)
title(string, required, max 255)content(string, required)
- Response: 200 OK, body = DiaryResponse (AI 답변은 개발 환경에서 스텁 메시지로 채워짐)
- 에러: 400 (검증 실패)
GET /api/diaries/{id}- Path:
id(long) - Response: 200 OK, body = DiaryResponse
- 에러: 404 (존재하지 않는 ID)
PUT /api/diaries/{id}- Path:
id(long) - Request Body (DiaryRequest)
title(string, required, max 255)content(string, required)
- Response: 200 OK, body = DiaryResponse
- 에러: 404 (존재하지 않는 ID), 400 (검증 실패)
PATCH /api/diaries/{id}/ai-reply- Path:
id(long) - Request Body (AiReplyRequest)
aiReply(string, required)
- Response: 200 OK, body = DiaryResponse
- 에러: 404 (존재하지 않는 ID), 400 (검증 실패)
POST /api/diaries/{id}/ai-reply/generate- Path:
id(long) - Response: 200 OK, body = DiaryResponse (개발 환경에서는 스텁 메시지로 생성)
- 에러:
- 404 (존재하지 않는 ID)
- 400 (본문이 비어 있어 생성 불가)
GET /api/diaries/search?query={text}- Query:
query(string, required) - Response: 200 OK, body = DiaryResponse 배열
- 에러: 200 이외 오류 없음 (검색 결과가 없으면 빈 배열)
DELETE /api/diaries/{id}- Path:
id(long) - Response: 204 No Content
- 에러: 404 (존재하지 않는 ID)
- 서비스 코드에 OpenAI 연동 주석이 포함되어 있으며, 현재는 개발 스텁 메시지를 반환하도록 설정되어 있음.(비용 문제)
# 생성
curl -X POST http://localhost:8080/api/diaries \
-H "Content-Type: application/json" \
-d '{"title":"오늘","content":"괜찮은 하루였다"}'
# 검색
curl "http://localhost:8080/api/diaries/search?query=하루"