본문 바로가기
✨ Back-end/Spring-Boot

[Spring] 보드게시판 만들기(8) 댓글 Session 삭제, 수정

by 환풍 2023. 3. 26.
728x90

 

 

먼저, 본인이 작성한 댓글이나 게시글을 알 수 있도록 하려면, HttpSession 객체의 session 변수에 값이 들어가있는지 확인해야한다.

MemberController 컨트롤러

이전에 로그인 하기 위해 MemberController에 memberVO에 저장되어있는 데이터들을 HttpSession 객체의 session 값에 넣어 이것을 loginInfo 라고 부르기로했다.

즉, 로그인이 되자마자 해당 사이트에는 session 값을 없애기 전까지 memberVO에 있는 session이 유지되는 것이다.

로그인 후 콘솔창을 확인해보면 위와 같이 memId가 qkrwnghd1234로 session값에 들어가있는 것을 확인할 수 있다.

 

board_detail.html

이전 포스팅에서 replyVO에 있는 데이터를 reply 이름으로 뽑아주었다. 

이때 수정과 삭제 button을 만들어, <th:if> 태그에 감싸 만약 session에 저장된 loginInfo가 null이 아니고, memId가 replyWriter의 값이 같으면 삭제와 수정 기능을 할 수 있도록 코드를 짜주었다.

 

따라서 이런 식으로 로그인이 되어있는 한 본인이 쓴 댓글은 위와 같이 삭제와 수정을 할 수 있도록 해놓았다.


수정

board_detail.js

수정 버튼을 누르게 되면 위 코드에서 알 수 있듯이 static안에있는 js폴더의 board_detail.js인 JavaScript 함수가 실행이 될 것이다. setInput 함수로 들어가 해당 코드문을 실행한다. 

자바스크립트를 통해 replyNum과 boardNum 데이터들을 js로 불러와 데이터들을 변환시킨다.

html에서 this로 설정하여 js로 selectedTag로 변수를 주었고, 만약 this의 value값이 '수정'이면 아래 코드를 실행한다.

 

클릭한 수정 버튼에서 댓글 내용이 있는 태그를 찾아 가기. (parentElement - 부모태그) <- 웹페이지에서 F12누르면 바로 위 div가 부모태그인걸 알 수 있다.  previousElementSibling은 형제태그를 찾아가는 건데 <div style="margin-bottom"> 준것이 형제 태그이다.

 

자바스크립트 내용을 보면 댓글 내용을 저장한 후 , 태그 안의 내용을 지우는 innterHTML = ' ' 으로 먼저 내용을 비워줬다,

이후 내용을 새로 채워주는데, 홀 따옴표( ' ' )와 빽틱( ` ` ) 을 이용해서 js안에 html 코드를 적어주었다.

이렇게 바꾼 html 문장이 끝나고 나면 insertAdjacentHTML안에 있는 afterbegin로 인해 위 노란색 박스 div부터 str 데이터가 채워지게 된다. 먼저 html 태그에 있는 form에 의해 컨트롤로 이동한다. 

ReplyController 컨트롤러

데이터를 주고 받고 해야하므로 먼저 쿼리로 가자.

reply-mapper

 

ReplyService 인터페이스

매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성)
매개변수 : 쿼리 실행 시 빈 값을 채울 용도
1. 쿼리에서 채워 줄 값이 없을 경우 : 매개변수 없음
2. 채워줄 값이 하나일 경우
 2-1) 채워줄 값이 숫자인 경우 : 매개변수 int형 하나
 2-2) 채워줄 값이 문자인 경우 : 매개변수 String형 하나
3. 채워줄 값이 여러개인 경우 : 매개변수는 VO 객체.
리턴타입 : 쿼리 실행 결과를 어떻게 받아올지에 대한 정의
INSERT, UPDATE, DELETE 쿼리 실행 결과는
리턴타입을 int 혹은 void 사용하면됨. int로 받을 땐 return 필요o  void는 필요x
SELECT 쿼리 결과의 리턴타입은 크게 두 가지로 나뉨.
조회결과 데이터가 무조건 한줄만 조회 : VO 객체.
조회 결과 데이터가 0줄이상 가변적일 경우 : List<VO> 객체.

ReplyServiceImpe 클래스

service 작업까지 모두 마쳤다면 다시 컨트롤러로 가서 쿼리를 적용시켜주면된다.

 

ReplyController 컨트롤러

아래와 같이 replyVO에 들어가 있는 boardNum값과 현재 boardNum의 값이 같은 데이터로 상세페이지로 이동한다,.

따라서 위조건에만 맞춰 댓글이 수정되고, 아래는 최종적으로 수정되는 과정을 나타낸 것이다.

 


삭제

board_detail.html

삭제버튼을 누르면 reply컨트롤러에 있는 deleteReply 메소드로 이동하는데, 데이터를 두개 가지고 간다.

replyNum과 boardNum이다.

 

ReplyController 컨트롤러

가져온 데이터들로 쿼리 작업이 필요하므로, mapper로 이동하자. 

 

reply-mapper.xml

 

ReplyService 인터페이스

매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성)
매개변수 : 쿼리 실행 시 빈 값을 채울 용도
1. 쿼리에서 채워 줄 값이 없을 경우 : 매개변수 없음
2. 채워줄 값이 하나일 경우
 2-1) 채워줄 값이 숫자인 경우 : 매개변수 int형 하나
 2-2) 채워줄 값이 문자인 경우 : 매개변수 String형 하나
3. 채워줄 값이 여러개인 경우 : 매개변수는 VO 객체.
리턴타입 : 쿼리 실행 결과를 어떻게 받아올지에 대한 정의
INSERT, UPDATE, DELETE 쿼리 실행 결과는
리턴타입을 int 혹은 void 사용하면됨. int로 받을 땐 return 필요o  void는 필요x
SELECT 쿼리 결과의 리턴타입은 크게 두 가지로 나뉨.
조회결과 데이터가 무조건 한줄만 조회 : VO 객체.
조회 결과 데이터가 0줄이상 가변적일 경우 : List<VO> 객체.

ReplyServiceImple 클래스

ReplyController 컨트롤러

이렇게 코드를 완성해주고, 다시 redirect 로인해 boardNum값을 갖고서  boardDetail컨트롤러 이동을 하면 데이터가 삭제될 것이다.

 

 

이렇게 각 session에 알맞은 댓글 데이터 수정과 삭제까지 알아보았다.

다음 포스팅에서는 게시글 삭제에 대해서 알아보자.

반응형

댓글