[JUnit]테스트 코드 배우기(4)

gamja·2023년 1월 18일
0
post-thumbnail

JUnit 에서 트랜잭션이 어떤 식으로 동작하는지 알아보기

동작 & 트랜잭션

  • 메서드 실행(트랜잭션 시작) -> 종료(트랜잭션 종료) -> RollBack

  • 실제 서버에서는 RunTimeException이 발생할 때 RollBack이 되고, 이슈가 없다면 Commit이 된다.

의문점

BeforeEach 메소드를 실행한 다음에 @Sql("classpath:db/tableInit.sql")을 실행하면 테이블이 삭제되는 거니까 BeforeEach 메소드에서 저장된 데이터는 없어야 한다. 하지만 BeforeEach에서 저장된 데이터가 그대로 남게 됨.

📌참고로 @Sql을 통해 테이블을 drop하도록 설정을 해둔 상태

🤷‍♀️ 왜 테이블을 삭제했는데 데이터가 그대로 남아있지❓

트랜잭션이 시작되고, save된 데이터는 HDD(하드디스크)에 저장되는 것이 아니라, 메모리(램)에 저장이 된다. 이때 @Sql("classpath:db/tableInit.sql")을 통해서 테이블을 삭제하고 초기화 하는 작업은 HDD에 저장된 데이터를 삭제해주는 것이지, 메모리(램)에 저장된 데이터를 삭제하는 것이 아니다.

  • Commit : 메모리(램)에 존재하는 data를 HDD(하드디스크)에 저장하는 것
  • RollBack : 메모리(램)에 존재하는 data를 HDD에 저장하지 않고, 메모리의 데이터를 삭제하는 것

h2처럼 임의로 만든 db가 아닌 실제 서버에서 검증을 해야 한다면 id 검증 말고 다른 방식으로 검증 해주자.

profile
눈도 1mm씩 쌓인다.

0개의 댓글

관련 채용 정보