[Trouble Shooting] ๋๊ธ, ๊ฒ์๊ธ ๊ด๊ณ ๊ฒ์ฆ ๋ฌธ์ ํด๊ฒฐ
๋์ ์ฒซ ๋ฒ์งธ [BugFixHub] ํ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค.
BugFixHub๋ "Stack Overflow"๋ฅผ ๋ชจํฐ๋ธ ํ์ฌ ๊ฐ๋ฐ ์ ๋ณด๋ฅผ ๊ณต์ ํ๊ณ ์ง๋ฌธ๊ณผ ๋ต๋ณ์ ํ ์ ์๋ ์ ์ฅ์์ด๋ค.
โถ [GitHub ๋งํฌ]


์ฐ๋ฆฌ๋ ๊ฐ ํํธ๋ค์ ๋๋์ด ๊ฐ๋ฐ์ ์งํ ํ๊ณ , ๊ทธ์ค ๋๋ Friend, Comment Like ํํธ๋ฅผ ๋งก๊ฒ ๋์๋ค.
๊ฐ๋ฐ์ ์งํํ๋ฉด์ Comment Like ๋ถ๋ถ์์ ๋ฌธ์ ๊ฐ ๋ฐ์๋์ด ๊ด๋ จ ๋ด์ฉ์ Trouble Shooting์ ์งํํ๋ ค๊ณ ํ๋ค.
โถ Postman API ํธ์ถ ๋ฆฌ์คํธ
| ์์ฒญ URL | ๊ตฌ๋ถ | ์์ฒญ์ฌํญ | API ํธ์ถ ๊ฒฐ๊ณผ | ์ํ ์ฝ๋ |
| /posts/postId/comments/commentId/like | ๋๊ธ ์ข์์ |
์ข์์ ์๋ฃ | ๋๊ธ ์ข์์ID, UserId, CommentId ๋ฐํ | 201, CREATED |
| ์ด๋ฏธ ์ ์ก๋ ์์ฒญ | ์ด๋ฏธ ์ข์์๋ฅผ ๋จ๊ธด ๋๊ธ์ ๋๋ค. | 400, BAD REQUEST | ||
| ๋๊ธ์ด ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ | ๋๊ธ์ ์ฐพ์ ์ ์์ต๋๋ค. | 404, NOT FOUND | ||
| ๋๊ธ๊ณผ ๊ฒ์๊ธ์ ๊ด๊ณ ์ค๋ฅ | ๋๊ธID์ ๊ฒ์๊ธID์ ๊ด๊ณ๊ฐ ์ ํจํ์ง ์์ต๋๋ค. | 400, BAD REQUEST | ||
| ๋๊ธ ์ข์์ ์ทจ์ |
์ข์์ ์ทจ์ | - |
204 NO CONTENT | |
| ์ข์์๋ฅผ ์ํ ๊ฒฝ์ฐ | ์ข์์๋ฅผ ๋จ๊ธฐ์ง ์์ ๋๊ธ์ ๋๋ค. | 400, BAD REQUEST |
1. ๋ฐฐ๊ฒฝ
1) ๋ฌธ์ ์ํฉ:
โ Comment Like(๋๊ธ ์ข์์) ์ฝ๋ ๊ตฌํ ํ Postman์ผ๋ก API ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ ์ค,
๊ฒ์๊ธ์ด ์กด์ฌํ์ง ์์์๋ ๋ถ๊ตฌํ๊ณ , ๋๊ธ์ ์ข์์๋ฅผ ๋๋ฅผ ๋ "์ด๋ฏธ ์ข์์๋ฅผ ๋จ๊ธด ๋๊ธ์
๋๋ค"๋ผ๋ ์๋ชป๋ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ฐํ๋จ.
โก ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋๊ธ๊ณผ ๊ฒ์๊ธ์ ๊ด๊ณ๋ฅผ ๊ฒ์ฆํ๋ "validateCommentAndPostRelation" ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ผ๋,
์ถ๊ฐ์ ์ธ ๋ฌธ์ ๋ฐ์.
-> ๋๊ธ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์๋ "๊ฒ์๊ธ ID์ ๋๊ธ ID์ ๊ด๊ณ๊ฐ ์ ํจํ์ง ์์ต๋๋ค. " ์ค๋ฅ ๋ฉ์์ง๊ฐ ์ฐ์ ์ ์ผ๋ก ํ์๋จ.
โถ ์์ ์ ๋ก์ง
// ๊ฒ์๊ธ๊ณผ ๋๊ธ ๊ด๊ณ ๊ฒ์ฆ ๋ก์ง ์ถ๊ฐ
private void validateCommentAndPostRelation(Long commentId, Long postId) {
if (!commentRepository.existsByIdAndPostId(commentId, postId)) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "๊ฒ์๊ธ ID์ ๋๊ธ ID์ ๊ด๊ณ๊ฐ ์ ํจํ์ง ์์ต๋๋ค.");
}
}
// ๋๊ธ ์ข์์
@Override
@Transactional
public CommentLikeResDto likeComment(Long commentId, Long postId, Long userId) {
// ๊ฒ์๊ธ๊ณผ ๋๊ธ ๊ด๊ณ ๊ฒ์ฆ
validateCommentAndPostRelation(commentId, postId);
Comment comment = commentRepository.findByIdAndDeletedFalse(commentId)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "๋๊ธ์ ์ฐพ์ ์ ์์ต๋๋ค."));
if (comment.getUser().getId().equals(userId)) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "๋ณธ์ธ ๋๊ธ์๋ ์ข์์๋ฅผ ๋จ๊ธธ ์ ์์ต๋๋ค");
}
if (commentLikeRepository.existsByCommentIdAndUserId(commentId, userId)) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "์ด๋ฏธ ์ข์์๋ฅผ ๋จ๊ธด ๋๊ธ์
๋๋ค.");
}
User user = userRepository.findById(userId)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "์ฌ์ฉ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค."));
CommentLike commentLike = new CommentLike(user, comment);
commentLikeRepository.save(commentLike);
return new CommentLikeResDto(commentLike);
}
2) ์์ธ ๋ถ์
์ ๋๊ธ ์ข์์ ๋ก์ง์์ ๋๊ธ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ๋ ์ ์ ๊ฒ์๊ธ๊ณผ ๋๊ธ ๊ด๊ณ๋ฅผ ๊ฒ์ฆํ๋ "validateCommentAndPostRelation" ๋ฉ์๋๊ฐ ๋จผ์ ์คํ๋๋ฉด์, ๋๊ธ์ด ์ญ์ ๋๊ฑฐ๋ ์กด์ฌํ์ง ์์๋ ๋ฉ์๋์ ํ๋ฆ์ ์ข ๋ฃํ๊ณ ์์ธ๋ฅผ ํธ์ถ์์๊ฒ ๋ฐํ๋จ.
โป throw new ๋ฐฉ์์ ์์ธ ์ฒ๋ฆฌ
- ํธ์ถ๋๋ ์ฆ์ ํ์ฌ ์คํ ์ค์ธ ๋ฉ์๋์ ํ๋ฆ์ ์ข ๋ฃํ๊ณ ์์ธ๋ฅผ ํธ์ถ์์๊ฒ ๋ณด์ฌ์ค๋ค.
- ์์ธ๋ฅผ ๋ฐ์์ํค๋ ๋ฉ์๋๊ฐ ์คํ ์์๋ณด๋ค ์์ ์๋ค๋ฉด, ์ดํ์ ์ค์ํ ๊ฒ์ฆ ๋ก์ง์ ์คํ๋์ง ์๋๋ค.
- Postman ํธ์ถ ์์:
/posts/11/comments/commentId/like


2. ์ ์
์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฒ์๊ธ์ ๋๊ธ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธ ํ, ๊ฒ์๊ธ๊ณผ ๋๊ธ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ฒ์ฆํ ์ ์๋๋ก ์์๋ฅผ ์กฐ์ ํ๋ค.
3. ๊ฒฐ๊ณผ
- ๋๊ธ ์กด์ฌ๋ฅผ ๋จผ์ ํ์ธํ์ฌ, ๋๊ธ๊ณผ ๊ฒ์๊ธ ๊ด๊ณ๊ฒ์ฆ์ ๋๊ธ์ด ์ ํจํ ๊ฒฝ์ฐ์๋ง ์คํ๋ ์ ์๋๋ก ์์ ๋ณ๊ฒฝ

โถ ์์ ํ ๋ก์ง
// ๊ฒ์๊ธ๊ณผ ๋๊ธ ๊ด๊ณ ๊ฒ์ฆ(์ถ๊ฐ)
private void validateCommentAndPostRelation(Long commentId, Long postId) {
if (!commentRepository.existsByIdAndPostId(commentId, postId)) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "๊ฒ์๊ธ ID์ ๋๊ธ ID์ ๊ด๊ณ๊ฐ ์ ํจํ์ง ์์ต๋๋ค.");
}
}
// ๋๊ธ ์ข์์
@Override
@Transactional
public CommentLikeResDto likeComment(Long commentId, Long postId, Long userId) {
1. ๋๊ธ ์กด์ฌ ์ฌ๋ถ ํ์ธ
Comment comment = commentRepository.findByIdAndDeletedFalse(commentId)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "๋๊ธ์ ์ฐพ์ ์ ์์ต๋๋ค."));
2. ๊ฒ์๊ธ๊ณผ ๋๊ธ ๊ด๊ณ ๊ฒ์ฆ
validateCommentAndPostRelation(commentId, postId);
if (comment.getUser().getId().equals(userId)) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "๋ณธ์ธ ๋๊ธ์๋ ์ข์์๋ฅผ ๋จ๊ธธ ์ ์์ต๋๋ค");
}
if (commentLikeRepository.existsByCommentIdAndUserId(commentId, userId)) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "์ด๋ฏธ ์ข์์๋ฅผ ๋จ๊ธด ๋๊ธ์
๋๋ค.");
}
.
.
.
.
.
์์ ๊ฐ์ด ์ฝ๋ ์์ ํ IntelliJ ์ฌ ์คํํ๊ณ Postman์ ํธ์ถํ๋ค.
๊ฒ์ฆ ์์๋ฅผ ์กฐ์ ํ ํ ์ ์์ ์ผ๋ก ํธ์ถ๋๋ ๊ฒ์ ํ์ธํ๋ค.
1. ๋๊ธ์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ

2. ์์ฑ๋์ง ์์ ๊ฒ์๊ธ์ ๋๊ธ ์ข์์๋ฅผ ๋๋ฅด๋ ๊ฒฝ์ฐ
