- 회원가입
- username, password를 Client에서 전달받기
- username은
최소 4자 이상, 10자 이하이며 알파벳 소문자(a~z), 숫자(0~9)
로 구성되어야 한다.- password는
최소 8자 이상, 15자 이하이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9)
로 구성되어야 한다.- DB에 중복된 username이 없다면 회원을 저장하고 Client 로 성공했다는 메시지, 상태코드 반환하기
- 로그인(JWT)
- username, password를 Client에서 전달받기
- DB에서 username을 사용하여 저장된 회원의 유무를 확인하고 있다면 password 비교하기
- 로그인 성공 시, 로그인에 성공한 유저의 정보와
JWT
를 활용하여 토큰을 발급하고,
발급한 토큰을 Header에 추가하고 성공했다는 메시지, 상태코드 와 함께 Client에 반환하기- 할일카드 작성 기능
- 토큰을 검사하여, 유효한 토큰일 경우에만 할일 작성 가능
할일 제목
,할일 내용
,작성일
을 저장할 수 있다.- 할일 제목, 할일 내용을 저장하고
- 저장된 할일을 Client 로 반환하기(username은 로그인 된 사용자)
- 선택한 게시글 할일카드 조회 기능 API
- 선택한 할일 의 정보를 조회할 수 있다.
- 반환 받은 할일 정보에는
할일 제목
,할일 내용
,작성자
,작성일
정보가 들어있다.- 할일카드 목록 조회 기능 API
- 등록된 할일 전체를 조회할 수 있다.
- 회원별로 각각 나누어서 할일 목록이 조회된다.
- 반환 받은 할일 정보에는
할일 제목
,작성자
,작성일
,완료 여부
정보가 들어있다.- 조회된 할일 목록은
작성일
기준 내림차순으로 정렬 되어있다.- 선택한 게시글 할일카드 수정 기능 API
- 선택한 할일카드의
제목
,작성 내용
을 수정할 수 있다.
- 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 게시글만 수정 가능
- 할일 제목, 할일 내용을 수정하고 수정된 할일 정보는 Client 로 반환된다.
- 수정된 할일의 정보를 반환 받아 확인할 수 있다.
- 반환 받은 할일 정보에는
할일 제목
,할일 내용
,작성자
,작성일
정보가 들어있다.- 🆕 할일카드 완료 기능 API
- 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 할일카드 만 완료 가능
- 완료처리 한 할일카드는 목록조회시
완료 여부
필드가 TRUE 로 내려간다.완료 여부
기본값은 FALSE- 🆕 댓글 작성 API
- 토큰을 검사하여, 유효한 토큰일 경우에만 댓글 작성 가능
- 선택한 할일의 DB 저장 유무를 확인하기
- 선택한 할일이 있다면 댓글을 등록하고 등록된 댓글 반환하기
- 🆕 댓글 수정 API
- 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 댓글만 수정 가능
- 선택한 댓글의 DB 저장 유무를 확인하기
- 선택한 댓글이 있다면 댓글 수정하고 수정된 댓글 반환하기
- 🆕 댓글 삭제 API
- 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 댓글만 삭제 가능
- 선택한 댓글의 DB 저장 유무를 확인하기
- 선택한 댓글이 있다면 댓글 삭제하고 Client 로 성공했다는 메시지, 상태코드 반환하기
- 🆕 예외 처리 (ResponseEntity 사용)
- 토큰이 필요한 API 요청에서 토큰을 전달하지 않았거나 정상 토큰이 아닐 때는 "토큰이 유효하지 않습니다." 라는 에러메시지와 statusCode: 400을 Client에 반환하기
- 토큰이 있고, 유효한 토큰이지만 해당 사용자가 작성한 게시글/댓글이 아닌 경우에는 “작성자만 삭제/수정할 수 있습니다.”라는 에러메시지와 statusCode: 400을 Client에 반환하기
- DB에 이미 존재하는 username으로 회원가입을 요청한 경우 "중복된 username 입니다." 라는 에러메시지와 statusCode: 400을 Client에 반환하기
- 로그인 시, 전달된 username과 password 중 맞지 않는 정보가 있다면 "회원을 찾을 수 없습니다."라는 에러메시지와 statusCode: 400을 Client에 반환하기
- 전체 할일카드 목록에서 완료된 카드들은 숨김처리 하는 기능 추가
- 할일카드를 작성자만 볼 수 있도록 비공개 하는 기능 추가
- 할일카드 제목으로 검색하여 목록을 출력하는 기능 추가
- 프로젝트에 swagger 적용
기능 Method URL Request Header Request Param Request Body ResponseBody ResponseHeader 회원가입 POST
/api/user/signup - - {
"username" : "username", "password" : "password"
}{
"username" : "username",
"password" : "password"
}- 로그인 POST
/api/user/signin - - {
"username" : "username", "password" : "password"
}{
"statuscode" : statuscode",
"message" : "statusmessage"
}Authorization 할일 작성 POST
/api/todo Authorization - {
"title" : "title", "contents" : "contents"
}{
"id" : "id",
"title" : "title",
"content" : "content",
"username" : "username",
"dateCreated" : "datecreated",
"iscompleted" : "iscompleted"
}- 할일 조회(ID) GET
/api/todo/param Authorization 'id'=id - {
"id" : "id",
"title" : "title",
"content" : "content",
"username" : "username",
"dateCreated" : "datecreated",
"iscompleted" : "iscompleted"
}- 할일 목록 조회(모두) GET
/api/todo/all Authorization - - {
"id" : "id",
"title" : "title",
"content" : "content",
"username" : "username",
"dateCreated" : "datecreated",
"iscompleted" : "iscompleted"
} , {...}- 할일 목록 조회(제목) GET
/api/todo/search/param Authorization 'title'=title - {
"id" : "id",
"title" : "title",
"content" : "content",
"username" : "username",
"dateCreated" : "datecreated",
"iscompleted" : "iscompleted"
} , {...}- 미완료 할일 조회 GET
/api/todo/uncompleted Authorization - - {
"id" : "id",
"title" : "title",
"content" : "content",
"username" : "username",
"dateCreated" : "datecreated",
"iscompleted" : "iscompleted"
} , {...}- 할일 수정(제목, 내용) PUT
/api/todo/param Authorization 'id'=id {
"title" : "title",
"contents" : "contents"
}{
"id" : "id",
"title" : "title",
"content" : "content",
"username" : "username",
"dateCreated" : "datecreated",
"iscompleted" : "iscompleted"
}- 할일 수정(완료여부) PUT
/api/todo/completion/param Authorization 'id'=id - " "iscompleted" 로 변경되었습니다. " - 할일 수정(공개여부) PUT
/api/todo/disclosure/param Authorization 'id'=id - " "isprivate" 로 변경되었습니다. " - 댓글 작성 POST
/api/comment/param Authorization 'id'=id { "comment" : "comment" } { "todoId" : "todoId", "id" : "id", "username" : "username", "comment" : "comment" } - 댓글 수정 PUT
/api/comment/param Authorization 'id'=id {
"comment" : "comment"
}{
"todoId" : "todoId",
"id" : "id",
"username" : "username",
"comment" : "comment"
}- 댓글 조회 GET
/api/comment/param Authorization 'id'=id - {
"todoId" : "todoId",
"id" : "id",
"username" : "username",
"comment" : "comment"
} , {...}- 댓글 삭제 DELETE
/api/comment/param Authorization 'id'=id - "삭제되었습니다." -
회원가입 (POST
/api/user/signup )
로그인 (POST
/api/user/signin )
할일 작성 (POST
/api/todo )
할일 조회(ID) (GET
/api/todo/param )
할일 목록 조회(모두) (GET
/api/todo/all )
할일 목록 조회(제목) (GET
/api/todo/search/param )
미완료 할일 조회 (GET
/api/todo/uncompleted )
할일 수정(제목, 내용) (PUT
/api/todo/param )
할일 수정(완료여부) (PUT
/api/todo/completion/param )
할일 수정(공개여부) (PUT
/api/todo/disclosure/param )
댓글 작성 (POST
/api/comment/param )
댓글 수정 (PUT
/api/comment/param )
댓글 조회 (GET
/api/comment/param )
댓글 삭제 (DELETE
/api/comment/param )
이번 프로젝트를 수행하면서 JWT를 사용하는데에 굉장한 도움이 되었다.
로그인 구현하는데가 조금 어려웠는데, 그래도 예상대로 로그인이 구현된 다음에는 부수적인 기능만 추가하는거라 순조롭게 지나갔다.
그나저나 이번 프로젝트 정리글을 쓰면서 고민이 생겼다.
이제 슬슬 많은걸 구현하다보니 프로젝트 규모가 너무 커서 더이상 소스코드를 못올릴것 같다.
이걸 하나하나 올리기엔 글이 끝나지 않을것 같아서 앞으로는 소스코드는 안올리려고 한다.
이번 프로젝트로 JWT 말고도 마음가짐에도 많이 도움이 되었다.
저번프로젝트에서 JWT와 부수적인 기능만 추가되어서 난이도가 쉬울것같아서 미룬다는 안일한 생각을 갖고있었다.
현실에 안주하지말자. 자만하지말자. 토익이랑 정보처리기사 실기 볼생각하니까 어지럽다.