TDD(Test Driven Development) - 테스트 주도 개발
- 소스코드를 작성하기 전에 테이스트 케이스를 먼저 작성하고 테스트로 검증된 코드를 가지고 실제 코드를 작성하는
개발 방법론
개념
- 요구되는 기능에 대한 자동화된 테스트 케이스를 작성
- 해당 테스트 케이스를 통과하는 가장 짧고 가독성이 좋고 유지보수성이 뛰어난 코드 작성
- 상황에 맞게 리팩토링
TDD 사이클
- Red(실패) : 실패하는 테스트 코드를 먼저 작성
- Green(성공) : 테스트 코드를 성공시키기 위한 실제 코드를 작성
- Refactor(리팩토링) : 실제 코드와 테스트 코드 리팩토링 수행
장점
- 좋은 코드 작성에 유리
- 테스트 코드 작성 -> 기능 구현 코드 작성 -> 리팩토링의 단계를 반복하기 때문에 시스템에서 발생할 수 있는
오류들을 줄일 수 있다. - 짧은 간격으로 기능의 구현과 리팩토링의 과정을 반복하여 간결하고 깔끔한 코드를 작성하는데 도움이 된다.
- 테스트 코드 작성 -> 기능 구현 코드 작성 -> 리팩토링의 단계를 반복하기 때문에 시스템에서 발생할 수 있는
- 리팩토링을 통해 변경되는 소스의 기능에 대한 부분에서 보다 안정적인 리팩토링이 가능하다
- 작은 단위의 기능부터 개발을 진행하기 때문에 유연한 확장성을 가지게 해준다.
단점
- 코드 생산성 문제
- 테스트 코드의 작성으로 절대적인 코드량이 늘어난다.
- 기능 구현 외에 테스트 코드를 추가적으로 작성해야 하기 때문에 프로젝트 시간이 늘어난다.
- 일정이 촉박하고 빠른 개발이 필요한 프로젝트에서는 적용하기 어렵다.
- 테스트 코드 진입장벽
- 테스트 코드를 작성하기 위해서는 만들고자 하는 소프트웨어에 대한 높은 이해도가 필요하다.
- 테스트 코드 작성 범위에 대한 고민
- 모든 소스 코드의 기능과 예외사항에 대해서 테스트 코드를 작성하기는 어렵기 때문에
어디까지 테스트 코드를 작성해야 할지 정해야 하는 문제가 있다.
- 모든 소스 코드의 기능과 예외사항에 대해서 테스트 코드를 작성하기는 어렵기 때문에
DDD(Domain Driven Design) - 도메인 주도 설계
- 복잡한 도메인을 가진 소프트웨어를 개발할 때 유용한 소프트웨어 설계 및 개발 방법론
- 도메인 모델을 중심으로 개발을 진행함으로써 비즈니스 요구사항을 보다 명확하게 이해하고 실제 코드로
구현하는 것을 강조한다.
음식 주문 배달 어플리케이션의 도메인
- 도메인 : 유사한 업무들의 집합
- 세분화하여 상위 도메인과 하위 도메인으로 표현할 수 있다.
애그리거트(Agrregate)
- 비슷한 도메인들의 묶음
- 애그리거트 내에서 엔티티와 값 객체는 연관성을 가지고 있으며, 루트 엔티티가 애그리거트 내의 일관성과
불변성을 유지하면서 조정하는 역할을 한다.
애그리거트 루트(Aggregate Root)
- 애그리거트 안에는 1개 이상의 도메인이 있으며, 그 중 하나가 애그리커트를 대표하는 도메인이 된다.
- 하나의 애그리거트를 대표하는 도메인을 애그리거트 루트라 한다.
- 애그리거트 내의 도메인들 중 다른 모든 도메인들과 직,간접적으로 연결되어 있는 도메인이 있는데,
특정 도메인이 다른 모든 도메인들과 연관이 있다면 애그리거트 루트로 선정 가능하다.
장점
- 요구사항 이해
- 도메인을 중심으로 개발하기 때문에 요구사항을 보다 명확하게 이해하고 모델링 가능하다
- 모듈화와 재사용성
- DDD의 구성요소는 모듈화와 재사용성을 촉진한다.
- 비즈니스 로직이나 도메인 규칙을 중심으로 모듈을 구성하기 때문에 기능을 쉽게 재사용 가능하다.
- 테스트 용이성
- 도메인 모델을 중심으로 테스트를 작성할 수 있도록 돕는다.
- 도메인 모델을 단위 테스트 하거나 통합 테스트 하면서 비즈니스 로직의 정확성을 검증할 수 있다.
단점
- 복잡성 추가 가능성
- 잘못된 모델링이나 너무 많은 복잡한 구성 요소 도입으로 인해 코드가 더 복잡해질 수 있다.
- 프로젝트 크기에 따른 적용 어려움
- 복잡한 도메인을 다룰 때 효과적이지만, 작은 규모의 프로젝트에서는 과도한 복잡성을 초래할 수 있다.
참고 블로그
[CS] 도메인 주도 설계(DDD: Domain-Driven Design)란?
PPT
'CS(Computer Science)' 카테고리의 다른 글
[데이터베이스] 3단계 데이터베이스 구조 - 외부/개념/내부 스키마 (0) | 2023.10.11 |
---|---|
데이터베이스 모델링 (0) | 2023.09.13 |
클라우드 (0) | 2023.08.10 |
저장 프로시저(Stored Procedure) (0) | 2023.08.06 |
결합도(Coupling)와 응집도(Cohesion) (0) | 2023.07.20 |