본문 바로가기

전체 글508

Chunk Size and Parallel Spring Batch -- 결론 -- 1. Chunk Size 가 클수록 Batch 의 실행시간이 빨라(짧아)지는 것은 아니다. 2. 병렬 처리의 속도가 더 빠르다. Case) 1억 건의 파일을 DB에 저장해야 한다 Chunk Size 를 최소화해서 여러번 Commit 한다 → Commit 리소스 비용이 크기 떄문에 비효율적 , 커밋을 되도록 줄인다보통 금융권 기준으로 2~3000 으로 설정하는 것 같다고 함. Chunk Size 를 1억으로 설정하면 OOM 이 발생할 수 있다. ( 메모리에 올려두고 작업하기 때문에 ) ChunkSize 에 따른 속도 비교 → 약 1만건(10,209) 의 데이터를 가지고 테스트 // Chunk Size Test @RequiredArgsConstructor @Configuration publi.. 2024. 4. 22.
Spring Batch 5.x DB 사용하기 기존 Tasklet 방식에 이어 Chunk 방식을 이용한 간단한 예제를 작성해 보려고 한다. 스프링 배치 아키텍처이다. Tasklet 에서는Item 과 관련된(노란색) 부분은 사용하지 않았다. Chunk 방식에서는 Item 을 사용하려고 한다. DB 에서 데이터를 가져올 case 1. ItemReader -> DB 에서 데이터 조회 2. ItemProcessor -> 데이터 가공 3. ItemWriter -> DB 에 다시 INSERT 이렇게 순서로 진행할 예정이다. . MySQL DB 에 BATCH 테이블이 정상적으로 생성되어있다고 가정. JPA 를 이용해서 Entity 2개를 만들어주었다. Person 테이블에서 가공 후 PersonTemp 테이블에 넣어줄 예정. @Entity @NoArgsConst.. 2024. 4. 20.
Spring Batch 5.x 기본 연습 - tasklet Spring Batch 5 는 이전과 많은 변화가 있다. 새롭게 생성하기 전이나 마이그레이션하기 전에 어떤게 변했는지 참고해본다. https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-5.0-Migration-Guide Spring Batch 5.0 Migration Guide Spring Batch is a framework for writing batch applications using Java and Spring - spring-projects/spring-batch github.com 💡 이전에는 @EnableBatchProcessing 어노테이션을 통해서 스프링 배치의 스프링 부트 자동설정을 활성화할 수 있었습니다. 하지만 이제는.. 2024. 4. 19.
Chapter10. 이벤트 외부 서비스가 정상이 아닐 경우, 트랜잭션 처리를 어떻게 해야할까 ? 비동기 이벤트를 사용해서 두 시스템 간의 결합도를 낮춘다. ( 강결합 → 약결합 ) 이벤트가 발생한다 → 상태가 변경됐다 → 해당 이벤트에 반응하여 원하는 동작을 수행하는 기능 작성 이벤트 클래스 : 이벤트를 표현 디스패처 : 스프링이 제공하는 ApplicationEventPublisher 를 이용 Events: 이벤트를 발행, 이벤트 발행을 위해 ApplicationEventPublisher 를 사용 이벤트 핸들러 : 생성 주체가 발생한 이벤트를 전달받아 이벤트에 담긴 데이터를 이용해서 원하는 기능을 실행 ex) ‘주문 취소’ 이벤트를 받는 이벤트 핸들러는 해당 주문의 주문자에게 SMS로 주문 취소 사실을 알린다. 이벤트 디스패처 :.. 2024. 4. 17.
2024년 계획 보호되어 있는 글 입니다. 2024. 4. 13.
Chapter7~8. 도메인서비스 ~ 애그리거트 트랜잭션 관리 여러 애그리거트가 필요한 기능 ex) 결제 금액 계산 로직 → 상품, 주문, 할인, 회원 애그리거트 등 필요. 하나의 애그리거트에 넣기 애매한 도메인 기능을 억지로 넣어 구현하면 안된다. 도메인 기능을 별도 서비스로 구현하는 방법을 사용한다. 도메인 서비스는 도메인 로직을 표현하므로 도메인 서비스의 위치는 다른 도메인 구성요소와 동일한 패키지에 위치 @Service @Transactional public class PaymentCalculationService { private final ProductRepository productRepository; private final DiscountRepository discountRepository; private final MemberRepository m.. 2024. 4. 10.
동시성 문제 해결 - Synchronized, Pessimistic Lock, Optimistic Lock, Redis https://www.inflearn.com/course/%EB%8F%99%EC%8B%9C%EC%84%B1%EC%9D%B4%EC%8A%88-%EC%9E%AC%EA%B3%A0%EC%8B%9C%EC%8A%A4%ED%85%9C/dashboard 재고시스템으로 알아보는 동시성이슈 해결방법 | 최상용 - 인프런 최상용 | 동시성 이슈란 무엇인지 알아보고 처리하는 방법들을 학습합니다., 동시성 이슈 처리도 자신있게! 간단한 재고 시스템으로 차근차근 배워보세요. 백엔드 개발자라면 꼭 알아야 할 동 www.inflearn.com 위 강의를 학습하며 작성. 작업환경 세팅 brew install docker brew link docker docker version docker pull mysql docker run -d .. 2024. 4. 8.
Chapter6. 응용 서비스와 표현 영역 사용자에게 기능을 제공하려면 도메인과 사용자를 연결해 줄 표현 영역과 응용 영역이 필요. 응용 서비스 애플리케이션의 사용 사례(Use Case)를 구현하는 역할 주로 사용자의 요청을 처리하고, 도메인 객체 간의 상호 작용을 조정하여 트랜잭션 경계를 설정 응용 서비스는 도메인 로직을 직접적으로 구현하지 않고, 도메인 계층의 서비스와 리포지토리를 사용하여 해당 기능을 수행 // 도메인 로직을 직접 구현하지 않는다 @Service public class OrderService { @Autowired private OrderRepository orderRepository; @Autowired private ProductService productService; @Transactional // 트랜잭션 경계 설정.. 2024. 4. 8.
Chapter5. 스프링 데이터 JPA를 이용한 조회 기능 CQRS : 명령 모델과 조회 모델을 분리하는 패턴 명령 모델 : 상태를 변경하는 기능 구현 ex) 회원 가입, 주문 취소 조회 모델 : 데이터를 보여주는 기능 ex) 주문 목록, 주문 상세, 회원 상태 스프링 데이터 JPA 간단 예제 // Entity 클래스 생성 @Entity @Getter public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; private String author; } // Repository 인터페이스 생성 public interface BookRepository extends JpaRepository { } // Service 클.. 2024. 4. 8.