Service 레이어란 ?
트랜젝션을 관리해주는 레이어가 필요! → Service
트랜젝션을 관리하는게 Service 의 SRP 다
컨트롤러에 트랜젝션 을 걸면 안되는 이유는 ?
→ 트랜젝션의 시간이 쓸데없이 길어진다.
내가 집에서 양치할 때부터 책을 찜하면 도서관에 먼저 도착한 친구는 오래 기다려야 한다.
컨트롤러에 트랜젝션을 걸면 양치할때 부터 기다리게 하는 것.
컨트롤러는 요청받고 파싱하고 유효성검사도 하고 뷰도 동적으로 만들어야 하는데
트랜젝션까지 하면… 역할이 너무 많아진다.
1. 게시글 삭제하기
Repository

- deleteById 매서드 생성
- write 이기 때문에 쿼리 뒤에 Board.class 안 붙여줘도 OK
Test

- 삭제 후 해당 게시글을 조회하면 우리가 findById 에 throw 해 둔 에러가 터진다.
- 터지는 거 확인하면 성공
then 코드 쓸때, Assertions 는 assertj 꺼 사용하기

Test

findById 테스트 . 정확한 값을 넣으니 초록색

틀린 값을 넣었을때. 에러 발생 확인!

deleteById 매서드 테스트
→ static 에 올려서 사용한다고 하는데 지금은 모르겠음
detail.mustache

삭제 버튼 method = “post”
→ delete 는 post 로 !
→ method = get으로 하면 하이퍼링크를 던져서 해당 id session을 가지고 있는 사람에게 클릭을 유도해 삭제를 유도할 수 있는 위험성이 있다.
BoardController

- 삭제 post 매핑 되도록 코드 추가
- 작동 후, list 페이지로 redirect
확인

삭제 누르면 삭제됨

콘솔에 보면
select * from board_tb where id = ? 는 상세페이지에 들어갈 때 뜬거.
delete from board_tb where id = ? 는 삭제할 때 뜬거
select * from board_tb order by id desc 는 삭제 후 목록 페이지로 redirect 되어서 뜬거.
게시글 수정하기로 이동
게시글 수정하기를 하려면 게시글 수정하기로 이동하는 코드 먼저 완성 시켜야 한다.
그 후에 수정하기에 들어가는 매서드를 만든다. 순서 지켜서 하기!

컨트롤러 수정

update-form.mustach 에서 model의 값을 받을 수 있도록 수정
확인

수정 버튼을 누르면 수정하기 페이지로 이동함!
수정하기 기능 구현
이제 수정하기 기능을 구현하자
update-form.mustache

Update board_tb Set title = ?, content = ? where id =? 쿼리에 사용할 값을 넘겨줄 때
- where 절 뒤에 사용되는 id는 path 에 넣어서 넘겨준다 → /board/{{model.id}}/update
- set 뒤에 걸리는 title과 content 는 body로 넘겨준다.
- input type=hidden 해서 id를 body에 담아 title, content 와 함께 보내는 방법도 있지만
위의 규칙을 지켜서 작성해주자.
Repository

수정 매서드 완성! 조회가 아니니 Board.class 필요 ㄴㄴ
Test

테스트에서 확인하면 성공!

성공

틀리면 에러남
Controller

++
Parameters 어쩌고 에러 발생할 수 있으니 저장하기 에도 RequestParam 붙여주기

++
delete, update 테스트할 때 db에 없는 값을 넣으면 어떻게 될까?
delete 는 없는 숫자 넣으면 터지지 않음 → 잡을 게 없음!

캡쳐에서 짤렸지만 초록색(성공) 으로 뜬다.
update도 6(없는 값)을 넣고 테스트해보면

update 매서드도 없는 데이터(6)를 업데이트해도 에러 안남 (초록)
Share article