서비스 링크 : https://mini-team-7.vercel.app/
야놀자 | 야놀자 클론코딩 사이트
mini-team-7.vercel.app
깃허브 링크: https://github.com/orgs/YBE-7/repositories
YBE-MiniProject-7
미니프로젝트 7조입니다. YBE-MiniProject-7 has 3 repositories available. Follow their code on GitHub.
github.com
1. 미니 프로젝트 개요
- 프로젝트 기간 : 11/20(월)~12/01(금), 2주간
- 프로젝트 정의 : 이번 미니 프로젝트는 숙박 예약 서비스를 완성시키는 것. 단 필요한 설계는 팀별로 직접 구성하도록 했다.
- 필수 구현 기능 : 회원가입/로그인/상품조회/장바구니 기능/주문 기능/주문 내역 조회 등
- 백엔드 요구사항 : REST API로 구현하여 JSON 형식으로 데이터 출력할 것/ Spring Security 사용할 것/Open API 활용할 것 등
- 프로젝트 세팅
> 1. Java 버전 : 17
> 2. 빌드 & 빌드 도구 : Gradle
> 3. Git 브랜치 전략 : Feature Branch → Develop Branch → Main Branch
- 기술 스택
2. 미니 프로젝트 init
미니 프로젝트는 프론트엔드 개발자 4명, 백엔드 개발자 4명으로 구성되었다. 나는 백엔드 개발자로서 프로젝트에 참여했었고, 기간이 비교적 짧았기 때문에 지연없이 빠르게 프로젝트를 완성시키는 것이 중요했다.
부트캠프 측에서는 ZEP을 활용하여 미팅하라고 권고했지만, 우리는 디스코드로 도망(?)쳐서 진행했다. 이유는 디스코드가 음질이 더 깔끔하고, 안 끊기고, 주변 잡음을 필터링해주는 등 기능이 압도적으로 좋기 때문!
대부분의 회의는 여기서 진행했다. 백엔드/프론트엔드 회의방을 구분할 수 있었어서 공간 분리가 된다는 점 또한 인상적이었다.
첫 설계 회의를 진행하면서 백엔드에서 WBS와 ERD를 설계했다.
처음 ERD는 꽤 간단했었는데, 프론트엔드와 의견을 주고 받으면서 구체화 시켜나갈 수 있었다.
아래가 최종 버전인데,,많이 바뀌긴했다.. 그래도 개발 전에 테이블 구조를 얼추 잡을 수 있어서 다행이었음...
ERD를 설계하면서 크게 회원 / 숙소 / 객실타입 / 장바구니 / 주문내역 도메인으로 나눴다.
나는 그중 멤버 도메인을 맡아서 Spring Security를 설정하는 부분을 맡았고, 이번 프로젝트는 서버 배포까지 했어야하는 프로젝트였기에 AWS EC2,RDS 등 서버 배포까지 맡아서 진행했다.
3. 개발 진행
기능 개발에는 거의 참여를 안했지만, 멤버 도메인에서 작성한 부분을 예시로 설명하겠다.
크게 마이페이지에서 사용자 정보를 불러오는 기능과 아이디 찾기 기능을 개발하였는데, 아이디 찾기의 경우, 미니 프로젝트 보완 기간(지금)에 추가로 개발한 부분이라 따로 화면 단에는 반영되어 있지 않다.
마이페이지 불러오는 기능의 경우 정말 간단한 기능인데,
위 사진 처럼 이름하고 로그인한 이메일 불러오도록 하는 기능이다.
다른 기능 또한 어떻게 개발했는지 간단히 설명하자면,
1. 로그인/회원가입 기능
> 1. 기본 정보는 ID 역할로 이메일 주소와, 비밀번호, 이름
> 2. 이메일과 비밀번호로 로그인할 수 있음
> 3. 회원 정보를 저장해둔 데이터베이스를 검색하여 해당 사용자가 유효한 사용자 인지 판단
> 4. 상품 조회(전체, 개별), 회원 가입은 로그인 없이 사용 가능
> 5. 이 외 기능은 로그인이 필요
### 2. 전체 상품 조회 기능
> 1. 데이터베이스에서 전체 상품 목록을 조회
> 2. 재고에 따라 품절일 경우, 품절로 표시
> 3. 카테고리를 분류하여, 상품을 출력
### 3. 개별 상품 조회 기능
> 1. 전체 상품 목록에서 특정 상품 이미지를 클릭하면 해당 상품에 대한 상세 정보를 상품에 저장해 둔 데이터베이스에서 가져옴
> 2. 특정 숙박업소 하위에 예약 가능한 객실 리스트를 제공
### 4. 장바구니 담기 기능
> 1. 장바구니에 담긴 상품 데이터에 대한 상품별 구매 금액, 전체주문 합계 금액 등을 계산
> 2. 체크 박스를 통해 결제할 상품을 선택/제외할 수도 있음
> 3. 주문하기 버튼을 통해 주문/결제 화면으로 이동
### 5. 주문하기 기능
> 1. 사용자가 주문하기를 클릭하면 사용자 계정에 따른 주문 정보를 저장
> 2. 주문 리스트를 마이페이지에서 확인 가능
> 3. 사용자가 정상적으로 상품을 주문하면 해당 상품의 주문 가능 개수가 감소
이처럼 각 기능을 어떻게 개발했는지 살펴보았고,,
4. 개발 마무리 및 보완
발표 또한 무사히 잘 마쳤고, 보완 기간 동안 보완한 내용에 대해 간단히 설명하려 한다.
1. Lock에 Redis 적용
> 1. 기존 MySQL namedlock을 이용해서 주문의 동시성 처리를 했던 반면, Redis의 redisson을 이용해서 동시성 처리하는 것으로 변경
> 2. 이유는 서버가 Scale-out 되었을때도 동시성 처리를 할 수 있고, redisson을 이용하면 쉽게 락을 구현할 수 있기 때문
> 3. 이 후 테스팅을 진행해본 결과, 제대로 동시성 처리가 됨을 확인
2. 아이디 찾기 기능 추가(위에서 언급한 내용)
> 1. 사용자가 회원가입 시 등록한 휴대폰 번호를 기반으로 ID(email)을 찾을 수 있는 기능을 추가
> 2. 휴대폰 번호는 유일 값으로 DB에 등록하여 중복을 방지
이번 프로젝트를 진행하면서 AWS 서버를 통해 배포까지 해보는 경험을 할 수 있었기에, 스스로 온전히 배포를 할 수 있는 실력을 얻었다고 생각한다. 또한 다같이 밤새가며 https를 위해 AWS 로드 밸런서를 사용해본 경험이 가장 기억에 남고, 기능 구현할 때 api 공통 포맷을 활용하여 설계한 경험을 통해 설계 기반을 쌓을 수 있었다.
아무래도 모두 각자의 역할을 잘 수행해줬기 떄문에 좋은 기억만 얻은 채 프로젝트를 마무리할 수 있었던 것 같다!!
'Development > BootCamp' 카테고리의 다른 글
패스트캠퍼스X야놀자 백엔드 부트캠프_전체 과정 회고 (3) | 2024.02.12 |
---|---|
패스트캠퍼스X야놀자 백엔드 부트캠프_파이널 프로젝트 회고 (0) | 2024.01.21 |
패스트캠퍼스X야놀자 백엔드 부트캠프_중간 회고 (0) | 2023.11.17 |
패스트캠퍼스X야놀자 백엔드 부트캠프_토이 프로젝트(2차) 후기 (2) | 2023.11.06 |
패스트캠퍼스X야놀자 백엔드 부트캠프_강사 및 멘토 후기 (6) | 2023.10.27 |