구현하고자 하는 서비스의 전체적인 흐름을 파악하고 필요한 기능 설계하기 API 명세서, ERD, SQL 작성하기 Spring Boot 기반 CRUD (Create, Read, Update, Delete) 기능이 포함된 REST API 만들기
/* schedule 생성 */
create table schedule
(
id bigint not null auto_increment,
contents varchar(500) not null,
manager varchar(255) not null,
password varchar(200) not null,
createTime timestamp not null,
modifiedTime timestamp not null,
primary key (id)
);
/* comment 생성 */
CREATE TABLE comment (
id BIGINT NOT NULL AUTO_INCREMENT,
create_date DATETIME(6),
modified_date DATETIME(6),
comments VARCHAR(300) NOT NULL,
writer VARCHAR(20) NOT NULL,
schedule_id BIGINT,
PRIMARY KEY (id)
);
/* User 생성 */
CREATE TABLE user (
id BIGINT NOT NULL AUTO_INCREMENT,
create_date DATETIME(6),
modified_date DATETIME(6),
email VARCHAR(50) NOT NULL,
name VARCHAR(20) NOT NULL,
PRIMARY KEY (id)
);
/* ScheduleUser 생성 */
CREATE TABLE schedule_user (
id BIGINT NOT NULL AUTO_INCREMENT,
manager_user_id BIGINT,
schedule_id BIGINT,
PRIMARY KEY (id)
);
-- 외래 키 제약 조건 추가
ALTER TABLE comment
ADD CONSTRAINT FKsy51iks4dgapu66gfj3mnykch
FOREIGN KEY (schedule_id)
REFERENCES schedule (id);
ALTER TABLE schedule
ADD CONSTRAINT FKa50n59y1j4a6qwa42p8jiguds
FOREIGN KEY (user_id)
REFERENCES user (id);
ALTER TABLE schedule_user
ADD CONSTRAINT FKhq86yha6sf91ay14806t8wry
FOREIGN KEY (manager_user_id)
REFERENCES user (id);
ALTER TABLE schedule_user
ADD CONSTRAINT FK631kxv3p08ynhxtafj0lul432
FOREIGN KEY (schedule_id)
REFERENCES schedule (id);기능: 일정 CRU 학습목표: JPA 입문
- 일정을 저장, 단건 조회, 수정할 수 있습니다.
- 일정은
작성 유저명,할일 제목,할일 내용,작성일,수정일필드를 갖고 있습니다.
기능: 댓글 CRUD 학습목표: 연관관계 기본
- 일정에 댓글을 달 수 있습니다.
- 댓글과 일정은 연관관계를 가집니다.
- 댓글을 저장, 단건 조회, 전체 조회, 수정, 삭제할 수 있습니다.
- 댓글은
댓글 내용,작성일,수정일,작성 유저명필드를 갖고 있습니다.
기능: 일정 페이징 조회 학습목표: 페이징/정렬
- 일정을 Spring Data JPA의
Pageable과Page인터페이스를 활용하여 페이지네이션을 구현해주세요.페이지 번호와페이지 크기를 쿼리 파라미터로 전달하여 요청하는 항목을 나타냅니다.할일 제목,할일 내용,댓글 개수,일정 작성일,일정 수정일,일정 작성 유저명필드를 조회합니다.- 디폴트
페이지 크기는 10으로 적용합니다.
- 일정의
수정일을 기준으로 내림차순 정렬합니다.
기능: 일정 삭제 학습목표: 영속성 전이
- 일정을 삭제할 때 일정의 댓글도 함께 삭제됩니다.
- JPA의 영속성 전이 기능을 활용합니다.
기능: 유저 CRUD 학습목표: 연관관계 심화
- 유저를 저장, 단건 조회, 전체 조회, 삭제할 수 있습니다.
- 유저는
유저명,이메일,작성일,수정일필드를 갖고 있습니다.
- 유저는
- 일정은 이제
작성 유저명필드 대신유저 고유 식별자필드를 가집니다. - 일정을 작성한 유저는 추가로 일정 담당 유저들을 배치할 수 있습니다.
- 유저와 일정은 N:M 관계입니다. (
@ManyToMany사용 금지!)
- 유저와 일정은 N:M 관계입니다. (
기능: 일정 조회 개선 학습목표: 지연 로딩
- 일정 단건 조회 시 담당 유저들의
고유 식별자,유저명,이메일이 추가로 포함됩니다. - 일정 전체 조회 시 담당 유저 정보가 포함되지 않습니다.
- JPA의 지연 로딩 기능을 활용합니다.