일정을 관리해주는 프로그램을 위한 API
이 개인 프로젝트는 스파르타 부트캠프 Spring 6기의 세번째 과제인 일정 관리 앱을 만드는 과제입니다. 이 프로젝트는 단계별로 진행되었으며 branch로 순차적으로 변화하는 과정을 보실 수 있습니다. 이 개인 프로젝트의 목표는 레벨별 요구사항을 충족시키는 것이며, JDBC를 사용하여 Spring의 이해도를 높이기 위함입니다.
-
Backend: Spring Boot (v3.4.3), Java, JDBC, Lombok
-
Database: MySQL
-
API 테스트: Postman
-
기타: Validation
- API 중심 개발 (Postman 활용)
- Entity 직접 반환 금지 → DTO 사용
- ResponseEntity 활용 → 유연한 HTTP 응답 처리
- 보안 강화: 일정 관련 API에서 비밀번호 제외
- 레이어드 아키텍쳐 적용
- Controller, Service, Repository 분리
- CRUD 필수 기능을 JDBC 기반으로 개발
- Domain Driven Design(DDD) 적용
깃헙 Lv.0 | 블로그 Lv.0
깃헙 Lv.1 | 블로그 Lv.1
깃헙 Lv.2 | 블로그 Lv.2
깃헙 Lv.3 | 블로그 Lv.3
깃헙 Lv.4 | 블로그 Lv.4
깃헙 Lv.5 | 블로그 Lv.5
깃헙 Lv.6 | 블로그 Lv.6
자세한 명세서는 (Spring) 일정 관리 API 만들기 Lv 0에서 확인해주세요.
| 기능 이름 | Method | URL | Path Variable | Parameter | Request Body | Response | Status |
|---|---|---|---|---|---|---|---|
| 📅 일정 만들기 | POST | /tasks |
TaskRequestDto |
id | 201 Created (정상 작성) |
||
| 🔍 모든 일정 보기 | GET | /tasks |
page | List<TaskResponseDto> |
200 OK (정상 조회) |
||
| 🔍 특정 일정 보기 | GET | /tasks/{id} |
id | TaskResponseDto |
200 OK (정상 조회) |
||
| 🔨 일정 변경하기 | PATCH | /tasks/{id} |
id | password | TaskRequestDto |
id | 200 OK (정상 수정) |
| ❌ 일정 취소하기 | DELETE | /tasks/{id} |
id | password | id | 200 OK (정상 삭제) |
| 기능 이름 | Method | URL | Path Variable | Parameter | Request Body | Response | Status |
|---|---|---|---|---|---|---|---|
| 📅 가입하기 | POST | /users |
UserRequestDto |
201 Created (정상 가입) |
|||
| 🔍 유저 정보 보기 | GET | /users/{id} |
id | UserResponseDto |
200 OK (정상 조회) |
||
| 🔨 유저 정보 수정 | PATCH | /users/{id} |
id | password | UserRequestDto |
id | 200 OK (정상 수정) |
| ❌ 회원 탈퇴하기 | DELETE | /users/{id} |
id | password | id | 200 OK (정상 삭제) |
-
일정 생성(일정 작성하기)
- 일정 생성 시, 포함되어야할 데이터
-
할 일,작성자명,비밀번호,작성/수정일을 저장
-
-
작성/수정일은 날짜와 시간을 모두 포함한 형태 - 각 일정의 고유 식별자(ID)를 자동으로 생성하여 관리
- 최초 입력 시, 수정일은 작성일과 동일
- 일정 생성 시, 포함되어야할 데이터
-
전체 일정 조회(등록된 일정 불러오기)
- 다음 조건을 바탕으로 등록된 일정 목록을 전부 조회
-
수정일(형식 : YYYY-MM-DD) -
작성자명
-
- 조건 중 한 가지만을 충족하거나, 둘 다 충족을 하지 않을 수도, 두 가지를 모두 충족할 수도 있습니다.
-
수정일기준 내림차순으로 정렬하여 조회
- 다음 조건을 바탕으로 등록된 일정 목록을 전부 조회
-
선택 일정 조회(선택한 일정 정보 불러오기)
- 선택한 일정 단건의 정보를 조회할 수 있습니다.
- 일정의 고유 식별자(ID)를 사용하여 조회합니다.
- 선택한 일정 수정
- 선택한 일정 내용 중
할일,작성자명만 수정 가능- 서버에 일정 수정을 요청할 때
비밀번호를 함께 전달합니다. -
작성일은 변경할 수 없으며,수정일은 수정 완료 시, 수정한 시점으로 변경합니다.
- 서버에 일정 수정을 요청할 때
- 선택한 일정 내용 중
- 선택한 일정 삭제
- 선택한 일정을 삭제할 수 있습니다.
- 서버에 일정 수정을 요청할 때
비밀번호를 함께 전달합니다.
- 서버에 일정 수정을 요청할 때
- 선택한 일정을 삭제할 수 있습니다.
- 작성자와 일정의 연결
- 설명
- 동명이인의 작성자가 있어 어떤 작성자가 등록한 ‘할 일’인지 구별할 수 없음
- 작성자를 할 일과 분리해서 관리합니다.
- 작성자 테이블을 생성하고 일정 테이블에 FK를 생성해 연관관계를 설정해 봅니다.
- 조건
- 작성자 테이블은
이름외에이메일,등록일,수정일정보를 가지고 있습니다.- 작성자의 정보는 추가로 받을 수 있습니다.(조건만 만족한다면 다른 데이터 추가 가능)
- 작성자의 고유 식별자를 통해 일정이 검색이 될 수 있도록 전체 일정 조회 코드 수정.
- 작성자의 고유 식별자가 일정 테이블의 외래키가 될 수 있도록 합니다.
- 작성자 테이블은
- 설명
- 설명
- 많은 양의 데이터를 효율적으로 표시하기 위해 데이터를 여러 페이지로 나눕니다.
-
페이지 번호와페이지 크기를 쿼리 파라미터로 전달하여 요청하는 항목을 나타냅니다. - 전달받은 페이지 번호와 크기를 기준으로 쿼리를 작성하여 필요한 데이터만을 조회하고 반환
-
- 많은 양의 데이터를 효율적으로 표시하기 위해 데이터를 여러 페이지로 나눕니다.
- 조건
- 등록된 일정 목록을
페이지 번호와크기를 기준으로 모두 조회 - 조회한 일정 목록에는
작성자 이름이 포함 - 범위를 넘어선 페이지를 요청하는 경우 빈 배열을 반환
- Paging 객체를 활용할 수 있음
- 등록된 일정 목록을
-
설명
- 예외 상황에 대한 처리를 위해 HTTP 상태 코드와
에러 메시지를 포함한 정보를 사용하여 예외를 관리할 수 있습니다.- 필요에 따라 사용자 정의 예외 클래스를 생성하여 예외 처리를 수행할 수 있습니다.
@ExceptionHandler를 활용하여 공통 예외 처리를 구현할 수도 있습니다.- 예외가 발생할 경우 적절한 HTTP 상태 코드와 함께 사용자에게 메시지를 전달하여 상황을 관리합니다.
- 예외 상황에 대한 처리를 위해 HTTP 상태 코드와
-
조건
- 수정, 삭제 시 요청할 때 보내는
비밀번호가 일치하지 않을 때 예외가 발생합니다. - 선택한 일정 정보를 조회할 수 없을 때 예외가 발생합니다.
- 잘못된 정보로 조회하려고 할 때
- 이미 삭제된 정보를 조회하려고 할 때
- 수정, 삭제 시 요청할 때 보내는
- 설명
- 유효성 검사
- 잘못된 입력이나 요청을 미리 방지할 수 있습니다.
- 데이터의
무결성을 보장하고 애플리케이션의 예측 가능성을 높여줍니다. - Spring에서 제공하는
@Valid어노테이션을 이용할 수 있습니다.
- 유효성 검사
- 조건
-
할일은 최대 200자 이내로 제한, 필수값 처리 -
비밀번호는 필수값 처리 - 담당자의
이메일정보가 형식에 맞는지 확인
-