본문 바로가기

프로젝트

Spring ToDo project

1. 프로젝트 개요

2. 프로젝트 요구 명세서

3. 개발 인원

4. 개발 기간

5. 개발 언어

6. 개발 환경

7. 느낀 점

8. GitHub URL

1. 프로젝트 개요

  • 스파르타 코딩클럽 내일 배움 캠프 Spring_3기 Spring 숙련 1주 차 개인과제
  • ToDo 서비스를 구상하여 할 일카드 생성, 조회, 수정, 삭제 및 댓글 생성, 수정, 삭제등을 할 수 있다.
  • JPA, Spring Boot로 서비스 구현

2. 프로젝트 요구 명세서

회원가입 API

  • username, password를 Client에서 전달받기
  • username은 최소 4자 이상, 10자 이하이며 알파벳 소문자(az), 숫자(09)로 구성되어야 한다.
  • password는 최소 8 자 이상, 15자 이하이며 알파벳 대소문자(az, AZ), 숫자(0~9)로 구성되어야 한다.
  • DB에 중복된 username이 없다면 회원을 저장하고 Client로 성공했다는 메시지, 상태코드 반환하기

로그인 API

  • username, password를 Client에서 전달받기
  • DB에서 username을 사용하여 저장된 회원의 유무를 확인하고 있다면 password 비교하기
  • 로그인 성공 시, 로그인에 성공한 유저의 정보와 JWT를 활용하여 토큰을 발급하고,
  • 발급한 토큰을 Header에 추가하고 성공했다는 메시지, 상태코드 와 함께 Client에 반환하기

할 일카드 작성 기능 API

  • 토큰을 검사하여, 유효한 토큰일 경우에만 할 일 작성 가능\
  • 할 일 제목, 할 일 내용, 작성일을 저장할 수 있습니다.
  • 할 일 할 일 제목, 할 일 내용을 저장하고
  • 저장된 할 일을 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에 반환하기

추가 요구사항

  • 전체할 일카드 목록에서 완료된 카드들은 숨김처리 하는 기능을 추가해 주세요!
  • 할 일카드를 작성자만 볼 수 있도록 비공개하는 기능을 추가해 주세요!
  • 할 일카드 제목으로 검색하여 목록을 출력하는 기능을 추가해 주세요!
  • AccessToken, RefreshToken에 대해 구글링해 보고 RefreshToken을 적용해 보세요!
  • 프로젝트에 swagger를 구글링해 보고 적용해 보세요!
  • swagger란? Open Api Specification(OAS)를 위한 프레임워크입니다. API들이 가지고 있는 스펙(spec)을 명세, 관리할 수 있으며, 백엔드와 프런트엔드가 협업할 때 사용할 수 있습니다!

3. 개발 인원

  • 1명

4. 개발 기간

  • 개발 시작 일자 : 2023년 11월 15일
  • 개발 완료 일자 : 2023년 11월 20일

5. 개발 언어

  • Java
  • OpenJDK version 17.0.8.1
  • Spring Boot 3.1.5
  • mysql 8.0.28

6. 개발 환경

  • IntelliJ IDEA Ultimate

7. 느낀 점

이번 프로젝트를 진행하면서 해결하기 어려웠던 문제점은 바로 JWT, Entity 연관관계, Exception 부분에서 고생을 많이 했다.

JWT 부분의 경우 JWT전반적인 지식의 부족이 너무 컸다. 특히 토큰에 대한 이해가 부족하여 프로젝트 내내 이해가 안 돼서 프로젝트의 전반적인 진행에 대부분의 시간을 사용했다.

Entity의 연관관계에서는 1:M, N:M 관계에서의 FK PK 설정에 대해서 이론만 배우고 실제로 적용하는 과정에서 막상 다른 응용에 대한 관계를 이해하려다 보니 적용하기가 힘들었다.

마지막으로 Exception부분에서 평소 try catch를 통한 예외처리를 진행하다가 이번 프로젝트에 새롭게 @ExceptionHandelr를 사용해 글로벌 예외처리를 진행해 봤다. 여러 블로그를 보면서 Custom Exception에 대해서 봤지만 사람마다 예외처리를 하는 방식이 달라서 정보를 볼 때마다 더 헷갈렸다. 그래서 튜터님의 도움으로 하나의 방식을 공부하고 적용하여 프로젝트를 마무리했다.

이번 프로젝트에서는 여러 도움과 조언을 받아서 프로젝트를 진행했고 머리를 쥐어짜면서 될 때까지 보고 물어보고 했던 프로젝트였다. 덕분에 위와 같이 많은 것을 배웠고 하고 나니 자신감이 생겼다.

8. GitHub URL

https://github.com/jshstar/project-todo

'프로젝트' 카테고리의 다른 글

Spring newsfeed project  (0) 2023.11.28
Spring newsfeed team project -KPT회고  (0) 2023.11.27
Spring Board project  (0) 2023.11.06
Java Team Project Hotel KPT회고  (0) 2023.10.31
Java Team Project Hotel  (0) 2023.10.31