인프런 커뮤니티 질문&답변

김재준님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

회원 기능 테스트

h2 인메모리 데이터베이스 눈으로 확인

해결된 질문

22.08.26 17:21 작성

·

1.4K

1

강의를 들으면서 h2 인메모리 기능을 보고 매우 좋은 기능이라고 생각이 들었습니다.

한편 "인메모리 h2 데이터베이스도 @Test를 이용해 삽입한 데이터를 눈으로 확인할 수 있을까?"에 대한 궁금증이 남더라구요.

궁금해서 테스트해보았는데 데이터가 남지 않더라구요.

1. main의 application.yml에서 h2를 인 메모리로 바꾸고 서버를 실행하였습니다. (서버를 메모리상에서 계속 실행시켜두고 싶었습니다.)

2. http://localhost:8080/h2-console에 들어가보니 테이블이 정상적으로 생성된걸 확인할 수 있었습니다.

3.test의 application.yml애서 h2를 인메모리로 바꾸었습니다.

->test의 application.yml의 ddl-auto를 none으로 하니 main에서 스프링을 실행시켜 서버를 구동하고 테이블을 만들었음에도 불구하고 Test는 서버를 찾지 못한다. 즉 main의 인메모리 서버와 Test의 인메모리 서버는 application.yml에서 이름을 동일하게 했음에도 작동을 안하는것을 보면 Test의 h2(인메모리)와 main의 h2(인메모리)는 독자적으로 작동한다.

4.Test의 회원가입을 ROLLBACK을 false로 바꾸고 실행해 보았습니다. (이때 서버가 인메모리가 아닌 경우,즉 일반 TCP h2 서버에는 데이터가 테스트이후에도 남아있었습니다.)(Test의 ddl-auto는 create)

->main(실제어플리케이션)와 @Test의 h2인메모리는 서로 다르기 때문에 ddl-auto값이 none이였으면 실패했을것이고 create이기때문에 테이블을 만들 수 있어 테스트가 실패하지않고 진행되었다.

5.확인해보니 h2 인메모리 서버에는 데이터가 남아있지 않았습니다.

->h2인메모리는 @Test와 main(실제어플리케이션)에서 각자 독자적으로 실행되기때문에 남지않는다.

->h2를 인메모리로 할 경우 Test가 끝나면 삽입했던 데이터를 메모리에서 삭제해버리기때문에 ROLLBACK을 false로 해도 인메모리 h2 서버에는 데이터가 남지 않는다.

즉 tcp h2서버를 사용할때 @Test에서 rollback을 false로 해두면 데이터베이스에 데이터가 삽입된걸 눈으로 확인 할 수 있지만 @Test에서는 애초에 main과 다른 h2인메모리를 사용하고 테스트가끝나면 @Test의 인메모리h2를 삭제해버리기 때문에 눈으로 확인할 수 없다라고 이해를 했는데 옳바른 이해일까요?

한편으로 데이터가 데이터베이스에 삽입 삭제하는걸 눈으로 확인 하고 싶을 것 같은데 h2데이터 베이스를 인메모리로 두면 확인이 안될것 같아서 불안할 것 같더라구요. 만약 현업에서 테스트를 한다면 인메모리보다는 아예 개발DB를 두고 테스트를 하기때문에 이러한 고민은 안해도 되는게 맞는거겠죠?

답변 1

2

David님의 프로필 이미지

2022. 08. 26. 17:43

안녕하세요. 김재준님, 공식 서포터즈 David입니다.

네, 잘 이해하신 것 같습니다.

테스트 시 데이터를 직접 확인하고자 하신다면 메모리 모드가 아닌 일반 모드를 사용하셔야 합니다.

감사합니다.

김재준님의 프로필 이미지
김재준
질문자

2022. 08. 27. 17:11

친절한 답변 감사드립니다 : )