목차
요약: Layer 테스트는 빠른 피드백, 문제의 원인 파악, 코드 안정성, 테스트 범위 확장 등을 제공하여 E2E 테스트와 상호 보완적으로 동작합니다. Layer 테스트는 기능과 성능을 빠르게 검증하는 데 유리하고, E2E 테스트는 최종 사용자 경험을 보장하는 데 필수적입니다.
1. 탄생 배경
Layer 테스트는 소프트웨어가 복잡해지고 규모가 커지면서 등장했습니다. 기존의 E2E 테스트만으로는 충분한 검증이 어려웠고, 특히 애플리케이션이 여러 계층(컨트롤러, 서비스, 리포지토리 등)으로 나뉘면서 각 계층을 개별적으로 테스트할 필요성이 제기되었습니다. 더불어 빠른 피드백을 제공하고 문제를 효율적으로 디버깅하기 위해 Layer 테스트가 도입되었습니다.
2. 사용하는 이유
- 복잡성 증가에 따른 필요성
- 현대 소프트웨어는 점점 복잡해지면서 여러 계층(예: 컨트롤러, 서비스, 리포지토리)으로 나뉘어 설계됩니다. 각 계층의 기능을 개별적으로 검증해야 각 계층이 올바르게 작동하는지를 보장할 수 있기 때문에 Layer 테스트가 필요합니다.
- 빠른 피드백 제공
- Layer 테스트는 특정 계층만 테스트하기 때문에 훨씬 빠르게 완료됩니다. 이를 통해 빠른 피드백을 받고, 수정해야 할 부분을 신속히 개선할 수 있습니다.
- 문제의 원인 파악이 용이함
- E2E 테스트에서 에러가 발생할 경우, 문제의 정확한 원인을 찾기 어렵습니다.
- Layer 테스트는 각 계층을 독립적으로 검증하기 때문에, 특정 계층에서 문제가 발생했을 때 이를 신속하게 식별할 수 있습니다.
- 이러한 방식은 디버깅을 효율적으로 만들어 문제 해결 시간을 단축시킵니다.
- 세부적인 기능 검증
- Layer 테스트는 서비스나 비즈니스 로직 같은 개별 기능을 세밀하게 검증합니다.
- E2E 테스트에서는 놓칠 수 있는 세부적인 로직을 더 정확하게 확인할 수 있습니다.
- 각 계층의 로직이 기대대로 동작하는지 보장하여 시스템의 일관성을 높입니다.
- 유지보수성 향상
- 코드가 자주 수정되고 기능이 추가되는 상황에서도 안정적으로 시스템을 유지하기 위해 Layer 테스트는 중요한 역할을 합니다.
- 특정 계층의 변경이 다른 계층에 영향을 미치지 않도록 보장하여 리팩토링 시에도 안정성을 유지할 수 있습니다.
- 테스트 범위 확장
- E2E 테스트만으로는 모든 시나리오를 포괄하기 어렵습니다.
- Layer 테스트를 통해 특정 시나리오나 예외 상황까지 세밀히 검증할 수 있습니다.
- 이로써 다양한 케이스를 커버하여 테스트의 신뢰성을 높입니다.
- 테스트 비용 절감
- E2E 테스트는 리소스를 많이 소모하지만, Layer 테스트는 가볍고 빠르게 실행됩니다. 이를 통해 자주 테스트를 실행할 수 있어 비용이 절감됩니다.
- 개발 주기를 최적화하고 리소스를 효율적으로 사용할 수 있습니다.
- 디자인 품질 향상
- Layer 테스트를 염두에 두고 코드를 작성하면 더 모듈화되고 테스트 가능한 구조가 됩니다.
- 코드가 더 응집력 있게 설계되며, 가독성과 유지보수성이 향상됩니다.
- 설계 품질이 높아지면 향후 확장성에도 유리합니다.
3. 장점과 단점
장점
- 빠른 테스트 속도: E2E 테스트보다 실행 속도가 빠릅니다.
- 효율적인 디버깅: 문제가 발생할 때 정확한 계층을 쉽게 파악할 수 있습니다.
- 높은 테스트 커버리지: 특정 비즈니스 로직이나 예외 상황을 세밀하게 테스트할 수 있습니다.
- 디자인 품질 향상: Layer 테스트를 염두에 둔 코드는 더 모듈화되고 테스트 가능한 구조가 됩니다.
- 테스트 비용 절감: 더 적은 리소스와 비용으로 빈번한 테스트를 수행할 수 있습니다.
단점
- 제약된 실제 환경 테스트: Layer 테스트는 개별 계층만 테스트하므로 실제 사용자 경험이나 전체 시스템의 통합을 충분히 검증할 수 없습니다.
- 추가적인 코드 작성 필요: Layer 테스트를 작성하기 위해서는 더 많은 테스트 코드와 설정이 필요합니다.
- 복잡성 증가: 각 계층에 대해 별도의 테스트를 작성하고 유지해야 하므로 프로젝트 관리가 복잡해질 수 있습니다.
- 전체 시스템 통합을 검증하는 데 제한적: Layer 테스트만으로는 전체 애플리케이션의 흐름을 보장할 수 없으므로 E2E 테스트와 함께 사용해야 합니다.
4. E2E 테스트와의 차이점
비교 항목 | Layer 테스트 | E2E 테스트 |
테스트 범위 | 특정 계층(컨트롤러, 서비스, 리포지토리 등)을 독립적으로 테스트 | 애플리케이션의 전체 워크플로우를 검증 |
속도 | 빠름 | 느림 |
문제 분석 | 문제 발생 시 원인 계층을 쉽게 식별 가능 | 문제의 원인을 특정하기 어려움 |
테스트 목적 | 특정 비즈니스 로직이나 계층의 정확성 검증 | 전체 시스템의 통합과 사용자 흐름 검증 |
비용 | 리소스와 비용이 적게 듦 | 많은 리소스와 비용이 필요함 |
테스트 환경 | 독립적이며 모의 객체(Mock)나 가짜 서비스(Fake)를 사용 | 실제 환경에서 모든 구성 요소를 테스트 |
유지보수 | 테스트 코드가 많아 복잡할 수 있음 | 한 번 작성하면 잘 변경되지 않음 |
'기술 이해하기' 카테고리의 다른 글
[ AWS ] ECR 이해하기: 탄생배경과 장단점 (0) | 2024.11.06 |
---|---|
[ TDD ] E2E 테스트 이해하기: 탄생배경과 장단점 (1) | 2024.10.26 |
[ Docker ] Docker 이해하기: 탄생배경과 장단점 (2) | 2024.10.10 |