[MSA] Kafka 컨슈머 Inbox 패턴
·
아키텍처
시작하며안녕하세요. 개발자 stark입니다. 최근 Transactional Outbox Pattern에 대한 대화를 하게 되었는데 제가 아직 이 패턴에 대해 모르는 점이 많다는 것을 깨달았습니다. 그래서 이 궁금증을 해결하기 위해 좀 더 깊이 공부해 봤습니다. 특히 이번 포스팅은 이전에 제가 작성했던 outbox 패턴 포스팅의 내용을 기반으로 이어서 설명드릴 예정입니다. 그러니 아래의 포스팅을 꼭 확인해 주세요! [MSA] Transactional Outbox Pattern안녕하세요! 글쓰는 개발자 stark입니다. 저는 최근 1년간 주로 MSA 프로젝트를 진행해 왔는데요 프로젝트를 설계하고 개발하면서 항상 같은 고민을 해왔습니다. 바로 MSA 서버 간 데이터 동기화 방curiousjinan.tistor..
이벤트 소싱과 CQRS
·
아키텍처
안녕하세요. 이벤트에 빠진 개발자 stark입니다!최근 저는 DDD에 푹 빠지게 되었습니다. 그래서 회사 선배님께 책을 빌려서 읽기도 하고 세미나도 보면서 정말 많은 공부를 하고 있습니다. DDD관련 책을 읽던 도중 '이벤트 소싱'이라는 목차가 등장했고 읽다 보니 엄청난 호기심이 생겼습니다. 왜냐하면 저는 주로 헥사고날 아키텍처와 EDA를 사용하여 개발을 해왔지만 제가 이벤트를 사용하게 되는 상황은 단순히 비관심사를 분리하는 상황뿐이었습니다. 특히 이벤트와 DDD와 조금만 검색해 봐도 Command와 Query를 분리하는 CQRS가 나옵니다. 그러다 보니 어느 순간부터 저도 코드에 "적용해 볼까?"라는 생각이 들면서 계속해서 고민하게 되었습니다. 가장 걸림돌이 된 것은 제가 이벤트 소싱과 CQRS의 개념..
[MSA] Transactional Outbox Pattern
·
아키텍처
안녕하세요! 글쓰는 개발자 stark입니다. 저는 최근 1년간 주로 MSA 프로젝트를 진행해 왔는데요 프로젝트를 설계하고 개발하면서 항상 같은 고민을 해왔습니다. 바로 MSA 서버 간 데이터 동기화 방법을 설계하는 것입니다.  MSA 서버 간 데이터 동기화를 진행한 이유저는 MSA 프로젝트 설계할 때 아래와 같이 각 서버별로 전용 DB를 가지도록 설계하였습니다. 만약 유저에 대한 정보를 유저 DB만 가지고 있다면 아래와 같이 게시글 서버, 소셜 서버, 미디어 서버에서는 비즈니스 로직에서 유저의 정보가 필요할 때마다 유저 서버에 API요청을 보내서 유저의 데이터를 받아와야 할 것입니다. 이렇게 되면 서버 간의 강한 결합(의존성)과 장애 전파가 될 수 있다는 문제점을 가지게 됩니다.만약 위의 상황을 아래와 ..
[Spring] 헥사고날 아키텍처
·
아키텍처
지금까지 내가 헥사고날 아키텍처를 설계해 보며 배운 점을 정리해 봤다.📌 서론지금까지 3번 정도 헥사고날 아키텍처를 적용시켜서 프로젝트를 만들어봤다. 첫 번째 설계에서는 왜 port 같은 것을 사용해서 이렇게 복잡하고 어렵게 설계하는 거지? 이런 생각이 많이 들었다. 원리를 이해하지 못하고 단순히 이게 좋다니까 해봐야겠다! 이런 생각을 하면서 개발을 진행했었던 것 같다. 관련된 자료를 열심히 찾아보기도 했지만 사실 제대로 알지 못하고 개발을 진행했다. 이렇게 원리를 잘 모르고 일단 개발해 보자는 마인드로 개발을 진행한 후 다시 한번 돌아보니 도메인 내부에 비즈니스 로직을 넣어두는 중요성을 놓치고 있었다. 그래서 서비스의 로직이 엄청 커지고 패키지도 많고 클래스도 많다 보니 오히려 이전과 큰 차이는 없으..
스프링에서 느슨한 결합 만들기: 이벤트 기반 아키텍처 적용
·
아키텍처
이벤트 기반 아키텍처를 적용해서 느슨한 결합(Coupling)을 만들어 보자 📖 서론이번 포스트에서는 먼저 결합도가 높은 일반적인 시나리오를 살펴보고, 이를 개선하기 위해 결합도가 높은 코드에 스프링의 이벤트 기반 아키텍처를 적용시켜 보자. 코드를 쉽게 이해하기 위해 자주 사용되는 로그인 프로세스를 예로 들어, 어떻게 결합도를 낮추고 코드의 효율성을 높일 수 있는지 설명하도록 하겠다. 1. 결합도가 높은 login() 메서드 작성하기 결합도가 높은 login() 메서드 코드 분석하기하단의 login() 메서드에서 처리하는 주관심사와 외부 관심사를 분리시켜 보자. 여기서 주관심사는 사용자의 로그인 과정이며, 외부 관심사(비관심사)는 로그인 후의 추가 작업들(예: 알림 보내기, 타 기기에서의 로그아웃 처..