Java 싱글톤 패턴의 다양한 구현 방식과 특성 분석

싱글톤 패턴(Singleton Pattern)은 애플리케이션 전체에서 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하고, 이에 대한 전역 접근 포인트를 제공하는 디자인 패턴입니다. 인스턴스의 생성을 클래스 자체에서 제어하며, 메모리 낭비를 방지하고 일관된 상태를 유지하는 데 유용합니다. Java에서 싱글톤 패턴을 구현하는 다양한 방식과 그 특성을 분석해 봅니다. ...

7월 1일 03:46에 게시됨

Java Integer.valueOf()의 동작 원리와 Integer Cache 이해하기

자바 개발 중 정수형 객체를 비교할 때 상식적으로 이해하기 어려운 결과가 발생할 때가 있습니다. 다음의 코드 예제를 살펴보겠습니다. Integer a1 = Integer.valueOf("127"); Integer a2 = Integer.valueOf("127"); System.out.println(a1 == a2); // 결과: true Integer b1 = Integer.valueOf("128"); Integer b2 = Integer.valueOf("128"); System.out.println(b1 == ...

6월 28일 19:30에 게시됨

Spring Boot 기반 EMQ X 4.0 연동 및 중규모 IoT 아키텍처 설계 방안

1. 기술적 배경 및 도입 효과 1.1 EMQ X 4.0 의 핵심 기능 EMQ X 4.0 은 Erlang/OTP 생태계 위에서 작동하는 MQTT 브로커로, 수천만 대의 동시 연결 처리와 초당 수백만 건의 메시지 전송 능력을 갖췄습니다. 이전 세대 대비 분산형 데이터베이스인 Mnesia 를 기반으로 하여 ACID 특성을 보장하며, 클러스터 간 노드들이 풀 메쉬(Pull-Mesh) 토폴로지로 통신하여 장애 허 ...

6월 27일 22:35에 게시됨

스레드 풀에서 발생한 예외를 메인 스레드가 잡을 수 있을까?

과거에는 스레드 풀에서 발생한 예외를 메인 스레드가 잡을 수 있다고 생각했지만, 최근 시스템 장애 상황에서 스레드 풀 태스크에 예외 처리 코드가 없으면 메인 스레드의 catch 블록이 예외를 잡지 못해 문제 진단이 어려웠습니다. 이에 대한 내용을 연구하고 기록합니다. 1. JVM 예외 처리 JVM이 처리되지 않은 예외를 어떻게 다루는지 살펴보겠습니다. @Test public v ...

6월 26일 02:51에 게시됨

클래스의 생명주기

클래스의 생명주기는 클래스가 로드되어 사용되고 최종적으로 언로드되는 전체 과정을 설명합니다. 이 과정은 다음과 같은 단계들로 나뉩니다: 로드 연결 (검증, 준비, 해결 세 가지 하위 단계 포함) 초기화 사용 언로드 1. 로드 단계 로드(Loading) 단계에서는 클래스 로더가 클래스의 완전한 이름을 기반으로 다양한 경로를 통해 바이트코드 정보를 이진 스트림 방식 ...

6월 24일 05:22에 게시됨

JVM의 핵심 원리 이해: 코드 중심의 설명

Java의 플랫폼 독립성은 JVM의 강력한 설계에서 비롯됩니다. 이 문서에서는 클래스 로딩, 메모리 관리, GC 메커니즘 등 핵심 원리를 코드 예제와 함께 살펴봅니다. 클래스 로딩 메커니즘: 바이트코드에서 Class 객체까지 클래스 로딩 세 단계 로딩: 바이트코드를 찾아 Class 객체 생성 링킹: 검증 → 준비 → 해석 초기화: 정적 코드 블록 실행 및 변수 초기화 사용자 정의 ...

6월 23일 21:35에 게시됨

Arthas 활용 가이드

1. 실행 환경 운영체제: centos7.9 Java 버전: jdk1.8.201 Arthas 버전: 3.6.9 2. Arthas 설치 및 프로세스 연결 curl -O https://alibaba.github.io/arthas/arthas-boot.jar curl -O https://alibaba.github.io/arthas/arthas-demo.jar java -jar arthas-demo.jar java -jar arthas-boot.jar --target-ip 0.0.0.0 --telnet-port 9998 # 정리하기 rm -rf ~/.arth ...

6월 17일 22:23에 게시됨

MySQL 드라이버와 Druid 커넥션 풀 설정 불일치로 인한 Full GC 발생 원인 및 해결 방안

초기 대응 및 현황 파악 장애 발생 당시 3개의 인스턴스에서 Full GC가 발생했으며, 나머지 인스턴스들의 Old Generation 영역도 임계치에 도달해 있었습니다. 다수의 인스턴스가 동시에 Full GC에 진입하면 서비스 전체의 연쇄 장애(Snowball) 현상이 발생할 수 있으므로, 현장 조사를 위해 하나의 인스턴스를 격리한 후 나머지 인스턴스들을 순차적으로 재시작하는 롤링 ...

6월 6일 17:51에 게시됨

JVM 메모리 모델 변천사와 JDK 버전별 가비지 컬렉션 및 주요 신기능 분석

JVM 메모리 모델의 변천사 (JDK 1.6 ~ 1.8) JVM의 런타임 데이터 영역은 버전이 업그레이드되면서 지속적으로 최적화되었습니다. 특히 JDK 1.6, 1.7, 1.8을 거치며 메모리 구조에 큰 변화가 있었습니다. JDK 1.6: 프로그램 카운터, JVM 스택, 네이티브 메서드 스택, 힙, 메서드 영역(PermGen: 문자열 상수 풀, 정적 변수, 런타임 상수 풀 포함) JDK 1.7: 문자열 상수 ...

6월 6일 02:56에 게시됨

자바 백엔드 개발자를 위한 심화 기술 면접 가이드

JVM(Java Virtual Machine)의 심층 이해 자바 애플리케이션의 성능과 안정성을 좌우하는 핵심은 JVM에 대한 깊은 이해입니다. 단순히 코드를 작성하는 것을 넘어, 코드가 메모리상에서 어떻게 동작하는지 파악하는 것이 중요합니다. JVM 내부 구조와 런타임 데이터 영역 JVM은 클래스 로더, 실행 엔진, 그리고 데이터를 저장하는 런타임 데이터 영역으로 구성 ...

5월 29일 22:12에 게시됨