본문 바로가기
  • Let's study
BackEnd/Spring

[Spring] 테스트 환경 분리(dev / test)

by 코딩고수이고파 2026. 8. 4.

Spring Boot에서는 개발 환경과 테스트 환경의 설정을 분리해서 사용할 수 있다.

개발 환경과 테스트 환경이 같은 DB를 사용하면 테스트 중 생성하거나 수정한 데이터가 실제 개발 데이터에 영향을 줄 수 있다. 

따라서 보통은

 

  • 개발 환경(dev) → 파일 기반 DB
  • 테스트 환경(test) → 메모리 기반 DB

를 사용한다.

SpringBootTest는 AssertJ가 기본 포함

일반 자바 프로젝트에서는 AssertJ를 사용하려면 build.gradle에 의존성을 추가해야 한다.

 

testImplementation("org.assertj:assertj-core:3.26.3")
 

하지만 Spring Boot 프로젝트에서는 spring-boot-starter-test에 AssertJ가 포함되어 있기 때문에 별도로 추가할 필요가 없다.

application-test.yml 생성

테스트 환경에서만 사용할 설정 파일을 만든다.

 

application-test.yml

spring:
  datasource:
    url: jdbc:h2:mem:db_dev;MODE=MySQL

 

application-test.yml은 test 프로파일이 활성화되었을 때만 적용된다.

테스트 클래스에는 아래 어노테이션을 추가한다.

 

@ActiveProfiles("test")
@SpringBootTest
class PostServiceTest {

}

 

@ActiveProfiles("test")를 붙이면 테스트 실행 시 test 프로파일이 활성화되어 application-test.yml 설정을 사용한다.

메모리 모드를 사용하는 이유

테스트에서는 아래 URL을 사용한다.

 

jdbc:h2:mem:db_dev;MODE=MySQL

 

여기서 mem은 메모리 모드를 의미한다.

메모리 DB는 프로그램이 실행되는 동안에만 존재하며, 종료되면 자동으로 삭제된다.

따라서

  • 테스트가 끝나면 데이터가 자동으로 사라진다.
  • 매번 DB를 직접 삭제하거나 초기화할 필요가 없다.
  • 항상 깨끗한 환경에서 테스트를 실행할 수 있다.

@Transactional 테스트

@Transactional
public class PostRepositoryTest {
...
}

 

테스트 클래스에 @Transactional 을 붙이면 테스트 종료 후 트랜잭션이 롤백된다.

즉, DB가 자동으로 원래 상태로 복구된다.

각 테스트마다 붙일 필요 없이 클래스에 한 번만 붙이면 된다.

application-dev.yml 생성

개발 환경에서는 기존처럼 파일 기반 H2를 사용한다.

 

application-dev.yml

spring:
  datasource:
    url: jdbc:h2:./db_dev;MODE=MySQL
    username: sa
    password:
    driver-class-name: org.h2.Driver

 

파일 모드이므로 애플리케이션을 종료해도 데이터가 그대로 유지된다.

application.yaml과의 관계

application-test.yml은 application.yaml의 내용을 모두 대체하는 것이 아니다.

기본적으로는 application.yaml을 먼저 읽고,

application-test.yml에 있는 내용만 덮어쓴다(Override).

기본 프로파일 지정

특별히 지정하지 않으면 dev 환경이 실행되도록 설정한다.

spring:
  profiles:
    active: dev

댓글