[Test] TDD(Test Driven Development)

2025. 7. 5. 18:08·Software Development/Test

TDD: 테스트가 개발을 이끈다?

우리는 지금까지 테스트의 필요성과 단위 테스트 작성법에 대해 알아봤다. 이번에는 한 걸음 더 나아가, 아예 개발 프로세스 자체를 뒤집어보는 '테스트 주도 개발(TDD)'에 대해 이야기해보려 한다.

TDD(Test Driven Development)란?

TDD는 말 그대로 프로덕션 코드보다 테스트 코드를 먼저 작성해서, 테스트가 전체 구현 과정을 이끌어가는 개발 방법론이다.

"코드를 짜기도 전에 테스트를 어떻게 만들어?" 싶겠지만, TDD는 아주 구체적이고 체계적인 단계를 따른다.

TDD의 심장: RED-GREEN-REFACTOR 사이클

TDD는 아래 3단계를 끊임없이 반복하며 진행된다.

  1. 실패하는 테스트부터 작성한다 (RED)
    • 우선 "이 기능은 이렇게 동작해야 해"라는 기대를 담아 테스트 코드를 작성한다.
    • 당연히 실패한다. 아직 이 테스트를 통과시킬 프로덕션 코드가 아예 없기 때문이다.
  2. 테스트를 통과시킨다 (GREEN)
    • 이제 방금 작성한 RED 상태의 테스트를 통과시킬 최소한의 코드를 작성한다.
    • 이 단계의 목표는 오직 '테스트 통과'다. 일단 돌아가게만 만들면 된다. 코드가 좀 지저분해도, 비효율적이어도 괜찮다.
  3. 코드를 개선한다 (REFACTOR)
    • 테스트가 GREEN 상태로 유지되는 것을 확인하면서, 프로덕션 코드의 구조를 개선한다.
    • 이제 '돌아가는' 코드를 '좋은' 코드로 만든다. 중복을 제거하고, 가독성을 높이는 등의 작업을 한다.

이 RED-GREEN-REFACTOR 사이클을 계속해서 반복하며 소프트웨어를 점진적으로 완성해나가는 것이다.

왜 굳이 이렇게 거꾸로 일해야 할까?

TDD의 핵심 가치는 빠르고 잦은 피드백에 있다. 기존의 '선 기능 구현, 후 테스트 작성' 방식의 문제점을 생각해보면 TDD의 장점이 명확해진다.

기존 방식 (선 기능 구현, 후 테스트)의 문제점

  • 테스트 자체를 빼먹기 쉽다. ("일단 기능만 만들고 테스트는 나중에..." 하다가 결국 못 하고 넘어가는 경험, 다들 있지 않은가?)
  • 해피 케이스만 검증하게 된다. 내 코드가 잘 돌아갈 거라는 긍정적인 상상에 갇혀 엣지 케이스를 놓치기 쉽다.
  • 잘못된 구현을 너무 늦게 발견한다. 한참 개발하고 나서야 "아, 이거 설계가 잘못됐네" 하고 깨닫게 된다.

TDD 방식 (선 테스트, 후 기능 구현)의 장점

  • 자연스럽게 테스트 가능한 코드를 짜게 된다. 테스트를 먼저 생각하니, 어떻게 하면 외부 의존성을 분리하고 코드를 유연하게 만들지 고민하게 된다.
  • 놓치기 쉬운 엣지 케이스를 잡을 수 있다. 다양한 시나리오의 테스트 케이스를 먼저 고민하기 때문이다.
  • 구현에 대한 즉각적인 피드백을 얻는다. 코드를 한 줄 고칠 때마다 테스트가 바로 알려준다.
  • 자신감을 갖고 리팩토링할 수 있다. 든든한 테스트 코드가 내 뒤를 받쳐주니, 과감한 개선이 가능해진다.

TDD: 단순한 기술이 아닌, 관점의 변화

TDD를 도입하면 개발을 바라보는 관점 자체가 바뀐다.

기존에 테스트는 '구현 코드를 검증하는 보조 수단'이었다면, TDD에서 테스트는 구현부와 상호작용하며 함께 발전하는 파트너다. 마치 내 코드를 사용할 첫 번째 클라이언트(사용자)가 되어 즉각적으로 피드백을 주는 것과 같다.

TDD는 단순히 버그를 줄이는 기술을 넘어, 더 나은 설계와 지속 가능한 소프트웨어를 만드는 개발 방법론이다.


Ref) Practical Testing: 실용적인 테스트 가이드 강의 | 박우빈 - 인프런

'Software Development > Test' 카테고리의 다른 글

[Test] Business Layer Test(with Spring Boot)  (0) 2025.07.05
[Test] Persistence Layer Test(with Spring Boot, JPA)  (0) 2025.07.05
[Test] 테스트는 '문서'다.  (0) 2025.07.05
[Test] 단위 테스트(Unit Test)  (0) 2025.07.05
[Test] 테스트를 해야 하는 이유  (0) 2025.07.05
'Software Development/Test' 카테고리의 다른 글
  • [Test] Persistence Layer Test(with Spring Boot, JPA)
  • [Test] 테스트는 '문서'다.
  • [Test] 단위 테스트(Unit Test)
  • [Test] 테스트를 해야 하는 이유
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 (457)
      • Software Development (27)
        • Performance (0)
        • TroubleShooting (1)
        • Refactoring (0)
        • Test (8)
        • Code Style, Convetion (0)
        • DDD (0)
        • Software Engineering (18)
      • Java (71)
        • Basic (5)
        • Core (21)
        • Collection (7)
        • 멀티스레드&동시성 (13)
        • IO, Network (8)
        • Reflection, Annotation (3)
        • Modern Java(8~) (12)
        • JVM (2)
      • Spring (53)
        • Framework (12)
        • MVC (23)
        • Transaction (3)
        • AOP (11)
        • Boot (0)
        • AI (0)
      • DB Access (1)
        • Jdbc (1)
        • JdbcTemplate (0)
        • JPA (14)
        • Spring Data JPA (0)
        • QueryDSL (0)
      • Computer Science (130)
        • Data Structure (27)
        • OS (14)
        • Database (10)
        • Network (21)
        • 컴퓨터구조 (6)
        • 시스템 프로그래밍 (23)
        • Algorithm (29)
      • HTTP (8)
      • Infra (1)
        • Docker (1)
      • 프로그래밍언어론 (15)
      • Programming Language(Sub) (77)
        • Kotlin (1)
        • Python (25)
        • C++ (51)
        • JavaScript (0)
      • FE (11)
        • HTML (1)
        • CSS (9)
        • React (0)
        • Application (1)
      • Unix_Linux (0)
        • Common (0)
      • PS (13)
        • BOJ (7)
        • Tip (3)
        • 프로그래머스 (0)
        • CodeForce (0)
      • Book Review (4)
        • Clean Code (4)
      • Math (3)
        • Linear Algebra (3)
      • AI (7)
        • DL (0)
        • ML (0)
        • DA (0)
        • Concepts (7)
      • 프리코스 (4)
      • Project Review (6)
      • LegacyPosts (11)
      • 모니터 (0)
      • Diary (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
lumana
[Test] TDD(Test Driven Development)
상단으로

티스토리툴바