프로젝트 이름: bedelivery
개발 환경:
- Java: 17
- Spring Boot: 3.3.9
- 데이터베이스: PostgreSQL
- 개발 도구: Docker, Github
매장 등록 요청 (Owner)
- 매장 등록을 요청하기 위한 GET /api/stores/{userId} Controller 기능 구현.
- 응답 객체와 메시지, HttpStatus code를 같이 묶어서 응답할 수 있게 ApiResponseData 클래스 생성.
- 매장 등록을 요청할 시 enum 으로 정의한 Status.PENDING 으로 설정하게 함.
- 업종과 지역을 관리하는 엔티티 구현 (매장과 업종은 N:N 단방향 관계, 매장과 지역은 1:N 단방향 관계).
- 매장 등록 요청 사항을 먼저 저장한 뒤, 업종 테이블을 조회해서 가져온 데이터를 매장과 업종의 중간 테이블로 설정한 매장업종 테이블에 저장.
- 처음에 매장에 데이터를 저장할 때, 요청으로 보낸 업종 정보까지 한 번에 저장하려다 보니 findById()에서 null 값이 조회가 되는 문제 때문에 많은 시간을 고민했다.
- 매장 테이블에서 업종을 조회하기 때문에 업종 테이블에 매장(FK)을 추가한 뒤, 중간 테이블인 매장업종 테이블에 매장(PK)과 업종(PK)을 추가했음.
- 엔티티 연관 관계를 설정하고 CRUD 기능 구현이 처음이었기 때문에 많은 어려움이 있었다
특정 매장 목록 조회 (All)
- 특정 매장 목록을 조회하기 위해 GET /api/stores Controller 기능 구현.
- OPEN 상태의 매장만 조회할 수 있도록 매장 엔티티와 매핑한 Repository에 findByStatus()로 간단하게 조회 기능을 구현.
- stream API를 사용해서 응답객체를 반환함.
- 특정 매장을 조회 한다는 생각에 복잡하게 생각해서 시간을 많이 허비했음.
- 간단하게 구현하려다 보니 코드가 한 줄로 끝나서 불안함이 있었지만 응답 값은 잘 날아감.
- stream API 사용에 아직 익숙하지 않아서 계속 학습해야 함...
매장 상세 조회 (All)
- 매장을 상세 조회하기 위해 GET /api/stores/{storeId} Controller 기능 구현.
- 특정 매장의 메뉴 목록과 각 메뉴마다 달려있는 리뷰 목록을 응답할 수 있게 기능을 구현함.
- 매장, 메뉴, 리뷰 테이블의 연관 관계를 생각하며 진행 했어야 했기에 가장 어려움이 많았음.
- 하나의 dto 객체에 매장, 메뉴, 리뷰를 응답하기 위한 dto 데이터를 모아놓고 응답 처리함.
- 응답 값을 확인하기 위해 리뷰에 데이터 저장을 시도했지만 추후에 팀원분의 개발이 끝난 뒤 시도해봐야함. 현재는 리뷰 목록을 제외한 모든 응답 값이 정상적으로 날라감.
- 처음에는 하나의 dto로 모든 정보를 반환하기 위해 코드가 길어졌었지만, dto 객체를 나눈뒤 각각의 역할을 정하고 다시 모아서 보내는 방식을 선택함.
- 이미 삭제 또는 삭제 요청으로 처리 된 매장은 예외처리로 조회가 불가능하게 구현함.
매장 삭제 요청 (Owner)
- 매장 삭제를 요청하기 위해 DELETE /api/stores/{storeId} Controller 기능 구현.
- OWNER 권한을 가진 사용자만 본인의 매장을 삭제 요청할 수 있도록 SecurityConfig에 .hasRole()을 통해 로그인에 성공한 해당 사용자의 권한을 확인.
- 삭제를 요청한 뒤, 상태값을 DELETE_REQUESTED 로 수정함 (실제로 데이터베이스에 정보가 삭제되지 않게 처리)
- 실제로 데이터베이스에 삭제되지 않고 삭제 기능을 구현해야 하는지 감이 잡히지 않아서 어려움이 많았음.
- 데이터베이스에서 조회할 때 상태값으로 조건을 걸어서 조회가 불가능하게 기능을 구현하기로 생가함.
매장 수정 요청 (Owner)
- 매장 수정 사항을 요청하기 위해 PUT /api/stores/{storeId} Controller 기능 구현.
- 수정을 요청해야 하기 때문에 수정 사항을 저장해놓을 데이터베이스를 생성.
- 수정을 요청한 뒤, 상태값을 UPDATE_REQUESTED 로 수정함. (데이터베이스에선 상태값만 바뀜)
- 기존 매장 테이블의 컬럼을 늘려서 수정사항을 저장할까 고민하거나, Map 자료구조를 사용해서 데이터를 저장해 놓을까 고민했지만 모두 실패함...
- 요청 사항만 담아놓을 테이블을 생성해서 추후에 승인이 나면 기존 매장 테이블에 수정사항을 저장시키는 방법을 선택함.
'🔥 스파르타 TIL (프로젝트)' 카테고리의 다른 글
두 번째 프로젝트 기록하기 1 (1) | 2025.03.22 |
---|---|
NAVER Geocoding API 사용해서 위도, 경도 추가하기 (0) | 2025.03.19 |
Slack API 적용해서 사용자에게 DM 보내는 기능을 만들어보자 (0) | 2025.03.18 |
프로젝트 기록하기 3 (1) | 2025.02.20 |
프로젝트 기록하기 2 (0) | 2025.02.19 |