스프링부트3 블로그 글 삭제 기능 추가하기
본문 바로가기

웹/Spring

스프링부트3 블로그 글 삭제 기능 추가하기

728x90
반응형

안녕하세요 놀이방사장입니다.

 

이번 포스팅은

글 상세 화면에서[삭제]버튼을 눌러 글을 삭제하는 기능을 만들어보겠습니다.

 

삭제코드는 자바스크립트로 작성

 

src/main/resources/static 디렉터리에 js 디렉터리를 만들고 article.js파일을 만든다.

 

const deleteButton = document.getElementById('delete-btn');

if(deleteButton){
    deleteButton.addEventListener('click', event => {
        let id = document.getElementById('article-id').value;
        fetch(`/api/articles/${id}`,{
            method : 'DELETE'
        })
        .then(()=>{
            alert('삭제가 완료되었습니다.');
            location.replace('/articles');
        });
    });
} 

자바스크립트 코드 HTML에서 id를 delete-btn 으로 설정한 엘리먼트를 찾아 그 엘리멘트에서 클릭 이벤트가 발생하면 fetch() 메서드를 통해 /api/articles/DELETE 요청을 보내는 역활을 한다.

 

fetch() 메서드에 이어지는 then()메서드는 fetch() 가  잘 완료되면 연이어 실행되는 메서드입니다.

alert() 메서드는 then 메서드가 실행되는 시점에 웹 브라우저 화면으로 삭제가 완료되었음을 알리는 팝업을 띄어주는 메서드이고 location.replace() 메서드는 실행시 사용자의 웹 브라우저 화면을 현재 주소를 기반해 옮겨주는 역할을 한다.

 

article.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>블로그 상세보기</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>
<body>
<div class="p-5 mb-5 text-center</> bg-light">
    <h1 class="mb=3">My Blog</h1>
    <h4 class="mb-3">블로그 상세보기 창</h4>
</div>

<div class="container mt-5">
    <div class="row">
        <div class="col-lg-8">
            <article>
                <header class="mb-4">
                    <h1 class="fw-bolder mb-1" th:text="${article.title}"></h1>
                    <div class="text-muted fst-italic mb-2" th:text="|Posted on
                    ${#temporals.format(article.createdAt, 'yyyy-MM-dd')}|"></div>
                </header>
                <section class="mb-5">
                    <p class="fs-5 mb-4" th:text="${article.content}"></p>
                </section>
                <button type="button" class="btn btn-primary btn-sm">수정</button>
                <button type="button" id="delete_btn"
                        class="btn btn-secondary btn-sm">삭제</button>
            </article>
        </div>
        <a th:href="@{/articles}">메인화면으로</a>
    </div>
</div>

<div class="container mt-5">
    <div class="row">
        <div class="col-lg-8">
            <article>
                <input type="hidden" id="article_id" th:value="${article.id}">
                <header class="mb-4">
                    <h1 class="fw-bolder mb-1" th:text="${article.title}"></h1>
                    <div class="text-muted fst-italic mb-2" th:text="|Post on
                    ${#temporals.format(article.createdAt, 'yyyy-MM-dd')}|"></div>
                </header>
            </article>
        </div>
    </div>
</div>

<script src="/js/article.js"></script>
</body>
</html>

 

이렇게 하면 글 삭제가 됩니다!

반응형