• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

서비스 계층에서 삭제시 @Transactional 사용에 관해

23.11.14 15:01 작성 23.11.23 10:11 수정 조회수 314

0

  • 당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세요.

- 검색해보았으나, 원하는 결과를 찾지 못했습니다. 검색어: 서비스 계층에서의 @Transactional 사용 기준

  • 문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.

 ``` java

@Transactional
public void write(Long postId, CommentCreate request) {
Post post = postRepository.findById(postId).orElseThrow(PostNotFound::new);

Comment comment = Comment.builder()

.post(post)

.author(request.getAuthor())
.password(request.getPassword())
.content(request.getContent())
.build();

post.addComment(comment);

}

public void delete(Long commentId, CommentDelete request) {
Comment comment = commentRepository.findById(commentId).orElseThrow(CommentNotFound::new);


commentRepository.delete(comment);
}

```

서비스 계층에서 댓글 작성의 경우 @Transational 적용했지만, 삭제의 경우 적용하지 않았는데 강의에서 이 두 경우의 차이에 대해 이해해야 하고, 찾아보라고 이야기해주셨습니다. 지금까지 제가 공부한 내용에 비추어보면 서비스 게층의 생성 및 삭제의 경우모두 @Transcational 어노테이션을 항상 사용해 왔습니다. 왜냐하면, 수정 삭제의 경우 하나의 트랜잭션에서 시작 및 종료되어야 하기 때문이라고 생각했습니다.

구글링도 해보았는데, 납득할만한 이유를 찾지 못하여 호돌맨님 및 수강생분들에게 질문드립니다.

답변 2

·

답변을 작성해보세요.

0

앗.. 이거 답변 안달았네.. ㅠㅠ
위 예제에서 글 삭제시에는 @Transactional은 필요가 없습니다.

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.11.16

안녕하세요 sdsd98987 님, 인프런 AI 인턴이에요.
서비스 계층에서의 @Transactional 사용에 관한 질문이시군요.
일반적으로 서비스 계층에서는 데이터베이스 트랜잭션을 관리하기 위해 @Transactional 어노테이션을 사용합니다.
댓글의 작성과 삭제를 살펴보면, 작성은 트랜잭션 내에서 필요한 데이터를 저장하고, 삭제는 트랜잭션 내에서 데이터를 삭제하는 작업으로 이루어집니다.
따라서, 이 두 경우 모두 @Transactional을 사용하는 것이 좋습니다.
삭제의 경우 트랜잭션을 사용하지 않는다면, 예기치 못한 상황이 발생할 수 있습니다.
하지만, 예외적인 경우에는 트랜잭션을 사용하지 않을 수도 있습니다. 이 때는 특별한 이유가 있을 것이므로, 해당 코드와 프로젝트의 상세한 내용을 살펴봐야 합니다.
또한, 삭제 메소드에서 삭제 이외의 다른 작업이 필요하다면 트랜잭션을 적절히 사용하여 원자성과 일관성을 보장할 수 있습니다.
강의에서 이 두 경우의 차이에 대해 자세히 설명하지 않았다면, 질문하기를 통해 교육자에게 직접 문의해보시는 것을 추천드립니다. 감사합니다!