본문 바로가기
개발 방법론

[개발 방법론] 도메인 주도 설계(DDD) Part.01 - 개발하는 지토

by 개발하는 지토 2021. 4. 8.

도메인?

도메인 주도 설계(DDD)를 이해하기 위해 도메인이 무엇인지 먼저 정의를 해야겠다.

도메인이란, 여러 의미를 가질 수 있다.

  • 일반적인 요구사항
  • 전문 용어
  • 컴퓨터 프로그래밍 분야에서 문제를 풀기 위해 설계된 어떤 소프트웨어 프로그램에 대한 기능성을 정의하는 연구의 한 영역

도메인 모델?

  • 특정 도메인을 개념적으로 표현
  • 선택된 일부를 나타내는 추상화 시스템
  • 도메인 모델을 사용하면 여러 관계자들이 동일한 모습으로 도메인을 이해하고 도메인 지식을 공유하는데 도움이 됨

소프트웨어 개발자로서...

소프트웨어의 본질은 해당 소프트웨어의 사용자를 위해 도메인에 관련된 문제를 해결하는 능력에 있다.

기술적으로 정교하고 성능이 좋더라도, 사용자의 문제를 해결하는 능력이 부족하다면 잘못된 소프트웨어로 볼 수 있다. ( 극적으로 예를 들어 이커머스 서비스인데 물품 구매가 안되거나 취소, 환불이 안된다면..)

얼마나 많은 사람들이 동시에 사용할 수 있고, 얼마나 빠르게 사용할 수 있는가는 그다음의 문제이다.

도메인 주도 설계(DDD)가 왜 등장하게 되었나?

기존 개발의 문제점

  • 데이터 종속적인 애플리케이션
  • 데이터베이스 위주로 개발(DB 모델링 중시)
  • 데이터베이스 스키마를 먼저 정의하고, 이에 따라 모든 코드가 정해짐
  • 모델링과 개발의 불일치 - 불일치는 불필요한 해석 과정을 야기, 잘못된 소프트웨어를 만드는 원인이 됨

기존 개발의 문제점을 해소하기 위한 노력으로 도메인 주도 설계(Domain-Driven Design)가 등장함

도메인 주도 설계란?

  • Domain-Driven Design
  • Eric Evans의 동명의 책에서 유래
  • 도메인 모델의 적용 범위를 구현까지 확장하여 도메인 지식을 구현 코드에 반영
  • 공통의 언어(유비쿼터스 언어)를 사용하여 도메인과 구현을 충분히 만족하는 모델을 만든다.
  • 실제 코드로 구현 가능한 현실성 있는 도메인 모델 분석과 그것을 추상화하는 설계
  • 선 설계, 후 구축 이 아님
  • 다양한 원칙과 패턴이 존재

도메인 주도 설계(DDD) 적용 시 주의사항

  • DDD 기술 규칙이나 패턴이 DDD 구현에 방해가 될 수 있다.
  • 중요한 것은 DDD 패턴 자체가 아니라, 비즈니스 문제에 맞게 코드를 구성하고 동일한 비즈니스 용어(유비쿼터스 언어)를 사용하는 것이다.
  • 간단한 CRUD 업무는 DDD를 굳이 적용하지 않고, 더 간단한 방법으로 처리할 수 있다.

댓글