스파르타 코딩클럽

[스파르타 코딩클럽] TODO 서버 개발 기획 문서

딸기토끼0623 2024. 5. 13. 10:33

코드: https://github.com/ddalkyTokky/KotlinSpring_TODO_Backend

1. USE CASE

1. 파란색 원들은 로그인 없이도 가능한 작업, 보라색 원들은 로그인이 되어야만 가능한 작업이다.

2. 할일 등록하기를 제외한 나머지 보라색 원들은 할일 상세 보기 작업을 전제로 수행되어야 한다.

2. DBMS

2-1. Tables

1. Todo

작성자의 이름을 불러오기 위해 member_id 를 FK로 삼고 있다.

2. Reply

원래 순수 ERD 대로라면, (member_id, todo_id) 복합키를 PK 삼아 테이블을 완성할 수 있을 것이다. 하지만, 실제 물리 DB에서는 Reply row들을 하나씩 구분해야할 필요가 있기에, (member_id, todo_id) 로만으로는 부족하다. 이에 따라 PK는 따로 두고, 두 키는 FK 로 구현된다.

(ERD를 물리 테이블에 구현할때는 그 구조가 완벽히 동일하지 않을 수 있다는 것을 명심하자.)

 

3. Member

비밀번호는 해시함수 (sha256)을 사용하여 암호화 될것이다. 그리고, 이에 256길이의 secret이 사용된다. secret은 회원가입 시점마다 랜덤하게 생성되는 무작위 문자열이다.

2-2. DDL (MySQL)

CREATE TABLE `member` (
	`id` bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,
	`name` VARCHAR(16) NOT NULL UNIQUE,
	`pw` VARCHAR(64) NOT NULL,
	`secret` VARCHAR(256) NOT NULL
);

CREATE TABLE `todo` (
	`id` bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,
	`member_id` bigint UNSIGNED NOT NULL,
	`title`	VARCHAR(200) NOT NULL,
	`content` VARCHAR(1000) NOT NULL,
	`created_at` timestamp NOT NULL,
	`status` ENUM ('WORKING', 'DONE') NOT NULL,
	FOREIGN KEY (member_id) REFERENCES member(id) ON DELETE CASCADE
);

CREATE TABLE `reply` (
	`id` bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,
	`member_id` bigint UNSIGNED NOT NULL,
	`todo_id` bigint UNSIGNED NOT NULL,
	`content` VARCHAR(255) NOT NULL,
	FOREIGN KEY (member_id) REFERENCES member(id) ON DELETE CASCADE,
	FOREIGN KEY (todo_id) REFERENCES todo(id) ON DELETE CASCADE
);

ALTER TABLE `todo` ADD FOREIGN KEY (`member_id`) REFERENCES `member` (`id`);
ALTER TABLE `reply` ADD FOREIGN KEY (`member_id`) REFERENCES `member` (`id`);
ALTER TABLE `reply` ADD FOREIGN KEY (`todo_id`) REFERENCES `todo` (`id`);

3. API

3-1. Todo API

API 설명 Method URL Response
할일 생성 POST /todos 생성 성공 여부
할일 목록 조회 GET /todos
?order={ascend or descend}
&member={memberName}
&page={0 ~ }
&page-size={0 ~ }
할일 목록
할일 상세 조회 GET /todos/{todoId} 할일 상세 정보
할일 수정 PUT todos/{todoId} 업데이트 성공 여부
할일 완료 PATCH /todos/{todoId} 업데이트 성공 여부
할일 삭제 DELETE /todos/{todoId} 삭제 성공 여부

3-2. Reply API

API 설명 Method URL Response
댓글 생성 POST /reply/{todoId} 생성 성공 여부
댓글 수정 PUT /reply/{replyId} 수정 성공 여부
댓글 삭제 DELETE /reply/{replyId} 삭제 성공 여부

3-3. Member API

API 설명 Method URL Response
회원 가입 POST /member/new 가입 성공 여부
로그인 POST /member/signin 토큰등 식별자