성능 최적화 7

CachedThreadPool의 한계와 ThreadPoolExecutor 커스터마이징

CachedThreadPool의 동작 방식과 한계Java의 CachedThreadPool은 다음과 같은 특성을 지니며 높은 처리량을 지원하지만, 동시 작업 수가 많을 때 주의가 필요합니다.  /** * 필요한 경우 새 스레드를 생성하지만, 기존에 생성된 스레드가 있으면 * 이를 재사용하는 스레드 풀을 생성합니다. 이 풀은 많은 짧은 비동기 작업을 * 수행하는 프로그램의 성능을 일반적으로 향상시킵니다. * {@code execute} 호출 시 기존에 생성된 스레드가 사용 가능하다면 이를 재사용합니다. * 사용 가능한 기존 스레드가 없으면 새 스레드를 생성하여 풀에 추가합니다. * 60초 동안 사용되지 않은 스레드는 종료되고 캐시에서 제거됩니다. * ..

Architecture 2024.10.28

데이터베이스 프로시저, 함수, 뷰: 각각의 역할과 사용법

프로시저와 함수 뷰의 차이점을 설명드리겠습니다. 1. 프로시저프로시저(Procedure)는 데이터베이스의 데이터에 대한 작업을 수행하기 위한 목적으로 사용됩니다. 이것은 데이터의 추가, 수정, 삭제, 검색 등과 같은 다양한 데이터 조작 작업을 수행하는 데 사용됩니다.비즈니스 룰 검증, 트랜잭션 관리, 보안 제어 등과 같은 데이터베이스 관리 작업에도 활용됩니다.프로시저는 무엇을 return하는 것 보다 데이터를 조작하기 위해 사용됩니다. 그런 이유로 리턴값이 없는 프로시저가 일반적입니다. 2. 함수함수(Function)는 주로 값을 계산하거나 가공하기 위해 사용됩니다.함수는 return 값으로 단일 값(숫자 또는 문자열)을 제공하는 것이 일반적입니다.함수는 입력 값을 받아서 계산하고, 그 결과 값을 반환합..

Database 2023.12.26

Kafka의 EOS 보장 및 성능 최적화 전략: Producer, Consumer, Broker 설정

1. EOS의 개념과 중요성EOS (Exactly Once Semantics)는 메시지 전송에서 메시지가 한 번만 전송되고 처리되는 것을 보장하는 전송 보증입니다. 다시 말해, 송신자와 수신자 사이에 데이터의 중복 또는 손실 없이 데이터가 한 번만 전송되는 것을 의미합니다. EOS의 중요성:데이터 중복성 제거: 중복된 메시지는 데이터의 무결성을 해칠 수 있습니다. EOS는 이를 방지하여 데이터의 정확성을 보장합니다.데이터 손실 방지: 손실된 메시지는 시스템의 안정성을 위협합니다. EOS는 모든 메시지가 제대로 전달되도록 보장합니다.자원 효율성: 중복 메시지를 처리하는 데 필요한 자원을 절약하여 시스템의 효율성을 높입니다.  2. Kafka에서 EOS를 어떻게 구현하는지Apache Kafka는 0.11.0..

DevOps 2023.08.08

Redis의 장점과 한계: 빠른 속도와 메모리 기반 데이터 처리

Redis(Remote Dictionary Server)는 인메모리 DB로서 고성능 key-value 데이터베이스입니다.Redis는 데이터를 디스크 기반이 아닌 메모리 기반 저장 방식을 채택하여 매우 빠른 응답 속도를 제공합니다. 이러한 특징은 데이터베이스에 자주 액세스해야하는 세션 캐싱, 메시징 기능 등에 이상적입니다.Redis 사용 목적 Reids를 사용하는 이유는 다음과 같습니다.속도 : 데이터를 디스크에 저장하는 대신 메모리에 저장하여 빠른 응답 속도를 제공합니다.간단한 구조 : Redis는 문자열, Hash, List, Set, SortedSet 등 과 같은 간단한 데이터 구조를 지원합니다.영속성 지원 : 인메모리 DB임에도 불구하고, 시스템의 전원이 차단되었을 때도 데이터가 증발하지 않습니다...

Database 2023.08.04

Spring Boot AutoConfiguration: 작동 원리와 성능 최적화 방법

AutoConfiguration을 사용하는 Class는 다음과 같은 것들이 있습니다.DataSource, TransactionManager, jdbcTemplate 등우리가 흔이 사용하는 것들이죠? 이 글에서는 AutoConfiguration의 작동 원리에 대해 배우고, 이를 사용해 개발 과정을 어떻게 최적화할 수 있는지에 대해 다루겠습니다. 글 순서AutoConfiguration 등록 순서AutoConfiguration 작동 원리AutoConfiguration 활용하기(라이브러리 제작)AutoConfiguration 성능 최적화AutoConfiguration 사용 시 주의사항1. AutoConfiguration 등록 순서우선, Spring Boot는 애플리케이션 시작 시 @ComponentScan이 실..

Spring 2023.07.30

Lock과 Double Check Lock: 동시성 문제 해결을 위한 효율적 패턴

Lock을 사용하는 이유는 여러 Thread가 하나의 메서드에 동시 접근했을 때 발생할 수 있는 동시성 문제를 해결하기 위해 사용합니다. 예를 들어 private int count = 0; public void addCount() { count = count + 1; }이러한 로직이 있으며 아래 순서대로 쓰레드 2개가 해당 메서드를 호출합니다.[Thread-1] A 쓰레드가 addCount()에 접근하여 count:0 에 1을 더합니다.[Thread-2] B 쓰레드가 addCount()에 접근하여 count:0 에 1을 더합니다.[Thread-1] A 쓰레드가 0+1 의 결과값인 1을 count에 입력합니다.[Thread-2] B 쓰레드가 0+1 의 결과값인 1을 count에..

Java & Kotlin 2023.07.11

Stack Overflow Error 발생 원인과 해결 방법: 재귀 호출 피하기

Stack overflow error는 함수를 재귀 호출하거나 순환 참조하거나, 너무 많은 메소드가 실행되어 제한된 스택 메모리 용량을 초과할 경우 발생합니다. 아래는 에러 발생 예시입니다.public class StackOverflowDemo { public static void recursiveMethod() { recursiveMethod(); } public static void main(String[] args) { recursiveMethod(); }}하나의 메서드를 호출하면 하나의 스택이 쌓입니다.이게 반복되어 쌓이면 StackOverflowError가 발생합니다. 에러를 해결하기 위해 '재귀', '순환 참조'로직은 가급적 피하고, 불가피하게 사..

Java & Kotlin 2023.05.15