[CowAPI] 4. Test DB

준돌·2022년 5월 26일
0

오늘의 Cow

목록 보기
5/45
post-thumbnail

1. Test DB 사용


  • 배포용 DB로 AWS의 RDS를 사용합니다.
  • 하지만 프리티어로 많은 쿼리를 주고 받을 경우 과금이 부과될것입니다.
  • TDD 기반의 개발이고 개발을 시작하기전 모든 테스트 코드를 한번씩 돌려보기 때문에 Test와 개발용 DB를 local에 따로 만들 필요가 있었습니다.

2. H2 vs MySQL


  • H2
    • RDMS
    • In-memory를 제공합니다.
    • 디스크에 저장하지 않고 메모리에 올리는 것이 가능합니다.
    • 속도가 빠릅니다.
    • 서버가 작동하는 동안에만 내용을 저장하고, 서버가 작동을 멈추면 데이터가 모두 삭제되는 데이터베이스입니다. (휘발성)
    • 롤백이 필요없습니다.
    • 매우 가볍습니다.
    • Springboot 에서 Embedded Database을 지원하고 H2는 Java만 호환합니다.
  • MySQL
    • RDMS
    • 보편적으로 많이 사용하는 DB 입니다.
    • 배포하려는 AWS의 RDS와 같습니다.

😎 위와 같은 이유로 테스트 시에는 h2를 사용하고 MySQL을 개발 DB를 사용하기로 결정했습니다.


3. H2 with SpringBoot


build.gradle

runtimeOnly 'com.h2database:h2'

properties

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.username={username}
spring.datasource.password={password}

4. MySQL with SpringBoot


build.gradle

implementation 'mysql:mysql-connector-java'

properties

spring.datasource.url=jdbc:mysql://localhost:3306/{database}?serverTimezone={region}&characterEncoding=UTF-8
spring.datasource.username={username}
spring.datasource.password={password}
  • 많은 블로그와 강의에서 H2와 MySQL을 연동하는 것을 다루니 간단히 넘어가겠습니다.

5. 고민해야할 점


😎 매번 properties에 주석을 처리해 가면서 DB를 바꿔야하는 문제가 있습니다.

  • 자동화하는 방법을 고안중입니다.

😎 test용, dev용, deploy용 DB가 따로 있다면 schema가 변경될 때, 자동화하는 방법을 고안중입니다.

  • Federated로 원격으로 DB를 읽고 schema만 복사하는 방법을 적용해 보려고 했습니다.
  • 하지만, DB Engine이 Federated에서 다른 엔진으로 변경되지 않는 문제 발생했고
  • 데이터도 같이 복사되는 문제가 발생했습니다.
profile
눈 내리는 겨울이 좋아!

0개의 댓글