본문 바로가기

소프트웨어-이야기/아키텍처

Service Aggregator VS BFF 애플리케이션 아키텍처 패턴으로 Service Aggregator와 BFF가 있다. 둘이 비슷한듯 다른데, 그 차이점을 이해해보자. Service Aggregator은 여러 MSA 호출을 조합하는 오케스트레이션 역할을 하는 서버를 말한다. Backend For Front은 UI에 친화적인 응답을 만드는 서버를 말한다. 그래서 Mobile/PC 별로 다른 화면을 위한 BFF도 존재할 수 있다. BFF도 여러 API을 호출한다는 점에서 Service Aggregator와 공통점이 있다. 그러나 사용하는 목적이 다르다는 점에서 차이가 있다는 생각이 든다.
[EDA] 이벤트 발행하기 애플리케이션에서 이벤트를 발행하는 방법은 크게 Application layer event와 Persistence layer event으로 나뉜다. Application layer event 애플리케이션 안에서 명시적으로 이벤트를 발행하는 방법이다. 장점은 원하는 시점에 이벤트를 발행할 수 있다는 것이다. DB에 데이터가 적재되지 않는 상황에서도 이벤트를 발행할 수 있다. 단, 도메인과 DB가 명시적으로 분리되어있는 경우에만 사용가능하다. 만약 도메인과 DB를 다른 애플리케이션에서 사용하고 있는 경우, 이벤트를 감지하지 못하는 상황이 발생할 수 있다. Persistence layer event 데이터 저장소를 활용하여 이벤트를 발행하는 방법이다. CDC가 대표적인 예이다. 이 방법은 도메인/DB가 분리되어..
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..
레이어드 아키텍처 레이어드 아키텍처 (n티어 아키텍처)는 일반적으로 많이 사용되는 아키텍처이다. 더 나은 아키텍처 대안을 찾지 못할 때, 쉽게 선택하는 아키텍처 패턴이다. Spring Project에서 각 레이어는 다음과 같은 클래스로 구현된다. Presentation Layer : Controller Business Layer : Service Persistence Layer : Entity Database Layer : Repository 특징 레이어드 아키텍처는 작고 간단한 서비스를 만들 때, 출발점으로 적합한 아키텍처다. 개발자에게 익숙하고, 복잡도도 낮기 때문에 소규모 애플리케이션에 적합하다. 단점 계층형 아키텍처는 영속성 계층을 토대로 만들어지기 때문에, 데이터베이스 주도 설계를 유도한다. 계층형 아키텍처에서 ..
분산 시스템을 위한 유일 ID 생성기 설계 가상면접 사례로 배우는 대규모 시스템 설계 기초 책의 7장을 보면, 분산 시스템을 위한 유일 ID 생성기 설계 패턴에 대해 나온다. 최근에 고민했던 것들이 모두 정리되어있어 블로그에도 남겨본다. 이 책에서는 유일 ID 생성 패턴은 크게 4가지이다. 1. DB를 여러대 사용한다. 그리고 auto_increment를 1씩 증가시키는게 아니라, 데이터베이스 수만큼 증가시킨다. 갈레라 클러스터 처럼 분산 DB 구조에서는 이런 패턴을 사용하고 있다. 그러나 DB 서버를 증설하거나 삭제하는 작업이 쉽지 않다는 단점이 있다. 2. UUID UUID를 사용하여 식별자를 만드는 것이다. 애플리케이션 서버에서 각자 유일 키를 생성하기 때문에, 시스템 확장과 성능적 이점이 있다. 그러나 ID가 숫자형에 비해 데이터가 크고,..
Cursor Pagination - 대용량 데이터에 페이지네이션 적용하기 이 글에서는 Offset Pagination의 단점과 Cursor Pagination의 장점에 대해서 설명하고자 합니다. Pagination은 가장 대중적으로 사용되는 Offset Pagination과 Cursor Pagination으로 나뉩니다. Offset Pagination offset pagination이란, page 혹은 offset/limit을 지정하여 데이터에서 pagination 된 결과를 조회하는 방식을 의미합니다. /article/?offset=10&limit=10 /article/?page=1 이와 같은 쿼리 파라미터를 전달하는 경우, 아래와 같이 쿼리로 데이터를 조회합니다. select * from article limit 10 offset 20 offset pagination 방식..
동영상 플랫폼 이해하기 (2) - AWS MediaConvert AWS 미디어 컨버트란? 파일기반 콘텐츠를 여러 디바이스에 송출할 할 수 있도록 파일을 변환해주는 프로그램이다. File based Transcoding이란? 영상 콘텐츠 파일에 영상 변환과 압축, 패키징, 접근 권한 제어를 수행한다. 영상 변환 영상 파일의 해상도를 낮춰서 파일을 압축하거나, 파일을 여러개로 분할해주는 역할을 수행한다. Adative Streaming을 위하여, 네트워크 대역폭별로 내려줄 영상 파일을 지정할 수 있다. 영상의 썸네일 이미지를 추출할 수 있다. 영상 음성 파일을 추출해준다. 영상 파일 포맷을 변환해준다. 예를 들어, m2ts 포맷 영상 파일을 hsl, mp4 파일으로 변환해준다. 패키징 여러 디바이스 타입에서 영상파일을 사용할 수 있도록 영상 파일을 패키징을 한다. 접근 ..