박종복
677
2021-02-01 10:45:23
3
1128

Software Design 역사로 이해하는 DDD


Software Design 주요 기법 변화로 DDD가 대략 어떤 것인지 설명해봅니다.

1. Flow Chart

초기 소프트웨어는 매우 단순기능을 구현하였고, 저급언어로 프로그래밍 했기 때문에 프로세서 처리흐름을 도식화하는데 중점을 두었다.

- 고등학교 컴퓨터교육시간에 처음접했는데 아직도 유용한 기법으로 소프트웨어 개발 이외 여러곳에서 사용된다.

2. Data Flow Diagram(DFD)

좀 더 많은 데이타를 다루게되면서 프로세서의 흐름보다는 데이타 상태변화를 도식화 하였다.

- 개발자 선배님들이 쓰는것만 보았지 내가 직접 사용해본 적은 없다.

3. Entity Relation Diagram(ERD)

다루어야할 데이타의 양이 많아지면서 Entity를 식별하고 데이타간의 관계를 도식화 하였다.

- 이 시기에 중요한건 데이타 일관성과 무결성을 매우 중요시 하였다.

- "정규화를 통해 나누고, 역정규화를 통해 현실과 타협한다."라는 법칙이 나타났고 이런 법칙은 지금도 유효하다.

- 현재 SI사업에서 소프트웨어를 설계하는 주요기법이다. 객체지향 방법론이다 뭐다해서 Class Diagram, Sequence Diagram등을 그려도 산출물 용도지 구현을 위한 용도는 아닌것 같다.

4. Class Diagram

OOP(Object Oriented Programing) 유행에 따라서 데이타중심 설계보다는 코드중심 설계로 바뀌고 Class의 속성,메소드,관계를 도식화 한다.

- 개인적으로 Stereotype이 Entity일 경우 ERD의 논리모델에서 메소드와 추상화 관계가 추가된것 처럼 보인다.

- 나는 주로 ERD를 사용했었고, 필요에 따라서 Class Diagram, Sequence Diagram을 활용했었다.

5. Domain Driven Design(DDD)

소프트웨어는 단일 설계로만으로는 이해하기 힘들정도 복잡해졌고 관련된 도메인전문가 및 소프트웨어 구축에 참여하는 사람이 많아져 커뮤니케이션 문제가 발생 하기 때문에 Context(맥락)을 분리해서 별도의 설계를 하고 Domain전문가와 밀접하게 관계시켜 커뮤니케이션 비용을 낮추기위한 기법.

- 동일 Context내의 설계는 보통 Class Diagram을 사용한다. 개인적으로 Class Diagram으로 커뮤니케이션 하기 어렵다면 ERD를 사용해도 된다고 생각한다.

- 전체적인 데이타 일관성과 무결성보다는 각 Context간 결합도를 낮추는 것을 더 중요시 한다.

- 나에게 DDD를 한문장으로 표현하라면? "개발자가 구현된 비지니스코드를 보면서 프로젝트 구성원(고객,기획자등)과 커뮤니케이션에 전혀 무리가 없다"

6. 결론

- Software Design 기법의 변화는 소프트웨어 복잡도의 증가와 관련되어진다.

- 좋은 Software Desigin은 결합도를 낮추고 응집도를 높이는 것이다.(Architecture 또한 설계의 한 부분이다.)

- Software Design은 소프트웨어 구축에 참여하는 사람(어제의 나도 포함)들간에 효과적인 커뮤니케이션을 위한 것이므로 어떻게 커뮤니케이션 할것인가 고민하지 않으면 그냥 그림이 된다.

- 항상 최신기법이 모든 상황에 정답이 될 수는 없다. 때로는 Flow Chart가 효과적인 수단일 수 있다.

- MSA는 DDD를 적용하기 좋은 Architecture이지만 DDD를 하기위해서 받드시 MSA를 구현해야 하는것은 아니다.

0
  • 댓글 3

  • 지붕뚫고높이차
    1k
    2021-02-01 13:14:14

    좋은 글 감사합니다.


    DDD 핵심은

    개발자와 사용자가 의사소통에 사용될

    유비쿼터스랭귀지 이고


    그 랭귀지가

    개발자 코드가 될 수도

    동작하는 프로그램이 될 수 있는

    애자일 시대에 맞는 아키텍쳐 도구리 생각합니다.


    그런데 이야기 하신 내용처럼

    MSA 같은 특정 기술의 틀에 끼워 생각하다 보니

    어렵게 생각되는게 문제라 생각합니다.



  • 사릉합니다
    145
    2021-02-01 23:14:49

    최근 ddd는 event storming도 있어요

  • 박종복
    677
    2021-02-02 09:56:44

    @사릉합니다 

    네~ Event Storiming은 DDD의 Domain Model 개체를 식별하기 위한 기법입니다. 

    위 글은 DDD의 전체가 아니라 대략 어떤물건인지 정도 설명한 것입니다.

  • 로그인을 하시면 댓글을 등록할 수 있습니다.