자바에서의 비동기 처리를 위해 CompletableFuture에 대해 공부하며 클래스 내부를 보다보니 Executor, ForkJoinPool 등이 눈에 띄었다. 생소한 부분이라 공부하며 나름대로 정리해보았다. Thread Pool Executor, ForkJoinPool에 대해 알기 전에 먼저 스레드 풀의 개념에 대해 살펴보자. ...
Sync/Async, Blocking/Non-Blocking
들어가기 전 항상 동기적으로만 프로그래밍을 해왔었지만, 비동기적으로 프로그래밍 하는 것도 반드시 알고있어야 한다고 생각한다. (reactive app ?? -> Spring Webflux 등 ?) 비동기면 non-blocking, 동기면 blocking 이라고 생각했는데, 잘못 생각하고있었다. 제대로 알아보자. Synchronous vs A...
(미해결) 카프카 프로듀서 재송신 테스트
상황 카프카의 전달 보증에 대해 공부했고 at most once, at least once, exactly once 세 종류가 있다는 것을 알게되었다. 각 전달 보증 수준에 대해 공부하면서, 브로커에서 응답하는 ack가 오지않는(유실되는) 경우 프로듀에서 메시지를 재전송 하는 부분에 대해 다음과 같은 테스트를 해보고 싶었다. at most ...
카프카 전달보증 구현하기 - Exactly Once
Exactly Once 메시지 유실없이 정확히 한 번 전달한다 ?? –> 전달보다는 ‘브로커에서’ 정확히 한번만 ‘처리된다’라는게 맞는거같다 -> 근데 컨슈머측에서 처리하다 에러나면, 재송신하는거 아닌가 ? -> 즉, at least once랑 같은데 메시지 중복처리만 안되게하는거 아닌가 ??v -> 아닌거 같다, ...
XSSF로 인한 OOM 에러 그리고 SXSSF와 메모리 사용량 비교해보기
상황 이 글 에서 언급했듯이, poi 라이브러리를 활용해서 엑셀을 만들 때, XSSF 클래스를 사용하면 데이터 건수(엑셀 row)가 많은 경우 OOM 에러가 발생한다. XSSF를 개선한 SXSSF를 사용하면 해당 문제를 해결할 수 있다고 하는데, 실제로 메모리 사용량을 비교해보고자 한다. 메모리 단면을 분석하는 방법은 ...
Java - 자바로 엑셀을 만들기 위한 POI 라이브러리 살펴보기
회사 프로젝트에서 조회한 화면에 대해 엑셀 파일로 다운받게 만들어주는 기능을 구현해야 했다. 방법을 찾다보니 POI 라이브러리라는게 있었고 이를 활용해서 구현할 수 있었다. 하지만, 다른 파트에서 해당 라이브러리를 사용하다 OOM(Out Of Memory)에러가 발생했고, 구현체를 살펴보니 XSSF의 usermodel을 사용하고 있었다. 해당 파트에서...
Java - 자바 메모리 단면 분석하기
언제 메모리 단면을 분석해야할까 ? 메모리 단면인 ‘힙 덤프(Heap Dump)’는 생성하는데 비용이 비싸기 때문에, 메모리가 부족해지는 현상이 지속해서 발생하거나 OOM 에러가 발생했을 때 생성해야 한다. 여기서 말하는 비용이란 다음과 같다 덤프 파일을 생성하는 동안 서비스가 불가능한 상황이 된다. 덤프 생성시 많은 시간이 소요될 수 있...
Java - 자바 힙 메모리 사이즈와 OutOfMemoryError
지금까지 OutOfMemoryError(OOM)을 만나게 되면, 정확한 진단없이 그냥 성능 팀에서 하라는 대로 Xms, Xmx 옵션을 활용해서 힙 크기를 조절했던 것 같다. 내가 스스로 판단할 수 있게끔 지식을 갖추고 연습해보자. 힙 메모리 사이즈 기본값 공식 문서 에 보면 default로 세팅되는 초기 힙사이즈와 최대 힙사이즈에 대해 나와...
카프카의 전반적인 구성과 동작 방식 살펴보기
※ 해당 내용은 ‘실전 아파치 카프카(한빛미디어)’ 2장을 읽고 필요한 부분을 정리한 내용입니다. 분산 메세징 처리를 위한 시스템 구성 출처 : https://www.gavstech.com/all-about-apache-kafka-an-evolved-log/ 1. 파티션 브로커상의 데이터를 읽고 쓰는 것은 파티션이라는 단위로 ...
카프카 개요
※ 해당 내용은 ‘실전 아파치 카프카(한빛미디어)’ 1장을 읽고 필요한 부분을 정리한 내용입니다. Apache Kafka란? 카프카는 분산 메세징 시스템이다 분산 분산 시스템(distributed system, 또는 분산 컴퓨팅) 서로 다른 시스템에 위치한 구성 요소들간에 통신하고 협력하여 구성되는 시...