3줄 요약

  1. 새로 추가될 신고 기능을 위한 리뷰 스냅샷을 추가하면서 테스트 코드를 추가하려 했다.
  2. 테스트 코드를 공부하며 기존에 작성된 코드를 보니 OOP와 맞지 않게 서비스 코드에서 비즈니스 로직과 도메인 로직이 혼재되어 있었다.
  3. 책임을 분리 하여 각각의 로직을 처리 할 수 있게 리팩터링하고 테스트 코드를 추가해보자!

Untitled

토리의 리뷰 테이블은 PlaceReviewReviewImage 두 개의 테이블로 구성되어 있다.

PlaceReview 테이블은 리뷰에 대한 기본적인 정보를 저장하고, ReviewImage 테이블은 해당 리뷰에 첨부된 이미지를 저장한다.

리뷰가 업데이트 되면 단순히 PlaceReview 테이블의 데이터가 수정되는 방식으로 운영되고 있다.

문제점: 리뷰 업데이트 시 이력 관리의 부재

기존의 테이블 구조에서는 리뷰가 수정될 경우 이전 데이터를 추적할 수 없다는 문제가 있었다.

리뷰의 내용이 변경되었을 때 어떤 부분이 어떻게 수정되었는지 확인할 수 없기 때문에, 특히 신고 기능을 도입할 때 리뷰의 변경 이력을 추적할 수 있는 기능이 필요하게 되었다.

스냅샷 테이블 도입, 리팩터링 필요성

리뷰의 수정 이력을 저장하고 추적할 수 있도록 PlaceReview 테이블의 스냅샷을 저장하는 새로운 테이블을 추가하였다.

이 스냅샷 테이블은 리뷰가 업데이트 될 때마다 현재 상태를 저장되도록 설계하였다.

스냅샷은 리뷰 업데이트가 일어날 때 추가 된다. 하지만 기존 리뷰 시스템이 이미 배포되어 운영 중인 상태이기 때문에, 이 기능이 추가 되어도 기존 기능이 정상적으로 동작해야 한다.

따라서 새로운 스냅샷 기능이 올바르게 동작하는지, 기존의 리뷰 업데이트 기능과 충돌하지 않는 지를 검증하는 테스트 코드가 필요하게 되었다.