spring boot
-
Spring & JTA(분산 트랜잭션)Spring 2023. 10. 30. 15:58
Spring Boot에 JTA 사용하기 안녕하세요. 기존 게시물 중 Spring Multi Datasource와 Multi Transaction 게시 글들이 있는데 말이 Multi Transaction이었지 결국에는 별개의 Transaction이었기 때문에 서로 다른 Transaction를 같이 사용했을 때 ACID가 지켜지지 않는 문제가 있었습니다. 그래서 이번 게시 글에선 JTA(Java Transaction API)를 이용한 분산 트랜잭션 처리를 다뤄보고자 합니다. 여기서 JTA에 간략하게 설명하자면 분산 트랜잭션을 관리하는 데 사용되는 Java 표준 API이며 데이터베이스, 메시지 큐, 웹 서비스 등 분산 트래잭션을 처리하게 해줍니다. 즉 이기종 간의 트랜잭션을 처리할 수 있습니다. 예로 A DB..
-
RabbitMQ 리스너 메세지 무손실 배포MQ 2023. 7. 3. 13:47
문제Queue에 메세지가 존재 하는 상황에서 배포를 할 경우 리스너에서 Queue 처리가 어디까지 진행되었는지 모르는 상황인데 이때 리스너를 종료하게 되면 Queue가 unacked 상태가 되거나 혹은 다시 대기열로 들어가서 Queue를 재처리 하는 과정에서 원치 않는 프로세스의 중복을 유발 시킬 수도 있다. 그래서 이를 피하긴 위해 Queue에 메세지가 있는지 확인하고 없는 상황에서만 배포를 해야 하는데 그럴려면 Queue에 메세지를 상시 확인 해야 하며 배포 일자를 원하는 시기에 맞춰서 할 수 없다는 문제가 있다.목적Queue에 메세지가 존재하거나 리스너에서 Queue를 처리 하고 있는 상태에서도 Queue 메세지를 상시 확인하지 않고 배포 일자를 원하는 시기에 맞춰 할 수 있게 리스너 배포를 구성...
-
RabbitMQ DLX/DLQ 메세지 손실 방지MQ 2023. 7. 3. 11:24
RabbitMQ DLX/DLQ 메세지 손실 방지 이번 글에 주제는 RabbitMQ를 재시작 했을 때 DLX(Dead Letter Exchange)와 DLQ(Dead Letter Queue)의 메세지가 손실 되지 않는 구성 및 코드를 작성하는 방법에 대해서 쓰려고 합니다. 물론 DLX/DLQ에만 국한된 이야기가 아니고 Exchange/Queue에도 관련된 이야기 입니다. DLX/DLQ도 결국에는 Exchange이면서 Queue이기도 하기 때문입니다. 이와 관련해서 사용된 기술은 Spring AMQP 기준 입니다. 그렇지만 기술만 그러할 뿐 근본적인 내용은 RabbitMQ에 의존하기 때문에 다른 언어에서도 지원 되는 기술을 찾아 동일하게 적용할 수 있습니다. 방법 RabbitMQ 서버가 재시작 되었을 때 메..
-
Spring과 Builder PatternSpring 2023. 4. 5. 14:54
빌더 패턴 이번 주제는 생성자 패턴 중에서 제일 유명하고 가장 많이 쓰이는 패턴인 빌더 패턴입니다. 빌더 패턴에 장점으론 유연한 객체 생성 과정 생성된 객체의 불편성 유지 가독성 높은 코드 작성 등이 있습니다. 빌더 패턴과 많이들 이야기 되는게 점층적 생성자 패턴과 자바빈즈 패턴이 이야기 됩니다. 여기서 점층적 생성자 패턴을 설명 드리면 생성자를 오버로딩하여 파라미터 개수를 늘려가면서 객체를 초기화 하는 방식 입니다. public class Person { private String name; private int age; private String address; private String phone; public Person(String name, int age) { this(name, age, ""..
-
Spring과 Abstract Factory PatternSpring 2023. 2. 1. 13:57
추상 팩토리 이번 주제는 프로세스 로직을 추상 팩토리 패턴을 적용하여 Spring에서 어떻게 사용할 수 있을지에 대해서 작성하려고 합니다. 추상 팩토리 패턴이란? 개인적인 견해로는 추상 팩토리 패턴은 팩토리 메서드 패턴보다 결합도를 낮추고 응집도를 올려주는 패턴이라고 생각합니다. 왜 결합도를 낮추고 응집도를 높히는지 알려면 먼저 팩토리 메서드 패턴 구조를 알아야 하는데 이 부분은 이전 글인 https://devssul.tistory.com/26를 참고하시면 되겠습니다. 팩토리 메서드는 프로세스 구현 객체를 반환 받기 위해 추상 클래스(혹은 부모 클래스)와 상속 받는 구현체 구조를 가지게 되고 반환 받은 프로세스 구현 객체를 추상 클래스(혹은 부모 클래스)에서 제어하기 때문에 추상 클래스(혹은 부모 클래스..
-
Spring과 Factory PatternSpring 2023. 1. 19. 14:29
단순 팩토리 이번 글은 Spring에서 단순 팩토리 패턴을 사용하는 글을 작성하려고 합니다. 단순 팩토리에 대한 설명은 팩토리 비교 (refactoring.guru)에서 단순 팩토리 부분을 참고하시면 되겠습니다. 단순 팩토리는 정말 단순하게 개발자가 요구하는 객체들이 모여져 있는 클래스가 존재하고 필요 할 때마다 해당 클래스에서 반환 받는 형태를 가지게 됩니다. 이번 주제는 정말 단순해서 바로 본론으로 들어가도록 하겠습니다. 이번 예제는 이전 글인 팩토리 메서드 패턴에 단순 팩토리를 적용하는 예로 들겠습니다. 먼저 이전 글인 팩토리 메서드 패턴에는 몇 가지 문제(?)가 있습니다. 바로 의존성에 대한 문제 입니다. 프로세스 로직 담당 클래스는 정보 저장을 위해 Spring Bean에 있는 정보 저장 담당 ..
-
Spring boot + MongoDB Multi-Document TransactionsDB 2022. 7. 22. 17:21
MongoDB 4.0 이전 버전에선 Single-Document Transactions만을 지원하였습니다. RDB는 데이터들을 정규화해서 서로 다른 테이블에 저장하는 반면 MongoDB는 정규화를 거치지 않고 하나의 Document에 몽땅 저장 하기 때문에 MongoDB의 지향점을 생각하면 Single-Document Transactions이면 충분했겠지만 세상은 우리의 뜻(?)대로만 살 수 없기에 4.0 버전부터 Multi-Document Transactions이 지원되게 되었습니다. 여담이지만 4.0 이전 버전에서 Multi-Document Transactions을 위해선 2-Phase-Commits과 같은 방법을 개발자가 직접 처리해야 했습니다. 그럼 버전별로 달라진 점을 간략 설명하자면 v4.0 ..
-
Spring @Sevice 클래스 유연하게 써보기Spring 2022. 7. 15. 08:16
Spring Multi Datasource(다중 데이터소스)를 활용한 Service 구현 :: 신나게의 개발썰 Spring Multi Datasource(다중 데이터소스)를 활용한 Service 구현-2 :: 신나게의 개발썰 Service 관련 작성하였지만 개인적으로 아쉬운게 있어 추가 글(또 작성하네..)을 작성하려고 합니다.(이전 글 홍보 양해 부탁드립니다^^) Spring Framework를 활용하면 MVC 패턴을 사용하게 됩니다. MVC 패턴에 의거(?)해서 @Controller 어노테이션으로 선언된 Controller 클래스 생성 비지니스 로직 처리를 위해 @Service 어노테이션으로 선언된 Service 클래스 생성 여기서 이번 글의 목적은 저 Servie 클래스를 유연하게 써보기 위한 목적..