JUnit 에서 트랜잭션이 어떤 식으로 동작하는지 알아보기
메서드 실행(트랜잭션 시작) -> 종료(트랜잭션 종료) -> RollBack
실제 서버에서는 RunTimeException이 발생할 때 RollBack이 되고, 이슈가 없다면 Commit이 된다.
BeforeEach 메소드를 실행한 다음에 @Sql("classpath:db/tableInit.sql")을 실행하면 테이블이 삭제되는 거니까 BeforeEach 메소드에서 저장된 데이터는 없어야 한다. 하지만 BeforeEach에서 저장된 데이터가 그대로 남게 됨.
📌참고로 @Sql을 통해 테이블을 drop하도록 설정을 해둔 상태
🤷♀️ 왜 테이블을 삭제했는데 데이터가 그대로 남아있지❓
트랜잭션이 시작되고, save된 데이터는 HDD(하드디스크)에 저장되는 것이 아니라, 메모리(램)에 저장이 된다. 이때 @Sql("classpath:db/tableInit.sql")을 통해서 테이블을 삭제하고 초기화 하는 작업은 HDD에 저장된 데이터를 삭제해주는 것이지, 메모리(램)에 저장된 데이터를 삭제하는 것이 아니다.
h2처럼 임의로 만든 db가 아닌 실제 서버에서 검증을 해야 한다면 id 검증 말고 다른 방식으로 검증 해주자.