[JUnit Test] 2. 통합 테스트

문정준's avatar
May 15, 2025
[JUnit Test] 2. 통합 테스트

🏗️ 1. 비유로 이해하는 통합 설계 문제

🌰 상황
우리는 콩을 분류하고 투입하는 기계를 만든다. 크기 기준으로 분리한다.

✅ 기존 구조

  • 2cm 이하로 분류하는 기계2cm 두유콩 넣는 기계
  • 1cm 이하로 분류하는 기계1cm 커피콩 넣는 기계

🚫 문제 상황

  • 누군가가 요청했다: “1cm 두유콩 넣는 기계도 만들어줘”
  • 그래서 기존 2cm 두유콩 넣는 기계를 개조해서 1cm 두유콩을 처리하도록 수정함
  • 그런데 테스트할 때 이렇게 연결하면 터짐
2cm 이하 분류 기계 → 1cm 두유콩 넣는 기계

✅ 정상적인 설계

1cm 이하 분류 기계 ├─ 1cm 커피콩 넣는 기계 └─ 1cm 두유콩 넣는 기계

📌 핵심 이슈

  • *상위 분류 기계(2cm)**는 1cm 두유콩 기계를 잘 다룰 수 없음 → 의존성 불일치
  • 이런 구조가 누적되면 **전체 설계가 엉망(스파게티 코드)**이 됨
  • 이유? 명확한 규칙 없이 기능만 추가한 결과

🧱 2. 그래서 필요한 것이 아키텍처(설계 기법)

  • 문제를 해결하기 위해 설계 규칙이 필요하다
  • 구조적으로 명확한 계층 분리와 의존 규칙을 지키자

✔️ 개선된 설계 기준 (예: 크기 계층)

분류 기준
처리 대상
3cm 이하 분류기
→ 3cm 처리
2cm 이하 분류기
→ 2cm 처리
1cm 이하 분류기
→ 1cm 처리
1cm 이하 분류기
→ 커피콩 / 두유콩 등
→ 계층이 명확하고 확장에 안전

💰 3. 비용과 설계 사이의 균형

  • 이상적인 설계는 항상 깔끔한 추상화와 분리를 목표로 하지만
  • 현실은 예산/시간 제약이 있음

🎯 선택의 기준

상황
선택
시스템이 크고 유지보수가 길다면
✅ 명확한 계층 분리
작은 프로젝트이거나 예산 부족
✅ 일부 공통 처리 가능 (비용 절감 우선)
"무조건 정답은 없다", 중요한 건 맥락에 맞는 선택

🔁 실무 적용 요약

개념
설명
통합 테스트
여러 구성 요소를 실제 연결해 테스트하는 방식
의존성 문제
서로 다른 레벨이나 계약이 안 맞으면 실패 가능
스파게티 구조
규칙 없이 기능만 쌓다 보면 전체 시스템이 복잡해짐
아키텍처 설계
계층적 분리와 추상화로 안정성 확보
유연한 설계
명확한 경계 + 필요시 통합 (비용 균형 고려)

📦 한 줄 요약

"통합 테스트는 설계의 책임과 의존을 검증하는 과정이다. 규칙 없이 연결만 하면 결국 터진다."

✅ 정리 포인트

  • 테스트를 잘하려면 좋은 설계가 선행되어야 한다.
  • 설계란 결국 의존성 관리이다.
  • 추상화와 계층 구조를 도입하고, 테스트할 때도 위에서 아래로 흐름이 맞도록 설계해야 한다.
  • 설계에 “절대 정답”은 없고, 돈과 시간에 따라 선택하는 것!
Share article

sxias