도메인 주도 개발 시작하기라는 책에서 CQRS 패턴에 대해 잠깐 얘기가 나오는데 이를 조금 더 알고 싶어 정리하게 되었습니다. 정리한 내용은 필자의 생각을 토대로 진행되었으므로 틀린 부분이 있을 수 있습니다. CQRS 패턴 CQRS는 명령과 조회의 책임을 분리하자는 것입니다. 명령과 조회가 무엇을 의미하는 건지 살펴볼 필요가 있을거 같습니다. 🤔 명령이란 무엇인가? 명령이란 애플리케이션에서 데이터를 저장(Create), 수정(Update), 삭제(Delete)를 하는 행위를 말합니다. 조금 더 쉽게 얘기해 보자면 어떠한 명령을 통해 객체의 상태가 변한다면 명령이라 생각할 수 있을거 같습니다. 🤔 조회란 무엇인가? 조회란 데이터 베이스 등에서 값을 읽어오는 행위를 말합니다. 🤔 왜 분리가 필요할까? 예전에..
JPA를 이용한 리포지터리 구현 애그리게이트를 어떤 저장소에 저장하느냐에 따라 리포지터리를 구현하는 방법이 다릅니다. 해당 파트에서는 자바의 ORM 표준인 JPA를 이용해서 리포지터리와 애그리게이트를 구현합니다. 💡 모듈 위치 리포지터리 인터페이스는 애그리게이트와 함께 도메인 영역에 속하며 리포지터리를 구현한 구현 클래스는 인프라 영역에 속합니다. 팀 표준에 따라 리포지터리 구현 클래스를 domain.impl과 같은 패키지에 위치시킬 수 잇지만 이것은 인터페이스와 구현체를 분리하기 위한 타협안이지 좋은 설계가 아니라고 합니다. 💡 리포지터리의 기본 기능 구현 인터페이스는 애그리게이트 루트를 기준으로 작성하며 애그리게이트를 조회하는 기능의 이름을 지을 때 특별한 규칙은 없지만 보통 findBy(프로퍼티 값..
애그리게이트 💡 상위 수준의 관점 애플리케이션을 개발할 때 상위 수준의 개념을 이용해 전체 모델을 정리하면 전반적인 관계를 이해하는데 도움이 됩니다. 💡 개별 객체 수준의 관점 개별 객체의 관계가 복잡해지면 개별 구성요소 위주로 이해하게 되며, 전반적인 구조나 상위 수준에서 도메인 관계를 파악하기 힘들어집니다. 도메인 요소 간의 관계를 파악하기 힘들다는 것은 코드를 변경하고 확장하는데 어려워진다는 것을 의미합니다. 💡 애그리게이트 수준의 관점 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만들기 위해서는 상위 수준에서 모델을 바라볼 수 있는 방법이 필요한데 그 방법이 애그리게이트입니다. 수 많은 객체를 애그리게이트 단위로 묶어서 표현하면 상위 수준에서 도메인 모델 간의 관계를 파악할 수 있습니다. 애그리..
조건문 쪼개기 복잡한 조건문이 있을 경우 각 부분을 메서드 추출 기법을 통해 빼내자 💡 동기 및 예제 코드 프로그래밍에서 복잡한 부분은 주로 복잡한 조건문을 파악하는 일입니다. 조건을 검사하고 다양한 조건에 따라 다른 작업을 처리하는 코드를 작성하다 보면 금방 메서드가 길어집니다. 이런 장황한 메서드는 잘게 쪼개고 용도에 맞는 이름을 가지는 메서드 추출기법을 통해 정리를 하면 가독성을 높일 수 있습니다. if (date.isBefore(SUMMER_START) && date.isAfter(SUMMER_END)) { charge = quantity * winterRate + winterServiceCharge; } else { charge = quantity * summerRate; } 💡 리팩토링된 코드..
- Total
- Today
- Yesterday
- redis 대기열 구현
- java userThread와 DaemonThread
- redis sorted set
- polling publisher spring boot
- 공간 기반 아키텍처
- spring boot redisson 분산락 구현
- JDK Dynamic Proxy와 CGLIB의 차이
- spring boot 엑셀 다운로드
- microkernel architecture
- transactional outbox pattern
- spring boot redisson sorted set
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- spring boot poi excel download
- transactional outbox pattern spring boot
- spring boot excel download oom
- space based architecture
- java ThreadLocal
- service based architecture
- spring boot excel download paging
- redis sorted set으로 대기열 구현
- pipeline architecture
- pipe and filter architecture
- spring boot redis 대기열 구현
- 서비스 기반 아키텍처
- 트랜잭셔널 아웃박스 패턴 스프링부트
- @ControllerAdvice
- 람다 표현식
- 자바 백엔드 개발자 추천 도서
- spring boot redisson destributed lock
- 레이어드 아키텍처란
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |