개발

· 개발
Kafka Streams DSL은 레코드의 흐름을 추상화한 개념으로 KStream, KTable, GlobalKTable이 존재합니다.이 개념들은 컨슈머, 프로듀서, 프로세서 API에서 사용되지 않고, 스트림즈 DSL 에서만 사용되는 개념입니다. KStream레코드의 흐름을 표현한 것으로 메시지 키와 메시지 값으로 구성되어 있습니다.카프카 컨슈머로 토픽을 구독하는 것처럼 KStream에 존재하는 모든 레코드가 출력됩니다. KTableKStream은 모든 레코드를 조회할 수 있지만 KTable은 유니크한 메시지 키를 기준으로 가장 최신 레코드를 사용합니다.Java Collection의 Map 자료구조처럼 토픽에 있는 데이터를 key-value store 처럼 사용하는 것 이라고 생각하면 된다.사용자 마지막..
· 개발
@Async비동기 프로그램을 작성하기 위해서 복잡한 계산, I/O 작업 등 병렬로 처리하면서 시스템의 응답 시간을 개선하기 위해 혹은 리소스를 효율적으로 사용하기 위해 사용된다.스프링에서 간단하게 작성할 수 있도록 지원하는 애너테이션이다.Exception Handling@Async 메서드에서 발생하는 예외는 별도의 스레드에서 실행되기 때문에 호출자에게 전파가 되지 않는다.예외를 처리하기 위해서는 AsyncUncaughtExceptionHandler를 사용하여 예외를 처리해야 합니다. AsyncConfigurer를 구현하는 클래스AsyncConfigurerSupport를 사용한 확장은 deprecate 되었습니다. (참조)AsyncUncaughtExceptionHandler를 구현하는 클래스AsyncCon..
· 개발
html을 파싱해서 썸네일 이미지를 추출해 Amazon S3에 저장해야 하는 일이 있었습니다.사이드 프로젝트 인 만큼 이미지 용량을 줄일 수 있으면 S3 비용도 아끼고 프론트 렌더링 속도 역시 개선되겠다고 생각이 들었고 resize와 webp 이미지 포맷을 사용하기로 결정했습니다. 이미지 읽기URL 정보를 통해서 이미지를 읽어와야 했었는데 Java에서 javax.imageio.ImageIO 클래스를 사용하면 쉽게 이미지를 읽고 쓸 수 있었습니다. URL 혹은 파일을 읽어서 처리가 가능합니다.BufferedImage image = ImageIO.read(new URL(이미지 주소));BufferedImage image = ImageIO.read(new File(이미지 저장 위치));java.awt.imag..
이번에 JPA를 통해서 외부 DB에서 데이터를 Read/Write를 수행하지만 Spring Batch의 메타 테이블은 분리하고 싶었습니다. Spring batch 5.0에서 @EnableBatchProcessing의 새로운 속성이 생겨 쉽게 구현할 수 있을 줄 알았습니다.Spring Batch가 구성해야 하는 dataSource 및 transactionManager를 지정할 수 있습니다. ⛔️ 주의점SpringBoot 3.0부터 @EnableBatchProcessing 혹은 DefaultBatchConfiguration을 상속받아 사용하면 AutoConfiguration이 동작하지 않습니다.더보기DefaultBatchConfiguration@EnabledBatchProcessing이 내부적으로 빈을 등록..
사용자의 메일함에서 뉴스레터가 전송한 메일을 여러개를 JpaItemWriter를 통해서 Insert 처리를 해주려고 합니다. 하지만 배치를 돌려보니 "Class 'class java.util.ArrayList' is not an entity class" 예외가 발생했습니다.Stack trace를 확인해보니 JpaItemWriter에서 write메서드가 수행되는데 받아온 객체가 Entity가 아니라 List.class라서 발생한 문제였습니다.doWrite를 호출하면서 SessionImpl 클래스에서 persist를 하기전에 체크하는 메서드들이 호출될 때 ArrayList는 Entity가 아니라서 예외가 발생하게 됩니다.즉 write 메서드에 T가 Article이 아니라 List이 들어오고 ArrayList..
uhanuu
'개발' 카테고리의 글 목록