서론 Transactional Outbox Pattern에 대해서 궁금하시다면 해당 링크를 참고해 주세요. Transactional Outbox Pattern 이번 글에서는 Spring Boot와 Polling Publisher를 활용하여 어떻게 Transactional Outbox Pattern을 구현할 수 있는지, 그리고 주의점이 무엇인지 알아보겠습니다. 동작 과정 위 동작 과정은 다음과 같습니다. 클라이언트의 요청이 발생합니다. Member Service에서 Member 테이블에 대해 Insert, Update, Delete가 발생하면 Outbox 테이블에도 변경사항을 기록할 수 있도록 데이터를 저장합니다. Message Relay는 주기적으로 Outbox 테이블을 읽고 있습니다. Message R..
Transactional OutBox Pattern 이란? MSA 환경에서 데이터베이스의 상태가 변경되면 해당 트랜잭션과 함께 이벤트를 발행해야 하는 경우가 종종 발생하곤 합니다. 예를 들어 사용자가 회원가입을 완료한 경우 쿠폰을 발급하거나 이메일을 발송해야 하는 경우입니다. 위와 같은 이벤트를 발행하는 행위는 데이터베이스의 상태 변경과 원자적으로 실행되어야 합니다. 만약 데이터베이스에 회원가입 정보를 커밋한 뒤에 이벤트를 발행하면 이벤트가 어떠한 이유로 인해 오류가 발생하여 제대로 발행이 되지 않았다면? 데이터의 일관성이 깨질 우려가 있습니다. 간단한 코드로 조금 더 이해를 해보겠습니다. 🤔 코드로 살펴보기 아래 코드는 사용자의 회원가입 요청이 들어왔을 경우 한 트랜잭션 안에서 이벤트를 발송하고 있습니..
Reddison Vs Lettuce 우선 시작하기 전에 Spring Boot에서 Redis를 사용하기 위해서는 Redisson과 Lettuce 둘 중 하나를 사용할 수 있습니다. 해당 글에서는 Redisson을 사용하였으며, 왜 Redisson을 사용했는지 두개의 라이브러리가 어떤 차이점을 가지고 있는지 살펴보고 넘어가겠습니다. 💡 Redisson Redisson은 우선 Publisher와 Subscriber 기반으로 Lock을 획득 및 제공하고 있습니다. Lettuce와 다르게 SpinLock 방식이 아닙니다. SpinLock의 경우 순회를 하면서 Lock의 획득 여부를 계속하여 물어보게 됩니다. 이는 Busy Waiting이 발생하게 되며 많은 CPU 자원을 낭비하게 됩니다. 💡 Lettuce Let..
왜 Redis Sorted Set으로 대기열을 구현했는가? 여러 아티클을 통해 redis의 sorted set은 하나의 key에 중복되지 않는 meber를 가질 수 있다는 것을 알게되었다. 이는 카카오 선물하기 구조에서 안성맞춤이라고 생각한다. 그 이유는 하나의 선물(key)에 다수의 memer(참여자) 구조로 갈 수 있다는 것을 의미한다. N개의 요청이 발생했을 때 score를 통해 접근 순위를 파악할 수 있다. 런닝 커브가 낮다 카카오 선물하기 대기열의 구조 💡 게임 주최자의 입장 게임 주최자는 특정 오픈 채팅방에 선물하기 게임을 시작합니다. 선물의 정보와 redis에 저장할 키를 발급하고 데이터 베이스에 함께 정보를 저장합니다. 발급 받은 키를 사용하여 redis에 선물 갯수를 저장합니다. 오픈 채..
- Total
- Today
- Yesterday
- spring boot redisson 분산락 구현
- spring boot poi excel download
- 공간 기반 아키텍처
- spring boot redis 대기열 구현
- polling publisher spring boot
- spring boot excel download oom
- space based architecture
- spring boot redisson sorted set
- redis 대기열 구현
- redis sorted set
- pipeline architecture
- 트랜잭셔널 아웃박스 패턴 스프링부트
- java userThread와 DaemonThread
- 자바 백엔드 개발자 추천 도서
- spring boot excel download paging
- JDK Dynamic Proxy와 CGLIB의 차이
- 서비스 기반 아키텍처
- java ThreadLocal
- 레이어드 아키텍처란
- transactional outbox pattern
- 람다 표현식
- spring boot 엑셀 다운로드
- pipe and filter architecture
- redis sorted set으로 대기열 구현
- @ControllerAdvice
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- service based architecture
- microkernel architecture
- transactional outbox pattern spring boot
- spring boot redisson destributed lock
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |