Spring Boot를 활용해서 리뷰의 기본 CRUD 기능을 구현했습니다.
어떻게 구성하는지 간단하게 기록해 보도록 하겠습니다.
기본 아키텍처는 Controller 와 Service, Repository, Entity, DTO로 구성되어 있습니다.
Repository는 JPA를 활용하여 DB와 직접 소통하는 클래스입니다.
Entity를 사용해서 직접 소통하며, JPA는 기본 CRUD를 제공하기 때문에 직접 SQL 쿼리문을 작성할 필요가 없습니다.
만약에 성능 또는 커스텀이 필요하다면 @Query 어노테이션을 사용하여 JPQL 문을 사용하면 됩니다.

JpaRepository를 상속받아 사용하고, 타입은 <Entity, pk타입>을 입력해 줍니다.
직접 메서드 작성을 안 해도 되지만 주석을 사용하여 어떤 메서드를 사용했는지 남겼습니다.

이렇게 @Query 어노테이션을 사용하여 직접 원하는 데이터 값을 가져올 수 있습니다.
Repository를 모두 구현했다면 이제 Service를 클래스를 사용하여 원하는 기능을 구현합니다.


리뷰 등록 기능을 구현했습니다.
Service에서 기능을 구현할 때 예외 상황을 먼저 생각을 하고 예외 상황이 발생했을 때 어떻게 해야 할 건지를 코드 작성 했습니다.
클라이언트에서 ReviewDTO 데이터 값과 이미지 파일, 리뷰를 작성한 사용자의 memberNo를 받아 옵니다.
그리고 예외 상황을 미리 예상해 보면, 1. 구매 내역이 없는 사용자 2. 주문한 사용자와 로그인한 사용자 일치 확인 등등 을 생각했습니다.
클라이언트에서 받아온 ReviewDTO를 DBMS와 소통해야 하기 때문에 Entity로 변경합니다.
그리고 이미지와 태그를 따로 테이블에 저장을 한 후 reviewNo를 다시 반환해줍니다.

리뷰 조회는 수정 페이지에서 정보를 불러오는 것과 상품 페이지에서 리뷰 목록을 불러오는 것 이렇게 2 기능을 구현했습니다.
클라이언트에서 reviewNo를 받으면 예외가 생길 경우 "리뷰 조회 에러"를 띄웁니다.
ReviewDTO 클래스 안에 있는 toDto() 메서드를 활용해서 DB에서 가져온 데이터를 (Entity타입) DTO로 변환하고 클라이언트에 보냅니다.
리뷰 목록도 같은 맥락입니다. 리뷰 목록에서는 stream를 사용해서 작업을 진행했습니다.

리뷰 삭제는 간단합니다. 해당 reviewNo를 클라이언트에서 받아온 뒤에 .deleteById(reviewNo) 메서드를 사용해서 삭제하면 됩니다.
삭제 메서드도 마찬가지로 예외 상황을 고려하여 대비해주고, 리뷰 정보에 같이 있는 태그와 이미지도 같이 삭제해줍니다.

리뷰 업데이트는 등록과 비슷합니다.
예외 상황 대비하여 코드를 작성하여 클라이언트에서 받은 데이터를 .update()메소드를 통해 DB에 넣어줍니다.
Service 클래스에 원하는 기능을 다 만들었다면 이제 클라이언트와 소통하는 Controller를 구성해야 합니다.
클라이언트와 서버는 API를 통해 소통을 합니다.

위 사진에 PostMapping("/reviews") 이렇게 작성했는데 "/reviews"는 진짜 URL이 아니라 클라이언트와 소통하는 경로입니다.
@RequestPart 어노테이션은 여러 파일을 받기 위한 매핑 어노테이션입니다.
value = "files" name이 files인 List 형태의 파일들을 받고, required = false 이므로 파일이 없어도 에러가 생기지 않고 서버에 빈 상태 그대로 저장합니다. 그리고 Spring JWT로 로그인이 구현되어 있어 token을 받아 사용하기 때문에 위 사진처럼 예외 상황을 대비하여 코드를 작성했습니다.
'개발 > 백엔드' 카테고리의 다른 글
| [Spring Boot] IoT 실시간 모니터링: SSE 통신 원리와 Optional 리팩토링 경험기 (1) | 2026.04.16 |
|---|---|
| [JPA/Spring] 엔티티 설계의 정석: @NoArgsConstructor(access = AccessLevel.PROTECTED)와 @Builder의 조화 (0) | 2026.03.11 |
| 멀티캠퍼스 [현대 이지웰] 인터페이스 기반 프로젝션이란? (0) | 2025.11.24 |
| 멀티캠퍼스 [현대 이지웰] Spring 어노테이션 기록하기 (0) | 2025.11.18 |
| 멀티캠퍼스 [현대 이지웰] Spring Security Login에 대해서 알아보자! (0) | 2025.10.21 |