inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 DB 2편 - 데이터 접근 활용 기술

테스트 - 스프링 부트와 임베디드 모드

스프링부트 임베디드 모드 테스트 시 커밋

423

chaelynjang

작성한 질문수 24

0

안녕하세요 강사님

좋은 강의 감사드리고 해당 질문이 다소 답답하게 느껴지실 수도 있을 것 같아 죄송하지만 강의 실습하는 도중 궁금한 점이 생겨 질문 남깁니다.

테스트할 때 임베디드 모드 DB를 사용하게 되면

@Commit 어노테이션을 달더라도 실제 db 테이블에 데이터가 저장되지는 않더라고요

실제 db가 아닌 임베이드 db를 사용해서 그런 것이라면

임베디드 모드 db를 사용할 때는 애플리케이션이 종료되면 임베디드 모드로 동작하는 H2 데이터베이스도 함께 종료되고, 데이터도 모두 사라진다고 강의 자료에도 써있는데 그러면 @Commit 어노테이션이 무의미하게 되는 것인가요?

제가 아래의 동일한 테스트를 여러번 돌릴 때마다 DB데이터가 다 사라지는 것 같더라고요(테스트 할 때는 로그로 데이터 개수를 찍어봤습니다)

그럼 각 테스트 단위마다 새로운 임베디드 모드의 DB가 종료되고 다시 새롭게 생성되는 건가요?

확인 후 답변 주시면 정말 감사드리겠습니다..!!

 

spring

답변 1

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요. 스프링 부트의 임베디드 모드로 테스트할 때는 실제 데이터베이스에 데이터가 저장되지 않고, H2 데이터베이스를 사용합니다. 그래서 애플리케이션이 종료되면 임베디드 모드로 동작하는 H2 데이터베이스도 함께 종료되며 데이터도 사라집니다.

@Commit 어노테이션은 테스트 메소드에서 @Transactional을 사용할 때 테스트에서 발생하는 변경 사항을 커밋하는 역할을 합니다. 그러나 임베디드 모드에서는 테스트가 종료될 때 모든 데이터가 롤백되기 때문에 실제 DB에는 데이터가 저장되지 않습니다. 따라서 @Commit 어노테이션이 무의미한 것이 맞습니다.

각 테스트 단위마다 새로운 임베디드 모드의 DB가 생성되고 종료됩니다. 그래서 테스트가 한 번 실행될 때는 데이터가 저장되지 않지만, 다시 테스트를 실행할 때에는 새로운 DB가 생성되기 때문에 데이터가 다시 초기화됩니다.

이해에 도움이 되셨나요? 추가로 궁금한 점이 있으면 언제든지 물어보세요. 좋은 결과 있기를 바라요!

RepositoryTest의 패키지 위치가 domain인 이유

0

36

2

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

31

1

update()에 사용하는 setter 질문드립니다.

0

49

1

SQL 중심적 개발의 문제점에 대한 질문

0

75

1

혹시 Containing 을 안쓰신 이유가 있을까요?

0

86

2

[공유] 스프링부트 4.x 버전 mybatis 연동

0

183

1

@repository 어노테이션

0

91

3

ItemService

0

59

1

논리 커밋, 물리 커밋 질문드립니다.

0

54

1

내부 트랜잭션 커밋은 필수인가요?

0

57

1

프록시 커넥션 객체를 반환할 때 생성하는건가요?

0

55

1

Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)

2

180

2

JPQL 대신 네이티브 쿼리를 사용해야 하는 경우

0

80

1

@EventListener(ApplicationReadyEvent.class) 관련

0

89

1

트랜잭션 동기화 매니저와 데이터 소스

0

77

1

DB 관련 강의 개설 계획은 없으신건가요?

0

133

2

물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요

0

94

1

스프링 3 버전 이상 rollbackFor 변경된듯요

1

113

1

트랜잭션 전파 질문.

0

87

1

프로젝트 오픈 에러

0

126

1

외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다

0

84

2

같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환

0

74

1

h2 인메모리 테스트중 예약어 충돌날 경우 대처방법

0

105

1

커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문

0

98

2