일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 만들면서배우는클린아키텍처
- 코틀린
- 함수형프로그래밍
- 계층형아키텍처
- 헥사고날아키텍처
- TDD
- Kotlin
- 테스트
- FP
- 이펙티브코틀린
- 개발서적
- 스터디
- 추상화 설계
- Java
- 조영호
- 객체지향의사실과오해
- 테스트주도개발
- 책스터디
- 개발방법론
- 아키텍처
- 도메인 주도 개발 시작하기
- Thymeleaf
- Boot Legacy 차이점
- template
- Spring
- GrokkingFunctionalProgramming
- 유지보수
- web
- 클린아키텍처
- DDD
- Today
- Total
목록책 스터디 (77)
김동형수 개발기
8장 애그리거트 트랜잭션 관리 애그리거트와 트랜잭션 한 애그리거트를 두 사용자가 거의 동시에 변경할 때 트랜잭션이 필요하다.한 애그리거트를 두 사용자가 거의 동시에 변경할 때 트랜잭션이 필요하다. 애그리거트에 대해 사용할 수 있는 대표적인 트랜잭션 처리 방식에는 선점(Pressimistic) 잠금과 비선점(Optimistic) 잠금의 두 가지 방식이 있다. 선점 잠금 선점 잠금은 먼저 애그리거트를 구한 스레드가 애그리거트 사용이 끝날 때까지 다른 스레드가 해당 애그리거트를 수정하는 것을 막는 방식이다. 선점 잠금은 보통 DBMS가 제공하는 행 단위 잠금을 사용해서 구현한다. 오라클을 비롯한 다수 DBMS가 for update와 같은 쿼리르 사용해서 특정 레코드에 한 사용자만 접근할 수 있는 잠금 장치를 ..
7장 도메인 서비스 7.1 한 애그리거트로 기능을 구현할 수 없을 때가 있다. 한 애그리거트에 넣기 애매한 도메인 기능을 억지로 특정 애그리거트에 구현하면 안 된다. 책임 범위를 넘어서는 기능을 구현하면 외부에 대한 의존이 높아지고 코드를 복잡하게 만든다. 애그리거트의 범위를 넘어서는 도메인 개넘이 애그리거트에 숨어들어 명시적으로 드러나지 않게 된다. 가장 쉬운 방법은 도메인 기능을 별도 서비스로 구현하는 것 7.2도메인 서비스계산 로직 : 여러 애그리거트가 필요한 계산 로직이나, 한 애그리거트에 넣기 다소 복잡한 계산 로직외부 시스템 연동이 필요한 도메인 로직 : 구현하기 위해 타 시스템을 사용해야 하는 도메인 로직애매한 도메인 개넘을 구현하려면 도메인 서비스를 이용해서 도메인 개념을 명시적으로 드러낸..
6장 응용 서비스와 표현 영역 6.1 응용 영역과 표현 영역이 사용자와 도메인을 연결해 주는 매개체 역할 표현 영역은 사용자의 요청을 해석 URL, 요청 파라미터, 쿠키, 헤더 등을 이용해서 판별 기능을 제공하는 응용서비스를 실행 실제 사용자가 원하는 기능을 제공하는 것은 응용 영역에 위치한 서비스다. 표현 영역은 응용 서비스가 요구하는 방식으로 변환 응용 서비스는 표현 영역에 의존하지 않는다. 단지 필요한 입력 값을 받고 결과만 리턴 6.2 응용서비스는 리포지터리에서 도메인 객체를 가져와 사용 응용 서비스는 도메인 영역과 표현 영역을 연결해 주는 창구 응용 서비스가 복잡하다면 도메인 로직의 일부를 구현하고 있을 가능성이 높다. 응용 서비스는 도메인의 상태 변경을 트랜잭션으로 처리 DB에 반영하는 도중 ..
5장 스프링 데이터 JPA를 이용한 조회 기능 5.1 CQRS는 명령모델과 조회모델을 분리하는 패턴 5.2 검색 조건이 고정되어 있고 단순하면 특정 조건으로 조회하는 기능을 만들면 된다. 다양한 검색조건을 조합해야할 때 사용할 수 있는 것이 스펙이다. 검사 대상 객체가 조건을 충족하면 true를 리턴하고 그렇지 않으면 false JPA를 이용한 스펙구현에 대해 알아볼 것 5.3 JPA 크리테리아 API에서 조건을 표현하는 Predicate 스펙 구현 클래스를 개별적으로 만들지 않고 별도 클래스에 스펙 생성 기능을 모아도 된다. 스펙 인터페이스는 함수영 인터페이스이다. 5.4 스펙을 충족하는 엔티티를 검색하고 싶다면 findAll() 메서드를 사용하면 된다. 스펙 구현체를 사용하면 특정 조건을 충족하는 엔..
4장 리포지터리와 모델 구현 JPA를 이용한 리포지터리 구현 데이터 보관소로 RDBMS를 사용할 때, 객체 기반의 도메인 모델과 관계형 데이터 모델간의 매핑을 처리하는 기술로 ORM 자바의 ORM 표준인 JPA를 사용한다. 리포지터리 인터페이스는 에그리거트와 같이 도메인 영영에 속하고 리포지터리를 구현한 클래스는 인프라스트럭처 영역에 속한다. 리포지토리 구현 클래스를 dmoain.impl 과 같은 패키지에 위치시킬 수 있는데 이는 좋은 원칙을 따르는 것은 아니다. 리포지토리 구현 클래스를 인프라스트럭처 영역에 위치 시켜서 인프라스트럭처에 대한 의존을 낮춰야 한다. 리포지터리 구현 객체는 스프링 데이터 JPA가 알아서 만들어준다. JPA를 사용하면 저장소에 반영하는 메서드를 추가할 필요는 없다. 트랜젝션 ..
3장 애그리거트 애그리거트 상위 수준에서 모델을 정리하면 도메인 모델의 복잡한 관계를 이해하는 데 도움이 된다. 도메인 객체 모델이 복잡해지면 도메인 간의 관계를 파악하기 어려워진다. 주요 도메인 요소 간의 관계를 파악하기 어렵다는 것은 코드를 변경하고 확장하는 것이 어려워진다는 것을 의미한다. 꼼수를 부리면 장기적으로 코드를 더 수정하기 어렵게 만든다. 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만드는 방법이 애그리거트다. 애그리거트는 모델을 이해하는 데 도움을 줄 뿐만 아니라 일관성을 관리하는 기준 애그리거트는 복잡한 도메인을 단순한 구조로 만들어준다. 애그리거트는 관련된 모델을 하나로 모았기 때문에 한 애그리거트에 속한 객체는 유사하거나 동일한 라이프 사이클을 갖는다. 한 애그리거트에 속한 객체..
2장 아키텍처 개요 네 개의 영역 표현, 응용, 도메인, 인프라 는 아키텍처를 설계할때 출현하는 전형적인 영역이다. 표현 영역은 사용자의 요청을 받아 응용 영역에 전달하고 처리 결과를 사용자에게 보여준다. 응용 영역은 시스템이 사용자에게 처리결과를 다시 사용자에게 보여준다. 도메인 영역은 도메인 모델을 구현한다. 핵심 로직을 도메인 모델에서 수행한다. 인프라스트럭처 영역은 구현 기술에 대한것을 다룬다. 계층 구조 아키텍처 도메인 복잡도에 따라 응용과 도메인을 분리하기도 합치기도 하지만 전체적인 아키텍처는 표현 / 응용 / 도메인 / 인프라 같은 계층 구조를 따른다. 계층 구조는 그 특성상 하위 계층으로만 의존이 존재한다. 인프라스트럭처에 의존하면 "테스트 어려움" 과 "기능 확장의 어려움" 문제 두가지가..
1장 도메인 모델 시작하기 도메인이란? 도메인 : 구현해야 할 소프트웨어 대상, 소프트웨어로 해결하고자 하는 문제 영역 도메인은 다시 하위 도메인을 나눌 수 있다. 모든 도메인을 직접 구현해야 하는 것은 아니고 외부 시스템을 이용할 수 있다. 도메인 전문가와 개발자 간 지식 공유 요구사항을 올바르게 이해하려면? 개발자와 전문가가 직접 대화한다.(당연한 이야기..) 이해관계자와 개발자도 도메인 지식을 갖춰야 한다. 도메인 모델 시작하기 기본적으로, 도메인 모델은 특정 도메인을 개념적으로 표현한 것이다. 도메인 모델을 사용하면 여러 관계자들이 동일한 모습으로 도메인을 이해하고 도메인 지식을 공유하는 데 도움이 된다. 도메인 모델은 객체로만 모델링 할 수 있는 것은 아니고, 다이어그램을 이용해서 상태 전이 모..