[사이드프로젝트] 그저 그런 REST API로 괜찮은가? - 진정한 REST API 구현해보기 - DB 세팅(테스트 & 배포 환경 분리)

gimseonjin616·2022년 3월 27일
0

현재 상태


현재 프로젝트에서는 H2를 사용해서 테스트를 구동하고 있다. 다만 여기서 문제는 배포, 빌드 환경에서도 H2를 사용하고 있다는 것이다.

나는 빌드 & 배포에서는 MySQL을 사용하고 테스트 환경에서는 H2를 사용할 계획이다.
따라서 DB 환경을 분리해야 한다.

pom.xml 수정


우선 pom.xml부터 수정해야 한다.

현재 h2의 범위는 runtime이기 때문에 이를 test 범위로 바꾸고 mysql-connector-java 스코프를 바꿔준다.

		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

application.yml 수정


기본적인 DB 접속 정보는 application.yml에 저장한다.

그러면 spring에서 자동으로 이를 불러와 연결시켜준다.

따라서 application.yml에 다음과 같이 정보를 저장한다.

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:""
    username: ""
    password: ""

  jpa:
    hibernate:
      ddl-auto: create

application-test.yml 작성


위 설정만 하면 테스트 환경에서도 mysql을 연결한다.

왜냐하면 아래의 코드를 보면 알 수 있다.

테스트 코드에서 사용하는 테스트는 SpringBootTest이다.

이 어노테이션은 Springboot서버를 실행시켜서 테스트를 하기 때문에 기본적인 application.yml 세팅 정보를 가져온다.

따라서 별도의 test yml을 정의해주지 않으면 빌드 환경의 DB 세팅이 불러와진다.

테스트 하위 폴더에 resource 파일을 만들고 application-test.yml파일을 작성한다.

// application-test.yml
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    hikari:
      jdbc-url: jdbc:h2:mem:testdb
    username: root
    password:

  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        dialect : org.hibernate.dialect.H2Dialect

이러면 기본 application.yml이 로딩되고 그 위에 application-test.yml 파일이 덮어씌워진다.

따라서 test & build에서 공통적으로 사용하는 세팅은 application.yml에 저장하고 테스트 환경에서만 사용할 설정은 application.yml에 세팅해서 DB 환경을 분리할 수 있다.

테스트 코드 수정


테스트 코드에서 application-test.yml을 사용하기 위해선 별도의 설정을 해줘야 한다.

사용하는 어노테이션은 ActiveProfiles이고 이 어노테이션은 application-""에 들어가는 문자열로 매핑시켜줄 수 있다.

따라서 각 테스트 코드마다 ActiveProfiles("test") 어노테이션을 추가해준다.

@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")
public class EventControllerTest {
...
}
profile
to be data engineer

0개의 댓글

관련 채용 정보