본문 바로가기

JAVA

(22)
HikariCP Oracle 데이터베이스와의 커넥션 유효성을 검사 성능 최적화!! oracle.jdbc.defaultConnectionValidation 설정은 HikariCP (JDBC 커넥션 풀링 라이브러리)에서 Oracle 데이터베이스와의 커넥션 유효성을 검사할 때 사용하는 설정 입니다. 기본적으로, HikariCP는 커넥션 풀에 있는 커넥션이 여전히 유효한지 확인하기 위해 여러 방법을 제공합니다. SOCKET: 소켓을 통해 연결 상태를 검사합니다.FAST: 기본적인 유효성 검사로, 연결이 유효한지 간단히 확인합니다.METADATA: 메타데이터를 사용하여 연결을 검사합니다.TABLE: 특정 테이블에 대해 간단한 쿼리를 실행하여 연결을 검사합니다.설정 방법구분내용 SOCKET 위에서 설명한 것처럼, SOCKET은 소켓을 통해 연결 상태를 검사합니다. 이는 네트워크 레벨에서 연결이 ..
ZGC 기본 개념 알아보기 ZGC (Z Garbage Collector)는 Java Virtual Machine (JVM)에서 사용되는 최신의 가비지 컬렉터 중 하나로, 대규모 애플리케이션에서의 낮은 지연 시간과 높은 처리량을 목표로 설계되었습니다. ZGC는 Java 11에 처음 도입되었으며, 계속해서 개선되고 있습니다. ZGC의 주요 특징과 작동 방식을 상세히 설명드리겠습니다.ZGC의 주요 특징저지연(Garbage Collection Pause Time): ZGC는 가비지 컬렉션으로 인한 지연 시간을 매우 짧게 유지하는 것이 특징입니다. 일반적으로 수 밀리초 이내로 유지되며, 이는 대규모 애플리케이션에서 매우 중요한 성능 요소입니다.대규모 힙 지원: ZGC는 테라바이트 단위의 대규모 힙 메모리까지 지원합니다. 이는 대용량 데이터..
[테스트] JaCoCo란 무엇인가? JaCoCo(Java Code Coverage)는 Java 애플리케이션의 코드 커버리지를 측정하는 데 사용되는 오픈 소스 도구입니다. JaCoCo는 코드의 어느 부분이 테스트되고, 어느 부분이 테스트되지 않는지에 대한 정보를 제공합니다. 이를 통해 테스트의 완성도를 평가하고, 테스트 커버리지를 개선할 수 있습니다.JaCoCo의 주요 기능코드 커버리지 측정: JaCoCo는 클래스, 메서드, 라인, 분기, 명령어 수준에서 코드 커버리지를 측정합니다.리포트 생성: HTML, XML, CSV 형식의 다양한 리포트를 생성하여 코드 커버리지 결과를 시각적으로 제공합니다.통합: Maven, Gradle, Ant, Jenkins와 같은 빌드 도구 및 CI/CD 시스템과 쉽게 통합할 수 있습니다.바이트코드 계측: JaC..
[TDD] UnitTest(단위 테스트)란 무엇인가? 단위 테스트(Unit Test)는 소프트웨어 개발 과정에서 개별적인 작은 코드 단위, 즉 "유닛(Unit)"을 독립적으로 검증하는 테스트 방법입니다. 여기서 유닛은 일반적으로 하나의 함수, 메서드, 클래스 또는 모듈을 의미합니다. 단위 테스트는 해당 유닛이 올바르게 작동하는지 확인하는 데 중점을 두며, 소프트웨어 품질을 유지하고 버그를 조기에 발견하는 데 중요한 역할을 합니다.단위 테스트의 주요 특징독립성:단위 테스트는 독립적으로 실행되어야 하며, 다른 테스트나 외부 시스템(예: 데이터베이스, 네트워크 등)에 의존하지 않아야 합니다.작은 범위:하나의 작은 코드 단위에 집중하여 테스트합니다. 이는 큰 시스템의 복잡성을 줄이고, 버그를 쉽게 식별할 수 있도록 돕습니다.자동화:단위 테스트는 자동화되어 자주 반..
[JAVA] Thread Local이란 무엇인가? 기본 개념부터 활용까지! Thread Local이란 무엇인가?ThreadLocal은 자바에서 멀티스레딩 프로그래밍을 할 때 사용되는 클래스입니다. 각 스레드가 독립적으로 값을 가지도록 해주며, 여러 스레드가 동시에 같은 변수를 사용할 때 발생할 수 있는 문제를 피할 수 있습니다.일반적으로 멀티스레딩 환경에서 공유 변수는 동기화가 필요합니다. 하지만 동기화는 성능에 영향을 미칠 수 있습니다. ThreadLocal을 사용하면 스레드마다 고유한 변수를 가질 수 있기 때문에 동기화가 필요 없습니다.ThreadLocal의 주요 메서드는 다음과 같습니다:get(): 현재 스레드의 값을 반환합니다.set(T value): 현재 스레드의 값을 설정합니다.remove(): 현재 스레드의 값을 삭제합니다.public class ThreadLoca..
[JAVA] JVM GC(Garbage Collection)이란 무엇인가? 대표 알고리즘 알아보기! JVM GC(가비지 컬렉션)의 개념**가비지 컬렉션(GC)**는 JVM(Java Virtual Machine)이 동적으로 할당된 메모리 중 더 이상 사용되지 않는 객체를 자동으로 식별하고 회수하는 메커니즘입니다. 이는 개발자가 명시적으로 메모리를 해제하는 번거로움을 덜어주며, 메모리 누수를 방지합니다.주요 개념과 단계힙(Heap) 메모리 관리JVM의 힙은 크게 Young Generation, Old Generation, 그리고 Permanent Generation (또는 Metaspace)으로 나뉩니다.Young Generation: 새로 생성된 객체가 저장되는 공간. 대부분의 객체는 여기에 생성되며, 수명이 짧습니다.Old Generation: Young Generation에서 살아남은 객체들이 이동되..
[JAVA] Java 21 Virtual Thread와 Kotlin Coroutine 비교해보기 구분Java 21 가상 스레드Kotlin 코루틴동시성 모델JVM이 관리하는 가벼운 스레드로, 자바의 스레드 모델에 직접 매핑되어 자원 사용과 컨텍스트 전환 비용을 줄임.구조적 동시성으로, Kotlin 런타임에서 관리하는 가벼운 스레드. 작업을 차단하지 않고 중단 및 재개 가능.통합기존 Java 코드 및 라이브러리와 원활하게 통합.Kotlin 언어 기능 및 특정 라이브러리 필요 (예: kotlinx.coroutines).성능메모리 오버헤드가 적고 JVM의 네이티브 지원으로 수백만 개의 스레드 처리 가능.수천 개의 코루틴을 효율적으로 관리하지만 중단 지점과 코루틴 전용 구조 필요.Code로 비교해보기Kotlin 코루틴import kotlinx.coroutines.*fun main() = runBlocking..
[JAVA] Java 21 새로운 기능 - Virtual Thread란 무엇인가? Java 21에서는 Virtual Threads라는 중요한 기능이 도입되었습니다. 이 기능은 특히 동시성 프로그래밍을 단순화하고 성능을 크게 향상시킬 수 있습니다. 아래에 Virtual Threads를 사용하는 예시와 함께 이 기능의 개념과 장점을 설명하겠습니다.Virtual Threads 개념Virtual Threads는 Java의 기존 쓰레드 모델을 확장하여, 운영체제의 물리적 쓰레드와는 별개로 JVM 레벨에서 관리되는 경량 쓰레드입니다. 이는 수천에서 수백만 개의 쓰레드를 효율적으로 생성하고 관리할 수 있게 합니다.주요 기능:메모리 사용량 감소: 가상 스레드는 약 10KB의 메모리를 사용하며, 기존 스레드는 2MB를 사용합니다.컨텍스트 스위칭 비용 감소: 가상 스레드는 컨텍스트 스위칭 비용이 적어 ..