Skip to content

feat: PLI-9-1-1 리뷰 생성 api#45

Closed
chldPDms wants to merge 2 commits intodevelopfrom
feature-PLI-9-1-1
Closed

feat: PLI-9-1-1 리뷰 생성 api#45
chldPDms wants to merge 2 commits intodevelopfrom
feature-PLI-9-1-1

Conversation

@chldPDms
Copy link
Copy Markdown
Contributor

@chldPDms chldPDms commented Apr 2, 2026

  • 리뷰 생성 api
  • 이미지 생성 api랑 파일 서버 구축 확인 후 일부 수정 예정

Copy link
Copy Markdown
Member

@pinomaker-hoo pinomaker-hoo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 리뷰: feat: PLI-9-1-1 리뷰 생성 API

🔴 치명

1. ErrorCode 열거형 이름과 코드 문자열 불일치

ErrorCode.java:23 — 열거형 이름은 VISITED_PLACE_NOT_FOUND인데 code 문자열은 "PLACE_NOT_FOUND"로 되어 있어 기존 PLACE_NOT_FOUND와 충돌하거나 디버깅 시 혼동을 유발합니다.

VISITED_PLACE_NOT_FOUND(HttpStatus.NOT_FOUND, "PLACE_NOT_FOUND", ...)
//                                             ^^^^^^^^^^^^^^^^ "VISITED_PLACE_NOT_FOUND"여야 함

2. 방문 기록 소유자 검증 시 부적절한 에러코드

ReviewService.java:50-52, 54-56 — 다른 사용자의 방문 기록으로 리뷰를 작성하려는 시도는 **권한 문제(FORBIDDEN/UNAUTHORIZED)**이지, 잘못된 입력(INVALID_INPUT)이 아닙니다. 클라이언트가 원인을 파악할 수 없고, 보안 관점에서도 접근 제어 위반과 입력 오류를 구분해야 합니다.

3. 중복 리뷰 방지 로직 부재

ReviewService.java:36-68 — 동일 사용자가 같은 visitedPlace에 대해 리뷰를 여러 번 생성할 수 있습니다. 비즈니스 요구사항에 따라 다르지만, 일반적으로 방문 기록당 1개 리뷰가 자연스럽습니다. DB unique 제약조건이나 서비스 레벨 검증이 필요합니다.


🟡 설계

4. ReviewCreateRequestDto에 미사용 import 존재

ReviewCreateRequestDto.java:8-11User, Place, Review, VisitedPlace, LocalDate import가 있지만 DTO 내에서 전혀 사용되지 않습니다. toEntity() 메서드를 위해 남겨둔 것으로 보이나, 현재 상태에서는 제거해야 합니다.

5. ReviewCreateResponseDto에 불필요한 validation import

ReviewCreateResponseDto.java:4 — Response DTO에 jakarta.validation.constraints.* import가 있지만 validation 어노테이션을 사용하지 않습니다. LocalDate import도 미사용입니다.

6. 파일 끝 개행문자 누락

ReviewService.java:76 — diff에 No newline at end of file 경고가 표시됩니다. 파일 끝에 개행문자를 추가해야 합니다.

7. ReviewImageRepository 제거됨

ReviewService.java — 기존에 주입받던 ReviewImageRepository가 삭제되었습니다. PR 설명에 이미지 관련 수정이 예정되어 있다고 했는데, 향후 다시 추가할 예정이라면 괜찮지만 확인이 필요합니다.

8. 컨트롤러에 @ApiErrorExceptionsPLACE_NOT_FOUND 중복 표기

ReviewController.java:28-29ErrorCode.PLACE_NOT_FOUNDErrorCode.VISITED_PLACE_NOT_FOUND를 모두 나열했는데, 1번 이슈에서 언급한 것처럼 두 에러의 code 문자열이 동일하여 Swagger 문서에서 혼란을 줄 수 있습니다.

9. 서비스 메서드의 Javadoc

ReviewService.java:30-35 — 프로젝트 코딩 컨벤션에서 주석을 최소화하라고 되어 있습니다. 메서드 시그니처만으로 충분히 이해 가능한 내용이므로 Javadoc 제거를 고려하세요.


🟢 칭찬

  • 도메인 패키지 구조 준수: controller → service → repository 계층 구조와 DTO 분리를 잘 따르고 있습니다.
  • 방문 기록 소유권 검증: 다른 사용자의 방문 기록으로 리뷰를 작성하는 것을 차단하는 로직이 있어 좋습니다 (에러코드만 수정 필요).
  • @Valid + DTO validation: 입력값 검증을 어노테이션 기반으로 깔끔하게 처리했습니다.
  • @Transactional 적절한 사용: 클래스 레벨 readOnly=true, 쓰기 메서드에만 @Transactional 오버라이드하는 패턴을 올바르게 적용했습니다.

@chldPDms chldPDms closed this Apr 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants