개념만 보고 가자
테스트 주도 개발(Test-Driven Development, TDD)은 테스트 코드를 먼저 작성하고 이를 만족시키는 실제 구현 코드를 작성하는 개발 방법론임
1. 요구사항 이해
기능 요청(Feature Request) 또는 버그 리포트를 읽고 그 요구사항이 뭘 의미하는지 이해해야함
2.테스트 작성
- 이해한 요구사항을 바탕으로 단위 테스트 코드 작성
- 실제 코드는 작성되지 않았기 때문에 테스트 실패
- 이때 핫 리로딩 환경이 설정되어 있다면, 테스트가 자동 실행됨
3. 기능 구현
- 테스트를 통과시키기 위한 최소한의 코드 작성
- 모든 테스트를 실행하고 모두 통과(Green)해야 다음 단계로 넘어갈 수 있음
- 실패한다면 반복함
4. 리팩토링(코드 정리)
- 기능이 정상동작하면 코드를 정리하고 개선함
- 중복 제거, 네이밍 개선, 구조 최적화 등 테스트를 모두 통과해야함
5. 반복
- 다음 기능 요청 또는 다음 버그로 돌아가서 1단계부터 반복(Rinse, lather and repeat)함
Spring은 구조적으로 TDD를 실현하기 매우 적합한 프레임워크라고 함. POJO기반 설계, 의존성 주입(DI), 컨테이너 독립성, 테스트 유틸리티 제공 등
단위 테스트의 용이성
Spring에선 객체간의 결합도를 낮추는 구조(IoC/DI)를 제공해서 각 객체를 독립적으로 생성하고 테스트할 수 있는 환경을 지원함
POJO
- Spring 컴포넌트들은 컨테이너 없이도 단순 자바 객체(POJO)로 실행이 가능하기 때문에
- JUnit과 같은 일반적인 테스트 프레임워크로 쉽게 단위 테스트 수행 가능
의존성 주입(DI)
테스트 대상 객체가 내부에서 직접 의존 객체를 생성하지 않고 외부에서 주입받기 때문에 Mockito와 같은 Mocking도구와의 결합이 용이함
@Mock private MemberRepository memberRepository;
@InjectMocks private MemberService memberService;
통합 테스트 지원
1. @SpringBootTest 어노테이션
Spring Boot 기반 애플리케이션 전체를 컨텍스트 수준에서 테스트할 수 있게 해줌.
실제 애플리케이션 구동 환경과 유사한 조건에서 수행할 수 있다.
2. TestContext 프레임워크
Spring 자체적으로 TestContext Framework를 내장하고 있으며 이는 테스트 전후의 컨텍스트 초기화, 트랜잭션 처리, 설정 클래스 로딩 등을 자동화해줌
테스트 중심 개발을 유도하는 설계 철학
- POJO 기반 클래스 - > 별도의 컨테이너 없이도 테스트 가능
- DI를 통한 구성 - > 객체간 결합도 감소 - > 단위 테스트가 용이함
- 설정과 환경 분리 - > 테스트 대상 코드의 독립성이 확보됨
- 모듈화된 아키텍처 - > 책임과 기능 분리 - > 테스트 대상 명확하게 구분 가능
* 객체지향 설계 원칙(SOLID, DRY, SRP, SoC 등)은 Spring이 구조적으로 구현할 수 있도록 지원하는 핵심 개념임.
DI(의존성 주입), AOP(관점 지향), 계층형 아키텍처 등은 이 원칙들을 실현하는 수단이 된다.
'Spring Boot' 카테고리의 다른 글
| Spring 핵심 개념 - Bean (1) | 2025.06.23 |
|---|---|
| Spring 핵심 개념 - IoC(Inversion of Control) (0) | 2025.06.19 |
| 객체지향 설계 원칙(DRY, SRP, SoC) (1) | 2025.06.18 |
| POJO(Plain Old Java Object) (1) | 2025.06.18 |
| 프레임워크와 라이브러리의 차이점에 대해 (0) | 2025.06.17 |