본문 바로가기

Spring29

[Spring Batch] - AbstractPagingItemReader 조심하기 개요Spring Batch 데이터 수집 중 보통은 ItemReader에서 데이터를 조작하는 작업을 하지 않지만 특수한 케이스에서 페이징 한 데이터를 기반으로 추가로 데이터를 수집해야 하는 경우(join이 불가능하거나...) AbstractPagingItemReader를 구현한 객체를 사용하는데 이때 주의해서 사용할 점에 대하여 정리한다. PagingItemReader 동작 방식AbstractPagingItemReader의 맴벼 변수(protected volaatitle List results)는  AbstractPagingItemReader의 doRead() 메서드에서 AbstractPagingItemReader를 상속하는 구현체의 doReadPage()의 호출 결과로 값이 정해진다. PagingItem.. 2024. 8. 21.
[Spring Batch] 5.1.2 Features 개요기존에는 Spring Batch 4.x.x 버전으로 개발하다가 최근에 5.1.2 버전으로 변경하면서  Spring Batch 5.1What's New in Spring Batch 5.1Dependencies upgradeVirtual Threads supportMemory management improvement in the JpaltemWriterNew synchronized decorators for item readers and writersNew Cursor-based Mongoltem ReaderBulk inserts support in MongoltemWriterNew item reader and writer for RedisAutomatic configuration of JobRegist.. 2024. 8. 21.
[Spring] Flyway DB Migration 개요수년 전 개발했던 프로젝트 중 mysql 5.x 버전으로 개발된 프로젝트의 Mysql 버전을 8.x 버전으로 올리고, 간단한 마이그레이션이 필요하여 Spring sql init으로 사용하던 DB 스키마 정의를 Flyway를 적용하여 마이그레이션 한다. FlywayDatabase migrations made easyFree - API/CLI and Desktop GUIBuil on Open SourceVersion control your database migration scriptsPowered by the Flyway commnity and RedgateFlyway는 DB 마이그레이션을 지원하는 도구로 API/CLI와 GUI 툴을 제공하며 다양한 데이터베이스를 제공한다.또한 Spring Boot와 .. 2024. 8. 5.
Java JVM - Checkpoint Restore (CRaC) 개요이전 게시글에서 소개했던 Spring Runtime efficiency 문서에서(https://blog.igooo.org/115) CRaC에 대하여 소개한 적이 있는데 간단한 예제로 사용방법을 알아본다. K8S에 배포하는 파이프라인까지를 구성하고 문서를 작성하려고 했으나 사용 중인 K8S Node가 CRIU를(https://criu.org/Main_Page) 지원하지 않는 Ubuntu 배포판(20.04) 버전이라 K8S 배포는 추후에 작성한다. (Job으로 스냅샷을 생성하고 배포하는 방법) Spring Boot 3.2부터 CRaC를(https://spring.io/blog/2023/11/23/spring-boot-3-2-0-available-now) 지원하기 시작했다. CRaC는 Coodinated .. 2024. 7. 20.
[Spring] Springdoc-openapi 사용하여 API 문서 만들기 개요springdoc-openapi는 Spring Boot 프로젝트의 API 스팩에 대하여 자동으로 문서 생성을 해주는 라이브러리다. json, yaml, html 등 다양한 형식의 문서를 생성한다. OpenAPI 3 스팩을 지원한다. Getting Started간단한 Spring MVC Controller를 생성한다.@RestController@RequestMapping("/v1.0/pets")class PetApiController { private List> pets = List.of(Map.of("name", "pet1"), Map.of("name", "pet2")); @GetMapping List> findAll() { return this.pets; } @GetMapping("/{name}".. 2024. 7. 16.
Kubernetes에서 Spring @Scheduled 사용하기 개요Spring은 @Scheduled 어노테이션을 사용하여 예약된 작업을 처리하며, 이는 애플리케이션의 인스턴스가 하나만 실행 중인 경우 문제없이 동작한다. 그러나 애플리케이션은 점점 더 컨테이너화되고 있고, Kubernetes와 같은 플랫폼에서 실행되어 수평적 확장을 사용하여 배포하는 경우 애플리케이션은 여러 인스턴스가 실행되고 있다. 예약된 작업은 백그라운드에서 실행되기 때문에 애플리케이션을 수평적으로 확장할 때 예약된 작업이 중복이 발생할 수 있다. The Scenario@Componentclass ScheduledTasks { private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class); private .. 2024. 7. 9.