Justin의 개발 로그
article thumbnail
SAGA 보상 트랜잭션
프로그래밍/MSA 2023. 5. 19. 10:49

펌 : https://waspro.tistory.com/603 SAGA 패턴 & 보상트랜잭션 SAGA 패턴은 서비스 별 각 트랜잭션이 단일 서비스 내의 데이터를 갱신하는 일련의 로컬 트랜잭션을 의미한다. 첫번째 서비스의 트랜잭션이 완료되면 두번째 서비스의 트랜잭션이 동작하도록 트 waspro.tistory.com SAGA 패턴은 서비스 별 각 트랜잭션이 단일 서비스 내의 데이터를 갱신하는 일련의 로컬 트랜잭션을 의미한다. 첫번째 서비스의 트랜잭션이 완료되면 두번째 서비스의 트랜잭션이 동작하도록 트리거 되는 방식이라 생각할 수 있다. SAGA 패턴은 크게 두가지 방식으로 구현할 수 있다. Event / Chreography : 각 로컬 트랜잭션이 이벤트를 발생시키고, 다른 서비스가 트리거 하는 방식 Com..

보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력해주세요.
article thumbnail
RxJava Single 구조 파해치기

Single을 활용한 간단한 샘플 소스를 가지고, Single이 어떻게 동작하는지 구조를 파해쳐 보도록 하겠다. 단계가 복잡하게 얽혀 전체를 파악하기 쉽지 않지만, 찬찬히 따라가다 보면 적어도 이렇게 구현되어 있구나라는 점은 파악할 수 있으리라. import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Single; import io.reactivex.rxjava3.core.SingleObserver; import io.reactivex.rxjava3.core.SingleOnSubscribe; import io.reactivex.rxjava3.disposables.Disposable; import org.jetbr..

article thumbnail
IntelliJ Selenium 프로젝트 구성
프로그래밍/Java-Spring 2023. 4. 10. 16:40

Chrome IDE 설치 https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd Selenium IDE Selenium Record and Playback tool for ease of getting acquainted with Selenium WebDriver. chrome.google.com 셀레늄 웹 드라이버 설치 https://www.selenium.dev/downloads/ https://chromedriver.chromium.org/ 각자 PC에 설치된 크롬(또는 선호하는 브라우저) 버전을 확인해서 버전에 맞는 driver를 설치해야 한다. PATH Environment Variable 에 추..

자바 DSL - 중첩된 함수(NestedFunction) + Lambda

DSL이 파라미터의 위치에 따라 역할이 정해지는 중첩된 함수(Nested Function) 패턴으로 구현된 DSL의 단점은 Lambda(함수형인터페이스)를 활용해 개선할 수 있다. NestedFunction + Lambda를 활용한 파라미터 역할 지정 기본형 파라미터로 입력받던 quantity와 price를 대체하기 위한 Supplier를 정의 public class SimpleSupplier implements Supplier { final T value; protected SimpleSupplier(final T value) { this.value = value; } private SimpleSupplier() { value = null; } @Override public T get() { retur..

자바 DSL - 중첩된 함수(NestedFunction) 패턴

public class NestedFunctionOrderBuilderEx { public static Order order(String customer, Trade... trades) { Order order = new Order(); order.setCustomer(customer); Stream.of(trades).forEach(order::addTrade); //주문에 모든 거래 추가 return order; } public static Trade buy(int quantity, Stock stock, double price) { return buildTrade(quantity, stock, price, Trade.Type.BUY); } public static Trade sell(int quan..

article thumbnail
자바 DSL - 메서드 체인 패턴

주식(stock)을 거래(trade)를 하는 주문(order) 기능을 Java로 구현 public class Order { private String customer; private List trades = new ArrayList(); public void addTrade(Trade trade) { trades.add(trade); } public String getCustomer() { return customer; } public void setCustomer(final String customer) { this.customer = customer; } public double getValue() { return trades.stream().mapToDouble(Trade::getValue).sum..

람다 - 팩토리 패턴

public class OriginalFactoryPattern { public static Product createProduct(String name) { switch(name) { case "Car" : return new Car(); case "Boat" : return new Boat(); default: throw new RuntimeException("No such product " + name); } } @Test void 팩토리메서드_테스트() { Product p1 = OriginalFactoryPattern.createProduct("Car"); Product p2 = OriginalFactoryPattern.createProduct("Boat"); } } public class La..

람다 - 의무체인 패턴

public class originalResponsibilityChain { public abstract class ProcessingObject { protected ProcessingObject nextProcessor; //자신과 동일한 객체를 멤버로 받음 abstract protected T handleWork(T input); //하위 객체 등록 public void setSuccessor(ProcessingObject successor) { this.nextProcessor = successor; } public T handle(T input) { T result = handleWork(input); if(nextProcessor != null) { return nextProcessor.han..

람다 - 옵저버 패턴

[AS-IS] import java.util.ArrayList; import java.util.List; public class OriginalObserverPattern { interface Observer { void notify(T message); } interface Subject { void registerObserver(Observer o); void notifyObservers(T message); } class WeatherFeed implements Subject { private final List observers = new ArrayList(); @Override public void registerObserver(Observer o) { this.observers.add(o); ..