목차

요약: Layer 테스트는 빠른 피드백, 문제의 원인 파악, 코드 안정성, 테스트 범위 확장 등을 제공하여 E2E 테스트와 상호 보완적으로 동작합니다. Layer 테스트는 기능과 성능을 빠르게 검증하는 데 유리하고, E2E 테스트는 최종 사용자 경험을 보장하는 데 필수적입니다.

1. 탄생 배경

Layer 테스트는 소프트웨어가 복잡해지고 규모가 커지면서 등장했습니다. 기존의 E2E 테스트만으로는 충분한 검증이 어려웠고, 특히 애플리케이션이 여러 계층(컨트롤러, 서비스, 리포지토리 등)으로 나뉘면서 각 계층을 개별적으로 테스트할 필요성이 제기되었습니다. 더불어 빠른 피드백을 제공하고 문제를 효율적으로 디버깅하기 위해 Layer 테스트가 도입되었습니다.

2. 사용하는 이유

  1. 복잡성 증가에 따른 필요성
    • 현대 소프트웨어는 점점 복잡해지면서 여러 계층(예: 컨트롤러, 서비스, 리포지토리)으로 나뉘어 설계됩니다. 각 계층의 기능을 개별적으로 검증해야 각 계층이 올바르게 작동하는지를 보장할 수 있기 때문에 Layer 테스트가 필요합니다.
  2. 빠른 피드백 제공
    • Layer 테스트는 특정 계층만 테스트하기 때문에 훨씬 빠르게 완료됩니다. 이를 통해 빠른 피드백을 받고, 수정해야 할 부분을 신속히 개선할 수 있습니다. 
  3. 문제의 원인 파악이 용이함
    • E2E 테스트에서 에러가 발생할 경우, 문제의 정확한 원인을 찾기 어렵습니다.
    • Layer 테스트는 각 계층을 독립적으로 검증하기 때문에, 특정 계층에서 문제가 발생했을 때 이를 신속하게 식별할 수 있습니다.
    • 이러한 방식은 디버깅을 효율적으로 만들어 문제 해결 시간을 단축시킵니다.
  4. 세부적인 기능 검증
    • Layer 테스트는 서비스나 비즈니스 로직 같은 개별 기능을 세밀하게 검증합니다.
    • E2E 테스트에서는 놓칠 수 있는 세부적인 로직을 더 정확하게 확인할 수 있습니다.
    • 각 계층의 로직이 기대대로 동작하는지 보장하여 시스템의 일관성을 높입니다.
  5. 유지보수성 향상
    • 코드가 자주 수정되고 기능이 추가되는 상황에서도 안정적으로 시스템을 유지하기 위해 Layer 테스트는 중요한 역할을 합니다.
    • 특정 계층의 변경이 다른 계층에 영향을 미치지 않도록 보장하여 리팩토링 시에도 안정성을 유지할 수 있습니다.
  6. 테스트 범위 확장
    • E2E 테스트만으로는 모든 시나리오를 포괄하기 어렵습니다.
    • Layer 테스트를 통해 특정 시나리오나 예외 상황까지 세밀히 검증할 수 있습니다.
    • 이로써 다양한 케이스를 커버하여 테스트의 신뢰성을 높입니다.
  7.  테스트 비용 절감
    • E2E 테스트는 리소스를 많이 소모하지만, Layer 테스트는 가볍고 빠르게 실행됩니다. 이를 통해 자주 테스트를 실행할 수 있어 비용이 절감됩니다.
    • 개발 주기를 최적화하고 리소스를 효율적으로 사용할 수 있습니다.
  8. 디자인 품질 향상
    • Layer 테스트를 염두에 두고 코드를 작성하면 더 모듈화되고 테스트 가능한 구조가 됩니다.
    • 코드가 더 응집력 있게 설계되며, 가독성과 유지보수성이 향상됩니다.
    • 설계 품질이 높아지면 향후 확장성에도 유리합니다.

3. 장점과 단점

장점

  • 빠른 테스트 속도:  E2E 테스트보다 실행 속도가 빠릅니다.
  • 효율적인 디버깅:  문제가 발생할 때 정확한 계층을 쉽게 파악할 수 있습니다.
  • 높은 테스트 커버리지: 특정 비즈니스 로직이나 예외 상황을 세밀하게 테스트할 수 있습니다.
  • 디자인 품질 향상: Layer 테스트를 염두에 둔 코드는 더 모듈화되고 테스트 가능한 구조가 됩니다.
  • 테스트 비용 절감: 더 적은 리소스와 비용으로 빈번한 테스트를 수행할 수 있습니다.

단점

  • 제약된 실제 환경 테스트: Layer 테스트는 개별 계층만 테스트하므로 실제 사용자 경험이나 전체 시스템의 통합을 충분히 검증할 수 없습니다.
  • 추가적인 코드 작성 필요: Layer 테스트를 작성하기 위해서는 더 많은 테스트 코드와 설정이 필요합니다.
  • 복잡성 증가: 각 계층에 대해 별도의 테스트를 작성하고 유지해야 하므로 프로젝트 관리가 복잡해질 수 있습니다.
  • 전체 시스템 통합을 검증하는 데 제한적: Layer 테스트만으로는 전체 애플리케이션의 흐름을 보장할 수 없으므로 E2E 테스트와 함께 사용해야 합니다.

4. E2E 테스트와의 차이점

비교 항목  Layer 테스트 E2E 테스트
테스트 범위 특정 계층(컨트롤러, 서비스, 리포지토리 등)을 독립적으로 테스트 애플리케이션의 전체 워크플로우를 검증
속도 빠름 느림
문제 분석 문제 발생 시 원인 계층을 쉽게 식별 가능 문제의 원인을 특정하기 어려움
테스트 목적 특정 비즈니스 로직이나 계층의 정확성 검증 전체 시스템의 통합과 사용자 흐름 검증
비용 리소스와 비용이 적게 듦 많은 리소스와 비용이 필요함
테스트 환경 독립적이며 모의 객체(Mock)나 가짜 서비스(Fake)를 사용 실제 환경에서 모든 구성 요소를 테스트
유지보수 테스트 코드가 많아 복잡할 수 있음 한 번 작성하면 잘 변경되지 않음
  • DTO 유효성 검사는 E2E 테스트에서 실행

+ Recent posts