Spring JPA를 사용해 구현한 일정관리 프로그램.
회원가입 후 로그인 시 일정을 자유롭게 작성할 수 있으며, 본인의 일정인 경우 수정 및 삭제도 가능합니다.
모든 일정에 댓글을 달 수 있습니다.
Backend : Spring
DB : MySQL
ORM : Spring Data JPA
Authentication : Cookie / Session 기반 로그인 인증
Package
controller : API 요청
dto : 요청 및 응답 객체
entity : JPA entity
exception : 예외정의 및 처리
repository : JPA repository
config : 비밀번호 암호화
filter : 필터 및 인증
service : 비즈니스 로직
- 회원가입
- 로그인 / 로그아웃
- 회원 정보 수정
- 회원 정보 삭제
- 일정 생성
- 전체 일정 조회
- 특정 일정 조회
- 일정 수정
- 일정 삭제
- 댓글 생성
- 댓글 조회
- 댓글 수정
- 댓글 삭제
- 비밀번호 암호화
| 기능 | Method | URL | request | response | 상태코드 |
|---|---|---|---|---|---|
| 일정 생성 | POST | /api/schedules | 요청 쿠키 userId: Long 요청 Body 제목: String 내용: String |
{ "scheduleId": 4, "userId": 1, "scheduleTitle": "java", "scheduleContent": "12:00 ~ 14:00", "createdAt": "2025-05-23T15:53:07.8951144", "updatedAt": "2025-05-23T15:53:07.8951144", "userName": "updateUser1", "email": "newUser1@newUser.com" } |
200: 정상등록 |
| 선택 일정 조회 | GET | /api/schedules/{scheduleId} | 요청 param scheduleID: Long |
{ "scheduleId": 4, "userId": 1, "scheduleTitle": "java", "scheduleContent": "12:00 ~ 14:00", "createdAt": "2025-05-23T15:53:07.8951144", "updatedAt": "2025-05-23T15:53:07.8951144", "userName": "updateUser1", "email": "newUser1@newUser.com" } |
200: 정상조회 |
| 전체 일정 조회 | GET | /api/schedules | 요청없음 | [ { "scheduleTitle": "java", "scheduleContent": "12:00 ~ 14:00", "numberOfComment": 0, "createdAt": "2025-05-23T15:53:08", "updatedAt": "2025-05-23T15:53:08", "userName": "updateUser1" }, { "scheduleTitle": "baseball", "scheduleContent": "play baseball at 14:00", "numberOfComment": 2, "createdAt": "2025-05-21T17:18:34", "updatedAt": "2025-05-21T17:19:20", "userName": "updateUser1" }, { "scheduleTitle": "study", "scheduleContent": "studying java", "numberOfComment": 0, "createdAt": "2025-05-21T17:17:40", "updatedAt": "2025-05-21T17:17:40", "userName": "updateUser1" } ] |
200: 정상조회 |
| 일정 수정 | PUT | /api/schedules/{scheduleId} | 요청 쿠키 userId: Long 요청 param scheduleID: Long 요청 Body 제목: String 내용: String |
{ "scheduleId": 4, "userId": 1, "scheduleTitle": "modifiedjava", "scheduleContent": "14:00 ~ 15:00", "createdAt": "2025-05-23T15:53:07.8951144", "updatedAt": "2025-05-23T15:53:08", "userName": "updateUser1", "email": "newUser1@newUser.com" } |
200: 정상수정 |
| 일정 삭제 | DELETE | /api/schedules/{scheduleId} | 요청 쿠키 userId: Long 요청 param scheduleID: Long 요청 Body 비밀번호: String |
response 없음 | 200: 정상삭제 |
| 유저 생성 | POST | /sign | 요청 쿠키 userId: Long 요청 Body 이름: String 이메일: String 비밀번호: String |
회원 가입 완료 | 200: 정상등록 |
| 유저 수정 | PUT | /rename | 요청 쿠키 userId: Long 요청 Body 이름: String 이메일: String 비밀번호: String |
수정 완료 | 200: 정상수정 |
| 유저 삭제 | DELETE | /quit | 요청 쿠키 userId: Long 요청 Body 비밀번호: String |
회원 탈퇴 완료 | 200: 정상삭제 |
| 로그인 | POST | /login | 요청 Body 이메일: String 비밀번호: String |
login | 200: 정상접속 401: 이메일 또는 비밀번호 불일치 |
| 로그아웃 | POST | /logout | 요청 쿠키 userId: Long |
logout | 200: 정상종료 |
| 댓글 생성 | POST | /comments/{scheduleId} | 요청 쿠키 userId: Long 요청 param scheduleID: Long 요청 Body 댓글내용: String |
{ "commentId": 6, "content": "letsgo", "userName": "updateUser1", "createdAt": "2025-05-23T16:08:20.1567522", "updatedAt": "2025-05-23T16:08:20.1567522" } |
200: 정상등록 |
| 댓글 조회 | GET | /comments/{scheduleId} | 요청 쿠키 userId: Long 요청 param scheduleID: Long |
[ { "commentId": 4, "content": "letsgo", "userName": "updateUser1", "createdAt": "2025-05-23T14:37:36", "updatedAt": "2025-05-23T14:37:36" }, { "commentId": 5, "content": "doit", "userName": "updateUser1", "createdAt": "2025-05-23T14:37:44", "updatedAt": "2025-05-23T14:37:44" } ] |
200: 정상조회 |
| 댓글 수정 | PUT | /comments/{commentId} | 요청 쿠키 userId: Long 요청 param contentID: Long 요청 Body 댓글내용: String 비밀번호: String |
{ "commentId": 4, "content": "updateLetsgo", "userName": "updateUser1", "createdAt": "2025-05-23T14:37:36", "updatedAt": "2025-05-23T14:37:36" } |
200: 정상수정 |
| 댓글 삭제 | DELETE | /comments/{commentId} | 요청 쿠키 userId: Long 요청 param contentID: Long 요청 Body 비밀번호: String |
response 없음 | 200: 정상삭제 |
초기 구성
일정 CRUD 구현
유저 CRUD 구현
유저 필드에 비밀번호 추가
Cookie/Session 활용한 로그인 구현
이메일 및 비밀번호 일치하지 않는 경우 401 error 반환
Validation 활용해 예외처리 적용
@Pattern 활용해 이메일 형식 검증
비밀번호 암호화
댓글 CRUD 구현
댓글 수정 및 삭제 시 비밀번호 입력 의무화
유저 CRUD 기능 재구현
페이징조회 구현
README 업데이트
README 업데이트
주석 추가
README 업데이트
