[Project] Spring - 일정 관리 앱(JWT) 🛠

김상엽·2024년 2월 5일
0

Project

목록 보기
4/9
post-thumbnail

일정 관리 앱 서버 만들기(JWT)

요구 사항

기존의 필수 요구사항

https://velog.io/@kim_table_next/Project-Spring-Todo

추가된 필수 요구사항

  • 회원가입
    • 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 적용

ERD (Entity Relationship Diagram)

API

기능MethodURLRequest HeaderRequest ParamRequest BodyResponseBodyResponseHeader
회원가입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/todoAuthorization-{
"title" : "title", "contents" : "contents"
}
{
"id" : "id",
"title" : "title",
"content" : "content",
"username" : "username",
"dateCreated" : "datecreated",
"iscompleted" : "iscompleted"
}
-
할일 조회(ID)GET/api/todo/paramAuthorization'id'=id-{
"id" : "id",
"title" : "title",
"content" : "content",
"username" : "username",
"dateCreated" : "datecreated",
"iscompleted" : "iscompleted"
}
-
할일 목록 조회(모두)GET/api/todo/allAuthorization--{
"id" : "id",
"title" : "title",
"content" : "content",
"username" : "username",
"dateCreated" : "datecreated",
"iscompleted" : "iscompleted"
} , {...}
-
할일 목록 조회(제목)GET/api/todo/search/paramAuthorization'title'=title-{
"id" : "id",
"title" : "title",
"content" : "content",
"username" : "username",
"dateCreated" : "datecreated",
"iscompleted" : "iscompleted"
} , {...}
-
미완료 할일 조회GET/api/todo/uncompletedAuthorization--{
"id" : "id",
"title" : "title",
"content" : "content",
"username" : "username",
"dateCreated" : "datecreated",
"iscompleted" : "iscompleted"
} , {...}
-
할일 수정(제목, 내용)PUT/api/todo/paramAuthorization'id'=id{
"title" : "title",
"contents" : "contents"
}
{
"id" : "id",
"title" : "title",
"content" : "content",
"username" : "username",
"dateCreated" : "datecreated",
"iscompleted" : "iscompleted"
}
-
할일 수정(완료여부)PUT/api/todo/completion/paramAuthorization'id'=id-" "iscompleted" 로 변경되었습니다. "-
할일 수정(공개여부)PUT/api/todo/disclosure/paramAuthorization'id'=id-" "isprivate" 로 변경되었습니다. "-
댓글 작성POST/api/comment/paramAuthorization'id'=id{ "comment" : "comment" }{ "todoId" : "todoId", "id" : "id", "username" : "username", "comment" : "comment" }-
댓글 수정PUT/api/comment/paramAuthorization'id'=id{
"comment" : "comment"
}
{
"todoId" : "todoId",
"id" : "id",
"username" : "username",
"comment" : "comment"
}
-
댓글 조회GET/api/comment/paramAuthorization'id'=id-{
"todoId" : "todoId",
"id" : "id",
"username" : "username",
"comment" : "comment"
} , {...}
-
댓글 삭제DELETE/api/comment/paramAuthorization'id'=id-"삭제되었습니다."-

실행화면

  1. 회원가입 (POST /api/user/signup )

  2. 로그인 (POST /api/user/signin )

  3. 할일 작성 (POST /api/todo )

  1. 할일 조회(ID) (GET /api/todo/param )

  2. 할일 목록 조회(모두) (GET /api/todo/all )

  3. 할일 목록 조회(제목) (GET /api/todo/search/param )

  4. 미완료 할일 조회 (GET /api/todo/uncompleted )

  5. 할일 수정(제목, 내용) (PUT /api/todo/param )

  6. 할일 수정(완료여부) (PUT /api/todo/completion/param )

  7. 할일 수정(공개여부) (PUT /api/todo/disclosure/param )

  8. 댓글 작성 (POST /api/comment/param )

  9. 댓글 수정 (PUT /api/comment/param )

  10. 댓글 조회 (GET /api/comment/param )

  11. 댓글 삭제 (DELETE /api/comment/param )

프로젝트 회고

이번 프로젝트를 수행하면서 JWT를 사용하는데에 굉장한 도움이 되었다.
로그인 구현하는데가 조금 어려웠는데, 그래도 예상대로 로그인이 구현된 다음에는 부수적인 기능만 추가하는거라 순조롭게 지나갔다.


그나저나 이번 프로젝트 정리글을 쓰면서 고민이 생겼다.
이제 슬슬 많은걸 구현하다보니 프로젝트 규모가 너무 커서 더이상 소스코드를 못올릴것 같다.

이걸 하나하나 올리기엔 글이 끝나지 않을것 같아서 앞으로는 소스코드는 안올리려고 한다.








이번 프로젝트로 JWT 말고도 마음가짐에도 많이 도움이 되었다.
저번프로젝트에서 JWT와 부수적인 기능만 추가되어서 난이도가 쉬울것같아서 미룬다는 안일한 생각을 갖고있었다.






현실에 안주하지말자. 자만하지말자. 토익이랑 정보처리기사 실기 볼생각하니까 어지럽다.

profile
개발하는 기록자

0개의 댓글