Home
zz9z9
Cancel

데이터 모델링

들어가기 전 애플리케이션을 설계할 때 ‘DB 테이블은 어떻게 구성해야하지?’ 에 대한 막막함이 있다면 데이터 모델링이 문제 해결의 출발점이라고 생각한다. 공부를 하기에 앞서 나의 언어로 정리해본다면 내가 생각하기에 모델링이라는 것은 먼저 문자 그대로 ‘모델화’ 시킨다는 것인데, 모델이란 ‘어떤 대상을 필요한 특징만 추려서 나타낸 것’ 이라는 생...

트랜잭션과 격리 수준

트랜잭션과 ACID 트랜잭션이란 ? 데이터베이스 상태를 변경시키는 일련의 연산들을 논리적으로 묶을 수 있는 하나의 작업 단위 ex) 주문 - 결제 - 결제 승인 - 주문 접수 트랜잭션에는 중요한 두 가지 목적이 있다. ...

자바의 메모리 구조와 변수 종류 살펴보기

들어가기 전 스프링 빈은 기본적으로 싱글톤으로 생성되기 때문에, 만약 @Service로 선언된 비즈니스 로직 클래스에 인스턴스 변수가 선언되어 있다면 비즈니스 로직을 처리하는 모든 스레드는 해당 데이터를 공유하게 된다. 이것을 고려하지 않고 무작정 인스턴스 변수로 선언하면, 멀티 스레딩 환경에서 데이터가 꼬여서 시스템 장애를 초래할 수도 있다. 그...

CompletableFuture, Parellel Stream을 통해 성능 개선해보기

들어가기 전 현재 운영하고 있는 시스템(자바 버전8)에서 조회 시간이 꽤 오래 소요되는 화면들이 있었다. 모든 화면이 그런것은 아니었지만 몇몇 화면의 백엔드 로직은 아래와 같이 되어있었다. public Map<String, Object> retrieve() { Object result1 = testProxy.findSomething(...

Exception과 Error

들어가기 전 CompletableFuture를 사용하여 결과를 가져올 때, get()과 join()을 사용할 수 있는데, get()의 경우 checkedException join()의 경우 uncheckedException을 발생시킨다고 한다. 이 둘의 차이는 무엇이고 그럼 어떤 메서드를 사용해야할까에 대한 판단을 내리기 위해 공부해보자. Err...

비동기 프로그래밍을 위한 자바 클래스 살펴보기

들어가기 전 회사에서 화면 조회 성능 개선을 위해 어떤 부분을 리팩토링 하면될까 고민하던 중, 몇몇 화면이 호출하는 api에서 수행하는 로직이 각각 독립적인 조회 결과들을 Map에 담아 화면에 리턴해주는 형태로 되어있는 것을 보았다. 따라서, 이런 경우 비동기적으로 처리한다면 성능이 개선되지 않을까 ? 하는 생각이들어 어떤식으로 자바에서 비동기 프...

Thread Pool을 위한 Java Executor Framework

자바에서의 비동기 처리를 위해 CompletableFuture에 대해 공부하며 클래스 내부를 보다보니 Executor, ForkJoinPool 등이 눈에 띄었다. 생소한 부분이라 공부하며 나름대로 정리해보았다. Thread Pool Executor, ForkJoinPool에 대해 알기 전에 먼저 스레드 풀의 개념에 대해 살펴보자. ...

(미해결) 카프카 프로듀서 재송신 테스트

상황 카프카의 전달 보증에 대해 공부했고 at most once, at least once, exactly once 세 종류가 있다는 것을 알게되었다. 각 전달 보증 수준에 대해 공부하면서, 브로커에서 응답하는 ack가 오지않는(유실되는) 경우 프로듀에서 메시지를 재전송 하는 부분에 대해 다음과 같은 테스트를 해보고 싶었다. at most ...

카프카 전달보증 구현하기 - Exactly Once

Exactly Once 카프카는 초기에 at-most-once와 at-least-once 수준의 전달 보증만 지원했었다. 하지만, 카프카의 유용성이 높아지면서 Exactly Once 수준의 전달을 보증하고자 하는 요구가 높아졌다. 이를 위해 카프카에 트랜잭션 개념이 도입되었다. exactly-once 전달 보증은 0.11 버전부터(Rele...

XSSF로 인한 OOM 에러 그리고 SXSSF와 메모리 사용량 비교해보기

상황 이 글 에서 언급했듯이, poi 라이브러리를 활용해서 엑셀을 만들 때, XSSF 클래스를 사용하면 데이터 건수(엑셀 row)가 많은 경우 OOM 에러가 발생한다. XSSF를 개선한 SXSSF를 사용하면 해당 문제를 해결할 수 있다고 하는데, 실제로 메모리 사용량을 비교해보고자 한다. 메모리 단면을 분석하는 방법은 ...