1. 프로젝트 개요
- 스파르타 코딩클럽 내일 배움캠프 Spring_3기 심화주차 팀프로젝트 과제
- 백오피스 아이디어를 통한 어플리케이션 서비스를 구상 각 기능들을 통해 생성, 조회, 수정, 삭제 기능등을 할 수 있다.
- JPA, Spring Boot로 서비스 구현
2. 프로젝트 요구 명세서
필수 구현 기능
- [x] **사용자 인증 기능**
- 회원가입 기능
- username, password를 Client에서 전달받기
- username은 `최소 4자 이상, 10자 이하이며 알파벳 소문자(a~z), 숫자(0~9)`로 구성되어야 한다.
- password는 `최소 8자 이상, 15자 이하이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9), 특수문자`로 구성되어야 한다.
- DB에 중복된 username이 없다면 회원을 저장하고 Client 로 성공했다는 메시지, 상태코드 반환하기
- 회원 권한 부여하기 (ADMIN, USER) - ADMIN 회원은 모든 게시글, 댓글 수정 / 삭제 가능
- 로그인 및 로그아웃 기능
- username, password를 Client에서 전달받기
- DB에서 username을 사용하여 저장된 회원의 유무를 확인하고 있다면 password 비교하기
- 로그인 성공 시, 로그인에 성공한 유저의 정보와 JWT를 활용하여 토큰을 발급하고,
발급한 토큰을 Header에 추가하고 성공했다는 메시지, 상태코드 와 함께 Client에 반환하기
- [x] **프로필 관리**
- 프로필 수정 기능
- 이름, 한 줄 소개와 같은 기본적인 정보를 볼 수 있어야 하며 수정할 수 있어야 합니다.
- 비밀번호 수정 시에는 비밀번호를 한 번 더 입력받는 과정이 필요합니다.
- 최근 3번안에 사용한 비밀번호는 사용할 수 없도록 제한합니다.
- [x] **주문 CRUD 기능**
- 주문 작성, 조회, 수정, 삭제 기능
- 게시물 조회를 제외한 나머지 기능들은 전부 인가(Authorization) 개념이 적용되어야 하며 이는 JWT와 같은 토큰으로 검증이 되어야 할 것입니다.
- 예컨대, 내가 작성한 글을 남이 수정하거나 삭제할 수는 없어야 하고 오로지 본인만 수정/삭제 할 수 있어야겠죠?
- 전체 게시글 정보를 조회하는 기능도 필요합니다.
- 배달앱일 경우 : 주문 작성, 조회, 수정, 삭제 기능
- 배달앱의 경우 주문이 게시글이 될것이고 주문목록이 게시판이 될 것 입니다. 주문한 사람만 메뉴를 수정/삭제할 수 있어야겠죠?
- [x] **리뷰 CRUD 기능**
- 리뷰 작성, 조회, 수정, 삭제 기능
- 배달앱의 경우 주문자 들만 주문건에 대해서 리뷰를 생성 할 수 있어야 합니다.
- 주문자만 해당 리뷰를 수정/삭제할 수 있어야 합니다.
선택 구현 기능
- [x] **백오피스 만들어보기** **[⭐](https://emojipedia.org/star/)**
- **백오피스** 란 서비스를 제공하기 위하여 상품을 등록하고 마케팅을 설정하고 결제와 매출, 수익 등을 관리하는 서비스를 제공하는 페이지입니다.
- 일반적으로 관리자 사이트, ERP 도구 등으로 표현됩니다.
- 저희는 간단하게 관리자 페이지를 만든다고 생각하면 좋습니다.
- 유저 전체 목록을 조회하고 권한을 수정/삭제하며 관리할 수 있습니다.
- 게시글, 댓글 전체 목록을 조회하고 수정/삭제하며 관리할 수 있습니다.
- 배달앱이라면 메뉴, 주문, 리뷰 전체 목록을 조회하고 생성/수정/삭제 기능을 통해 관리할 수 있습니다.
- [x] 가게 관리 - 메뉴 추가, 수정, 삭제, 매출
- [x] 리뷰 관리
- [x] 장바구니 목록 관리
- [x] 좋아요 목록 관리
- [x] **좋아요 기능**
- 게시물 및 댓글 좋아요/좋아요 취소 기능
- 사용자가 게시물이나 댓글에 좋아요를 남기거나 취소할 수 있어야 합니다.
- 이 때, 본인이 작성한 게시물과 댓글에 좋아요는 남길 수 없도록 해봅니다!
3. 개발인원
- 4명
4. 개발기간
- 개발 시작 일자: 2023년 12월 5일
- 개발 완료 일자: 2023년 12월 9일
5. 개발 언어
- Java
- OpenJDK version 17.0.8.1
- Spring Boot 3.1.6
- mysql 8.0.28
6. 프로젝트 소개 및 목표
프로젝트 소개
- 김밥천국 배달앱 프로젝트
- 사용자가 원하는 가게의 음식을 장바구니에 담고 주문할 수 있게 도와주는 프로그램
프로젝트 목표
- 프로젝트 진행 시 단순 기능구현뿐만 아니라, 협업을 위한 깃 컨벤션과 코드스타일을 정하고, 코드의 재사용성 및 확장성을 고려하여 구현하는 것을 목표로 개발
- 팀원 간 적절한 논의를 통해 더 나은 구조로 개발할 수 있도록 노력함
- 개발하면서 서로 알게 된 정보를 을 공유하며 함께 성장할 수 있는 시간을 경험
7. 프로젝트 진행 및 고찰
이번 프로젝트에서는 배달앱을 통한 음식주문 프로그램을 만들어봤다. 초기 기획한 것은 키오스크와 비슷하게 기획했다.
늘 프로젝트 진행하던 것과 마찬가지로 첫날에 ERD, API명세서, 와이어프레임을 만들었다. 지금 와서 보면 확장 가능성을 염두에 두고 작성한 ERD는 아니지만 작성할 당시에는 그 자체만으로도 시간이 걸렸기 때문에 나름 구조를 잘 작성했다고 생각한다.
여기서 내가 맡은 파트는 메뉴 부분이었고 초기 메뉴를 입력하는 방식은 여러 개지만 그중에 내가 제일 입력하기 편한 방식으로 초기 데이터를 DB에 생성했다.
https://developer-backend.tistory.com/52
초기의 메뉴클래스는 구성이 간단해서 금방 마무리했고, 예외처리 관련된 부분을 작성했다. 예외처리는 CustomException으로 대부분의 특정 예외를 처리했지만 일부 보내고 싶은 특정 예외를 위해 GolbalException에 추가하고 테스트를 진행했지만 IllegalAccessException 부분에서 작성한 예외핸들러로 안 빠지고 프로그램 내부 어딘가로 빠져서 처리를 해버렸다.
이류를 찾으려고 했지만 생각보다 깊은 이유인지 아니면 필자의 검색능력이 아직 부족해서인지 원인은 찾지 못했다.
https://developer-backend.tistory.com/53
생각보다 팀원분들이 빨리 완성하셔서 회의를 통해 기능을 추가하기로 했다. 추가하기로 한 내용은 가게와 좋아요인데 문제는 추가를 위해선 키오스크 구조를 개편해야 되는 상황이라 고민이 많았다. 배달앱으로 전환하는 과정에서 가게정보에 대한 초기 입력 데이터의 추가가 필요했고, 또한 수정을 함과 동시에 기존에 작성했던 메뉴의 CRUD도 전반적으로 수정했다.
https://developer-backend.tistory.com/54
가게기능을 수정하면서 애플리케이션을 실행할 때 초기데이터를 입력하는 것이 아닌 실제로 관리자가 등록할 수 있도록 입력 방식을 변경했다. 이 과정에서 권한에 대한 설정을 다시 했다. 배달앱을 관리하는 권한을 ADMIN, 해당하는 가게의 주인의 권한을 MANAGER, 손님권한을 USER로 설정하여 기존의 권한에서 MANAGER 권한만 추가하여 가게의 등록은 ADMIN만 가능하도록 했다. MANAGER권한은 가게의 메뉴 CRUD만 가능하도록 했다.
https://developer-backend.tistory.com/55
8. 느낀 점
이번 프로젝트를 진행하면서 제일 많이 경험한 부분은 초기 파일데이터를 어떻게 입력을 시켜줄 수 있을지, 파일을 주면 어떤 방식으로 파일을 읽어서 DB에 저장할 수 있는지 권한설정을 통해 어디까지 기능을 허용해 줄 것인지를 주로 경험했다.
진행하면서 기존해했던 프로젝트를 바탕으로 경험을 많이 쌓아서 그런지 진행하는데 구조상의 고민은 있었지만 로직을 작성할 때 고민을 깊게 했던 적은 없던 것 같다. 이를 봤을 때 나 자신이 한 단계 성장해서 막힘이 없었던 건지는 모른다. 따라서 다음 프로젝트부터는 내가 작성하고 있는 로직이 올바른 방향인가에 대해서 심도 있게 고민해 보면서 로직을 작성할 것이다.
9. GitHub URL
https://github.com/Gimbap-heaven-A-2/Gimbap-heaven
10. YouTube URL
'프로젝트' 카테고리의 다른 글
Spring Trello 프로젝트 KPT 회고 (1) | 2024.01.03 |
---|---|
Spring 백오피스 프로젝트 KPT 회고 (0) | 2023.12.15 |
Spring newsfeed project (0) | 2023.11.28 |
Spring newsfeed team project -KPT회고 (0) | 2023.11.27 |
Spring ToDo project (0) | 2023.11.21 |