만들면서 배우는 클린 아키텍처 — 7장 리뷰
7장 아키텍처 요소 테스트하기
만들면서 배우는 클린 아키텍처 — 7장 리뷰
7장 아키텍처 요소 테스트하기
테스트 피라미드

테스트 피라미드에서는 비용이 많이 드는 테스트는 지양
단위 테스트
- 비용이 적고, 유지보수하기 쉽고, 빠른 실행, 안정적인 작은 크기의 테스트들에 대한 높은 커버리지 유지
- 하나의 클래스를 인스턴스화하고 해당 클래스의 인터페이스를 통해 기능들을 테스트
- 다른 클래스에 의존되는 클래스들은 mock으로 대체
도메인 엔티티 테스트
- 도메인 엔티티에 녹아 있는 비즈니스 규칙을 검증하기에 가장 적절한 방법
- 도메인 엔티티의 동작은 다른 클래스에 의존하지 않기 때문에 다른 추가적인 검증은 필요 없음
유스케이스 테스트
- 테스트 중인 유스 케이스 서비스는 stateless하기 때문에 특정 상태 검증이 불가능하다. 👉🏻 상호작용 여부만 검증 가능 👉🏻 이는 코드의 행동 변경이나 코드의 구조 변경에도 테스트가 취약해진다는 의미 👉🏻 코드의 리팩터링에 테스트의 수행과 결과도 변경될 확률이 높아짐
- 모든 동작을 검증하는 대신 중요한 포인트만 골라 집중하여 테스트하는게 좋음 👉🏻 모든 동작을 검증하려고 하면 작은 변경에도 테스트들이 변경되며 이는 테스트의 가치를 떨어트리게 된다
통합 테스트
- 연결된 여러 유닛들의 네트워크가 잘 동작하는지 검증
- 두 계층 간의 경계에 걸쳐서 테스트할 수 있음
웹 어댑터 테스트
@WebMvcTest어노테이션을 이용하여 특정 요청 경로에 위치한 기능에 필요한 전체 객체 네트워크를 인스턴스화하도록 하여 테스트에서 해당 웹 컨트롤러가 이네트워크의 일부로서 잘 동작하는지 검증- 웹 컨트롤러를 평범한 단위 테스트로 테스트하면 모든 매핑, 유효성 검증 등에 대한 커버리지가 낮아지고 운영 환경에서 정상 동작할지 확신을 가질 수 없게 된다
영속성 어댑터 테스트
- 단순히 어댑터의 로직만 검증하는 것이라면 단위 테스트의 유스케이스 테스트가 더 어울림 👉🏻 데이터베이스의 매핑 등도 검증하기 위해 통합 테스트가 어울림
- 실제 데이터베이스를 사용 👉🏻 모킹 시 구문의 오류나 테이블과 객체 간의 매핑 에러등으로 문제가 생길 확률이 높아짐 👉🏻 인메모리 DB를 사용하는 경우 실제 데이터베이스와 고유 문법이나 디비 설정등에 대한 처리를 해주지 않음으로 인한 간극이 문제가 된다 👉🏻 TestContainer를 이용하여 도커 컨테이너에 띄워 사용할 수 있음
시스템 테스트
- 애플리케이션을 구성하는 모든 객체 네트워크를 가동시켜 특정 유스케이스가 전 계층에서 잘 동작하는지 검증
- 시스템 테스트라고 하더라도 언제나 서드파티 시스템을 실행하는 것은 아니기 때문에 모킹이 필요한 경우도 있음 👉🏻 육각형 아키텍처에서는 몇개의 출력 포트 인터페이스만 모킹하면 되기 때문에 쉽게 해결 가능
- 시스템 테스트는 실제 사용자의 관점에서 애플리케이션을 검증할 수 있다. 👉🏻 사용자가 취할 수 있는 중요 애플리케이션 기능 및 경로 검증
- 단위 테스트와 통합 테스트가 발견하지 못하는 버그를 탐색할 수 있음 👉🏻 ex) 계층간 매핑 버그
- 여러 개의 유스케이스를 결합하여 시나리오를 만들 때 더 효과적임
얼마만큼의 테스트의 충분할까?
라인 커버리지
- 테스트 성공을 측정하는 데에는 잘못된 지표.
- 코드의 중요한 부분이 커버되지 않을 수 있기 때문에 무의미함
👉🏻 얼마나 마음 편하게 배포할 수 있느냐
자주 배포할수록 테스트를 더 신뢰할 수 있음. 자주 배포할수록 자주 테스트가 검증이 되기 때문에
- 테스트는 개발 후가 아닌 개발 중에 이뤄져야 한다.
- 리팩터링 할 때마다 테스트 코드도 변경되어야 한다면 테스트는 가치를 잃게 된다.
- 추가나 변경 때마다 테스트를 고치는데 오래 걸린다면 코드의 구조적 변경에 취약하므로 개선이 필요.
테스트는 아키텍터의 문제에 대해 경고하고 올바른 길로 인도해준다.
→ 테스트를 작성할 때 어떤 종류의 테스트를 작성할지 모르겠다면
→ 모킹하는 것이 버거워지거나 특정 부분을 커버하기 어렵다면
→ 경계의 구분이 명확하지 않고 각 경계의 기능과 역할이 깔끔하게 분리되지 못함을 뜻함
→ 작은 단위로 핵심 로직만을 담고 있다면 위의 현상들이 나타나지 않을 것.
메타데이터
- post_id
- 34c2ec4de848
- slug
- 만들면서-배우는-클린-아키텍처-7장-리뷰-34c2ec4de848
- url
- https://medium.com/@ethan.baig.hw/%EB%A7%8C%EB%93%A4%EB%A9%B4%EC%84%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%ED%81%B4%EB%A6%B0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-7%EC%9E%A5-%EB%A6%AC%EB%B7%B0-34c2ec4de848
- canonical_url
- https://medium.com/@ethan.baig.hw/%EB%A7%8C%EB%93%A4%EB%A9%B4%EC%84%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%ED%81%B4%EB%A6%B0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-7%EC%9E%A5-%EB%A6%AC%EB%B7%B0-34c2ec4de848
- author_url
- https://medium.com/@ethan.baig.hw
- status
- ok
- fetched_at
- 2026-07-22 21:22:50