스프링에서 느슨한 결합 만들기: 이벤트 기반 아키텍처 적용
·
Spring/Spring 기초 지식
이벤트 기반 아키텍처를 적용해서 느슨한 결합(Coupling)을 만들어 보자 📖 서론 이번 포스트에서는 먼저 결합도가 높은 일반적인 시나리오를 살펴보고, 이를 개선하기 위해 결합도가 높은 코드에 스프링의 이벤트 기반 아키텍처를 적용시켜 보자. 코드를 쉽게 이해하기 위해 자주 사용되는 로그인 프로세스를 예로 들어, 어떻게 결합도를 낮추고 코드의 효율성을 높일 수 있는지 설명하도록 하겠다. 1. 결합도가 높은 login() 메서드 작성하기 결합도가 높은 login() 메서드 코드 분석하기 하단의 login() 메서드에서 처리하는 주관심사와 외부 관심사를 분리시켜 보자. 여기서 주관심사는 사용자의 로그인 과정이며, 외부 관심사(비관심사)는 로그인 후의 추가 작업들(예: 알림 보내기, 타 기기에서의 로그아웃 ..
[Spring MSA] 스프링 이벤트와 SNS/SQS로 DB 정합성 보장 2탄 - ZeroPayload로 FeignClient 요청
·
MSA
이번에는 멤버 서버의 SNS로 발행한 메시지를 받은 레시피 서버의 SQS리스너 동작에 대해서 설명한다. 이 글은 이전에 작성한 MSA 이벤트 정합성 보장방법 1탄에서 이어지는 내용이라 이것을 읽기 전에 꼭 아래의 글을 보고 오자 Spring Event와 AWS SNS, SQS를 활용한 MSA 데이터 정합성 보장 전략 나는 DB 정합성 보장을 위해 Spring Event를 다음과 같이 사용했다. 잠시 이전 글의 서론을 다시 가져왔다. 한번 읽어보자 내가 구성한 MSA 프로젝트에서는 멤버 서버와 또 다른 서버가 상호 작용한다 curiousjinan.tistory.com 1. 포스트 내용 요약 1-1. 이전 포스트의 내용 요약 내가 구성한 MSA 프로젝트에서는 멤버 서버와 또 다른 서버가 상호 작용한다. 만약..
[Spring] SpringFramework 4.2 이후 스프링 이벤트의 변화
·
MSA
SpringFramework 4.2 이후의 Spring 이벤트의 업데이트 사항을 알아보자 내가 구성한 MSA 프로젝트에서는 멤버 서버와 또 다른 서버가 상호 작용한다. 이 중, 유저가 닉네임을 변경할 때 멤버 서버의 닉네임 변경 메서드가 jpa를 통해 데이터베이스의 변경 사항을 커밋한다. 흥미로운 점은, DB 커밋 직후 비즈니스 로직을 종료하는 게 아니라 '유저 정보가 업데이트되었다'는 Spring 이벤트를 발행하고 종료한다. 그럼 이 이벤트를 구독하는 스프링 리스너가 AWS SNS에 "유저 정보가 업데이트되었다'는 메시지를 발행하도록 했다. 이러한 Spring 이벤트의 활용 방식에 대해 깊이 있게 이해하고자 Spring Framework 4.2 이후 추가된 기능들을 공식 페이지에서 직접 탐구해 보았다...