전체 글
-
Spring Cloud Data FlowSpring 2024. 10. 2. 15:09
공식 문서 사이트https://dataflow.spring.io/docs/installation/https://docs.spring.io/spring-cloud-task/docs/current/reference/html/#preface수동 다운로드 사이트작성일 기준으로 최신 버전은 2.11.4Spring Cloud Dataflow ServerSpring Cloud Skipper설명Spring Cloud SkipperSpring Cloud Data Flow와 함께 사용되는 배포 관리 도구로, 애플리케이션 배포의 관리 및 업그레이드를 간편하게 수행할 수 있도록 도와주며, Skipper는 Spring Cloud Data Flow에서 스트림 및 작업(Tasks)을 구성하고 실행하는데 있어 버전 관리, 롤백, 및..
-
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..
-
PG(Postgresql) 대용량 InsertDB 2023. 7. 3. 14:18
대용량 Insert 기술들 bulk insert(Multi-valued Insert) 데이터가 일정이상 과도하게 insert 되는 경우 인덱싱 문제로 인해 insert 속도가 저하 되었다. 테이블 인덱스 삭제 -> 대용량 Insert -> 테이블 인덱스 재생성 인덱스를 삭제 후 대용량 insert엔 문제가 없었으나 인덱스의 재생성에서 시간이 오래 걸림 PG의 copy문 사용 PG에서 제공하는 copy문을 사용. 1. 임시 테이블 생성 후 대량 Insert(해당 테이블엔 인덱스가 없기 때문에 Insert 속도 향상) 2. 본 테이블의 인덱스 삭제 3. 대용량 insert가 완료된 임시 테이블 copy문을 통해 csv 파일 생성 (copy to) 4. csv를 본 테이블에 전달(copy from) 5. 본 ..
-
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에 있는 정보 저장 담당 ..