Cloud Architecture

TDD, BDD, DDD

백셀건전지 2022. 6. 14. 23:15

TDD(Test Driven Development)

  • 테스트 주도 개발
  • 매우 짧은 개발 서클의 반복에 의존하는 Software developement process
  • new feature에 대해 자동화된 케이스 작성 후 테스트 케이스를 통과하는 코드 작성, 이후 코드에 대한 refactoring
  • Test Case 작성 - 기능 구현 - 리팩토링 단계를 반복하여 좋은 코드를 작성하기에 유리함
  • 테스트를 통해 기능의 안정성 보장
  • 절대적인 코드량이 늘어나 프로젝트의 개발 시간이 증가
  • Test case 작성 시 높은 이해도가 필요, 진입장벽이 높은 편

BDD(Behavior Driven Development)

  • 행위 주도 개발
  • Test Case 자체가 요구사항이 되도록 개발
  • 실제 값이어야 하는 기대값과 같은 형태로 스토리를 작성
  • 테스트 자체에 집중해 개발하는 TDD와는 달리 BDD는 비즈니스 요구 사항에 집중하여 test case를 개발함
  • 결합 테스트와 시나리오 테스트까지 확장된 개념

DDD(Domain Driven Development)

  • 도메인 주도 개발
  • 데이터 중심의 접근법을 탈피하여 순수한 Domain 모델과 logic에 집중
  • 핵심 목표: 모듈간의 의존성 최소화하고, 응집성은 최대화하는 것 (Loosely coupling, high cohesion)
  • 주요 개념
    • Domain: SW로 해결하고자 하는 문제의 영역. 만들고자 하는 서비스를 잘게 쪼개놓은 단위
    • Ubiquitous language: 프로젝트에 관련된 모든 사람들이 공통으로 써야 할 표현 방식
    • Bounded context: 프로그램 대상 영역을 덩어리로 나누는 것. 도메인을 구분하는 선. 
    • Model: 도메인의 특정 양상을 묘사한 추상화 시스템. 도메인 관련 문제 해결에 사용한다.
    • Entity: 도메인 모델 설계 시 다른 모델과 구분할 수 있는 모델. 식별자가 존재한다.
    • Value: 고유 식별자가 없는 모델. 상수나 변하지 않는 값
    • Aggregate: Entity의 집합. lifecycle이 동일한 모델을 묶어 놓은 root 모델
    • Repository: 모델을 저장하는 곳
    • Service: 도메인간 연산을 처리하는 모델
    • Factory: Entity나 Aggregate를 생성하는 모델
  • 도메인으로 개발 영역을 한정하고, 연결 관계(의존성)을 제어한다는 장점이 있음.
  • 도메인을 통해 관계자 모두가 인지할 수 있는 범위 안에서 효율적으로 협업이 이루어질 수 있도록 함.

Reference