디자인 패턴 - 싱글톤 패턴 완벽 이해하기
생성 패턴의 핵심 목표는 객체 생성 과정과 사용을 분리하는 것입니다. 이를 통해 시스템의 결합도를 낮추고, 사용자는 객체가 어떻게 생성되는지 알 필요 없이 사용할 수 있습니다.
생성 패턴의 종류는 다음과 같습니다:
싱글톤 패턴
팩토리 메서드 패턴
추상 팩토리 패턴
프로토타입 패턴
빌더 패턴
싱글톤 패턴이란?
싱글톤 패턴은 클래스의 인스턴스가 오직 하나 ...
7월 5일 04:46에 게시됨
JVM 설정 도구: jinfo
jinfo (Java Configuration Info)는 JDK에 포함된 진단 도구로, 실행 중인 Java 프로세스의 JVM 설정 매개변수를 확인하거나 동적으로 수정하는 데 사용됩니다. 이 도구는 JVM 시작 시 매개변수와 시스템 속성을 확인하고 일부 매개변수를 실행 중에 동적으로 조정할 수 있습니다.
주의: jinfo는 JVM Attach 메커니즘에 의존하므로 다음 사항을 충족해야 합니다:
대상 프 ...
7월 5일 00:04에 게시됨
JVM 런타임 데이터 영역 이해하기
JVM의 런타임 데이터 영역은 다섯 개의 주요 영역으로 구성됩니다. PC 프로그램 카운터, 가상 머신 스택, 네이티브 메서드 스택, 힙, 메서드 영역이 바로 그것입니다. 이 다섯 영역은 스레드 공유 영역과 스레드 전용 영역으로 구분되며, 각각의 특성과 역할에 대해 살펴보겠습니다.
1. PC 프로그램 카운터
프로그램 카운터는 상대적으로 작은 크기의 메모리 영역으로, 현 ...
7월 3일 01:11에 게시됨
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에 게시됨