개발 & 방법론/DDD

    이벤트 스토밍(Event Storming)

    시작하면서 구성원이 수긍하는 유비쿼터스 언어나 바운디드 컨텍스트를 정하려면 어떻게 해야 할까? 비즈니스에 참여하는 구성원이 모여서 소통하고 정해야 할 것이다. 그러면 책상에 앉아 회의처럼 이야기해야 할까? 그럼 전체적으로 정하는데 많은 시간이 소비되고 피로도가 쌓일 것이다. 어떤 방식으로 해야할까? 알베르토 브란돌리니(Alberto Brandolini)가 제안한 비즈니스 도메인을 빠르게 탐색하고 학습할 수 있는 이벤트 스토밍에 대해 알아보자. 이벤트 스토밍이란? 도메인 전문가와 개발자를 학습 과정에 참여시키기 위한 빠른 설계 기술이다. 클래스와 데이터베이스가 아닌 비즈니스 및 비즈니스 프로세스에 중점을 둔다. 모든 사람이 동일한 수준으로 접근할 수 있게 시각적인 접근 한다. 진행 방법 큰 벽이나 화이트보..

    바운디드 컨텍스트(BOUNDED CONTEXT)

    시작하면서 우리는 하나의 단어를 여러 의미로 사용하는 상황을 많이 마주했으며, 앞으로도 계속 사용될 예정이다. 비즈니스에서 Account라는 단어를 보면 은행에서는 계좌로 보지만, ERP 시스템에서는 계정으로 사용된다. 이렇듯 글자는 같지만 의미가 다른 걸 동음이의어라 부른다. 개발적인 측면에서 애플리케이션의 전체적인 구조를 보면 다양한 도메인에서 같은 용어가 많이 발생하는 걸 볼 수 있다. 용어의 중복이 많다보니 하나의 모델로 처리하려는 시도가 생길 수 있다. 하나의 모델이 다양한 도메인에서 사용된다면 Common이라는 공통모듈에 집어넣고 팀 내에서 이를 사용하라고 통보할지도 모른다. 과연 올바른 방법일까? 아니다, 상품이라도 고객이 바라보는 상품과 주문에서의 상품은 서로 다르다. (서로 관리되는 상태..

    유비쿼터스 언어(UBIQUITOUS LANGUAGE)

    프로젝트를 진행하다보면 다음과 같은 상황을 겪어볼 수 있다. 첫번째 - 회원 관련 사용자A : 신규 회원을 등록하겠습니다. 사용자B : 신규 회원을 추가하겠습니다. 사용자가 말하는 등록과 추가는 무슨 의미일까? 모두 신규 회원이 가입되었다는 의미로 사용하는 걸까? 두번째 - 상품 관련 MD1 : 노트북 상품을 추가하겠습니다. MD2 : 노트북 제품을 등록하겠습니다. 사용자가 말하는 상품과 제품은 같은 의미로 사용하는 걸까? 추가와 등록은 이전 회원에 비해 헷갈린다. 단순히 수량을 추가하는 걸까? 새롭게 상품&제품을 등록한다는 걸까? 이렇듯 같은 팀내에서 도메인에 대한 용어가 제각각인 경우를 겪어본 적이 있을 거다. (혹은 용어가 같지만 다른 의미로 사용된 경우) 이런 차이로 같은 도메인을 서로 다르게 바..

    테스트를 통한 코드 보호

    레거시 코드, 빈약한 모델 구조의 프로젝트를 파악하기란 무척이나 어렵다. 레거시 코드를 리팩토링하는 건 더 어렵다. 어떻게 리팩토링을 시작해야 할까? 최선의 방법은 테스트 코드다. 테스트 코드란? 기능을 검증하는 코드를 테스트 코드라 한다. 테스트에는 단위 테스트, 통합 테스트, 인수 테스트가 있다. - 단위 테스트 : 기능 별로 테스트 진행, 필요한 부분만 따로 진행할 수 있다. - 통합 테스트 : 외부 모듈을 묶어서 진행, 단위 테스트에서 발견하지 못한 에러를 발견할 수 있다. - 인수 테스트 : 시스템을 대상으로 검증, 최대한 운영과 흡사한 환경에서 진행한다. 레거시에 테스트 코드를 작성하는 이유? 테스트 코드를 통해 레거시의 여러 가지를 파악할 수 있다. - 도메인 파악 : 레거시 코드를 통해 무..

    레거시 코드, 빈약한 도메인 모델(Anemic Domain Model)

    이전 시간에 잘못된 소프트웨어를 언급했었다. 이번에는 잘못된 소프트웨어를 지칭하는 대표적인 용어 레거시 코드를 간단히 알아보고 그중 하나인 빈약한 도메인 모델을 알아보려 한다. 레거시 코드 레거시란 용어를 말하면 누구나 다음과 같이 비슷한 생각을 할 것이다. - 매우 악취가 풍기는 코드 - 파악하기 힘든 코드 - 의존성이 매우 강하게 결합된 코드 - 전혀 의미를 알 수 없는 변수명과 함수명 - 큰 진흙 덩어리 - 테스트코드 작성하기 두려운 존재 - 기타 등등 즉, 이해할 수 없고 수정하기도 힘든 코드를 뜻하는 경우가 많다. 이런 레거시 코드의 특징은 새로운 기능이 추가될수록 점점 감당하기 어려워진다. 하지만 레거시 코드를 기피할 수 없다. 언젠간 극복해야할 과제다. 빈약한 도메인 모델 (Anemic Do..

    도메인 주도 설계(Domain Driven Design)란?

    도메인 주도 설계(Domain Driven Design, DDD)를 도입하는 회사나 DDD 경험 있는 개발자를 구하는 모집 공고가 흔하다. 커뮤니티 게시판에도 DDD 스터디 모집글이 보이고, 아는 지인들도 DDD 스터디 진행하거나 찾고 있다. DDD가 무엇이고, 많은 회사와 개발자들이 매달리고 있을까? 우선 도메인이 등장한 배경부터 알아보자. 왜 도메인 주도 설계인가? 레거시는 이해할 수 없는 코드가 덕지덕지 있는 것을 경험해봤을 거다. 존재 이유를 모르는 코드 수많은 분기문이 있다. 이러한 형태는 새로운 요구 사항이 추가되거나 버그가 발생했을 때 해당 메서드에 코드가 여러줄이 증가하는 걸 볼 수 있다. 또한, 비즈니스 규칙은 자바뿐만 아니라 자바스크립트, SQL에도 구현되어 있으며, 코드가 아닌 운영 ..