개발/자바&스프링 (6) 썸네일형 리스트형 공식, 이론, 실제를 모두 확인하며 병렬 프로그래밍 성능 개선하기! 1. Intro 2. 원인 분석 2. 해결 방법 📌 INTRO 멀티스레딩으로 집계 기능을 개발한 뒤 운영 서버에서 성능 테스트를 수행했습니다. 로컬에서 테스트와 달리 성능 저하가 발생했습니다. 성능 개선의 공식, 이론, 실제를 모두 측정 및 확인하고 개선한 경험을 공유하겠습니다. 📌 원인 분석 멀티스레드를 사용한 이유는 I/O와 CPU 작업을 분리하고 병렬 처리가 가능한 부분에는 CPU를 최대한 활용하기 위해서입니다. 개발 완료 후 성능테스트를 하며 CPU 사용량을 모니터링했습니다. 80% ~ 90% 사용량을 보여 CPU가 알차게 사용되었다 판단했으나 처리시간이 단일스레드와 별 차이가 없었습니다. CPU 사용량 중에 CPU 모드 별로 얼마나 차지하는지 확인이 필요했습니다. System 모드라면 OS 커널.. 동기화된 리스트를 빠르게 조회하기 - synchronizedList와 CopyOnWriteArrayList 성능 비교해봅시다 1. Intro 2. create 3. add 4. get 5. 결론 📌 INTRO 최근 멀티스레딩 프로그래밍을 하며 동시성 제어 기능이 구현된 클래스는 단지 동시성 제어 목적으로 아무거나 가져다 쓰면 안 된다는 것을 배웠습니다. synchronizedList와 CopyOnWriteArrayList를 비교해 보고 간단한 테스트를 해보겠습니다. 📌 create synchronizedList 인자로 넘겨받은 동기화되지 않은 리스트를 암묵적 락이 적용된 동기화된 클래스로 wrapping 해서 리턴해줍니다. 리스트를 새로 생성하지 않기 때문에 생성 비용이 크지 않습니다. CopyOnWriteArrayList 반면 CopyOnWriteArrayList는 리스트의 원소를 새로운 배열에 복사합니다. 리스트의 크기가 .. 대용량 데이터를 빠르게 조회하기 - 페이징 전략 비교(offset, no offset, Where In) - Intro - Offset - No Offset - 성능 비교 📌 INTRO 대용량 데이터로 정산이나 집계 작업을 위해서는 전체 데이터를 한 번에 조회하기 어렵습니다. 메모리에 전체 데이터를 로딩해야 하기 때문이죠. 데이터가 1000만 ~ 1억 건이 된다면 일반적인 사양의 컴퓨터라면 현실적으로 불가능합니다. 그래서 데이터를 나눠서 조회해야 합니다. 조회 단위를 Page라고 하고 Page별로 조회하기 위하는 작업을 Paging이라고 합니다. Paging 전략에는 대표적으로 1) Offset 2) No Offset 이 있습니다. 결론적으로 No Offset 방식이 가장 빠릅니다. 그 이유를 페이징 전략별로 동작 원리와 쿼리 실행계획 결과로 파악해 보겠습니다. (조회 조건에 사용되는 컬럼에 인덱스 설정이 .. Caffeine 캐시 도입 후기 1. Intro 2. Cache란? 3. Cache 종류 4. 도입 후기 & 성능 테스트 결과 Intro 최근 업무에서 캐시 도입으로 반복된 DB 조회 비효율을 개선했다. 캐시를 도입하기 위해 학습한 Cache 와 여러 Cache 시스템을 비교해보겠다. Cache 캐시는 값비싼 연산 결과 또는 자주 참조되는 데이터를 메모리 안에 두고, 뒤이은 요청이 보다 빨리 처리될 수 있도록 하는 저장소이다. 캐시의 종류는 데이터를 두는 공간에 따라서 CPU, SSD, HDD 등 다양하다. 캐시는 데이터를 영속화하는 목적의 저장소가 아니기 때문데 캐시 영역이 가득 차면 자동으로 비우거나(eviction) 또는 의도적으로 필요 없는 데이터를 비워주는(expriation) 기능이 필요하다. 이런 캐싱에 필요한 기능들을 구.. @ConfigurationProperties 바인딩 동작 원리 분석 & SpringBoot 3.x 에서 변경된 내용 1. Intro 2. 맥락 3. 원인 분석 4. 해결 방법 Intro 환경 Spring Boot 3.1.1 spring-boot-starter-jdbc 3.1.1 스프링 부트에서 @ConfigurationProperties 선언 시 내부적으로 설정값을 주입하는 방법과 스프링 부트 3.x 에서 변경된 @ConfigurationBinding 내용을 모른 채로 DataSourceProperties를 상속해 작업하다 예외가 발생했다. @ConfigurationProperties를 빈 팩토리가 어떻게 처리는 지 파악하고 예외를 어떻게 해결했는지 공유해 보겠다. 맥락 DB 환경 설정 정보를 Vault 서버에서 읽어와야 했다. Vault 서버에서 읽어온 정보를 설정 클래스에 바인딩 작업을 DataSourcePrope.. 의존성, 의존관계, 의존관계 주입 정리하기! [의존성, 의존관계, 의존 관계 주입] 헷갈리는 의존성, 의존관계, 의존관계 주입 개념 정리를 해보겠습니다. 의존성 - 다른 것에 의지하여 존재함. - 어떤 프로그램이나 실체의 정의와 기능이 전적으로 특정한 하드웨어와 소프트웨어 또는 앞서 진행된 이벤트나 상황에 의존하거나 종속적인 상태. 의존성은 굉장히 포괄적인 단어다. 프로그래밍에 적용해 봐도 라이브러리 간 의존성, 객체 간 의존성, 패키지 간 의존성 등 하나의 요소가 다른 요소에 의존하거나 종속적인 상태라면 적용 가능하다. 어느 한 요소가 완전히 독립적이지 않고 다른 요소와 상호작용, 즉 어느 정도 영향을 주고받으면 의존성이 있다고 말할 수 있다. 의존 관계 OOP 로 범위를 좁혀서 의존 관계를 정의해 보자면 두 가지로 정의할 수 있다. 정적인 의존.. 이전 1 다음