1. 프로젝트 개요
- 스파르타 코딩클럽 내일 배움 캠프 Spring_3기 Spring 입문 1주 차 개인과제
- board 서비스를 구상하여 게시글 생성, 조회, 수정, 삭제등을 할 수 있다.
- JPA, Spring Boot로 서비스 구현
2. 프로젝트 요구 명세서
게시글 작성 기능
- 제목, 작성자명, 비밀번호, 작성 내용, 작성일을 저장할 수 있습니다.
- 저장된 게시글의 정보를 반환받아 확인할 수 있습니다.
- 반환받은 게시글의 정보에 비밀번호는 제외되어있습니다.
선택한 게시글 조회 기능
- 선택한 게시글의 정보를 조회할 수 있습니다.
- 반환받은 게시글의 정보에 비밀번호는 제외되어있습니다.
게시글 목록 조회 기능
- 등록된 게시글 전체를 조회할 수 있습니다.
- 반환 받은 게시글의 정보에 비밀번호는 제외 되어있습니다.
- 조회된 게시글 목록은 작성일 기준 내림차순으로 정렬되어있습니다.
선택한 게시글 수정 기능
- 선택한 게시글의 제목, 작성자명, 작성 내용을 수정할 수 있습니다.
- 서버에 게시글 수정을 요청할 때 비밀번호를 함께 전달합니다.
- 선택한 게시글의 비밀번호와 요청할 때 함께 보낸 비밀번호가 일치할 경우에만 수정이 가능합니다.
- 수정된 게시글의 정보를 반환받아 확인할 수 있습니다.
- 반환받은 게시글의 정보에 비밀번호는 제외되어있습니다.
선택한 게시글 삭제 기능
- 선택한 게시글을 삭제할 수 있습니다.
- 서버에 게시글 삭제를 요청할 때 비밀번호를 함께 전달합니다.
- 선택한 게시글의 비밀번호와 요청할 때 함께 보낸 비밀번호가 일치할 경우에만 삭제가 가능합니다.
추가 요구사항
선택한 게시글 수정 및 삭제 요청 시 비밀번호가 일치하지 않을 경우 API 요청 실패(예외상황)에 대해 판단할 수 있는 Status Code, Error 메시지등의 정보를 반환합니다.
3. 개발 인원
- 1명
4. 개발 기간
- 개발 시작 일자: 2023년 11월 4일
- 개발 완료 일자: 2023년 11월 6일
5. 개발 언어
- Java
- OpenJDK version 17.0.8.1
- Spring Boot 3.1.5
- mysql 8.0.28
6 개발 환경
- IntelliJ IDEA Ultimate
7. 개발 시 주요 고민
프로젝트를 진행하면서 Spring을 시작한 지 얼마 안 됐기 때문에 Controller, Service, Repository클래스에 맞는 기능을 설계하는 것이 아직은 서툴러 어려운 부분이 있지만 최대한 각 클래스 계층에 맞게 설계하기 위해 노력했다.
추가 요구 사항에 있는 예외 처리 부분에 대해서 Controller 부분에서 예외처리를 할지 Service 부분에서 예외처리를 할지 고민했다.
8. 고민에 대한 해결
Controller에는 RESTful API를 설계하기 위해 JSON 형식의 Body Request를 설계하였고 브라우저 요청 API 따른 게시글 생성, 조회, 수정, 삭제에 대한 기능을 구현을 진행했다.
생성은 Post API , 조회는 전체 조회와 선택조회가 있고 Get API로 설정하여 전체조회는 요청만으로 확인 가능하고 선택조회는 게시판 번호를 통해 확인 가능하도록 했다.
수정은 PUT API를 통해 진행하였으며 게시글의 번호와 수정할 내용들을 필요로하게끔 설계 및 프로젝트 요구사항에 맞춰서 PW와 일치해야 요청이 가능하도록 설계하였다.
마지막으로 삭제는 Body 입력이 아닌 Path Variable형식으로 요청 API를 설계하였다.
Controller에서는 요청 API에 따라 DTO 클래스를 통해 값을 Service로 전달했다.
Service 부분에서는 Controller에서 요청된 API에 따라 DTO를 통해 수신받고 API에 맞는 메서드를 통해 데이터를 전달받아 기능 수행 후에 Entity에 값을 전달하여 Repository에 안정적으로 값을 전달한다.
마지막으로 전달받은 값을 Repository에서 DB에 저장하여 요청된 데이터 처리를 완료하는 구조이다. 응답은 요청의 역순으로 들어간다.
예외처리에 대한 고민을 했을 때 Service에서 처리할지 Controller에서 처리할지 상당히 많은 고민을 했다. 만약 Service에 예외처리를 했다면 요청에 대한 응답 예외처리를 Controller에서 한 번 더 받아야 했기에 구조상 코드가 복잡하지 않게 작성하는 것이 중요하다고 생각하여 Controller에서 처리하는 것으로 코드를 작성했다.
예외처리 부분은 ResponseEntity를 통해 클라이언트에 요청된 값이 잘못된 값이라면 메시지와 HTTP 상태코드를 클라이언트에게 송신하여 잘못된 요청에 대한 응답을 했다.
9. 느낀 점
이번에 Spring과제를 수강하고 처음 진행한 프로젝트여서 그런지 구조와 기능을 알고 프로젝트를 진행했다기보다 강의내용을 참고하여 구멍 난 지식을 통해 프로젝트를 진행한 느낌이 들어 좀 아쉬운 부분이 강했다. 완성한 프로젝트를 다시 한번 리펙토링 하면서 각 API에 대한 기능과 Spirng이 처리하는 과정을 확인 및 복습하는 시간을 할당하여 Spring에 대한 사용에 익숙해져야겠다는 생각을 가졌다.
10. GitHub URL
https://github.com/jshstar/project-board
'프로젝트' 카테고리의 다른 글
Spring newsfeed team project -KPT회고 (0) | 2023.11.27 |
---|---|
Spring ToDo project (0) | 2023.11.21 |
Java Team Project Hotel KPT회고 (0) | 2023.10.31 |
Java Team Project Hotel (0) | 2023.10.31 |
Java Project Kiosk (0) | 2023.10.30 |