본문 바로가기

전체 글85

nGrinder on K8S 개요nGrinder를 다시 설치해야 하는 일이 생겨서 찾아보다가 K8S에 설치하여 사용할 수 없는지 찾아보다가 Docker HUB에 이미지가 업로드되어 있는 것을 보고 K8S에 설치하여 사용했다. InstallDocker Imagedocker hub에 공식 이미지가 있어서 바로 설치하여 사용가능하다.https://hub.docker.com/r/ngrinder/controllerK8SK8S에서 위 Docker 이미지를 구동을 위해서는 Deployment 파일을 작성하여 Controller와 Agent 인스턴스 실행이 필요한데 이것도 이미 작성해 주신 분이 있다. 참고 : https://github.com/KesavanKing/ngrinder-k8sDeployment 파일들은 받아서 resource: {} .. 2024. 7. 25.
Java JVM - Checkpoint Restore (CRaC) 개요이전 게시글에서 소개했던 Spring Runtime efficiency 문서에서(https://blog.igooo.org/115) CRaC에 대하여 소개한 적이 있는데 간단한 예제로 사용방법을 알아본다. K8S에 배포하는 파이프라인까지를 구성하고 문서를 작성하려고 했으나 사용 중인 K8S Node가 CRIU를(https://criu.org/Main_Page) 지원하지 않는 Ubuntu 배포판(20.04) 버전이라 K8S 배포는 추후에 작성한다. (Job으로 스냅샷을 생성하고 배포하는 방법) Spring Boot 3.2부터 CRaC를(https://spring.io/blog/2023/11/23/spring-boot-3-2-0-available-now) 지원하기 시작했다. CRaC는 Coodinated .. 2024. 7. 20.
Java - ReentrantLock 개요There are two scenarios in which a virtual thread cannot be unmounted during blocking operations because it is pinned to its carrier:When it executes code inside a synchronized block or method, orWhen it executes a native method or a foreign function.Pinning does not make an application incorrect, but it might hinder its scalability. If a virtual thread performs a blocking operation such as I/.. 2024. 7. 19.
[Spring] Springdoc-openapi 사용하여 API 문서 만들기 개요springdoc-openapi는 Spring Boot 프로젝트의 API 스팩에 대하여 자동으로 문서 생성을 해주는 라이브러리다. json, yaml, html 등 다양한 형식의 문서를 생성한다. OpenAPI 3 스팩을 지원한다. Getting Started간단한 Spring MVC Controller를 생성한다.@RestController@RequestMapping("/v1.0/pets")class PetApiController { private List> pets = List.of(Map.of("name", "pet1"), Map.of("name", "pet2")); @GetMapping List> findAll() { return this.pets; } @GetMapping("/{name}".. 2024. 7. 16.
Kubernetes에서 Spring @Scheduled 사용하기 개요Spring은 @Scheduled 어노테이션을 사용하여 예약된 작업을 처리하며, 이는 애플리케이션의 인스턴스가 하나만 실행 중인 경우 문제없이 동작한다. 그러나 애플리케이션은 점점 더 컨테이너화되고 있고, Kubernetes와 같은 플랫폼에서 실행되어 수평적 확장을 사용하여 배포하는 경우 애플리케이션은 여러 인스턴스가 실행되고 있다. 예약된 작업은 백그라운드에서 실행되기 때문에 애플리케이션을 수평적으로 확장할 때 예약된 작업이 중복이 발생할 수 있다. The Scenario@Componentclass ScheduledTasks { private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class); private .. 2024. 7. 9.
Kubernetes - Pods PodsPod는 Kubernetes에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이며, 한 개 또는 여러 개의 컨테이너들의 묶음이다. Kubernetes 클러스터의 Pod는 두 가지 방법으로 사용된다.Pods that run a single container.: 하나의 Pod에 하나의 컨테이너를 사용하는 경우Pods that run multiple containers that need to work together. : 여러 개의 컨테이너를 배치해서 사용하는 경우. Using Pods아래 예제는 nginx: 1.14.2 이미지를 실행하는 Pod 예제다.apiVersion: v1kind: Podmetadata: name: nginxspec: containers: - nam.. 2024. 7. 4.
Generational ZGC in Java 21 개요Java 21은 2023 년 9월에 Generational ZGC의 도입과 함께 공개되었다. Highly scalable, low-latency GC 였던 ZGC는 https://openjdk.org/jeps/439를 통해 generational GC로 업데이트 되었다. 이 업데이트에서는 young / old 객체에 대하여 별도의 세대를 도입하여 메모리 관리를 최적화 하는것에 중점을 두었다. What is ZGC?ZGC는 최대 16TB 크기의 힙을 지원하면서도 밀리초 미만의 일시 정지 시간을 유지하며 높은 확장성을 갖도록 설계되었다. ZGC는 애플리케이션이 실행되는 동안 새로운 객체를 할당하고, 도달할 수 없는 객체를(unreachable object) 스캔하고, 힙을 압축하는 등의 작업을 수행하는데.. 2024. 7. 2.
Kubernetes - Service ServiceKubenetes 환경에서 Serivce는 Pod를 통해 실행되는 네트워크 애플리케이션을 네트워크에 노출시키는 가상의 컴포넌트다. Pod는 임시적인(ephemeral) 리소스임으로 Pod의 IP를 통해 접속하는 방법은 쉽지 않기 때문에 Service를 사용하여 Pod를 외부와 연동하도록 가이드한다.Defining a ServiceService는 Pod, ConfgMap과 같은 K8S Object로 Kubernetes API를 사용하여 정의할 수 있다. 예를 들어 HTTP 9376, HTTPS 9377 port로 서비스하는 app.kubernetes.io/name: MyApp 라벨이 설정된 Pod가 있는 경우 아래와 같이 서비스를 정의할 수 있다.apiVersion: v1kind: Servic.. 2024. 7. 2.
Spring Boot Application Caching 간단한 예제로 Spring Boot Application에서 캐쉬를 구현할 때 어떻게 사용해야하는지 살펴본다. Implementbuild.gradleplugins { id 'java' id 'org.springframework.boot' version '3.3.1' id 'io.spring.dependency-management' version '1.1.5'}group = 'org.igooo'version = '0.0.1-SNAPSHOT'java { toolchain { languageVersion = JavaLanguageVersion.of(21) }}repositories { mavenCentral()}dependencies { implementation 'org.springframework.boo.. 2024. 6. 24.