ATOMICITYConsistencyIsolation트랜젝션을 분리함DurabilityArticleController
@DeleteMapping("/api/articles/like/{id}")
public ResponseEntity<Void> deleteLike(@PathVariable long id,Principal principal){
Like like=articleService.findByLikeId(id);
Article article=articleService.findById(like.getArticle().getId());
articleService.deleteLike(id,principal.getName());
System.out.println("Delete controller에서의 상태: "+article.getLikeCnt());
return ResponseEntity.ok().build();
}
Delete controller에서의 상태: 0ArticleViewController
@GetMapping("/articles/{id}")
public String getArticle(Authentication authentication,@PathVariable Long id, Model model){
Article article = articleService.findById(id);
Like like=null;
...
System.out.println("현재 article View에서 좋아요 리스트: "+article.getLikeList());
System.out.println("현재 article에서 좋아요 수 :"+article.getLikeCnt());
model.addAttribute("article",article);
return "article";}
현재 article View에서 좋아요 리스트: [] 현재 article에서 좋아요 수 :1service와 articleController과는 다른 결과이다.ArticleService
public void deleteLike(long id,String userName){
//본인 글만 삭제 가능
Like like = likeRepository.findById(id).orElseThrow(()->new IllegalArgumentException("not found: "+id));
Article article=articleRepository.findById(like.getArticle().getId()).orElseThrow(()->new IllegalArgumentException("not found"+like.getArticle()));
if(like.getUserName().equals(userName)) {
likeRepository.deleteById(id);
article.deleteLikeCnt();//function에서 미리실행?
}
else{
throw new IllegalArgumentException("좋아요 한 사람 아님!");
}
System.out.println("좋아요 취소 후service에서 articleCnt 상태?"+article.getLikeCnt());
}
좋아요 취소 후service에서 articleCnt 상태: 0

변경 코드
@Transactional //트랜잭션 -> 데이터베이스 변경 작업 단위
public void deleteLike(long id,String userName){
}
좋아요 취소 후service에서 article 상태 : 0Delete controller에서의 상태: 0현재 article View에서 좋아요 리스트: [] 현재 article에서 좋아요 수 :0
