๐ scope ?
- ๋ฆฌ๋ทฐ ์์ ํ์ด์ง(EditReviewPage) ๊ฐ๋ฐ
- ์์/๋ถ์๊ธฐ/์๋น์ค ๋ณ์ ๋ถ๋ฆฌ ๊ตฌ์กฐ ๋ฐ์
- ๋ฐฑ์๋ ๋ฆฌ๋ทฐ ํ ์ด๋ธ ๊ตฌ์กฐ ์์
- ๋ฆฌ๋ทฐ ์์ API ๋ฐ ์ด๋ฏธ์ง ์ ๋ฐ์ดํธ ๊ธฐ๋ฅ ๊ตฌํ
1. ๋ฆฌ๋ทฐ ์์ ๊ธฐ๋ฅ ํ์์ฑ

๋ฆฌ๋ทฐ ์์ฑ ์ดํ ์ฌ์ฉ์๊ฐ ๋ด์ฉ์ ์์ ํ ์ ์๋๋ก ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผ ํ์ต๋๋ค.
ํ์ง๋ง ๋จ์ํ ํ์ ํ๋๋ง ๋ฐ๊พธ๋ ๊ฒ ์๋๋ผ, ์์/๋ถ์๊ธฐ/์๋น์ค ๊ฐ๊ฐ์ ์ ์๋ฅผ ๋ถ๋ฆฌํด์ ๋ฐ๊ณ ์์๊ธฐ์, ๊ธฐ์กด ๋ฆฌ๋ทฐ ํ ์ด๋ธ ๊ตฌ์กฐ ์์ฒด๋ฅผ ๋ฐ๊ฟ์ผ ํ์ต๋๋ค... (์ค๊ณํ ๋ ํ๋ฒ ๋ ์๊ฐํ ๊ฑธ....ใ )
2. BE ๋ฆฌ๋ทฐ ํ ์ด๋ธ ๊ตฌ์กฐ ์์
๊ธฐ์กด์๋ ํ๊ท ํ์ rating ํ๋๋ง ์์์ง๋ง, ์ด๋ฒ ์์ ์ผ๋ก ๋ค์ 3๊ฐ์ง ํญ๋ชฉ๋ค์ ์ถ๊ฐํ์์ต๋๋ค.
- foodRating: ์์ ๋ง์ ๋ํ ์ ์
- moodRating: ๋ถ์๊ธฐ ์ ์
- serviceRating: ์๋น์ค ์ ์
์์ ๋ DTO:
public class ReviewUpdateRequest {
private Float foodRating;
private Float moodRating;
private Float serviceRating;
private Float rating; // ์ธ ํญ๋ชฉ์ ํ๊ท ๊ฐ
private String comment;
}
3. ๋ฆฌ๋ทฐ ์์ API ๊ตฌํ
์ปจํธ๋กค๋ฌ์์ @RequestPart๋ฅผ ํ์ฉํ์ฌ JSON + ์ด๋ฏธ์ง ํ์ผ์ ๋์์ ๋ฐ๋๋ก ์ฒ๋ฆฌ.
@PutMapping("/{id}")
public ReviewResponse updateReview(@PathVariable Long id,
@RequestPart("review") @Valid ReviewUpdateRequest request,
@RequestPart(value = "image", required = false) MultipartFile imageFile) {
return reviewService.updateReview(id, request, imageFile);
}
Service ์ฃผ์ ๋ก์ง:
- ๊ธฐ์กด ๋ฆฌ๋ทฐ ๋ถ๋ฌ์ค๊ธฐ → ์์ผ๋ฉด ์์ธ
- ๊ฐ ๋ณ์ , ์ฝ๋ฉํธ ์ ๋ฐ์ดํธ
- LocalDateTime.now()๋ก ์์ ์๊ฐ ์ ๋ฐ์ดํธ
- ์ด๋ฏธ์ง๊ฐ ์ ๋ฌ๋ ๊ฒฝ์ฐ๋ง ์๋ก ์ ๋ก๋ → ๊ธฐ์กด ์ด๋ฏธ์ง ์ ์ง
- ๋ณ๊ฒฝ ์ฌํญ ์ ์ฅ ํ ์๋ต DTO๋ก ๋ณํ
์ด๋ฏธ์ง ์ ๋ก๋ ์ ์์ธ ์ฒ๋ฆฌ๊น์ง ๋ช ์:
if (imageFile != null && !imageFile.isEmpty()) {
try {
String imageUrl = s3Uploader.upload(imageFile);
review.setImageUrl(imageUrl);
} catch (IOException e) {
throw new RuntimeException("์ด๋ฏธ์ง ์
๋ก๋ ์ค ์ค๋ฅ ๋ฐ์", e);
}
}
4. FE – EditReviewPage ๊ตฌ์ฑ
์ ํ์ด์ง EditReviewPage.jsx๋ฅผ ์์ฑํด์ ์์ ๊ธฐ๋ฅ์ ๊ตฌ์ฑ.
flowb:
- useParams()๋ก ๋ฆฌ๋ทฐ id ์ถ์ถ ํ ๊ธฐ์กด ๋ฆฌ๋ทฐ ์ ๋ณด GET ์์ฒญ
- ๊ฐ์ ธ์จ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํ ์ด๊ธฐํ (๋ณ์ , ์ฝ๋ฉํธ, ์ด๋ฏธ์ง)
- ์์ ๋ ํ์ ์ ๊ธฐ์ค์ผ๋ก ํ๊ท ํ์ ๊ณ์ฐ
- FormData๋ก JSON(review) + image ํจ๊ป ์๋ฒ์ ์ ์ก
- ์์ ์ฑ๊ณต ์ /list๋ก ๋ฆฌ๋๋ ์
๋ณ์ ์ปดํฌ๋ํธ๋ ๊ธฐ์กด StarRating์ ๊ทธ๋๋ก ์ฌํ์ฉ. ์ด๋ฏธ์ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ๋ ์ถ๊ฐํ์ฌ, ์ฌ์ฉ์๊ฐ ์ ์ด๋ฏธ์ง๋ฅผ ์ ํํ๋์ง ๋ช ํํ ์ธ์งํ ์ ์๋๋ก ๊ฐ์ .

5. ๊ณ ๋ ค ์ฌํญ ๋ฐ ๊ฐ์ ํฌ์ธํธ
- ํ๊ท ํ์ ์ ํด๋ผ์ด์ธํธ์์ ๊ณ์ฐํด์ ์๋ฒ๋ก ๋๊ธฐ๋ ๊ตฌ์กฐ๋ก ๊ตฌํ (์๋ฒ ๊ณ์ฐ ๊ณ ๋ ค)
- ์ด๋ฏธ์ง ๋ณ๊ฒฝ์ด ์๋ ๊ฒฝ์ฐ ๊ธฐ์กด ์ด๋ฏธ์ง๋ฅผ ์ ์งํจ์ผ๋ก์จ S3 ํธ๋ํฝ ์ต์ํ
- ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ค๋ฅ ์๋ฆผ ๋ฉ์์ง๋ ํ์ ์์ ์ผ๋ก ๊ฐ์ ์์

Today Key word
- ๋ณ์ ํญ๋ชฉ ๋ถ๋ฆฌ (food/mood/service)
- ๋ฆฌ๋ทฐ ์์ API (PUT + multipart/form-data)
- ์ด๋ฏธ์ง ์์ ๋ฐ S3 ์ฐ๋
- ํ๋ก ํธ์๋ EditReviewPage ๊ตฌํ