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