Java
-
[HikariCP] keepaliveTime 와 관련된 여러가지 실험Java 2024. 7. 22. 18:22
- 목차 keepaliveTime 이란 ?keepaliveTime 설정은 Idle Connection 과 관련이 있습니다.HikariCP Connection Pool 에서 Idle Connection 은 idleTimeout 이후에 제거됩니다.Idle Connection 이란 Connection 과 데이터베이스 사이에 맺어진 TCP Socket 사이에 어떠한 Packet 도 전달되지 않는 상태의 Socket 을 의미합니다.즉, 어떠한 쿼리 요청도 발생하지 않는 Connection 을 Idle Connection 이라하며, 이는 10분이라는 기본값을 가집니다.10분 동안 통신이 전무한 Connection 은 제거됩니다. keepaliveTime 은 Idle Connection 으로 연결된 TCP Socke..
-
[HikariCP] idleTimeout 알아보기Java 2024. 7. 18. 06:08
- 목차 idleTimeout 이란 ?HikariPool DataSource 는 maximumPoolSize 를 통해서 최대 Connection 의 갯수를 지정할 수 있습니다.만약에 maximumPoolSize 를 6개로 설정한다면 아래의 이미지처럼 하나의 Connection Pool 은 최대 6개의 Connection 을 보유합니다. Connection Pool 이 데이터베이스와 맺는 이 Connection 은 사실상 TCP Network Connection 이며, 아래의 출력 결과와 같이 TCP Socket 이 생성되게 됩니다.( lsof 명령어나 MySQL 의 show processlist; 명령어 등을 통해서 현재 생성된 TCP Socket 을 확인할 수 있습니다. )lsof -iCOMMAND..
-
[HikariCP] connectionTimeout 설정 알아보기Java 2024. 7. 11. 05:56
- 목차 connectionTimeout 이란 ?HikariPool 은 Java 에서 사용하는 Connection Pool 모듈입니다.지정된 갯수만큼 많은 양의 Connection 을 미리 생성해두며, 생성된 Connection 을 하나씩 사용할 수 있습니다. 아래의 이미지는 2개의 Connection 이 존재하고, 3번의 Connection 요청이 발생하는 상황입니다.Connection Pool 에서 Connection 을 요청한 2개의 Client 또는 Thread 는 정상적으로 Connection 을 사용할 수 있습니다.반면 3번째 Client 또는 Thread 는 Connection Pool 에 더 이상 Connection 이 없기 때문에 Connection 을 획득할 수 없습니다.이 상황에서 ..
-
[Java Serialization] 여러가지 자바 직렬화 해석 방식들Java 2024. 7. 6. 07:05
- 목차 https://docs.oracle.com/en/java/javase/17/docs/specs/serialization/protocol.html Java Object Serialization Specification: 6 - Object Serialization Stream ProtocolA set of flags indicating various properties of the class, such as whether the class defines a writeObject method, and whether the class is serializable, externalizable, or an enum typedocs.oracle.com sr (73 72) 로 시작하는 바이트 스트림.아래와 ..
-
[Java NIO] Selector register 이해하기Java/NIO 2024. 6. 11. 06:35
- 목차 들어가며.Java NIO 의 Selector 는 비동기적으로 여러 채널(Channel)을 모니터링할 수 있는 강력한 도구입니다. 이 중에서도 register 메서드는 특정 채널을 Selector에 등록하고 관심 이벤트를 설정하는 중요한 역할을 합니다. 이 글에서는 register 메서드의 사용법과 작동 원리를 살펴보겠습니다. Selector와 Channel의 관계.Selector 는 여러 개의 Channel 을 등록하여, 읽기, 쓰기, 연결 수락 등의 이벤트를 비동기적으로 감지할 수 있습니다. register 메서드는 Selector 와 Channel 사이의 연결 고리 역할을 합니다.Selector: 이벤트를 감지하고, 필요한 처리를 트리거합니다.Channel: Selector 에 등록되어 이벤..
-
[Java NIO] Selector Wakeup 알아보기Java/NIO 2024. 6. 10. 06:32
- 목차 들어가며.Java NIO(Non-blocking IO) 는 효율적인 네트워크 프로그램을 작성할 수 있는 강력한 도구를 제공합니다. 그중에서도 Selector 는 다중 채널에서 이벤트를 감지하여 효율적으로 비동기 작업을 처리할 수 있도록 도와줍니다. 하지만 Selector를 사용할 때 wakeup() 메서드를 정확히 이해하고 사용하는 것이 중요합니다. 이 글에서는 Selector.wakeup() 이 무엇인지, 왜 필요한지, 그리고 실제로 어떻게 동작하는지를 살펴보겠습니다. https://westlife0615.tistory.com/891 [Java NIO] Selector register 이해하기- 목차 들어가며.Java NIO 의 Selector 는 비동기적으로 여러 채널(Channel)을 모니..
-
Java ReentrantLock 알아보기Java 2024. 6. 3. 06:08
- 목차 들어가며.Java 의 ReentrantLock 은 멀티스레드 환경에서 공유 자원에 대한 접근을 제어하기 위한 동기화 도구입니다.ReentrantLock 은 java.util.concurrent 패키지에 포함된 동시성 제어 클래스 중 하나로기본적으로 synchronized 키워드와 유사한 역할을 하지만, 더 많은 기능과 유연성을 제공합니다. 일반적으로 동기화를 구현하기 위해 Mutex 와 Semaphore 와 같은 메커니즘이 사용됩니다.ReentrantLock 은 Mutex 에 해당하는 Java 의 동기화 도구입니다. Mutex 는 Mutual Exclusion 의 약자로, 하나의 자원(Resource) 에 대해 동시에 여러 스레드가 접근하지 못하도록 보장하는 동기화 메커니즘입니다.즉, 한 시점에..
-
[Java] 익명 클래스와 메모리 관계 알아보기 ( Anonymous Class , Method Area )Java 2024. 6. 2. 07:21
- 목차 들어가며.익명 클래스(Anonymous Class) 는 자바에서 이름 없는 클래스를 정의하고 동시에 인스턴스를 생성할 때 사용되는 문법입니다.익명 클래스는 간결함과 편의성을 제공하지만, 그 사용이 항상 메모리 효율적이지는 않습니다.익명 클래스의 일반적인 형태는 다음과 같습니다 interface AnonymousInterface { void print();}abstract class AnonymousAbstract { abstract void print();}class Main { public static void main (String[] args) { AnonymousInterface instance = new AnonymousInterface() { ..
-
[Gradle] Java Plugin 알아보기Java/Gradle 2024. 3. 6. 22:33
- 목차 들어가며.Java Plugin 은 Gradle 에서 Java 프로젝트를 빌드하고 관리하는 데 필요한 주요 플러그인입니다.이 플러그인은 Java 애플리케이션을 컴파일하고, JAR 파일을 생성하며, 테스트를 실행하고, 의존성을 관리하는 기능을 제공합니다. Gradle 은 기본적으로 Java 빌드를 간편하게 할 수 있도록 많은 기능을 자동으로 제공하고, 다양한 설정을 통해 빌드 프로세스를 커스터마이징할 수 있습니다. 기본적으로 build.gradle 파일 내부에서 아래와 같이 선언하여 사용합니다.plugins { id 'java'} 그리고 java Block 을 통해서 Java Compile, Build 에 관한 여러가지 설정이 가능합니다. java { sourceCompatibility = ..
-
[Gradle] Gradle 과 JVM 관계 알아보기 ( 간단한 Task 생성하기 )Java/Gradle 2024. 2. 17. 17:49
- 목차 들어가며.이번 글에서는 Gradle 의 동작 방식을 알아보기 위해서 build.gradle 내부에 간단한 Task 를 생성 후 실행해보도록 합니다. Gradle 과 JVM 관계.먼저 Gradle 이 JVM 위에서 어떤 식으로 동작하는지 알아보기 위해서 Gradle Docker Container 를 실행합니다. docker run -it --rm --name gradle gradle bash 그리고 이 Gradle Docker Container 내부에서 간단한 Task 를 생성 후 실행합니다.아래의 간단한 예시는 build.gradle 파일을 생성하며, 이 파일은 300초 동안 실행되도록 작성하였습니다. cat ./build.gradletask delayedTask { println "Ta..