스레드 풀(Thread Pool) 거부 정책 선정 가이드: 작업 유실 없는 고가용성 시스템 설계
스레드 풀 거부 정책이 실행되는 메커니즘
Java의 ThreadPoolExecutor에서 거부 정책(RejectedExecutionHandler)이 활성화되는 시점은 단순히 '바쁠 때'가 아닙니다. 정확히는 시스템의 처리 용량이 한계에 도달했을 때이며, 다음 세 가지 조건이 모두 충족될 때 발생합니다.
코어 스레드 풀 포화: 설정된 corePoolSize 만큼의 스레드가 모두 실행 중일 때.
대기 ...
7월 31일 10:38에 게시됨
BigDecimal divide 메서드의 예외 발생 원인 분석
BigDecimal를 사용할 때 두 숫자의 나눗셈 연산에서 예외가 발생하는 경우가 있다. 일반적으로 정수나 실수 타입에서는 문제가 없지만, BigDecimal는 특수한 내부 구조로 인해 예상치 못한 ArithmeticException가 발생할 수 있다.
예제 코드를 살펴보면:
BigDecimal orderAmount = new BigDecimal(2312.23);
BigDecimal customerCount = new BigDecimal(35);
BigDecimal pr ...
7월 31일 07:42에 게시됨
Apache Commons Pool2를 이용한 중량급 객체 풀링 구현
시스템 개발 시 생성 비용이 큰 '중량급 객체'를 빈번하게 만들고 파괴하는 과정은 성능 저하의 주요 원인이 됩니다. 객체 풀링(Object Pooling) 기법은 초기화 단계에서 일정 수의 객체를 미리 생성해 두고, 필요할 때마다 풀에서 객체를 빌려(Borrow) 사용한 뒤 다시 반납(Return)하는 방식을 취합니다. 이를 통해 객체 생성 오버헤드를 줄이고 시스템 리소스를 효율적으 ...
7월 31일 03:11에 게시됨
JVM 심층 분석: 아키텍처, 메모리 및 가비지 컬렉션
1. JVM 아키텍처 개요
자바 가상 머신(JVM)은 자바 애플리케이션의 핵심 실행 환경입니다. 운영체제 위에서 동작하며 하드웨어와 직접 상호작용하지 않습니다. JVM은 클래스 로더, 런타임 데이터 영역, 실행 엔진 등 여러 서브시스템으로 구성되어 자바 바이트코드를 실행합니다.
1.1. 클래스 로더 (ClassLoader)
클래스 로더는 .class 파일을 JVM 메모리 영역으로 로드하 ...
7월 30일 20:15에 게시됨
Java에서 랜덤 숫자 생성하기
랜덤 숫자를 생성하는 것은 프로그래밍에서 매우 일반적인 작업입니다. Java에서는 다양한 방법으로 램덤 숫자를 생성할 수 있습니다. 아래는 세 가지 주요 방법에 대한 설명과 코드 예제입니다.
1. Math.random() 활용
Math.random() 메서드는 0.0 이상 1.0 미만의 double 값을 반환합니다. 이를 통해 특정 범위 내의 정수형 랜덤 숫자를 쉽게 얻을 수 있습니다.
publ ...
7월 30일 19:30에 게시됨
Java에서 정규표현식 활용하기
정규표현식 소개
정규표현식(Regular Expression, 줄여서 Regex)는 문자열 내에서 특정한 패턴을 탐지하거나 조작하는 데 사용되는 강력한 도구입니다. Java에서는 java.util.regex 패키지를 통해 정규표현식 기능을 제공합니다. 이 패키지는 복잡한 텍스트 처리 작업을 간소화할 수 있게 해주며, 입력 검증, 데이터 추출, 문자열 치환 등 다양한 시나리오에 유용하게 쓰입 ...
7월 30일 04:18에 게시됨
Java 객체 생존 판별 및 가비지 컬렉션 원리
객체 생존 여부 판단 기준
참조 카운터 방식의 한계
참조 카운터는 객체마다 카운터를 할당하여 참조 발생 시 증가, 참조 해제 시 감소시키는 방법입니다. 카운터가 0이면 가비지 컬렉션 대상으로 간주되지만, 순환 참조 상황에서는 실제로 사용되지 않음을 실험으로 확인할 수 있습니다.
public class GCValidation {
private static final int SIZE_1MB = 1024 * 1 ...
7월 30일 00:47에 게시됨
MyBatis 기반 CRUD 구현 및 핵심 속성 활용 가이드
1. MyBatis를 이용한 CRUD 기초 구현
MyBatis를 사용하여 데이터베이스의 기본적인 생성(Create), 조회(Read), 수정(Update), 삭제(Delete) 기능을 구현하는 방법은 인터페이스 정의, XML 매퍼 작성, 그리고 이를 실행하는 서비스 로직으로 구성됩니다.
MemberMapper 인터페이스 정의
public interface MemberMapper {
void addMember(Member member);
...
7월 29일 20:08에 게시됨
Spring Boot 애플리케이션을 Linux에서 백그라운드로 실행하는 방법
Spring Boot 애플리케이션을 실행하는 일반적인 방법은 다음과 같습니다.
메인 메서드를 직접 실행
mvn spring-boot:run 명령 사용
mvn package로 JAR 파일 생성 후 java -jar 명령으로 실행
개발 시에는 앞의 두 가지 방법을 주로 사용하지만, 배포 시에는 세 번째 방법인 JAR 파일을 실행하는 방식을 선호합니다. 하지만 java -jar 명령만으로는 애플리케이션이 ...
7월 29일 08:52에 게시됨
Dubbo 서비스 구축 및 연동 가이드
1. 서비스 제공자(Provider) 설정
먼저 서비스 제공자 역할을 할 웹 애플리케이션을 생성합니다. 프로젝트 구조는 다음과 같이 구성합니다.
1.1 POM 설정
pom.xml 파일에 필요한 Maven 의존성을 추가합니다.
<dependencies>
<!-- Spring Context -->
<dependency>
<groupId>org.springframework</group ...
7월 29일 07:11에 게시됨