인메모리DB란? 

하드디스크에 말고 메모리에 생성된 DB 
스프링어플리케이션을 개발하는 입장에서 빠른 속도. TEST용 DB환경 구축이 귀찮고, 비용발생 가능해서 사용하려함

인메모리 더 알아보기


간단하고 빠른 테스트 환경을 위해서  인메모리 테스트 환경을 설정을 설명하고자 한다. 

스프링 부트에서 인메모리 테스트의 장점과 단점

장점

1. 빠르다

데이터베이스(H2, HSQLDB, SQLite 등)를 사용하면 디스크 I/O가 필요하지 않기 때문에 테스트 속도가 빠릅니다.

2.독립적인 테스트환경 

인메모리 DB는 테스트 실행 시 새로운 데이터베이스 인스턴스를 생성하고, 테스트가 끝나면 자동으로 삭제되므로 다른 테스트나 실제 애플리케이션 환경에 영향을 주지 않습니다. 이를 통해 테스트 간 간섭을 방지할 수 있습니다.

 

3.따로 DB환경 구축 안 해도 됨 

테스트와 개발 DB를 따로 구축 안 해도 됨 

주의점

1.문법 차이

인메모리 DB(H2, HSQLDB 등)와 실제 프로덕션 DB(MySQL, PostgreSQL 등)의 SQL 문법이나 동작 방식이 다를 수 있음.

-> JPA를 사용하는 기준으로 크게 제약은 아닌듯 

 

2.지원하지 않는 기능 사용  

애플리케이션이 특정 데이터베이스 기능(예: MySQL의 JSON 타입)을 사용할 경우, 인메모리 DB에서 지원하지 않을 수도 있음.

 

결론

인메모리로 안 할경우 따로 테스트용 DB를 구축해야할 텐데 굳이 그럴 필요없이 인메모리 DB를 사용하는게 이득이라는 결론을 얻었다. 

 

 

 

인메모리 테스트 사용법 정리 


요약 : resources폴더 test폴더 밑에도 만들기 -> in memory test DB의존성 가져오기(기존 H2 DB의존성 활용) -> application.yml or .properties에 DB연동 설정하기. 

 

 

 

 

먼저 우리의 프로젝트 구조를 살펴보자.

main 폴더 밑에 resources폴더가 있다.  main의 java도 이 resources 폴더의 설정에 따르지만,
test의 java도 resources폴더 설정에 따른다.
그리고 우린 resources폴더 밑에  application.yml 파일에 개발 DB를 연동했었다. 

이제 test폴더 밑에 개별 resources폴더를 만들고 사용하려고한다. 

나는 현재 h2데이터베이스를 사용했고 yml사용중 

test/resources/application.yml 경로 아래의 DB설정을 아래와 같이 변경 

/폴더까지의 경로/jpabook/src/test/resources/application.yml 

    url: jdbc:h2:mem:test
    username: sa
    password:
    driver-class-name: org.h2.Driver
    # 참고로 아무것도 안 적어도 자동설정으로 돌려버린다.


기존 DB내리고 동작 확인!

test DB URL에 맞게 동작하는 것 확인
test 성공 확인 

 

결론 

인메모리DB를 활용하는 법을 알아봤고 정리까지 했다.  앞으로 Test코드를 작성할 때
인메모리DB를 적극활용하자. 

 

김영한 강시님의 JPA 실전활용1 참고 

 

 

+ Recent posts