Spring _ 트랜잭션을 적용해서 게시판 글과 댓글 삭제

dwanGim·2022년 6월 29일
0

spring_basic

목록 보기
24/41

트랜잭션 활용

이제 트랜잭션이 뭔지 알았습니다. 이것을 활용해서

게시판 row를 삭제할 때 그 글에 소속된 댓글도 함께 삭제할 수 있습니다.

지금까지는 글이 삭제되더라도 댓글은 남아서 DB의 저장공간을 차지하고 있었는데

이제 그런 일이 발생하지 않도록 미연에 방지할 수 있습니다.

먼제 board_tbl에 댓글 개수를 나타내는 컬럼을 추가합니다.

그 뒤 테이블을 업데이트합니다.

현재 게시판 테이블에 소속된 댓글 개수(rno의 개수)를 계산하고

그 값을 bno가 같은 댓글들을 해당 특정 bno의 board row에 추가했습니다.

다음으로 댓글이 늘어날 때마다 replycount를 증가시켜주는 메서드

updateReplyCount를 BoardMapper 인터페이스에 추가했습니다.

bno는 해당 게시물의 번호, amount는 변동값을 나타냅니다.

mybatis가 기본적으로 하나의 파라미터를 쓰는 것을 전제로 하기 때문에

위와 같이 2개 이상을 정의할 때는 @Param 어노테이션을 붙여줍니다.

BoardMapper에서 댓글의 증감을 나타내는 amount를 replycount에 더하고

해당 bno와 같은 bno를 받는 row에 그 수정된 replycount값을 받도록 하는 SQL문을 작성했습니다.

이제 댓글 추가와, replycount 컬럼 업데이트라는 작업이 댓글 쓰기라는

하나의 서비스에 동반 실행되도록

즉, 트랜잭션의 대상이 되도록

replyService의 내부에 BoardMapper를 쓸 수 있도록

해주어야합니다.

삭제 시 댓글 갯수를 1 줄이는 작업의 밑바탕입니다.

rno만으로 bno를 유추해야 하기 떄문에 ReplyMapper쪽에

위와 같이 getBno메서드를 정의 및 구현합니다.


이제 삭제 로직에 @Transactional 어노테이션을 걸고

생성한 mapper의 메서드를 호출하는 식으로

replycount를 조정해줍니다.

생성구문에도 똑같이 updateReplyCount를 실행할 수 있게 해주세요.

삭제로직이 잘 처리되고 replyCount가 잘 변동되는 것을 확인해주면

끝입니다.

profile
배울 게 참 많네요.

0개의 댓글