[EDA] 이벤트 데이터 설계 이벤트 설계 이벤트는 “뭔가" 일어났음을 전하는 메시지가 아니라, 이벤트가 발생한 동안의 모든 일들을 기록해야한다. 이 출력 이벤트를 단일 진실 공급원으로 간주해서 다운스트림 컨슈머가 소비할 불변의 팩트로 기록해야한다. 때문에 컨슈머는 이벤트 데이터 만으로도 데이터를 처리할 수 있다. 이론적으로는 출력 이벤트를 SSOT으로 간주하라고 한다. 그러나 실제 서비스에서는 ZERO-PAYLOAD 방식을 사용하는 경우가 많은 것 같다. 이벤트 스트림에는 하나의 논리적 이벤트를 나타내는 이벤트가 포함되어야 한다. 이벤트 데이터 타입은 가장 좁은 범위를 사용한다. 이벤트는 하나의 목적만 가진다. 다용도 스미카는 비즈니스 요건이 조금만 달라져도 엄청나게 복잡해진다. 이벤트 크기는 최소화한다. 이벤트 메시지가 큰 경우,.. Transactional outbox Transactional outbox은 MSA 환경에서 이벤트 메시지 발행을 보장할 때 사용하는 패턴이다. 이벤트 메시지 발행 시점 애플리케이션에서 이벤트를 발행할 때에는 트랜잭션 내부 혹은 외부에서 호출하는 상황에 따라 장단점이 있다. (1) 트랜잭션 안에서 메시지 발행 메시지 발행 여부를 쉽게 보장할 수 있다. 그러나 메시지 발행의 실패가 곧 전체 서비스로 장애가 전파될 수 있다는 단점이 있다. (2) 트랜잭션 밖에서 메시지 발행 메시지 발행 실패가 즉시 해당 서비스의 장애로 전파되지 않는다. 그러나, 메시지 발행에 실패해도 메시지 발행을 재시도 할 수 없다는 단점이 있다. 위의 방안은 모두 안정적으로 메시지 발행을 보장할 수 없기 때문에 다른 대안이 필요하다. 메시지 발행 보장하기 Transacti.. broadleafcommerce으로 재고 시스템 맛보기 이커머스 오픈소스인 broadleafcommerce의 재고 서비스를 살펴봄으로써, 재고 시스템 구조를 맛보고자 한다. 재고 예약 Flow Diagram 체크아웃을 완료하기 전인 임시 주문 단계에서 재고를 임시로 예약한다. (Soft Reservation) 그리고 체크아웃이 모두 완료되어, 주문서가 만들어지고난 이후 재고를 영구적으로 예약한다. (Hard Reservation) DB Diagram inventory transaction은 sku의 재고 히스토리를 관리하기 위한 도메인이다. inventory transaction의 8개의 타입으로 이루어져있다. SOFT_RESERVED HARD_RESERVED FULFILLED CANCELLED ORDERED RETURNED RECEIVED SHRINKAGE.. [예외처리] notification pattern catched exception 회복해야하는 대상의 예외 자바에서는 메서드가 던질 수 있는 확인된 예외 목록을 선언해야한다. 아니면 해당 예외를 try/catch으로 선언해야한다. public boolean validate() { if (this.description.length() > 100) { throw new DescriptionTooLongException(); } final LocalDate parsedDate; try { parsedDate = LocalDate.parse(this.date); } catch (DateTimeParseException e) { throw new InvalidDateFormat(); } .... return true; } public class Descripti.. [Rule Engine] 비즈니스 규칙 엔진 비즈니스 규칙 엔진이란?비즈니스 규칙 엔진이란, 어떤 조건에 따라 액션을 유발하는 규칙이 있는 비즈니스 기능을 구현할 때 사용하는 프로그램이다. 비즈니스 규칙 엔진의 요구사항은 크게 4가지로 나뉜다.팩트 : 규칙이 확인할 수 있는 정보액션 : 수행하려는 동작조건 : 액션을 언제 발생시킬지 지정규칙 : 실행하려는 비즈니스 규칙을 지정보통 팩트/액션/조건을 한 그룹으로 묶어서 규칙으로 만든다.비즈니스 규칙 엔진 구현 방법은 다음과 같다.DiagramCodeClass@FunctionalInterfacepublic interface Action { void execute(Facts facts);} @FunctionalInterfacepublic interface Condition { boolean evalu.. Null Object Pattern Null Object Pattern 함수에서 null을 리턴하는 경우, 함수를 사용하는 곳에서 null을 처리하는 예외처리를 해줘야한다. 반면, Null Object Pattern을 사용하면 null 객체를 처리하는 로직이 전파되는 문제를 줄일 수 있다. 그 결과, 중복 코드를 줄일 수 있어서, 코드가 단순해진다. 예를 들어, 회원 정보를 조회하는 다음과 같은 코드가 있다고 생각해보자. public Customer GetByPhoneNumber(string phoneNumber) { return _customerRepository .List(c => c.PhoneNumber == phoneNumber) .FirstOrDefault(); } var customer = GetByPhoneNumber(phon.. <칼 뉴포트> Deep Work 📝 밑줄 그으며 책 읽기 2. 몰입과 집중을 방해하는 세상 산만한 회사는 어떻게 만들어지는가 직장에서 수용되는 산만한 행동의 경우 지금은 도처에 존재하는 상시 접속 문화(culture of connectivity)가 지배적인 지위를 차지한다. 이 문화에 따라 사람들은 이메일을 빨리 읽고 답해야 한다. ... 상시 접속 문화가 지속되는 이유는 더 쉽기 때문이다. 이 말이 옳은 두가지 이유가 있다. 첫번째는 필요에 대한 응답성과 관련된다. 필요할 때 질문에 대한 답이나 특정한 정보를 즉시 얻을 수 있다면 적어도 그 순간에는 일이 수월해진다. 이 처럼 빠른 응답을 얻지 못하면 사전에 업무를 계획해야 하고, 더욱 조직적이어야 하며, 필요한 대상을 기다리는 동안 잠시 일을 제쳐두고 다른 곳에 주의를 돌릴 준비를 .. (개발자를 위한) 광고 도메인 용어 살펴보기 본 글에서는 광고 시스템 도메인에 대해서 살펴보고자 한다. 해당 글은 아래의 글을 참고하여, 애드네트워크 개발 경험을 떠올리며 작성했다. https://medium.com/interviewnoodle/facebook-advertising-system-design-architecture-7eed10e68333 Facebook Advertising System Design & Architecture It’s an age-old adage: “Half the money I spend on advertising is wasted; the trouble is I don’t know which half.” The quote, by department… medium.com 광고는 크게 3가지로 레이어로 나뉜다. 캠페.. 이전 1 ··· 5 6 7 8 9 10 11 ··· 39 다음