Spring Boot에서 테스트 코드를 작성하면서 이건 기억하면 좋겠다 싶은 내용이 있어 달려왔습니다
우선 진행하려던 코드는 첨부파일 업데이트 관련 테스트 코드입니다
@Transactional
@Commit
@Test
public void testUpdateImage(){
Board board = repository.getById(20);
board.changeTitle("제목 수정.....20");
board.clearImages();
for (int i = 0; i < 3; i++) {
BoardImage boardImage = BoardImage.builder()
.fileLink("aaa"+i+"jpg")
.build();
board.addImage(boardImage);
}
repository.save(board);
}
여기서 체크할 건 어노테이션입니다
✅@Transactional
@Transactional 은 자주 사용해서 익숙하지만 이참에 다시 한번 정리해 보자면 일련의 작업들을 묶어서 하나의 단위로 처리하고 싶을 때 사용하는 것이 바로 @Transactional 입니다
✅@Commit
그리고 다른 하나인 @Commit ...git할때 많이 보던 Commit 여기서도 볼 줄이야 이 녀석을 어디에 사용될까요? 바로
Test 환경에서 종종 사용됩니다.
@Test 가 있으면 Spring 은 이 코드는 테스트 코드구나~ 롤백해버려야지라고 생각하기 때문에 테스트는 진행되지만 DB에 실질적인 반영은 이루어지지 않습니다.
DB에 값을 실질적으로 변화시켜 주기 위해서 사용하는 것이 바로 @Commit입니다.
✅그렇다면 여기서 롤백은 왜 일어날까??
테스트 메서드에 @Transactional을 사용하면 트랜잭션으로 감싸 지면서 메서드가 종료될 때 자동으로 롤백이 됩니다
다들 JPA 테스트에서 확인해 보시고 즐거운 JPA 시간 보내세요 😉
'개발자 성장 일지' 카테고리의 다른 글
EJB JEE (0) | 2022.08.03 |
---|---|
Tomcat, JBoss 차이 (0) | 2022.08.03 |
너 혼자 왜 난리야.. <file 타입의 input 태그의 value 값 조정하는 방법 > (0) | 2022.05.04 |
난 남들과 달라 UUID (0) | 2022.05.04 |
HTTPS 너 뭐하는 친구니? (0) | 2022.05.01 |