지금까지 Axon Framework의 CommandGateway & Event Sourcing, EventGateway, QueryGateway, Snapshot, State Stored Aggregate에 대해서 '코끼리 냉장고 넣기'서비스를 개발하면서 배워 봤습니다. 이제 마지막으로 Event Replay를 이용하여 조회DB 데이터를 복구 하는 방법을 실습해 보겠습니다. Event Replay Controller 추가 package 'org.axon.controller'에 'ReplayEventsController' class를 추가 합니다. 두개의 API가 추가 됩니다. ReplayEventsController: 지정한 Event Handler에 대해 특정 일시 이후의 Event만 Replay함 r..
State Stored Aggregate는 Event Sourcing을 하지 않고 물리적 DB에 데이터를 직접 CUD(Create, Update, Delete)할 때 사용하는 Aggregate입니다. 일반 Aggregate가 Event Replay, Event 발행, Event Store에 Event 추가를 하는 반면, State Stored Aggregate는 데이터의 최종 상태를 DB에 바로 CUD합니다. 단, 다른 서비스나 다른 처리를 위해 Event는 발행할 수 있습니다. State Stored Aggregate로 만드는 방법은 Entity class에 Aggregate에 필요한 항목들을 추가하는 것입니다. @Aggregate 어노테이션을 붙여 Aggregate임을 표시 필드 중 Primary K..
마이크로서비스 패턴 중 Event Sourcing 패턴에서 Event Replay의 속도를 높이는 방법으로 Snapshot을 얘기 했었습니다. [마이크로서비스 패턴 쉽게 개발 1] 마이크로서비스 패턴 이해: Saga, Event Sourcing, API Composition, CQRS 위 글 내용 중 '통장계좌'서비스 예를 들어 'Snapshot'을 얘기 했던게 기억 나실 겁니다. 동일 주문에 대해 발생하는 Event수가 그리 많지 않아 Event Replay시간이 많이 걸리지는 않을 겁니다. 그런데 '통장계좌'서비스를 생각해 봅시다. 통장을 개설하고 각 통장마다 발생하는 Event수는 엄청나게 많을 것입니다. 예를 들어 한 통장에 1달에 보통 100건의 입출금 Event가 발생했고 10년(120개월)을..
QueryGateway는 비동기 통신으로 데이터를 조회하는 방법입니다. 동기로 조회하는 방법과 비동기로 조회하는 방법의 차이가 뭘까요 ? 동기통신으로 조회한다는 것은 요청자와 제공자가 직접 통신한다는 의미이고, 비동기 통신으로 조회한다는 것은 요청자와 제공자 사이에 중계자를 통해 조회하는 것입니다. 동기 조회는 요청자가 제공자가 누군지 알아야 하고 제공자의 응답 포맷이 변하면 소스를 수정해야 합니다. 비동기 조회는 반대로 요청자는 제공자가 누군지 알 필요 없고 제공자가 요청자가 요구하는 포맷에 맞추는 방식입니다. 예를 들어 모든 은행에서 내가 가진 계좌의 정보를 조회하는 서비스를 만든다고 생각해 봅시다. 동기 통신이라면 아래와 같이 '전계좌 조회'서비스에서 각 은행 계좌 서비스에 요청을 해야 합니다. '..
이번 편에서는 EventGateway를 통해서 Event를 publish하는 방법을 해 보겠습니다. Event Publishing이 필요한 대표적인 케이스는 별도의 마이크로서비스에 CQRS패턴을 적용하여 조회 전용 DB를 만드는 경우 입니다. Aggregate에서 AggregateLifecycle.Apply({event 객체})로 발행된 Event는 해당 서비스 내에서만 이용할 수 있습니다. 조회 전용 DB를 관리하는 별도의 서비스에서 연관된 다른 서비스 DB의 변화를 감지하려면 어떻게 해야 할까요? 그 서비스들이 자신의 DB 변화가 있을 때 변경이 있다는 Event를 발행해 줘야 합니다. 이때 사용하는 것이 EventGateway입니다. 또 하나의 케이스는 Saga 프로세스에서 참여 서비스의 실패 Ev..
이번 편에서는 10번까지 개발 해 보겠습니다. ElephantService 완성 2. Check Validation 비즈니스 요건이 아래와 같을 때 Command 발송 전에 validation 체크를 먼저 합니다. 코끼리 등록 시 몸무게는 30kg ~ 200kg 사이만 허용한다. 이미 냉장고에 들어가 있는 코끼리는 또 넣을 수 없다. 냉장고 안에 들어가 있는 코끼리만 꺼낼 수 있다. - create 메소드 public ResultVO create(ElephantDTO elephant) { log.info("[ElephantService] Executing create: {}", elephant.toString()); ResultVO retVo = new ResultVO(); //check validati..
이번 장에서는 마이크로서비스 패턴 개발을 지원하는 Axon Framework에 대해 배워 보겠습니다. 실습으로 내용이 너무 길어져 몇개의 하위 글로 나누어서 올리겠습니다. Axon Framework는 Command Handler, Event Sourcing with Event Store, Event Handler, Query Handler로 구성되어 있습니다. [1편 마이크로서비스 패턴 이해]에서 Command, Event, Query에 대해 설명했지만 명확히 용어를 다시 정리부터 하겠습니다. 또한 [DDD 핵심만 빠르게 이해하기]의 Event Storming에서도 Command와 Event라는 용어가 등장하는데 다른 의미로 해석될 수 있을 듯 해서 함께 정리해 보겠습니다. 개념DDD마이크로서비스 패..
이번 장에서는 이미 개발된 주문 서비스를 테스트 하면서 대략의 전체 흐름을 이해해 보겠습니다. 먼저 GitHub에 있는 소스를 IntelliJ 에 Import 합니다. Import Application 1) Fork Application 아래 GuiHub Repository에 접근하여 자신의 Repository로 Fork합니다. https://github.com/happykubepia/agilemall-axon 2) Git Clone 자신의 PC에 소스를 다운로드 합니다. 이를 위해서는 Git Client가 PC에 설치되어야 합니다. 아래 글을 참고하여 설치 합니다. https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%8..
마이크로서비스 서비스를 개발하기 위해서는 알아야 할 4가지가 있습니다. 마이크로서비스 설계 방법론인 DDD(Domain Driven Design), 마이크로 서비스를 개발 / 운영하기 위한 아키텍처인 MSA(Micro Service Architecture), 마이크로서비스와 MSA가 갖춰야 할 8가지 특성(MSA Features)과 12가지 요소(12 Factors), 그리고 마이크로서비스의 문제를 해결하기 위한 Best Practice인 마이크로서비스 패턴입니다. 패턴 실습을 위해 이 모든 것을 먼저 알 필요는 없지만 마이크로서비스를 개발/운영하는 분들이라면 꼭 알아야 할 것들입니다. 제 이전 블로그 글에 DDD와 MSA Features & 12 Factors를 정리한 것이 있으니 참고 하세요. htt..
마이크로 서비스 패턴 중 이번 실습에 적용되는 패턴인 Saga, Event Sourcing, API Composition, CQRS(Command Query Responsibility Segregation)에 대해 기본적인 이해를 먼저 해 보겠습니다. 시간이 부족한 분들을 위해 핵심만 설명하겠습니다. 글로 이해가 잘 안되실 수 있는데, 이후 실습하면서 다시 한번 보시면 조금 더 명확히 이해가 되실 겁니다. 보다 자세한 이론적 설명은 제가 예전에 쓴 아래 글을 참고하세요. https://happycloud-lee.tistory.com/154 마이크로서비스 패턴: 핵심패턴만 빠르게 이해하기 크리스 리처드슨의 '마이크로서비스 패턴'에 나오는 44가지 패턴 중 핵심 패턴인 Saga. Event sourcing,..
마이크로 서비스는 우리의 서비스가 시장변화에 Speedy하게 적시 대응하고, 일시적 장애에도 Service Always를 보장하며, 자원관리를 효율적으로 하여 Save Cost할 수 있는 좋은 서비스가 되기 위해 반드시 필요합니다. WHY 마이크로서비스 : SSS 1. Speedy -> Time to maket 작은 단위의 서비스는 비즈니스 요구사항을 수용하기 더 쉽고 빠릅니다. 또한, 다른 서비스와 느슨하게 결합되어 있기 때문에 배포도 더 자주 더 빠르게 할 수 있습니다. 2. Service Always -> Earning More 서비스가 비동기로 느슨하게 결합되어 있고 고유의 DB를 갖고 있기 때문에 특정 서비스의 장애로 인해 전체 서비스가 중단되지 않습니다. 3. Save Cost -> Cost ..
퍼블레싱은 온라인 화면설계 툴입니다. https://publessing.io 퍼블레싱 - 웹 퍼블리싱이 어려울 땐 퍼블레싱! 퍼블레싱은 명령어를 사용하여 웹 페이지를 빠르게 그릴 수 있는 개발자 친화적인 도구입니다. publessing.io 온라인 화면설계 툴에는 카카오오븐, Just In Mind, 스케치와 같은 툴이 있는데 퍼블레싱은 개발에 바로 사용할 수 있는 html, js, css와 같은 소스까지 제공해 준다는 강점이 있습니다. 이 툴은 아프리카도서관이라는 국내 개발자분이 개발하신겁니다. 좋은 툴 만들어 공개해주신 아프리카도서관님에게 너무 감사드립니다. 주요 명령어 아래는 주요 명령어들입니다. 페이지 관리 페이지 리스트 보기: ls 페이지 복사: cp {소스 페이지명} {대상 페이지명} 페이지명..
롬복은 테이블을 구조화한 도메인 클래스(Entity 또는 DTO, VO)에서 getter/setter 메서드와 toString, equals, hashCode 등의 메서드를 애너테이션으로 사용할 수 있도록 해주는 라이브러리입니다. 아래를 참조하여 설치하세요. 아래 링크에서 최신 버전을 받으세요. https://projectlombok.org/download Download projectlombok.org 이 이후 설치는 아래 글 참고하세요. * 주의) 반드시 최신 버전의 lombok.jar를 설치하세요. https://congsong.tistory.com/31 이클립스(Eclipse & STS)에 롬복(Lombok) 설치하기 롬복은 테이블을 구조화한 도메인 클래스(Entity 또는 DTO, VO)에서 g..
1. Spring Cloud LoadBalancer(SCL) 이해 1.1 WHY ? Spring Cloud LoadBalancer(이하 SCL)는 Spring Cloud Ribbon과 동일한 Client-side Load Balancer입니다. Spring Cloud Ribbon편에서 얘기했듯이 Client side Load balancer가 필요한 이유는 부하분산을 적절하게 하여 서비스의 가용성을 최대화하기 위합입니다. 또한, 2018년 12월 이후 Ribbon은 EOS되었기 때문에 Spring Cloud LoadBalancer를 사용하는것이 좋습니다. 1.2 HOW ? 1) Netflix Ribbon vs Spling Cloud LoadBalancer - 지원 HttpClient Ribbon은 Blo..
1. Spring WebClient 이해 이 글을 읽기 전에 먼저 일하는 방식 변화를 이끌고 있는 애자일, 마이크로서비스, 데브옵스, 클라우드에 대해 기본적인 이해를 하실것을 권장 합니다. https://happycloud-lee.tistory.com/261?category=8322466 1) WHY ? 우리가 개발하는 어플리케이션들을 크게 2개로 나눠보면 요청자와 제공자라고 할 수 있습니다. 요청자를 consumer 또는 subscriber라고 하고, 제공자를 producer 또는 provider라고 합니다. 요청자가 제공자에게 무언가를 요청할 때 제공자가 공개한 API를 이용하게 되는거구요. 요청 시 프로그램에서 우리가 가장 흔하게 사용하는 것이 Http Client입니다. Spring WebClie..
1. Spring Cloud Circuit Breaker와 Resilience4J 이해 1) WHY ? Spring Cloud Hystrix편에서 얘기했듯이 Circuit Breaker가 필요한 이유는, 누전차단기가 전기사고가 발생하기 전에 전기를 미리 차단하는것과 동일하게, 문제가 있는 마이크로서비스로의 트래픽을 차단하여 전체서비스가 느려지거나 중단되는것을 미리 방지하기 위해서 입니다. 2) HOW ? Spring Cloud Circuit Breaker는 Netflix Hystrix, Resilience4J, Alibaba Sential, Spring Retry와 같은 Circuit Breaker제품들을 사용하기 위해 표준 인터페이스를 제공하는 추상화(또는 Facade) 라이브러리입니다. Spring ..
1. Spring Cloud Gateway(SCG) 이해 1) WHY ? SCG는 API Gateway의 하나입니다. 따라서 API Gateway가 왜 필요한지 먼저 이해하는것이 필요합니다. Zuul server편에서 설명한바와 같이 API Gateway가 필요한 이유는 안전한 API유통과 Client 요청별로 유연하게 대처하기 위해서입니다. 그리고 API Gateway는 인증/인가, L/B & 라우팅, 로깅, Circuit Breaker의 역할을 합니다. 2) HOW ? SCG는 Zuul과 어떤 차이가 있을까요 ? 그 차이를 이해하면서 SCG의 동작원리를 설명하겠습니다. 차이점 1: Blocking vs non-Blocking SCG를 만든 Spencer Gibb은 아래와 같이 설명하고 있습니다. Zu..
1. Spring Boot Actuator 이해 1) WHY? 각 마이크로서비스는 고유의 목적을 가지고 개발되고 운영됩니다. 하지만 모든 마이크로서비스에는 공통으로 요구되는 기능이 있습니다. 예를 들어 Health Check와 상태정보(Metrics) 제공같은 기능들이 그것입니다. 이러한 공통 기능들을 각각 만드는 것은 매우 비효율적입니다. Spring Boot Actuator가 필요한 이유는 어플리케이션을 관리하고 제반 정보를 제공하는 공통 기능을 쉽게 적용하기 위해서입니다. 참고) Actuator 어원 An actuator is a manufacturing term that refers to a mechanical device for moving or controlling something. Actu..
1. Sleuth와 Zipkin 이해 1) WHY ? 마이크로서비스로 큰 서비스를 잘게 쪼개어 개발하게 되면 자연스럽게 마이크로서비스간에 연결이 많아지고 복잡하게 됩니다. 예를 들어 고객 '홍길동'이 2021-02-01 13:33:33에 피자 3개를 주문했다고 가정해 봅시다. 그 주문이 처리되기 위해서는 아래와 같이 여러가지 마이크로서비스들이 서로 호출하게 됩니다. 마이크로서비스 (consumer) 마이크로서비스 (producer) API 주문접수 주문등록 /order/register/{order id} 주문등록 고객체크 /customer/validate/{customer id} 주문접수 결제 /pay/{order id} 주문접수 조리요청 /restaurant/{order id} 조리요청 배달요청 /de..
이번 장은 Circuit breaker인 Hystrix에 대해서 다룹니다. 목차는 아래와 같습니다. 1. Hystrix 이해 2. Hystrix 실습 3. Hystrix Dashboard & Turbine 4. Zuul에 Hystrix 적용 자세하게 설명하다보니 내용이 좀 많습니다. 1. Hystrix 이해 WHY ? 모든 전기를 사용하는 곳에는 누전차단기가 있습니다. 누전차단기는 전기 사용 중 누전, 과전류, 합선으로 전기사고가 발생하기 전에 전기를 미리 차단하는 역할을 합니다. 누전차단기와 같이 전류를 차단하는 장치를 통틀어 우리는 Circuit breaker(전류차단기)라고 부릅니다. 전기제품 사이로 전류가 흐르듯이, 우리가 만드는 마이크로서비스 사이에도 트래픽이 흐릅니다. 어떤 마이크로서비스가 메..
- Total
- Today
- Yesterday
- CQRS
- 버라이어티가격
- 요즘남편 없던아빠
- 분초사회
- 도파밍
- 육각형인간
- 스포티파이
- 스핀프로젝트
- 애자일
- 마이크로서비스
- spotify
- Event Sourcing
- SAGA
- agile
- 호모프롬프트
- AXON
- 마이크로서비스 패턴
- API Composition
- 리퀴드폴리탄
- micro service
- 돌봄경제
- 디토소비
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |