본문 바로가기

도메인주도설계16

도메인 이벤트 기반 아키텍처의 이벤트란? 매주 일요일 밤 10시마다 지인과 함께 도메인 이벤트 기반 아키텍처를 이해하는 연습을 하고 있습니다. 도메인 이벤트 기반 아키텍처을 이야기하면 대부분 Event Souring 과 CQRS 가 가장 먼저 언급되곤 합니다. 이 모든 단어의 한 가운데에 있는 것은 바로 이벤트입니다. 아래는 과거에 작성했던 이벤트 관련 블로그 글입니다. 앞으로 이야기 할 부분에 대해서 관련있는 내용이라 읽기를 추천드립니다. 메세지와 이벤트의 차이점은 무엇인가? 들어가기 트레바리에서는 도메인주도설계를 실천하고 있습니다. 도메인주도설계라는 것은 말 그대로 도메인을 중심으로 복수의 도메인이 책임,역할, 협력을 할 수 있도록 개발하는 것을 말합 happy-coding-day.tistory.com 이벤트 스토어(?) 이벤트 소싱(?) .. 2023. 8. 28.
[특강] 도메인주도설계의 사실과 오해 후기 - 조영호 우리가 아는 '객체지향의 사실과 오해' 책에서 말하는 형식의 '도메인 주도 설계의 사실과 오해'가 아니다. 오늘의 특강 핵심 주제는 '도메인 주도 설계'가 어떻게 등장하게 되었는지에 대한 히스토리와 도메인 주도 설계와 객체 지향 프로그래밍에 대한 차이점 에 대해서 포문을 열었다. 우리가 말하는 도메인 주도 설계란? 무엇일까? 조영호님이 말씀하셨던 오해는 '대부분 우리가 말하는 도메인 주도 설계를 한다면?' 값객체, 엔티티, 팩토리, 애그리게이트 와 같은 것을 사용해야지만 도메인 주도 설계를 한다고 생각한다. 하지만 도메인 주도 설계란? 그렇지 어떤 기술적인/기법적인 것에 의존하는 것이 아니다. 그렇다면 도메인주도 설계란 무엇일까? 조영호님이 장표를 사전허가 없이 첨부할 수 없어 비슷하게 만들었습니다. 도.. 2023. 8. 18.
아키텍쳐에서 '서비스' 라는 용어 어디까지 알아보고 오셨나요? 우리가 사용하는 '서비스' 라는 용어는 개발 생태계에서 많이 사용되는 용어입니다. 우리가 알고있는 전통적인 레이어드 아키텍쳐에서도 '서비스'라는 용어가 특히 Application 에서 빈번하게 사용됩니다. 도메인 주도 설계에서 말하는 '서비스'에 대해서 설명하기 전에 전통적인 레이어드 아키텍처에 대해서 설명할 필요가 있다고 생각해 아래와같이 간략히 설명해보려 합니다. 그림 1에서 보이는 것과 같이 흔히 4가지의 계층으로 구성되어, Presentation/Application/Domain/Infra 로 구성되어있고, 의존성은 아래로 향합니다. Presentation 표현계층에서는 Web 에 관련된 책임을 가지게 됩니다. 객체 변환이나 JSON 변환 등의 대표적으로 Web에 대한 책임을 가지게됩니다. App.. 2023. 3. 17.
DB AutoIncrement 가 아니라, 왜 굳이 IDGenerator Server 을 만들었을까? 추가) 관련 IDGenerator 오픈소스을 만들었습니다. ( github link ) 배경 @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; } 위 코드는 어떤 코드인지 짐작이 가는가? JPA 을 학습한 사람이라면 한번에 인지했을 것이다. 데이터베이스에 어떤 데이터을 저장시키기 위해서 데이터베이스에게 오름차순의 숫자을 요청하여 식별자 을 생성해내는 코드이다. 포스팅 제목에서 보았던 IDGenerator 종류의 하나이다. 이 쯤에서 제목에서 말하는 IDGenerator 는 무엇인지 이해할 필요가 있다. 앞에서 이미 언급된 '식별자' 을 만들어 주는 것이 IDGenerator 의 역할.. 2022. 10. 5.
메세지와 이벤트의 차이점은 무엇인가? 들어가기 트레바리에서는 도메인주도설계를 실천하고 있습니다. 도메인주도설계라는 것은 말 그대로 도메인을 중심으로 복수의 도메인이 책임,역할, 협력을 할 수 있도록 개발하는 것을 말합니다. 실제로 동작되는 코드로서 도메인주도설계를 실천하며 우리는 메세지와 이벤트라는 용어를 자주사용했습니다. 이미 횟수로 귀로 많이 들어왔지만- 깊이있는 고찰을 하지 못했습니다. 헷갈릴 수 있는 두 용어에 대한 이해를 정리해보려 합니다. 본문 도메인주도설계는 잠시 잊어버리고 메세지란 무엇일까? 흔히 우리는 '메세지를 전달한다' 라고 말합니다. 이 말은 즉슨, A → B 에게 의미있는 내용을 전달하기 위한 행위라 볼 수 있습니다. 그럼 도메인주도설계에서는 어떤 의미를 가질까요? 여기서 USER, MEMBER 는 AGGREGATES.. 2021. 10. 23.
Value Object로서 Model Identity를 사용하는 3가지 이유[번역] 원본 - https://buildplease.com/pages/vo-ids/ 3 Reasons to Model Identity as a Value Object On of the defining characteristics of an Entity is that it has identity. From the Blue Book: “Some objects are not defined primarily by their attributes. They represent a thread of identity that runs through time and often across distinct representations buildplease.com 엔티티가 가진 중요한 특성 중 하나는 Identity 를 갖는 다는 .. 2021. 5. 17.
상태 머신 다이어그램은 무엇일까? 상태 머신은 전이 트리거 및 제약 사항에 따라 동작을 분류하고 상태 간을 이동하는 방법을 보여준다. 이번에 사이드 프로젝트를 하면서 상태 머신 다이어그램을 그리는 도메인이 존재했다. 상품을 보여주는 Goods, Product와 달리 Goods는 소비자 관점에서 보여지는 물건으로서 노출될 수도 있고 노출되지 않을수도 있는데, 이 때 상태값에 따라 이동하는 상태머신 다이어그램을 만들어 보고 싶었다. 문제의 시작 처음에 상태머신 다이어그램을 그려보려고 했을 때 나의 시도는 아래와 같았다. 물건 생성 > 판매중 > 판매 중지 > 판매 종료 > 다시 판매 중 > … 이 얼마나 단조롭고 심플한가? 저 텍스트에서 발견할 수 있었던 나의 모습은 머릿속에 펜을 놓고 화살표를 그려보는 것이였다. 그러나, 정돈되지 않는 느.. 2021. 1. 30.
테스트 주도 설계를 실천한다는 것 밥 로스 로스가 대중에게 인상적인 모습을 보인 것 중 하나가, 그림은 형태를 정하고 하나하나 디테일을 정해가면서 그려 나아가는 것이라는 일반인의 고정관념을 깬 것도 한몫 한다. 이미 그린 수풀이 붓으로 몇 번 칠하니 호수가 된다든지 하는 모습은, 그때그때 마음가는 대로 그려 나아가는 것이 낭만적이라는 느낌을 주기도 한데다, 유화를 배우지 않은 일반인 입장에서 보면 신기할 수밖에 없다. - 밥 로스에 대한 평가 우리는 밥 로스라는 사람을 알고 있습니다. 누가봐도 어려운 그림을 "참 쉽죠?(That easy)" 라는 대사로 유명한 밥로스는 그림을 그리는 방식이 특이하다고 합니다. 그림을 그릴 때, 밥 로스는 하얀 캔버스 위에 아주 약간의 덧칠로서 그림 전체의 윤곽을 만들어 완성 시키면서 그 다음 스텝을 이어.. 2020. 12. 18.
[책] 도메인 주도 설계 철저 입문 - 나루세 마사노부 리뷰 아마도 올해 초부터였을까? Slipp 커뮤니티에서 사이드 프로젝트를 하기 위해 지인에서 Join을 부탁했을 때부터 도메인 주도 설계는 끊임없이 나의 꼬리표를 달게 되었습니다. 사이드프로젝트내에서 먼저 도메인 주도 설계론을 창시한 에릭 에반스의 책을 처음 접하게 되었습니다. 이 책을 읽으면서 느꼈던 점은 도메인 주도 설계라는 것은 서비스내에서 정말로 중요한데, 코드로서 이를 표현하는 방법은 무엇이 있을까- 어떻게 해야될까? 라는 고민이 있었습니다. 이 책을 어느 정도 읽었을 쯤, 그 다음 책으로 반 버논의 '도메인 주도 설계 구현' 를 읽기 시작했습니다. 제가 필요로 했던 드디어 코드로서 도메인 주도 설계를 설명해주면서 개념 하나하나를 이해해 나갔습니다. 그러나, 읽으면서도 정말 포기하고싶다는 생각을 10.. 2020. 10. 29.
생명주기를 갖는 객체 - 엔티티(Entity)란? 엔티티라는 용어는 소프트웨어 개발에서 다방면으로 사용된다. 예를 들면 JPA에서도 도메인을 지정할 때 Entity라는 애노테이션을 붙이고, 어떤 식별자를 가진 객체를 만들때 이를 엔티티라고도 부른다. 물론 ORM과 같은 JPA에서 말하는 JPA와 도메인주도설계에서 말하는 엔티티는 조금 다른 의미를 가진다. 1. 엔티티란? 도메인 주도 설계에서 말하는 엔티티를 설명할 때는 식별성또는 개별성, 동등성 비슷하지만 다른 명칭으로 설명하는데, 여기서 저는 에릭에반스의 저서에서 나오는 식별성으로 엔티티를 설명하고자 합니다. 어떤 객체를 일차적으로 해당 객체의 식별성으로 정의할 경우 그 객체를 ENTITY라 한다. ENTITY에는 모델링과 설계상의 특수한 고려사항이 포함돼 있다. ENTITY는 자신의 생명주기동안 형.. 2020. 10. 28.
도메인 모델링이란? 에릭에반스의 도메인 주도 설계에서는 소프트웨어 시스템의 일부를 설계할 때는 도메인 모델을 있는 그대로 반영해서 설계와 모델의 대응을 분명하게 하라. 또한 모델을 재검토해서 더욱 자연스럽게 소프트웨어로 구현될 수 있게 수정하라. 도메인에 관한 심층적인 통찰력을 반영하려 할 때도 마찬가지다. 이렇듯 견고한 UBIQUITOUS LANGUAGE를 지원하는 것과 더불어 분석과 설계의 두 가지 측면을 충분히 만족하는 단 하나의 모델을 만들어내야 한다. 모델로부터 설계와 기본적인 책임 할당에 사용한 용어를 도출하라. 코드를 작성할 때 그러한 용어를 사용하면 코드가 모델을 표현한 것이 되고, 코드의 변경이 곧 모델의 변경으로 이어질 수 있다. 그 효과는 프로젝트의 나머지 활동에도 퍼져나가야 한다. 구현을 모델과 그대로.. 2020. 10. 25.
핵사고날 아키텍처에서 Port(Adapter)의 의미는 무엇일까? 이전 포스팅에서 말했던 어탭터 패턴 이렇게도 쓰일 수 있구나? 를 이해하면서 핵사고날 아키텍처에 대해서도 동시에 어느정도 이해할 수 있었습니다. 같이 스터디를 도와주시는 분들과 이야기하며 아주 사-알짝 핵사고날 아키텍처에 대해서 발을 담가볼 수 있는 이야기로 접근해보겠습니다. 0. 들어가기 안드로이드 모바일 프로그래밍을 했을 적에도 클린 아키텍처라는 말은 많이 들었지만, 코드로서 표현되는 프로젝트는 보기 힘들었습니다. 그러던 중 백엔드로 전향 이후, IDDD 프로젝트를 분석하며, 코드로서 핵사고날을 드러나는 아키텍쳐를 이해할 수 있었습니다. 핵사고날 아키텍처를 이해하는 것은 단순히 하나의 그림으로서 설명될 수 부분이 아니라고 생각합니다. 다이어그램과 더불어 코드, 그리고 그 외 도메인에 대한 이해와 의존.. 2020. 8. 29.
adapter 패턴, 이렇게도 쓰일수 있구나(with IDDD) 디자인 패턴의 착각 중에 모든 코드는 디자인 패턴에 나온 코드가 마치 책에서 나온 내용처럼 나올 것이라는 부분에 존재합니다. 오늘도, 다시한번 위와 같은 디자인 패턴의 착각을 느낍니다. IDDD_sample 코드 중, 서비스 단에서 팩토리의 사용 예를 설명하는 부분에서 흥미로운 부분을 발견했습니다. 레이어드 아키텍처에서 TranslatingCollaboratorService.java 의 존재는 이름과 같이 Collaborator 라는 협력 객체를 해석시켜주는 역할을 하는 클래스입니다. 어떻게 해석할 수 있는가에 대한 질문은, 이 글에서 논외이기 때문에 제외하겠습니다. 우리가 흔히 아는 adapter 패턴이 사용하는 client입장에서는 factory로서 동작할 수 있다는 것이 이 글의 요지입니다. 그럼 .. 2020. 8. 23.
[동영상 정리]애플리케이션 아키텍처와 객체지향 - 조영호님 영화관에서 영화를 상영하는 도메인을 예제로 OOP를 설명합니다. 아키텍처 프로젝트에 참여하는 개발자들이 설계에 대해 공유하는 이해를 반영하는 주관적인 개념 : 주관적이다... 중요한것? 변경하기 어려운 것? 일찍 변경 하기 어려운 것? 관심사의 분리 서로 다르고 관련이 없는 책임들을 분리 좀 더 세분화할수 있다.그러나 우리는 위 3가지로만 나눠서 시작하겠습니다. 여기서 가장 중요한 레이어는 도메인 레이어입니다. 대부분 2가지 종류의 도메인 레이어를 설계합니다. Transaction Script와 Domain Model의 차이점은 무엇일까? 도메인 레이어가 주도하기 때문에 도메인 레이어는 중요합니다. 아래는 도메인 컨셉입니다. 할인을 2가지 정책을 가질 수 있다. 퍼센트 또는 고정 할인가로 할 수 있다... 2020. 8. 21.
반버논이 말하는 Value Object 란? 반버논의 도메인 주도 개발 서적에서 발췌 값 객체(Value Object) DDD의 필수적인 구성 요소. 왜? 값의 이점에 대해 이해하라. 측정하고 수량화하거나 설명해주는 값 타입은 생성,테스트, 사용, 최적화, 유지 관리가 더 쉽다. 가능한 위치에선 엔티티 대신 값 객체를 사용해 모델링하도록 노력해야 한다는 사실을 알게 되면 놀랄지도 모른다. 심지어 도메인 개념이 엔터티로 모델링돼야할 때도 엔티티의 설계는 자식 엔티티의 컨테이너보다는 값의 컨테이너로 동작하는 쪽으로 기울어야 한다. 배울 내용 값으로 모델링하기 위해 도메인 개념의 특징을 이해하는 방법을 배우자 통합의 복잡성을 최소화하기 위해 값 객체를 활용하는 방법을 살펴보자 값으로 표현된 도메인 표준 타입의 사용을 확인하자. 사스오베이션은 어떻게 값의.. 2020. 8. 12.
Notification 구현 in IDDD_Samples - 메시지에 기반한 알림 발행 NotificationService는 메시징 인프라를 통해 DomainEvent 인스턴스를 발행하는 한 가지 방법을 제공. - 책에서 말하는 Notification 구현 - 실제 프로젝트에서 Notification 구현 public class NotificationService { public void publishNotifications(){ PublishedMessageTracker publishedNotificationTracker = this.publishedMessageTracker(); List notifications = this.listUnpublishedNotifications( publishedNotificationTracker.mostRecentPublishedNotificationI.. 2020. 8. 8.