본문 바로가기

분류 전체보기47

[카프카 이론] '아파치 카프카 애플리케이션 프로그래밍 with Java' 를 읽고 1 1. 카프카의 탄생 링크드인 팀은 단방향 통신을 통해 source application에서 target application으로 연동하는 코드를 작성하여 시스템 운영을 하고 있었음. 시스템이 커질수록 단방향 파이프라인은 점점 많아졌고, target application에 장애가 생기면 source application까지 문제가 전파되었음. 이러한 문제를 해결하기 위해 링크드인 팀은 신규 시스템을 만들게 되었고, 이 것이 아파치 카프카. 각각의 애플리케이션 끼리 연결하는 방식이 아니라 한 곳에 데이터를 중앙집중할 수 있도록 구성하였음. 카프카를 중앙에 배치함으로써 애플리케이션 사이의 결합도를 낮추게 되었음. 카프카의 특징 1. 카프카 내부에 데이터를 저장하는 파티션(partition)은 FIFO Queu.. 2023. 9. 24.
JMH benchmark 동기 대량의 데이터를 쪼개어 처리할 일이 있어, stream 보다는 parallelStream을 사용해보려고 했다. 당연히 parallelStream이 훨씬 빠르겠거니 하고 테스트를 해본 결과 stream이 더 빠른 결과가 나왔다. 대체 어떤 상황인지 이해가 되지 않아 구글링을 해보니, 해당 글을 발견했다. 짧게 수행한 벤치마킹은 JIT 컴파일러가 동작하는 중간에 혹은 동작하기 전에 끝나버리기 때문에, 최대 처리량 측정하지 않게 된다. 즉, 내가 테스트한 결과가 정확하지 않다는 것이다. JVM에서 성능테스트를 하기란 쉽지 않기 때문에 JMH같이 잘 만들어진 벤치마킹 프레임워크로 테스트하는 것을 추천하여 접하게 됐다. 적용 gradle plugins { id "me.champeau.jmh" version .. 2023. 3. 12.
Java Atomic Atomic 이란? Java에서 동시성을 보장해주는 자료형이다. Java docs에서 AtomicInteger에 대해 아래와 같이 설명하고 있다. An int value that may be updated atomically. (생략) An AtomicInteger is used in applications such as atomically incremented counters, and cannot be used as a replacement for an Integer. However, this class does extend Number to allow uniform access by tools and utilities that deal with numerically-based classes. 원자적으.. 2022. 12. 3.
Java Closure Closure란? MDN에서는 Closure를 아래와 같이 설명하고 있다. A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment). 클로저는 주변 상태에 대한 참조와 함께 묶인(포함된) 함수의 조합입니다. 네..? 무슨 말인지 잘 모르겠다. 간단한 예시로 closure에 대해 이해해보자. public int lambda() { BiFunction function = (x, y) -> x + y; return function.apply(1, 2); } public int closure() { int z = 3; BiF.. 2022. 12. 3.