Java
-
선착순 이벤트와 같이 동시에 많이 요청이 오는 것에 대한 테스트를 하고 싶은 경우 테스트 코드에서 여러 개의 thread를 실행시켜 진행할 수 있다.실행시키는 건 thread를 이용해서 동시에 많은 요청을 줄 수 있는데 “여러 스레드를 동시에 실행시키고, 모두 끝날 때까지 기다리는” 상황에 대한 처리는 어떻게 할지 알아보자. thread를 이용해서 동시에 많은 요청을 주는 부분도 threadpool을 사용하는 방법 등 더 효율적으로 실행하는 방법도 같이 알아보자. CountDownLatchthread 간의 동기화를 도와주는 일회성 도구카운트 값을 정해두고, 다른 thread들이 countDown()을 호출해 카운터를 0으로 만들면 await()로 기다리던 thread들이 동시에 깨어난다CountDown..
[Java] 동시성 테스트(CountDownLatch Thread ExecutorService)선착순 이벤트와 같이 동시에 많이 요청이 오는 것에 대한 테스트를 하고 싶은 경우 테스트 코드에서 여러 개의 thread를 실행시켜 진행할 수 있다.실행시키는 건 thread를 이용해서 동시에 많은 요청을 줄 수 있는데 “여러 스레드를 동시에 실행시키고, 모두 끝날 때까지 기다리는” 상황에 대한 처리는 어떻게 할지 알아보자. thread를 이용해서 동시에 많은 요청을 주는 부분도 threadpool을 사용하는 방법 등 더 효율적으로 실행하는 방법도 같이 알아보자. CountDownLatchthread 간의 동기화를 도와주는 일회성 도구카운트 값을 정해두고, 다른 thread들이 countDown()을 호출해 카운터를 0으로 만들면 await()로 기다리던 thread들이 동시에 깨어난다CountDown..
2025.11.16 -
NIO의 주요 구성 요소는 3가지가 있다.Channel, Selector, Buffer Buffer는 DirectMemory 영역을 사용하는 ByteBuffer에 대해서 앞에서 알아보았고(https://kkang-joo.tistory.com/233)이번에는 다른 두 가지 구성 요소에 대해서 알아보자. ChannelChannel은 데이터를 읽고 쓰는 통로 역할을 한다. NIO에서의 주요 특징으로는 NoN-Blocking을 지원한다는 점이다.기존에는 연결이 생성되기 전까지 block 상태로 thread를 잡고 대기를 했다면 NIO에서는 연결이 없다면 바로 null을 반환하여 다음 로직을 진행한다. Selector 이벤트 리스너 역할을 한다. 위의 소개한 Channel에 연결요청이 들어오면, Channel..
[Java] NIO - Channel, SelectorNIO의 주요 구성 요소는 3가지가 있다.Channel, Selector, Buffer Buffer는 DirectMemory 영역을 사용하는 ByteBuffer에 대해서 앞에서 알아보았고(https://kkang-joo.tistory.com/233)이번에는 다른 두 가지 구성 요소에 대해서 알아보자. ChannelChannel은 데이터를 읽고 쓰는 통로 역할을 한다. NIO에서의 주요 특징으로는 NoN-Blocking을 지원한다는 점이다.기존에는 연결이 생성되기 전까지 block 상태로 thread를 잡고 대기를 했다면 NIO에서는 연결이 없다면 바로 null을 반환하여 다음 로직을 진행한다. Selector 이벤트 리스너 역할을 한다. 위의 소개한 Channel에 연결요청이 들어오면, Channel..
2025.10.07 -
Spring Cloud Gateway에 대해서 이것저것 찾아보다가 Netty를 조사하게 되고 NIO의 Direct Memory라는 개념까지 왔다.자바 개발자라면 필수로 알아야 하는 내용일 거 같아서 정리하고 넘어가 보도록 하겠다. NIONIO는 New IO를 뜻한다.자바 1.4부터 도입된 입출력 처리 방식이다.기존의 블로킹 I/O 방식과 달리, NIO는 비동기(Asynchronous) 및 논블로킹(Non-blocking) 방식으로 동작하여, 입출력 작업 중에 스레드가 블로킹되지 않고 다른 작업을 수행할 수 있게 해 준다.여기서는 비동기/논블로킹 기능 이외에 메모리에 대한 부분만 집중해 보자. 구분블로킹 I/ONIO (Non-blocking I/O)메모리 할당 방식JVM 힙 영역 내 버퍼 사용네이티브 메..
[Java] NIO - Direct Memory - ByteBufferSpring Cloud Gateway에 대해서 이것저것 찾아보다가 Netty를 조사하게 되고 NIO의 Direct Memory라는 개념까지 왔다.자바 개발자라면 필수로 알아야 하는 내용일 거 같아서 정리하고 넘어가 보도록 하겠다. NIONIO는 New IO를 뜻한다.자바 1.4부터 도입된 입출력 처리 방식이다.기존의 블로킹 I/O 방식과 달리, NIO는 비동기(Asynchronous) 및 논블로킹(Non-blocking) 방식으로 동작하여, 입출력 작업 중에 스레드가 블로킹되지 않고 다른 작업을 수행할 수 있게 해 준다.여기서는 비동기/논블로킹 기능 이외에 메모리에 대한 부분만 집중해 보자. 구분블로킹 I/ONIO (Non-blocking I/O)메모리 할당 방식JVM 힙 영역 내 버퍼 사용네이티브 메..
2025.10.04 -
서버의 물리 메모리가 4G인데여기에 java application의 -Xms(초기 Heap 메모리 size) , -Xm(최대 사용 가능한 Heap 메모리 size) 설정을 2G, 3G로 설정하며 성능테스트를 진행했던 내역을 정리해 보자. case (g1gc 사용 )-Xms2G -Xm2G-Xms3G -Xm3G -Xms2G -Xm2G성능테스트로 cpu 약 80%의 부하를 24시간 진행gc count, time 확인 시 특이사항 없음 / 최대 gc time은 약 20ms로 정상동작eden, survivor, old 영역 모두 gc가 정상적으로 이루어져 지속적으로 heap 증가 없음 -> 모두 정상 동작으로 보여서, 좀 더 서버의 자원을 최대한으로 끌어 써보기 위해서 heap 영역의 메모리 사이즈를 늘려봄 ..
[Java] Heap 영역 테스트서버의 물리 메모리가 4G인데여기에 java application의 -Xms(초기 Heap 메모리 size) , -Xm(최대 사용 가능한 Heap 메모리 size) 설정을 2G, 3G로 설정하며 성능테스트를 진행했던 내역을 정리해 보자. case (g1gc 사용 )-Xms2G -Xm2G-Xms3G -Xm3G -Xms2G -Xm2G성능테스트로 cpu 약 80%의 부하를 24시간 진행gc count, time 확인 시 특이사항 없음 / 최대 gc time은 약 20ms로 정상동작eden, survivor, old 영역 모두 gc가 정상적으로 이루어져 지속적으로 heap 증가 없음 -> 모두 정상 동작으로 보여서, 좀 더 서버의 자원을 최대한으로 끌어 써보기 위해서 heap 영역의 메모리 사이즈를 늘려봄 ..
2025.09.01