22/02/23 TIL

Jaden.dev·2022년 2월 23일
0

📌 Static Factory Method

생성자 대신 정적 팩토리 메서드를 사용할 수 없는지 고려할 것

정적 팩토리 메서드의 장점은 다음과 같다.

  • 가독성이 좋다.
  • 호출할 때 마다 새로운 객체를 생성할 필요가 없다.
  • 하위 자료형 객체를 반환할 수 있다.
  • parameterized type 객체를 만들 때 편하다. - java 1.7 이후로는 크게 의미가 없어졌다.

롬복에서도 RequiredArgsConstructor.staticName으로 정적 팩토리 메서드를 만들 수 있다.

📌 CQRS

CQRS에 대한 마틴 파울러의 글 참고
https://martinfowler.com/bliki/CQRS.html

Command Query Responsibility Segregation

Command와 Query의 책임 분할을 지향하는 패턴이다.
정보를 업데이트 할 때와 조회할 때 다른 모델을 사용하는 것이 가장 핵심이다.
대부분의 경우에는 CQRS를 적용하면 복잡성이 높아지는 위험성이 있다.
보통은 CRUD 저장소를 이용하는 것이 일반적이다. 우리가 레코드를 읽고, 쓰고, 업데이트, 삭제하는 레코드 구조 모델이 있다.

요구사항이 복잡해질수록 모델에서 점점 멀어진다.
레코드들을 하나로 합치거나, 여러 정보를 결합해서 가상의 레코드를 형성하는 것 처럼 다른 방식으로 정보를 가져오고 싶을 수 있다.

업데이트의 경우, 특정 데이터의 조합만을 저장하거나, 제공한 방식과 다르게 전달되는 데이터에 대한 validation 조건을 추가할 수 있다.

우리가 도메인 모델을 사용하는 경우, 모델이라는 것은 도메인을 개념적으로 표현한 것이 되고, 영구 저장소(DB)도 개념적 모델에 가능한 가깝게 만든다.
하지만 이 도메인 모델은 요구사항의 변화나 확장에 따라서 점점점 거대해지거나 변질될 수 있다.

CQRS는 개념적 모델을 업데이트와 읽기로 나누는 방식을 제시한다.

  • Command: 시스템의 상태를 변경하고, 값을 반환받지 않는 행동
  • Queries: 값을 반환받고 관측 가능한 시스템의 상태를 변경하지 않는 행동

우리가 데이터베이스로부터 데이터를 읽어오고 처리를 하게 되면, 이미 그 사이에 데이터가 변경되었을 가능성이 높다. 데이터베이스 상의 동일 데이터에 여러 사용자가 동시에 접근하는 사례가 많을 경우, 예상치 못한 결과를 야기할 수 있다. 그래서 CRUD 중 CUD와 R을 구분해서 사용하여 이와같은 문제 발생을 줄일 수 있다.

대부분의 정보 시스템은 CRUD 모델에도 충분히 문제없다. 오히려 더 적합하다고 할 수있다. CQRS 패턴을 코드에 적용하는데는 많은 소요가 들어가고, 때문에 무조건적으로 적용하는 것은 옳지않으며 신중해야한다.

📌 DDD

Domain-Driven Design

도메인 주도 설계. 도메인 패턴을 중심에 높고 설계하는 방식.

  • 도메인 그 자체와 도메인 로직에 초점을 맞춘다. 일반적으로 많이 사용하는 데이터 중심의 접근법을 탈피해서, 순수한 도메인의 모델과 로직에 집중
  • 보편적인 언어의 사용. 도메인 전문가와 소프트웨어 개발자 간의 커뮤니케이션 문제를 없애고, 모든 문서와 코드에 이르기까지 동일한 표현과 단어로 단일화된 언어체계를 구축해 나가는 과정.
  • 소프트웨어 엔티티와 도메인 컨셉트를 가능한 가장 가까이 일치시키는 것. 도메인 모델부터 코드까지 항상 함께 움직이는 구조의 모델을 지향하는 것.
  • 핵심 목표는 Loosly Coupling, High Cohesion (의존성 최소화, 응집성 최대화)

용어 정리

  • 도메인: 일반적인 요구사항, 소프트웨어로 해결하고자 하는 문제 영역
  • 도메인 모델: 특정 도메인을 개념적으로 표현한 것, 도메인 모델을 사용하면 여러 관계자들이 동일한 모습으로 도메인을 이해하고 모데인 지식을 공유하는데 도움.
  • 엔티티: 테이블 모델, 고유 식별자를 가짐
  • 밸류 오브젝트: 데이터 표현 모델 식별자를 가지고 있지 않고, 불변 타입.
  • 컨텍스트: 도메인의 대상 사용자, 사용되는 상황

Event Storming

비즈니스 도메인 내에서 일어나는 일들을 찾아 Bounded Context를 식별하는 방법론
비즈니스 도메인 내에서 발생하는 모든 이벤트를 과거형으로 기술.

📌 위 세 가지 항목을 기반으로한 코드 개선점?

profile
https://github.com/JadenHeo

0개의 댓글