본문 바로가기

Programming/Infra

(7)
[Kubernetes] JVM Heap 메모리 모니터링 (With. Visual VM, jstat) JVM 힙 메모리를 모니터링 해야할 일이 생겼다. 로컬이나 물리장비에 떠있는 서버를 Visual VM 연동을 통해 모니터링 해본 경험은 있지만, Kubernets 환경에서의 Visual VM 연동은 낯설었다. # Visual VM ? - https://visualvm.github.io/ VisualVM: Home News: July 19, 2022: VisualVM 2.1.4 Released This release introduces several heapviewer improvements. From now, VisualVM is available as an optional GraalVM component. See the Release Notes for all changes. The tool can be..
Spring boot Dockerfile 최적화하기 (spring boot dockerfile best practice) Spring Boot Dockerfile 간단하게 스프링 어플리케이션을 도커파일로 작성하면 아래와 같다. FROM openjdk:11 ARG JAR_FILE=build/libs/*.jar COPY ${JAR_FILE} app.jar EXPOSE 8080/tcp ENTRYPOINT ["java","-jar","/app.jar"] Spring Boot의 빌드 결과는 바로 실행 가능한 하나의 jar 파일로 나오기 때문에, 단순히 jar 파일을 옮겨주고 실행 시켜주는 것만으로 Dockerfile 작성이 끝난다. 하지만, 여기서 Dockerfile을 하나씩 최적화 시켜보자. .dockerignore 작성 Docker 이미지 생성 시 필요없는 파일은 최대한 제거해준다. 특히 Dockerfile의 경우 은근히 사이즈..
Docker란? (Docker의 기본개념) Docker 도커는 컨테이너를 이미지 파일로 빌드하고 배포하여 어디서나 실행할 수 있도록 해주는 오픈소스이다. 사실 상 컨테이너는 리눅스의 기술이고 도커가 없어도 컨테이너를 구현할 수 있다. 하지만 도커를 이용하면 여러 장점이나 옵션들을 사용할 수 있다. 컨테이너를 git에 저장된 소스처럼 build/push/pull 할 수 있는 방법을 먼저 제공하면서 주목받았다. Docker 설치 (https://www.docker.com/get-started) 그렇다면 위에서 말한 컨테이너(container)는 무엇일까? Container 컨테이너 단위로 OS, 라이브러리, 어플리케이션을 하나로 패키징 할 수 있다. 하나의 OS 위에 여러 어플리케이션을 독립적으로 실행할 수 있도록 한다. 여러 어플리케이션의 격리된 ..
부하테스트 오픈소스: Locust Locust는 부하테스트 중에 하나이다. 부하테스트의 종류는 nGrinder, Apache Jmeter 등 다양한 툴들이 존재하지만, 그중에 좀 간단해보이고 UI가 괜찮은(?) Locust를 사용해봤다. 설치 설치는 간단하다. 단, 파이썬 3.6이상 버전이 깔려있어야한다. $ sudo pip3 install locust 스크립트 작성 테스트 스크립트을 파이썬으로 작성해야한다. 파이썬을 잘모르지만, 공식문서를 참고하여 간단한 health-check를 하는 스크립트를 다음과 같이 작성했다. import time from locust import HttpUser, task from locust.user.wait_time import constant class QuickstartUser(HttpUser): wa..
[Kubernetes] Pod의 종료 사이클과 Graceful Shutdown (with nginx & spring boot) 눈에 보이지 않는건 언제나 검증이 어렵고 이해하기 힘들다. Kubernets의 경우 로그 파악하기가 쉽지도 않고, 자동으로 처리해주는 것이 많아 이해하기 어려웠다. Kubernetes의 Pod 종료 사이클과 Spring Boot, Nginx의 Graceful Shutdown을 이해한대로 정리해보자. 쿠버네티스 환경에서는 많은 이유로 충돌이 발생하고, 때때로 Auth Scaling으로 Pod이 늘어나고 줄어드는 경우가 허다하다. 따라서 이러한 쿠버네티스 환경에서 Pod이 Graceful하게 종료되는 것은 중요하다. Graceful Shutdown에 관한 내용은 여기서 확인할 수 있다. Kubernets 환경에서의 Graceful Shutdown 내가 만약 로컬이나 EC2와 같은 서버에 Spring Boot..
Graceful Shutdown (with nginx & spring boot) Graceful Shutdown ? 정확한 개념에 대해서는 말들이 많지만, 간단히 말해서 현재 들어온 요청을 모두 수행하고 우아하게(?) 종료된다는 개념이다. 예를 들어, 내가 어떠한 상품을 구매하기 위해 결제 요청을 했고, 서버가 결제를 처리하고 있는데, 뭔지 모르는 이유로 서버가 종료될 때 이미 처리하고 있는 결제 요청은 모두 처리하고 종료된다는 것을 의미한다. Graceful Shutdown을 이해하기 위해서는 SIGTERM, SIGKILL에 대한 이해도 필요하다. SIGTERM과 SIGKILL의 이해를 돕기 위한 유명한 그림이 있다. SIGTERM은 위 그림처럼 자식에게 가기 전에 인사할 시간을 준다. 쉽게 말해, 서버에게 종료될 시간을 주는 것이다. SIGKILL은 위 그림처럼 인사할 시간도 안..
AWS 란? AWS 란? Amazon Web Services의 약자로서 아마존이 웹을 통해 제공하는 서비스를 통칭하는 말이다. 웹에서 서비스하고 있다고 해서 모든 사람이 서비스 대상은 아니다. 아마존 웹서비스를 사용하는 주 대상은 개발자들이다. 보통 프로그램 개발 시 해당 프로그램을 돌릴 수 있는 장비와 환경들이 필요하게 된다.(Web Server, WAS, DB Server 등)이런 것들을 개인이 구축하려 하면 물리적인 서버장비를 구입하는것부터 시작해서, 서버 장비에 웹서버,애플리케이션 서버, DB등을 설치해야하기 때문에 시간도 시간이지만 노력이 엄청나게 들어가는 작업이다. 그런데 AWS를 사용하게 되면 아마존 사이트에 접속해서 로그인하고,약간의 설정을 통해 이런 작업들을 완료할 수 있다. 그리고 AWS가 더 좋은..