테스트 코드를 공부하면서 실습하던 중 DB연결과 관련해서 고민거리가 생겼다.
게시글 작성과 관련된 테스트에서 정상적으로 테스트가 진행된 뒤 데이터는 삭제되었지만 해당 테이블의 ID가 Auto Increment로 설정되어있어 실제 게시글을 작성했을 때 ID가 테스트를 실행했던 만큼 뒤로 밀리는 현상이 발생했다. 사실 DB에서 데이터만 정상적으로 삭제된다면 별 상관은 없겠지만 그 이전에 '테스트'가 DB에 영향을 준다는 것이 신경쓰였기에 해결방법을 찾아보았다.
내가 선택한 해결법은 아주 간단하지만 명확한 방법으로 바로 테스트용 DB를 생성하고 테스트는 해당 DB를 이용하는 방법이다. 이 방법을 적용하는 법은 매우 간단하다. 총 2개의 파일만 생성하면 된다. (먼저 이 포스팅에서 설명하는 방법은 스프링부트를 기준으로 설명하는 것이기 때문에 스프링 레거시 프로젝트는 적용법이 다를 것이다.)
스프링 부트에서는 여러 설정을 간편하게 관리하기 위해서 apllication.properties(or yml) 파일이 존재한다. 해당 파일은 일반적으로 디렉토리의 'main/resources'에만 존재한다. 해당 파일에 여러 설정값들을 작성해주면 스프링부트를 실행할 때 값들이 주입되거나 설정되어 프로젝트 실행에 필요한 요소들을 알아서 채워준다. 그럼 테스트용 DB를 만들고 연결하기 위해선 어떤 과정이 필요할까. 바로 DB를 생성하고 관련된 정보를 저장한 test용 application.properties(or yml) 파일을 작성하면 된다. 테스트용 application 파일의 위치는 'test/resources' 아래에 저장하면 된다.
# ~/test/resources/application.yml
spring:
datasource:
# DB와 프로젝트에 따라 알맞은 내용 작성
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbc-url: jdbc:log4jdbc:mysql://localhost:3306/playground_test
username: root
password: 1234
# JPA 사용 시 설정
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
format_sql: false
hibernate:
ddl-auto: create
# mybatis 사용 시 설정
mybatis:
type-aliases-package: kim.jiwook.playground.vo
mapper-locations: classpath:/mapper/*.xml
# sql logging 사용 시 설정
logging:
level:
jdbc:
sqlonly: off
sqltiming: info
audit: off
resultset: off
resultsettable: info
connection: off
위의 내용을 바탕으로 본인의 프로젝트에 맞게 내용들을 추가, 수정, 삭제한 뒤 테스트를 진행해주면 된다.
그럼 결과적으로 실제 DB와 분리된 테스트용 DB로 테스트를 진행할 수 있게 된다.
test: 테스트용 DB 분리 · N1ghtsky0/playground@dbdeb58
* 게시글 작성 api 테스트를 진행하면서 데이터는 지워졌지만 ID가 auto increment라 실제 데이터가 입력되었을 때 id가 밀리는 현상을 방지하기 위해 DB를 분리함
github.com
'~2025' 카테고리의 다른 글
Controller 에서 Form-data를 받는 방법들 (0) | 2024.01.15 |
---|---|
쿠키로 jwt 전달하고 검증하기 (0) | 2023.11.29 |
도커 volume 호스트환경에서 저장 위치 찾기(윈도우 10) (0) | 2023.11.16 |
스프링 부트 + 도커(docker, docker-compose) (1) | 2023.11.06 |
스프링 부트 + 마이바티스 - underscore to camelcase 적용 (0) | 2023.11.05 |