DDD, BDD, TDD
TDD, BDD, DDD
세 가지 모두 "DD(Driven Development)" — 즉 무언가를 중심으로 개발을 이끌어가는 방법론이지만, 각각 초점이 다릅니다.
TDD — Test-Driven Development (테스트 주도 개발)
"코드보다 테스트를 먼저 작성한다"
개발 사이클이 Red → Green → Refactor 3단계로 돌아갑니다.
Red — 아직 구현이 없으니 당연히 실패하는 테스트를 먼저 작성
Green — 테스트를 통과하는 최소한의 코드를 작성
Refactor — 동작은 유지하면서 코드 구조를 개선
// 1. 테스트 먼저
@Test
void 두_수를_더한다() {
assertThat(calculator.add(2, 3)).isEqualTo(5);
}
// 2. 통과할 구현 작성
public int add(int a, int b) { return a + b; }
목적: 버그 조기 발견, 리팩토링 안전망, 설계 자연스럽게 개선
초점: 개발자 → 코드 단위(메서드, 클래스)
BDD — Behavior-Driven Development (행동 주도 개발)
"사용자 행동 시나리오로 개발 방향을 잡는다"
TDD에서 발전한 방법론으로, 테스트를 비개발자도 읽을 수 있는 자연어로 작성합니다. Given / When / Then 구조가 핵심이에요.
# Gherkin 문법 예시
Feature: 로그인
Scenario: 올바른 비밀번호로 로그인
Given 사용자가 로그인 페이지에 있고
When 올바른 아이디와 비밀번호를 입력하면
Then 메인 페이지로 이동한다
목적: 기획자·개발자·QA 간 소통 정렬, 요구사항과 테스트를 일치시킴
초점: 팀 전체 → 기능 단위(사용자 시나리오)
DDD — Domain-Driven Design (도메인 주도 설계)
"비즈니스 도메인의 언어와 구조로 소프트웨어를 설계한다"
TDD/BDD와 달리 테스트 방법론이 아니라 설계 철학입니다. 코드 구조를 비즈니스 개념과 일치시키는 것이 핵심이에요.
주요 개념들:
개념 | 설명 |
|---|---|
Ubiquitous Language | 개발자·기획자가 같은 용어 사용 ("주문", "배송", "결제") |
Entity | 고유 식별자가 있는 객체 (주문 #1234) |
Value Object | 값 자체가 의미인 객체 (금액, 주소) |
Aggregate | 함께 관리되는 객체 묶음 + 루트 엔티티 |
Bounded Context | 도메인을 논리적으로 나눈 경계 (주문 컨텍스트 / 배송 컨텍스트) |
// 비즈니스 언어가 코드에 그대로 반영됨
public class Order {
public void place() { ... }
public void cancel() { ... }
public void ship() { ... }
}
목적: 복잡한 비즈니스 로직을 코드 구조에 녹여내기
초점: 설계자·도메인 전문가 → 시스템 전체 구조
세 가지 비교 요약
TDD | BDD | DDD | |
|---|---|---|---|
종류 | 개발 기법 | 개발 기법 | 설계 철학 |
초점 | 코드 품질 | 요구사항 명세 | 도메인 모델링 |
주체 | 개발자 | 개발자 + 기획자 + QA | 개발자 + 도메인 전문가 |
산출물 | 테스트 코드 | 시나리오 + 테스트 | 도메인 모델 + 구조 설계 |
댓글
댓글이 없습니다.
