분류 전체보기
-
Message Queue 란❓☁️ infra/✉️ MQ 2023. 1. 4. 00:04
Message Queue ❓ 💡 Message Queue란 프로세스 간에 데이터를 교환할 때 사용되는 통신 방법 중 하나이다. 더 큰 개념으로는 - MOM(Message Oriented Middleware : 메시지 지향 미들웨어)를 의미한다. 최신 클라우드 아키텍처에서는 애플리케이션이 좀 더 쉽게 개발, 배포 및 유지 관리할 수 있도록 더 작고 독립적인 모듈로 구성한다. MQ는 이런 분산 애플리케이션을 위한 통신 및 조정 기능을 제공 각 모듈 애플리케이션의 코딩을 간소화 동시에 성능, 안정성 및 확장성을 개선 MQ를 사용하면 시스템의 서로 다른 부분이 통신하고 비동기식으로 작업을 처리할 수 있다. MQ는 메시지를 임시로 저장하는 간단한 버퍼를 제공 메시지를 전송 및 수신하기 위해 소프트웨어 구성 요소가..
-
4장 - 리포지터리와 모델 구현📕 book/도메인 주도 개발 시작하기 2023. 1. 2. 23:05
📌 JPA를 이용한 리포지터리 구현 모듈 위치 리포지터리 인터페이스는 애그리거트와 같이 도메인 영역에 속한다. 리포지터리를 구현한 클래스는 인프라스트럭처 영역에 속한다. 가능한 리포지터리 구현 클래스를 인프라스트럭처 영역에 위치시켜서 인프라스트럭처에 대한 의존을 낮춰야 한다. 리포지터리 기본 기능 구현 리포지터리가 제공하는 기본 기능 ID로 애그리거트 조회 애그리거트 저장 리포지터리 인터페이스 - OrderRepository public interface OrderRepository { Order findById(OrderNo no); void save(Order order); } 인터페이스는 애그리거트 루트를 기준으로 작성한다. 애그리거트 조회하는 기능의 이름을 지을때 널리 사용하는 규칙 - ‘find..
-
Quartz를 이용하여 softDelete한 내용을 실제로 delete 하기🌱 spring/🚛 spring batch 2022. 12. 28. 18:52
이번에는 Quartz를 이용하여 이전 프로젝트에서 사용해봤던 softDelete를 한 데이터에 대해 특정 시간이 지났을 경우 실제로 데이터를 삭제(hard delete)하는 작업을 해보았다. softDelete를 하기 위해 예제로 user entity를 만들어 사용했다. User.java @Entity @Table(name = "user") @Where(clause = "is_deleted = false") @SQLDelete(sql = "UPDATE user SET is_deleted = true WHERE id = ?") @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor @Getter public class User exte..
-
Quartz2🌱 spring/🚛 spring batch 2022. 12. 22. 18:07
DB 기반의 스케줄러 Quartz는 메모리 기반 스케줄러뿐 아니라 DB 기반의 스케줄러도 지원한다. DB 기반의 스케줄러는 스케줄러 정보를 메모리가 아닌 DB에 저장하기 때문에 다중 서버간 스케줄링이 가능하다! Quartz는 master-slave 형태로 서로간의 통신을 하지않고 단순히 DB 업데이트 정보를 기반으로 각각의 스케줄 인스턴스가 자기가 실행해야하는 Job을 실행한다. Cluster 환경에서 스케줄링이 가능해 Non-Cluster 환경에 비해 여러가지 장점이 존재한다. 고가용성 (HA, High Availability) 한 서버가 셧다운 되도 다른 서버에 의해 Job이 실행된다. 확장성 (Scalability) Quartz 설정된 서버를 구동하면 자동으로 DB에 스케줄 인스턴스로 등록된다. 셧..
-
Quartz (1)🌱 spring/🚛 spring batch 2022. 12. 22. 17:59
Quartz ❓ Job Scheduling 라이브러리 자바로 개발되어 자바 프로그램 어느 것에서도 쉽게 통합해 개발할 수 있다. 수십에서 수천 개의 작업을 실행할 수 있다. 간단한 interval 형식이나 Cron 표현식으로 복잡한 스케줄링도 지원한다. ex) 매 주 토요일 새벽 2시에 실행하는 작업, 매월 마지막 날에 실행하는 작업 등 Cron 표현식 Cron 표현식은 Cron 스케줄러의 정규 표현식이다. 총 7개의 필드로 구성되어 있다. 필드와 특수문자를 조합하여 스케줄링을 조절할 수 있다. * * * * * * * 초 분 시 일 월 요일 년도(생략가능) 특수문자 의미 특수문자 의미 특수문자 의미 * 모든 값 minutes 에 사용시 매분 동작 hours 에 사용시 매시 동작 ? 해당 필드 미사용 -..
-
Spring Batch - ItemProcessor🌱 spring/🚛 spring batch 2022. 12. 16. 15:53
📌 ItemProcessor ItemProcessor는 필수가 아니다 ❗ 데이터를 가공하거나 필터링하는 역할 이는 Writer에서도 구현이 가능하다. 그래도 사용하는 이유는 비즈니스 코드가 섞이는 것을 방지하기 위해서이다. 배치 어플리케이션에서 비즈니스 로직을 추가할 때는 먼저 Processor를 고려해보자❗ ( 읽기 / 처리 / 쓰기 )를 분리할 수 있는 좋은 방법이다. ItemProcessor는 Reader에서 넘겨준 개별 데이터를 가공 및 처리해준다. 사용하는 두 가지 방법 변환 Reader에서 읽은 데이터를 원하는 타입으로 변환해서 Writer에 넘겨 준다. 필터 Reader에서 넘겨준 데이터를 Writer로 넘겨줄 것인지를 결정한다. null 을 반환하면 Writer에 전달되지 않음. 🤷♂️ ..
-
Spring Batch - ItemWriter🌱 spring/🚛 spring batch 2022. 12. 16. 15:45
📌 ItemWriter ItemWriter는 SpringBatch에서 사용하는 출력 기능이다. Spring Batch가 처음 나왔을 때, ItemWritersms ItemReader와 마찬가지로 item을 하나씩 다루었다. 업데이트 이후 부터 ItemWriter는 item 하나를 작성하지 않고 Chunk 단위로 묶인 item List를 다룬다. Reader 의 read()는 Item 하나를 반환하는 반면, Writer의 write()는 인자로 Item List를 받는다. 과정 ItemReader로 통해 각 항목을 개별적으로 읽고 이를 처리하기 위해 ItemProcessor에 전달 이 과정은 chunk의 Item 개수만큼 처리될 때 까지 계속된다. 청크 단위만큼 처리가 완료되면 Writer에 전달되어 Wr..
-
SpringBatch - ItemReader🌱 spring/🚛 spring batch 2022. 12. 16. 15:34
📌 ItemReader Step은 Tasklet 단위로 처리가 된다. Tasklet 중에서 ChunkOrientedTasklet 을 통해 Chunk를 처리한다. 이를 구성하는 3요소로 ItemReader, ItemWriter, ItemProcessor 가 있다. ItemReader 란 Spring Batch의 Chunk Tasklet의 과정 ItemReader는 데이터를 읽어들인다. DB의 데이터만 이야기하는 것이 아니다 File, XML, JSON 등 다른 데이터 소스를 배치 처리의 입력으로 사용할 수 있다. JMS(Java Message Service) 와 같은 다른 유형의 데이터 소스도 지원한다. 또한 Spring Batch에서 지원하지 않는 Reader가 필요한 경우 직접 Reader를 만들어 사..