java, spring

[Spring] 댓글과 댓글 수에 대한 처리

isaac.kim 2021. 8. 22. 14:37
728x90
반응형

[Spring] 댓글과 댓글 수에 대한 처리

 

도움이 되셨다면 광고 한 번 클릭 부탁드립니다.
한 번의 클릭이 제게 큰 힘이 됩니다. :)

 

지난 글들에서 스프링 트랜잭션에 대해 알아보았습니다. 이를 적용해서 프로젝트에 반영하고 사용하는 과정을 보이려고 합니다.

반응형

 

실습에 사용했던 tb_reply 테이블에 insert하고, tb_board 테이블에는 댓글의 수를 의미하는 replyCnt라는 컬럼을 추가해서 해당 게시물의 댓글 수를 update합니다.

 

tb_board 테이블에는 replyCnt 컬럼을 추가합니다.

ALTER TABLE `tb_board` ADD COLUMN `replyCnt` INT NULL DEFAULT 0;

 

기존에 댓글이 존재했다면 replyCnt에 반영해 두어야 하므로 다음 쿼리를 실행합니다.

UPDATE tb_board
SET replyCnt = (SELECT COUNT(seq_rno) FROM tb_reply
WHERE tb_board.seq_bno = tb_reply.seq_bno);

 


프로젝트 수정

 

데이터베이스가 수정되었으므로, BoardVO 클래스와 MyBatis의 SQL, BoardService 등을 수정해 줄 필요가 있습니다.

 

BoardVO, BoardMapper 수정

com.project.domain.BoardVO 클래스에 댓글의 숫자를 의미하는 인스턴스 변수를 하나 추가합니다.

 

com.project.mapper.BoardMapper 인터페이스에는 새롭게 replyCnt를 업데이트하는 메서드를 추가해야 합니다.

 

추가된 updateReplyCnt 메서드에서 amount 변수는 댓글이 증가되면 해당 게시물 번호(seq_bno)의 댓글 수는 +1, 댓글이 삭제되면 댓글 수는 -1을 하기 위한 변수 입니다. MyBatis의 SQL을 처리하기 위해서는 기본적으로 하나의 파라미터 타입을 사용하기 때문에 위와 같이 2개 이상의 데이터를 전달하려면 @Param이라는 어노테이션을 이용해서 처리할 수 있습니다.

 

댓글이 추가되면 반정규화된 tb_board 테이블에 replyCnt 컬럼이 업데이트되어야 하기 때문에 BoardMapper.xml에 updateReplyCnt 구문을 추가해야만 합니다.

 

'src/main/resources' 폴더 아래 com.project.mapper.BoardMapper.xml

 

BoardMapper.xml의 게시물의 목록을 처리하는 부분에서는 새롭게 추가된 replyCnt 컬럼을 가져오도록 인라인뷰 내에 추가하고, 바깥쪽 select에도 추가합니다.

 

BoardMapper.xml 수정

 

ReplyServiceImpl의 트랜잭션 처리

ReplyServiceImpl 클래스는 기존에 ReplyMapper만을 이용했지만, 반정규화 처리가 되면서 BoardMapper를 같이 이용해야 하는 상황이 되었습니다. ReplyServiceImpl에서 새로운 댓글이 추가되거나 삭제되는 상황이 되면 BoardMapper와 ReplyMapper를 같이 이용해 처리하고, 이 작업은 트랜잭션으로 처리되어야 합니다.

 

com.project.service 패키지의 ReplyServiceImpl 클래스를 수정합니다.

 

기존에는 ReplyMapper만 주입하기 때문에 스프링 4.3부터 지원하는 자동주입을 이용할 수 있었지만, 추가적으로 BoardMapper를 이용하면서 자동 주입 대신 @Setter를 통한 주입이 이루어진다는 점입니다.

 

ReplyServiceImpl의 댓글 등록과 삭제를 담당하는 메서드는 @Transactional의 처리가 필요합니다.

 

ReplyServiceImpl 클래스의 일부

 

댓글 등록의 경우 파라미터로 전달받은 ReplyVO 내에 게시물 번호가 존재하므로 이를 이용해 댓글을 추가합니다. 댓글 삭제는 전달되는 파라미터가 댓글의 번호인 seq_rno만 받기 때문에 해당 댓글의 게시물을 알아내는 과정이 필요합니다.

 

화면 수정

 

BoardController나 ReplyController 자체는 수정할 것이 없지만, 게시물의 목록 화면에서는 댓글의 숫자가 출력될 수 있도록 수정해 줄 필요가 있습니다.

 

list.jsp 파일의 일부에 댓글의 숫자를 반영합니다.

 

list.jsp의 일부

 

화면에서는 다음과 같이 댓글 숫자가 표시됩니다.

 

이번 글에서는 [Spring] 댓글과 댓글 수에 대한 처리에 대해서 알아보았습니다.


도움이 되셨다면 광고 한 번 클릭 부탁드립니다.
한 번의 클릭이 제게 큰 힘이 됩니다. :)

 

728x90
반응형