[Spring] Util 클래스 - static vs Bean
·
MSA
Spring에서 Util클래스를 작성할 때는 static이냐 Bean등록이냐를 고민하게 되는데 이번 글을 통해서 어떤 방식이 나을지 알아보도록 하자 1. 서론 1-1. 홍보 글의 시작부터 다른 글에 대한 홍보를 잠시 하겠다. 그 이유는 이번에 소개할 내용이 아래에서 소개하는 포스트에서 진행했던 내용과 관련이 있기 때문이다. Spring Event와 AWS SNS, SQS를 활용한 MSA 데이터 정합성 보장 전략 나는 DB 정합성 보장을 위해 Spring Event를 다음과 같이 사용했다. 잠시 이전 글의 서론을 다시 가져왔다. 한번 읽어보자 내가 구성한 MSA 프로젝트에서는 멤버 서버와 또 다른 서버가 상호 작용한다 curiousjinan.tistory.com 1-2. 작성하게 된 이유 간략하게 설명하면..
[Spring MSA] Zipkin으로 분산추적 로깅 구현하기
·
MSA
MSA에서 Zipkin을 사용하여 분산추적 로깅을 구현해 보자 이벤트를 사용해서 데이터베이스의 정합성 보장 문제는 해결했지만 아직 이 과정들을 전부 로그를 통해서 추적하는 것은 적용시키지 못했다. 로그가 정말 중요한 만큼 zipkin을 사용하여 제대로 로그를 추적해 보도록 하자. 이번 포스트에서는 ZIpkin을 활용하여 MSA 환경에서 분산 로그 추적을 구현하는 과정을 단계별로 설명한다. 1. ECR 리포지토리 생성하기 ECR(Elastic Container Registry)은 AWS에서 제공하는 Docker 컨테이너 이미지를 저장하기 위한 서비스다. 여기서는 Zipkin 이미지를 위한 저장소를 만드는 방법을 설명한다. 1-1. Zipkin 이미지를 저장할 AWS ECR 생성 zipkin 용 reposi..
[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 MSA] Spring Event, SNS, SQS를 사용하여 DB 정합성 보장하기 1탄
·
MSA
나는 MSA 프로젝트에서 DB 정합성 보장을 위해 Spring Event를 다음과 같이 사용했다. 잠시 이전 글의 서론을 다시 가져왔다. 한번 읽어보자 내가 구성한 MSA 프로젝트에서는 멤버 서버와 또 다른 서버가 상호 작용한다. 이때, 유저가 닉네임을 변경하면 멤버 서버의 닉네임 변경 메서드는 jpa를 통해 데이터베이스에 닉네임 변경 사항을 변경감지로 엔티티의 상태를 변경한다. 이후 스프링 이벤트를 발행해서 이걸 구독하는 구독자를 2개로 나눠서 한 구독자는 AWS의 SNS에 이벤트를 발행하고 다른 구독자는 멤버 서버의 DB에 SNS이벤트를 발행했다는 기록을 남기도록 했다. (boolean사용) 이 내용은 전부 하단의 2022 우아콘에서 권용근 연사님께서 발표해 주신 내용을 토대로 구성해 본 것이다. 너..
[Spring] SpringFramework 4.2 이후 스프링 이벤트의 변화
·
MSA
SpringFramework 4.2 이후의 Spring 이벤트의 업데이트 사항을 알아보자 내가 구성한 MSA 프로젝트에서는 멤버 서버와 또 다른 서버가 상호 작용한다. 이 중, 유저가 닉네임을 변경할 때 멤버 서버의 닉네임 변경 메서드가 jpa를 통해 데이터베이스의 변경 사항을 커밋한다. 흥미로운 점은, DB 커밋 직후 비즈니스 로직을 종료하는 게 아니라 '유저 정보가 업데이트되었다'는 Spring 이벤트를 발행하고 종료한다. 그럼 이 이벤트를 구독하는 스프링 리스너가 AWS SNS에 "유저 정보가 업데이트되었다'는 메시지를 발행하도록 했다. 이러한 Spring 이벤트의 활용 방식에 대해 깊이 있게 이해하고자 Spring Framework 4.2 이후 추가된 기능들을 공식 페이지에서 직접 탐구해 보았다...
Spring - 트랜잭션 관리 (Transaction Management)
·
MSA
스프링에서 트랜잭션이란 무엇일까? 자세히 알아보자 1. 트랜잭션 관리란? Transaction Management(트랜잭션 관리)은 데이터베이스의 일련의 작업을 하나의 논리적인 단위로 묶고, 해당 작업들을 안전하게 수행하거나 롤백하는 기능을 제공하는 것을 의미한다. Spring에서는 다양한 방법으로 트랜잭션 관리를 지원한다. 2. 트랜잭션 관리의 중요성 데이터 일관성 유지: 트랜잭션 관리를 통해 여러 개의 데이터베이스 작업이 하나의 논리적인 단위로 처리된다. 트랜잭션 내의 모든 작업이 성공하면 커밋되고, 하나의 작업이라도 실패하면 롤백되어 이전 상태로 되돌린다. 이렇게 함으로써 데이터 일관성을 유지할 수 있다. 데이터의 안정성 보장: 트랜잭션은 데이터의 안정성을 보장한다. 트랜잭션 내에서 작업이 수행되는..