ddd 5

응용 서비스는 어떻게 구현해야 하는가

📌 들어가며 이번 포스팅에서는 응용 서비스를 구현할때 항상 절대적일 순 없지만 따르면 좋은 구현 방식에 대해서 포스팅하고자 합니다. API를 개발할 수록 이 기능에 대한 로직은 어디에 있어야 할까? 혹은 응용 서비스가 이렇게 길어지는게 맞나...? 자주 고민하게 됩니다. 물론 도메인의 상황, 팀별 규칙에 따라 달라질 순 있겠지만 통상적인 구현 방식에 대해 정리해 보고자 합니다. 📌 응용 서비스란 응용 서비스는 표현 영역과 함께 사용자와 도메인을 연결해주는 매개체 역할을 합니다. 표현 영역이 사용자로부터 URL, 요청 파라미터, 쿠키, 헤더 등을 이용해서 사용자가 어떤 기능을 실행하기를 원하는지 판별하고 근 기능을 제공하는 응용 서비스를 실행하게 됩니다. 응용 서비스는 실행하는데 필요한 입력값을 메서드 파..

Architecture 2023.03.25

DDD - 애그리거트

들어가며 애그리거트는 DDD에서 굉장히 자주 등장하는 용어입니다. 항상 개발을 공부할 때마다 느끼는 것은 정의가 천차만별 이라는 것입니다. 이번 포스팅에서는 이 '애그리거트'의 정의와 간단한 예시를 알아보고자 합니다. 📌 애그리거트의 등장 배경 보통 DDD에 대한 설명을 할 때 설명의 예시가 되는 시스템으로 '온라인 쇼핑몰'에 대한 예시를 많이 들고 있습니다. 개인적으로는 온라인 쇼핑몰 e-커머스 시스템이 고객, 주문, 결제, 상품 등 다양한 서브 도메인들로 이루어져 있기 때문이 아닐까 싶습니다. 저 또한 e-커머스 시스템을 예시로 들도록 하겠습니다. e-커머스 시스템을 상위 수준에서 모델을 정리하면 다음과 같을 수 있습니다. 이러한 상위 수준에서의 모델을 개별 객체 수준으로 나타내면 다음과 같습니다. ..

BackEnd/DDD 2023.02.04

백엔드 아키텍처 개요

대학교 시절과 회사에 입사한지 얼마 되지 않았을 때 까지는 아키텍처의 중요성에 대해 간과했습니다. 그나마 알고 있는 것이라고는 MVC 프레임워크 정도가 전부였습니다. 물론, MVC 프레임워크 역시 아키텍처 영역에서 보기에는 표현영역을 위한 기술 중에 하나일 뿐이지 아키텍처를 대변하지는 않습니다. 회사에서 프로젝트를 진행하면서 DDD 에 관해 접하게 되고 AA(Application Architecture) 분들과 협업을 하게 되면서 아키텍처에 대한 공부 역시 필요하다는 것을 알게 되었습니다. 사실 아키텍처 공부는 정말 끝이 없는 것 같습니다. 정확한 영역이 어디까지인지도 아직 잘 모르겠습니다. 아키텍처를 공부하다 보면 이와 관련된 수많은 다른 영역들을 접하게 됩니다. DIP, infrastructure, ..

Architecture 2023.01.16

DDD란 무엇인가(2) - 도메인, 서브도메인, 바운디드 컨텍스트 등

DDD의 기본 개념에 대해 알아보았던 DDD란 무엇인가(1) 에 이어서 이번 글에서는 DDD에서 많이 사용하는 용어들에 대한 정리를 해보고자 합니다. 회사 프로젝트에서 타회사 AA(Application Architecture) 분들과 설계 단계에서 대화를 나눌 때 많이 접했던 용어들과 그분들이 설명해주셨던 대로 정리해보고자 합니다. 개인적으로 해당 부분은 개발자들의 영역이기보다는 비즈니스 정책을 정하는 현업분들(또는 기획자)의 의견이 필요한 영역이라고 생각합니다. 도메인 - 도메인은 외국 용어이기도 하고 딱히 해당 용어를 우리말로 번역할 만한 단어가 없는 것 같습니다. 도메인은 우리가 해결하고자 하는 문제 영역이라고 볼 수 있습니다. 그냥 '네이버', '쿠팡' 처럼 서비스 자체를 도메인이라고봐도 됩니다...

BackEnd/DDD 2022.12.04

DDD란 무엇인가(1)

DDD(Domain Driven Deisign)의 간단 소개 지난해부터 회사에서 진행하는 차세대 프로젝트에 참여하고 있습니다. 해당 프로젝트의 주요 업무는 MSA와 DDD를 활용해 클라우드 환경으로 모놀리식 시스템을 마이그레이션 하는 것입니다. 이때 자연스럽게 MSA 뿐만 아니라 DDD 용어에 대해 많이 접하고 있습니다. 그래서 오늘은 해당 개념에 대해 정리하고자 이 글을 작성하게 되었습니다. 우선 DDD는 간단하게 정의내리자면 단순한 코딩/아키텍처 구성 방법이 아니라 패턴, 아키텍처 설계 등을 모두 합친 개발의 새로운 패러다임이라고 볼 수 있습니다. 사실 해당 용어는 실무에서 일하시는 분들도 백엔드 개발자가 아니거나 최신의 트렌드를 자주 접할 수 있는 직무가 아닌 레거시 시스템을 주로 운영하고 개발하는..

BackEnd/DDD 2022.10.23