블로그 프로젝트 v1 - 게시글 삭제하기

Feb 21, 2024
블로그 프로젝트 v1 - 게시글 삭제하기
우리는 DELETE도 POST요청으로 삭제할 것이다. WHY? 자바 스크립트를 안 배웠으니까^^!
 

1. 삭제 버튼 클릭

notion image
 
주소에 동사를 적지 않는다. HTTP 메서드를 적기 때문. 그런데 우리는.... 지금 자바 스크립트 없이 만들기 때문에... POST로만 구분해야해서 동사를 적었습니다. * POST /BOARD/SAVE (추가해) * POST /BOARD/1/UPDATE * POST /BOARD/UPDATE -> 이렇게 적으면 뭘 업데이트 해야 할 지 모른다. 뭘 업데이트 할 지 모르면 WHERE을 못 적기 때문에 1번을 주소에 넣는다 * POST /BOARD/1/DELETE * DELETE를 쓸 수 있으면 DELETE /BOARD/1 라고 쓴다.
💡
WHERE절은 주소에 넣는다
notion image
notion image
이 id를 삭제할 것
notion image
* PK라 쿼리스트링 안 씀 * 전송할 데이터가 없어서 input 태그 필요 없음 (삭제만 할거라…)

+)

notion image
이거보단
notion image
이게 훨씬 좋음
 

2. 인증 체크

[ BoardController ]

notion image
// 1. 인증 안되면 나가 User sessionUser = (User) session.getAttribute("sessionUser"); if(sessionUser == null){ // 401 return "redirect:/loginForm"; }
 

3. 권한 체크

조회 코드 findById. 그런데... findById는 join이다… 근데 지금건 join할 필요 없는데… join하면 느려지는데… 그래서 메소드를 하나 더 만든다
notion image
오버로딩 실패…
notion image
그래서 join하는 findById를 findByIdWithUser로 바꿔주고, 우린 순수하게 Board만 조회하는 findById를 만들어줌!
💡
join은 for문이 돌기 때문에 성능에 영향을 준다.
 

[ BoardRepository ]

notion image

[ BoardController ]

notion image
💡
바디 데이터 없으니 유효성 검사 x !! 그러나 인증 검사는 해야 함
💡
권한 체크를 위해선 db 조회가 필요
 

4. 삭제하기

💡
삭제하기 전에 조회를 먼저 하면 좋은 점 : 트랜젝션 시간이 줄어든다 없는걸 삭제해서 들어가느니, 한 번 조회해서 데이터 있나, 없나 확인 해 보는게 낫다. write는 최소화 시키는게 좋다. ex. 맛집 방문 전, 문 열었는지 전화해보고 가는 것과 같다.

[ BoardRepository ]

@Transactional public void deleteById(int id) { Query query = em.createNativeQuery("delete from board_tb where id = ?"); query.setParameter(1, id); query.executeUpdate(); }
💡
write는 다 @Transactional

[ BoardController ]

notion image
 

5. 삭제 결과

notion image
게시글 3번이 삭제 되었다.
 
Share article

codingb