~19.4 책을 마무리하며(종이책 p.539~555)
댓글 삭제는 다음과 같은 2단계로 진행한다.
특히 주의할 부분은 2단계인데 2단계에서 삭제 버튼 클릭 이벤트를 처리할 때 삭제 버튼을 통해 댓글의 id 값을 전달한다. 어느 댓글에서 삭제 요청을 했는지 알아야 서버를 통해 댓글을 삭제할 수 있기 때문이다.
댓글 삭제 버튼은 수정 버튼 오른쪽에 추가한다.
_list.mustache 파일을 열고 <!-- Button trigger modal --> 주석을 찾고 아래에 <button> 태그로 삭제버튼을 만든다. 그리고 class 속성 값으로 comment-delete-btn을 추가하는데, 삭제 시 클릭 이벤트 처리를 위한 선택자로 사용하기 위해서 추가해준다.
<button type=”button” class=”btn btn-sm btn-outline-danger comment-delete-btn”>삭제</button>
여기까지 작성하고 게시글 상세 페이지에서 들어가면 수정 버튼 옆에 삭제 버튼이 있는 것을 확인할 수 있다.
_list.mustache 파일의 맨 아래 빈 공간에 <script></script>를 작성하고 중괄호로 블록을 잡는다.
블럭 안에 클래스 선택자(comment-delete-btn)을 활용하여 삭제 버튼을 변수로 받아오는 코드를 작성한다.
const commentDeleteBtns = document.querySelectorAll(”.comment-delete-btn”);
버튼을 여러 개 가져와 변수화했으므로 반복 처리를 위한 forEach() 메서드를 사용하여 이벤트를 처리해준다.
commentDeleteBtns.forEach(btn ⇒ {
btn.addEventListener(”click”, () ⇒ {
console.log(”삭제 버튼이 클릭됐습니다..!”);
});
});
삭제 버튼의 데이터 속성으로 data-comment-id=”{{id}}”를 추가해준다.
맨 밑에 자바스크립트 코드로 가서 btn에 클릭 이벤트가 발생했을 때 이벤트와 관련한 버튼 요소를 가져온다.
commentDeleteBtns.forEach(btn ⇒ {
btn.addEventListener(”click”, (event) ⇒ {
const commentDeleteBtn = event.target;
const commentId = commentDeleteBtn.getAttribute(”data-comment-id”);
console.log(`삭제 버튼 클릭: ${commentId}번 댓글`);
});
});
※ 백틱(`)은 문자열을 정의하는 방법으로 백틱을 사용하면 ${} 문법으로 문자열에 변수 또는 식을 넣을 수 있다. 다음 두 코드는 같은 의미이다.
`삭제 버튼 클릭: ${commentId}번 댓글`
“삭제 버튼 클릭: “ + commentId + “번 댓글”
const url = `/api/comments/${commentId}`;
fetch(url, {
method: “DELETE”
}).then(response ⇒ {
if(!response.ok) {
alert(”댓글 삭제 실패..!”);
return;
}
const target = document.querySelector(`#comments-${commentId}`);
target.remove();
const msg = `${commentId}번 댓글을 삭제했습니다.`;
alert(msg);
window.location.reload();
});
http://localhost:8080/articles/5 페이지에서 삭제 버튼을 클릭하면 메시지 창이 뜨며 댓글이 잘 삭제되는 것을 확인할 수 있다.
지금까지는 H2 DB를 사용했지만 H2 DB는 인메모리 데이터베이스이므로 서버를 껐다 켜면 데이터가 날라가는 단점이 있다.
따라서 데이터를 유지하려면 외부 DB(PostgreSQL, MySQL, 오라클 등)를 연동해야 한다.
외부 DB 연동에 대한 것은 아래 유튜브 링크를 참고한다.
회원 관리와 권한 및 소셜 로그인 기능을 공부하고 싶다면 스프링 시큐리티,
데이터 관리와 설계를 공부하고 싶다면 스프링 JPA와 SQL,
클라이언트를 위한 프론트엔드는 자바스크립트,
인터넷에 서비스 배포는 리눅스와 AWS 등을 공부하면 된다.