통합 테스트

여러 모듈이나 계층이 함께 동작할 때 올바르게 연동되는지 검증하는 테스트 기법입니다.

핵심 특징

통합 테스트 범위 예시

[Controller] → [Service] → [Repository] → [DB]
       ↑ 이 전체 흐름을 하나의 테스트로 검증
테스트 유형검증 범위
서비스 + 리포지토리비즈니스 로직이 실제 DB와 정상 연동되는지
컨트롤러 + 서비스HTTP 요청 → 응답까지의 흐름
전체 슬라이스컨트롤러 → 서비스 → 리포지토리 → DB 전 구간
외부 API 연동외부 서비스 호출 및 응답 처리

Java 예시 (Spring Boot)

@SpringBootTest
@Transactional  // 테스트 후 자동 롤백
class OrderServiceIntegrationTest {

    @Autowired
    private OrderService orderService;

    @Autowired
    private ProductRepository productRepository;

    @Test
    @DisplayName("재고가 있는 상품을 주문하면 재고가 차감된다")
    void orderReducesStock() {
        // Given
        Product product = productRepository.save(
            new Product("키보드", 10_000, 100)
        );

        // When
        Order order = orderService.placeOrder(product.getId(), 3);

        // Then
        Product updated = productRepository.findById(product.getId()).get();
        assertThat(order.getStatus()).isEqualTo(OrderStatus.COMPLETED);
        assertThat(updated.getStock()).isEqualTo(97);
    }
}

주요 테스트 슬라이스 어노테이션 (Spring Boot)

어노테이션대상 계층로딩 범위
@SpringBootTest전체모든 Bean 로딩
@WebMvcTestControllerMVC 관련 Bean만 로딩
@DataJpaTestRepositoryJPA 관련 Bean만 로딩 (내장 DB 사용)
@RestClientTest외부 API 호출RestTemplate/WebClient 관련만 로딩

단위 테스트 vs 통합 테스트

항목단위 테스트통합 테스트
의존성Mock으로 대체실제 또는 테스트용 환경 사용
속도ms 단위초~분 단위
실패 원인 파악쉬움 (범위가 좁음)어려움 (여러 모듈 관여)
신뢰도실제 환경과 차이 가능실제 환경에 더 가까움
작성 비용낮음높음

실무 팁: 단위 테스트로 개별 로직을 충분히 검증한 뒤, 통합 테스트는 핵심 비즈니스 흐름과 모듈 간 경계에 집중하는 것이 효율적입니다.

CSLOG에서 보기