@SpringBootTest는 Spring Boot 기반의 테스트를 위한 통합 테스트 어노테이션입니다. 이 어노테이션을 사용함으로써, Spring Boot 애플리케이션의 전체 컨텍스트를 테스트에 로드할 수 있습니다. 즉, @SpringBootTest는 실제 애플리케이션을 실행할 때처럼 모든 스프링 빈을 로드하고, 의존성 주입, 설정 파일 처리 등을 포함한 전체 애플리케이션 환경을 테스트에서도 사용할 수 있도록 해줍니다.
@SpringBootTest에 webEnvironment 속성을 설정하는 것은 테스트 시에 웹 환경을 어떻게 구성할지를 결정합니다. SpringBootTest.WebEnvironment에는 다음과 같은 옵션이 있습니다:
MOCK: 기본값으로, 내장된 서블릿 컨테이너를 실행하지 않고, 웹 환경을 모킹하기 위해 MockServletContext를 사용합니다. Spring MVC 테스트와 함께 사용하기에 적합합니다.
RANDOM_PORT: 실제 내장된 서블릿 컨테이너를 사용하고, 사용 가능한 랜덤 포트에 애플리케이션을 배포합니다. 실제 HTTP 요청을 보내 테스트할 때 유용합니다.
DEFINED_PORT: 실제 내장된 서블릿 컨테이너를 사용하고, application.properties 또는 application.yml에 정의된 포트(또는 기본 포트 8080)에 애플리케이션을 배포합니다.
NONE: 웹 환경을 제공하지 않습니다. 즉, 웹 환경과 관련된 빈들을 로드하지 않으며, 웹 서버를 시작하지 않습니다. 데이터 접근 계층이나, 서비스 계층 같이 웹 환경이 필요하지 않은 컴포넌트들을 테스트할 때 적합합니다.
1. MOCK (기본값)
장점: 실제 서버를 구동하지 않기 때문에 빠른 테스트 실행이 가능합니다. MockMvc를 사용하여 스프링 MVC 컨트롤러를 테스트하는 데 적합합니다.
사용 시나리오: 컨트롤러 레이어의 단위 테스트나 통합 테스트에서 주로 사용됩니다. HTTP 요청과 응답을 모의하여 웹 계층의 로직을 테스트하고자 할 때 유용합니다.
2. RANDOM_PORT
장점: 실제 내장 서버를 사용하고, 랜덤 포트에서 애플리케이션을 실행합니다. 실제 HTTP 요청을 보내어 테스트할 수 있으며, 보다 실제 실행 환경에 가깝게 테스트할 수 있습니다.
사용 시나리오: REST API를 포함한 실제 웹 환경에서의 통합 테스트에 적합합니다. TestRestTemplate 또는 WebTestClient를 사용하여 테스트를 실행할 수 있습니다.
3. DEFINED_PORT
장점: 실제 내장 서버를 사용하고, 애플리케이션을 특정 포트에서 실행합니다. RANDOM_PORT와 유사하지만, 고정된 포트에서 테스트를 실행합니다.
사용 시나리오: 특정 포트에서 애플리케이션을 실행해야 하는 테스트 환경 설정이 필요할 때 사용됩니다. 예를 들어, 다른 서비스나 애플리케이션과의 통합 테스트에서 포트를 고정해야 할 필요가 있을 때 유용합니다.
4. NONE
장점: 웹 환경을 전혀 로드하지 않으므로, 리소스 사용이 적고 테스트 실행 속도가 가장 빠릅니다.
사용 시나리오: 웹 계층이 아닌, 서비스 레이어나 데이터 접근 레이어 같은 백엔드 컴포넌트의 테스트에 적합합니다. 웹 환경에 의존하지 않는 테스트를 실행할 때 사용됩니다.
댓글