본격적으로 API의 기본 뼈대를 구성했습니다.
User, Restaurant, Review 세 가지 핵심 도메인에 대해 CRUD(Create, Read, Update, Delete) 기능을 설계하고 구현했습니다.
📌 도메인별 엔티티 구성
- User: username, email, password, created, deleted
- Restaurant: name, address, category, mapUrl, avgRating, created, deleted
- Review: user, restaurant, rating, comment, created, modified, deleted
삭제는 soft delete 방식을 채택했습니다.
🛠️ 개발 중 마주친 이슈와 해결 과정
1. created 필드 타입 충돌
- 초기엔 created를 String으로 선언하고 System.currentTimeMillis()로 값 넣었는데,
→ MySQL DATETIME 컬럼과 충돌하여 500 에러 발생 - 해결: LocalDateTime으로 타입 변경 후 LocalDateTime.now() 사용
2. @NotNull vs @NotBlank 구분
- ReviewRequest DTO에서 userId, restaurantId에 @NotBlank를 쓰려다 오류
→ 기본 타입 외 객체(Long 등)는 @NotNull 사용이 맞음 - 반면, comment는 문자열이므로 @NotBlank로 처리
3. @Transactional 누락
- UserServiceImpl에는 @Transactional이 있었으나,
ReviewServiceImpl에서는 누락되어 rollback 불가능한 구조였음
→ 변경/저장 로직에는 꼭 @Transactional 추가
4. 컨벤션 통일 리팩토링
- 메서드명, 변수명 통일: createUser, createRestaurant, createReview
- 서비스 인터페이스와 구현체의 메서드명 일관성 유지
🧪 API 테스트 – Postman으로 진행
- 각 엔드포인트에 대해 POST, GET, PUT, DELETE 모두 테스트
- Postman Collection 기능으로 요청들을 정리하여 편리하게 관리
- 실제 존재하는 ID가 필요하기 때문에 연계된 도메인 순서대로 테스트함
📂 디렉토리 구조 개선
기존:
service/ UserServiceImpl.java RestaurantServiceImpl.java
리팩토링 후:
service/user/UserServiceImpl.java service/restaurant/RestaurantServiceImpl.java ...
→ 도메인 기준으로 폴더 분리, 협업 및 유지보수에 유리한 구조로 변경
✅ 해야할 BE 작업들..
1. JWT 로그인 구현 (회원가입 + 로그인)
2. Spring Security로 인증 추가
3. 리뷰 작성 → 로그인 유저만 가능하게
4. 예외처리 + 응답 포맷 통일
5. 페이징 & 정렬
6. Swagger & 테스트
7. 배포 or CI/CD
GitHub 링크
👉 https://github.com/Peter-Park95/solo-michelin-backend
GitHub - Peter-Park95/solo-michelin-backend
Contribute to Peter-Park95/solo-michelin-backend development by creating an account on GitHub.
github.com
'Project > 나혼자 미슐랭' 카테고리의 다른 글
나혼자 미슐랭 개발일지 #4 – 리뷰 작성과 리스트 페이지 완성(무한스크롤 & 필터) (3) | 2025.05.15 |
---|---|
나혼자 미슐랭 개발일지 #3 – 프론트 초기화부터 리뷰 리스트 완성까지 (1) | 2025.05.13 |
나혼자 미슐랭 개발일지 #1 - 개발환경 세팅 & DB 연결 (0) | 2025.05.05 |
나혼자 미슐랭 – DB 설계 정리 (0) | 2025.04.29 |
나혼자 미슐랭 – 요구사항 명세서 (1) | 2025.04.22 |