반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스프링 공부
- Kafka
- 기술면접공부
- K8S
- Axon framework
- nestjs공부
- 프로그래머스
- 카프카
- DDD
- 플러터 개발
- 알고리즘공부
- 플러터 공부
- 자료구조공부
- 기술공부
- nestjs
- 스프링
- Flutter
- JPA공부
- 코테준비
- JPA예제
- nestjs스터디
- 자바공부
- JPA스터디
- querydsl
- 스프링부트
- 스프링부트공부
- 코테공부
- JPA
- JPA 공부
- 스프링공부
Archives
- Today
- Total
DevBoi
[DDD] Axon framework 를 사용해보자 (3) 본문
반응형
이제 어느정도 구현에 대한 감을 잡았다.
실제적으로 사용하기 위한 코드로, Service부터 따라가며 구현을 리팩토링 해보자
우선 서비스 부터 다시 만들어야 한다.
분석기반으로 소스를 하나씩 구현해보자, 단순히 메소드 하나만 우선 사용을 할 예정이다.
1) OrderQueryService
@Service
@RequiredArgsConstructor
public class OrderQueryService {
private final QueryGateway queryGateway;
public CompletableFuture<List<OrderResponse>> findAllOrders(){
return queryGateway.query(new FindAllOrderedProductsQuery(), ResponseTypes.multipleInstancesOf(Order.class))
.thenApply(r -> r.stream()
.map(OrderResponse::new)
.collect(Collectors.toList()));
}
}
queryGateway를 통해서, FindallOrderProductQuery를 호출한다.
그리고 응답 타입은, Order.class로 받되, 해당 Response타입으로 바로 변경해서 리스트로 만들어서 Return 한다.
해당 작업은 전체 데이터를 조회하기 떄문에 비동기로 처리 되게 끔 래핑한다.
2) FindAllOrderProductQuery
public class FindAllOrderedProductsQuery {
}
쿼리 안에 내용은 없다.
그러면 얘가 어떻게 ... 처리를 하는거지? 라고 생각이 들만하다.
답은 이벤트 핸들러 안에있다.
해당 클래스에서 처리하는게 아니라, 해당 클래스를 인자로 사용하는 쿼리 핸들러에서 정의한다.
3)OrderEventHandler
public interface OrdersEventHandler {
List<Order> handle(FindAllOrderedProductsQuery query);
}
3) OrderEventHandlerImpl
@Service
@ProcessingGroup("orders")
public class OrderEventHandlerImpl implements OrdersEventHandler{
private final Map<String, Order> orders = new HashMap<>();
@QueryHandler
public List<Order> handle(FindAllOrderedProductsQuery query) {
return new ArrayList<>(orders.values());
}
}
이렇게 하고, 컨트롤러에서 해당 데이터를 가져올 수 있는지를 먼저 확인해보자
4)OrderEndpoint
@RestController
@RequiredArgsConstructor
public class OrderController {
private final OrderQueryService orderQueryService;
@GetMapping("/all-orders")
public CompletableFuture<List<OrderResponse>> findAllOrders() {
return orderQueryService.findAllOrders();
}
}
5) 설정 (application.yml)
spring:
h2:
console:
enabled: true
path: /h2-console
datasource:
url: jdbc:h2:mem:test # test 부분을 자신이 원하는 것으로 바꾸시면 됩니다.
username: sa # username과 password는 자신의 설정에 맞게
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create # 어플리케이션을 시작할 때 데이터베이스를 초기화하고 다시 테이블 생성
properties:
hibernate:
format_sql: true # 실행되는 query를 보여줌
logging.level:
org.hibernate.SQL: debug
server:
port: 8080
axon:
serializer:
general: xstream
axonserver:
servers: 127.0.0.1:8124
해당 Endpoint로 호출 시에 데이터가 잘 온다.
그러면 다음에는 조회용 Query가 아닌, EVENT 핸들러를 구축해서,
해당 생성과 삭제를 해보자
반응형
'Develop > [DDD]' 카테고리의 다른 글
[DDD] axon framework를 사용해보자 (5) (1) | 2023.06.13 |
---|---|
[DDD] Axon framework 를 사용해보자 (4) (0) | 2023.06.13 |
[DDD] Axon framework 를 사용해보자 (2) (0) | 2023.06.12 |
[DDD] 바운디드 컨텍스트 식별 (0) | 2023.06.08 |
[DDD] 애그리거트 도출 (0) | 2023.06.08 |