필수 기능 - 요구 사항 정의
Lv 0. API 명세 및 ERD 작성
- API 명세서 작성하기
- API명세서는 프로젝트 root(최상위) 경로의 README.md 에 작성
- ERD 작성하기
- ERD는 프로젝트 root(최상위) 경로의 README.md 에 첨부
- SQL 작성하기
- 설치한 데이터베이스(Mysql)에 ERD를 따라 테이블을 생성
Lv 1. 일정 CRUD
- 일정을 생성, 조회, 수정, 삭제할 수 있다.
- 일정 필드
- 작성 유저명, 할일 제목, 할일 내용, 작성일, 수정일
- 작성일, 수정일 필드는 JPA Auditing 활용
Lv 2. 유저 CRUD
- 유저를 생성, 조회, 수정, 삭제할 수 있다.
- 유저 필드
- 유저명, 이메일, 작성일 , 수정일 필드
- 작성일, 수정일 필드는 JPA Auditing 활용
- 연관관계 구현
- 일정은 이제 작성 유저명 필드 대신 유저 고유 식별자 필드를 가진다.
Lv 3. 회원가입
- 유저에 비밀번호 필드를 추가
Lv 4. 로그인(인증)
- 설명
- Cookie/Session을 활용해 로그인 기능 구현
- 필터를 활용한 인증 처리
- @Configuration 을 활용하여 필터 등록
- 조건
- 이메일과 비밀번호를 활용하여 로그인 기능 구현
- 이메일, UNIQUE 속성 추가
- 회원가입, 로그인 요청은 인증 처리에서 제외
- 이메일과 비밀번호를 활용하여 로그인 기능 구현
- 예외처리
- 로그인 시 이메일과 비밀번호가 일치하지 않을 경우 HTTP Status code 401을 반환
도전 기능 - 요구 사항 정의
Lv 5. 다양한 예외처리 적용하기
- Validation을 활용한 다양한 예외처리
- Ex) 할일 제목은 10글자 이내, 유저명은 4글자 이내
- @Pattern을 사용해서 회원 가입 Email 데이터 검증
Lv 6. 비밀번호 암호화
- Lv.3에서 추가한 비밀번호 필드에 들어가는 비밀번호를 암호화 한다.
- 암호화를 위한 PasswordEncoder를 직접 만들어 사용
Lv 7. 댓글 CRUD
- 생성한 일정에 댓글을 남길 수 있다.
- 댓글과 일정은 연관관계를 가진다.
- 댓글을 저장, 조회, 수정, 삭제할 수 있다.
- 댓글 필드
- 댓글 내용, 작성일, 수정일, 유저 고유 식별자, 일정 고유 식별자
- 작성일, 수정일 필드는 JPA Auditing 활용
Lv 8. 일정 페이징 조회
- 일정을 Spring Data JPA의 Pageable과 Page 인터페이스를 활용하여 페이지네이션을 구현
- 페이지 번호와 페이지 크기를 쿼리 파라미터로 전달하여 요청하는 항목을 나타낸다.
- 할일 제목, 할일 내용, 댓글 개수, 일정 작성일, 일정 수정일, 일정 작성 유저명 필드 조회
- 디폴트 페이지 크기는 10
- 일정의 수정일을 기준으로 내림차순 정렬
API 명세서
Postman
https://documenter.getpostman.com/view/44635744/2sB2qaigm8
일정 관리 Develop
### **인증** --- 본 API는 **세션 기반 인증**을 사용합니다. - 세션이 유효하지 않은 경우 401 Unauthorized 응답이 반환됩니다. - 단, 회원가입, 로그인 요청은 인증 처리에서 제외합니다.
documenter.getpostman.com
ERD 설계 및 구현
개념적 설계
논리적 설계 - ERD
물리적 설계
-- DB 생성
DROP DATABASE IF EXISTS schedule;
CREATE DATABASE IF NOT EXISTS schedule;
USE schedule;
-- users 테이블 생성
DROP TABLE IF EXISTS users;
CREATE TABLE IF NOT EXISTS users (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '유저 ID (PK)',
name VARCHAR(50) NOT NULL COMMENT '유저명',
email VARCHAR(100) NOT NULL UNIQUE COMMENT '유저 이메일',
password VARCHAR(255) NOT NULL COMMENT '비밀번호',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '작성일',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일'
) COMMENT = '유저 Table';
-- schedules 테이블 생성
DROP TABLE IF EXISTS schedules;
CREATE TABLE IF NOT EXISTS schedules (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '할일 ID (PK)',
title VARCHAR(100) NOT NULL COMMENT '할일 제목',
contents TEXT NOT NULL COMMENT '할일 내용',
user_id BIGINT NOT NULL COMMENT '작성 유저 ID (FK)',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '작성일',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일',
FOREIGN KEY (user_id) REFERENCES users(id)
) COMMENT = '일정 Table';
-- schedule_comments 테이블 생성
DROP TABLE IF EXISTS schedule_comments;
CREATE TABLE IF NOT EXISTS schedule_comments (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '댓글 ID (PK)',
contents TEXT NOT NULL COMMENT '댓글 내용',
user_id BIGINT NOT NULL COMMENT '작성 유저 ID (FK)',
schedule_id BIGINT NOT NULL COMMENT '일정 ID (FK)',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '작성일',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일',
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (schedule_id) REFERENCES schedules(id)
) COMMENT = '일정 댓글 Table';
Spring 프로젝트 구성
'내일배움캠프(Spring 7기) > 내일배움캠프' 카테고리의 다른 글
[뉴스피드 프로젝트] 요구 사항 정의 및 설계 (0) | 2025.06.04 |
---|---|
[CH 3 일정 관리 앱 Develop] 정리 & 회고 (0) | 2025.05.23 |
[CH 3 일정 관리 앱 만들기] 정리 & 회고 (0) | 2025.05.13 |
[CH 3 일정 관리 앱 만들기] 도전 기능 - 요구사항 정의 및 설계 (0) | 2025.05.12 |
[CH 3 일정 관리 앱 만들기] 필수 기능 - 요구사항 정의 및 설계 (7) | 2025.05.08 |