전체 글 1274

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #2 - 임베딩과 유사도 검색

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #2 - 임베딩과 유사도 검색 조대협 (http://bcho.tistory.com) 앞의 글에서 RAG가 어떻게 작동하는지에 대한 대략적인 개념에 대해서 살펴보았다. 이 글에서는 벡터데이터 베이스가 유사한 문서를 찾아내는 방법인 유사도 검색과, 텍스트등의 데이터를 이 벡터 공간으로 맵핑 시키는 임베딩의 개념에 대해서 알아보도록 한다. 임베딩의 개념 Pinecone 데이터베이스를 이해하기 위해서는 먼저 임베딩이라는 개념을 이해해야 한다. 텍스트를 그냥 데이터 베이스에 저장하는 것이 아니라, 벡터로 바꿔서 저장하는데, 단순하게 해시와 같은 방법으로 맵핑을 하는 것이 아니라 벡터 공간에 의미를 담은 상태로 변환하는 것을 임베딩..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #1

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #1 조대협 (http://bcho.tistory.com) RAG의 개념 Open AI의 ChatGPT나 Google의 PaLM 모델, 메타의 LLama 모델과 같은 LLM 모델은 학습 당시에 지식을 저장하여 뉴럴 네트워크 상에 그 지식을 담고 있다. 그래서 학습 당시까지의 지식을 기반으로한 질문에 대해서는 답변을할 수 있지만, 학습이 되지 않은 데이터나 또는 그 이후 나온 데이터에 대해서는 답변을 할 수 없는 제약을 가지고 있다. 또한 잘못된 정보를 학습하여, 잘못된 답을 내놓는 경우가 있을 수 있는데, 이를 Hallucination (환상)효과라고 한다. 이러한 두 문제를 해결하려면 최신의 데이터와 질문에 대한 답을 ..

VAE를 통해서 본 이미지 생성 모델의 원리

VAE를 통해서 본 이미지 생성 모델의 원리 조대협 (http://bcho.tistory.com) 요즘 Mid Journey 모델이나 DALLE-3 모델과 같은 이미지 생성 모델이 많이 소개되어, 어떤 원리로 이미지를 생성하는지 궁금하였다. GAN,Transformer등 여러가지 모델이 있지만 VAE (Variant Auto Encoder)모델을 이용하여 이미지를 변경하는 방법이 상대적으로 이해하기 쉬워서 VAE기반의 이미지 편집 원리를 정리하였다. 오토 인코더와 VAE에 대한 개념 설명 : (이 글을 읽기전에 AutoEncoder와 VAE에 대한 개념/원리는 아래 글을 참고하기를 권장한다.) 오토 인코더에 대한 개념 설명은 https://bcho.tistory.com/1197 오토 인코더 샘플 코드는 ..

생성형 AI ChatGPT/Bard LLM에서 프롬프팅을 이용한 공격/방어 방법

LLM 프롬프트 공격 방법 조대협(http://bcho.tistory.com) 일반적으로 LLM을 이용해서 애플리케이션을 개발할때 Lang Chain과 같은 프레임웍을 사용한 후에, 프롬프트 템플릿을 사용하여 제약이나 LLM의 역할등을 정의하고, 그 다음에 사용자에게 입력 받은 프롬프트를 삽입하여 전체 프롬프트를 만들어 낸다. 아래와 같은 구조가 되는데, {llm role}{llm mission} {context} {user prompt} {constraint} 예를 들면 다음과 같은 쇼핑몰 도움이 챗봇이라고 할때 다음과 같은 구조가 될 수 있다고 하자. {너는 쇼핑몰 상품 추천 쳇봇이다.} {너의 목표는 사용자의 입력을 받아서, 적절한 상품을 추천해주는 것이다.} : 여기서 LLM 모델은 쇼핑몰 쳇봇으..

주제와 관계 없는 질문을 막기 위한 DARE 프롬프팅 기법

주제와 관계 없는 질문을 막기 위한 DARE 프롬프팅 기법 조대협 (http://bcho.tistory.com) LLM모델을 기반으로 채팅 서비스등을 개발할때, 마주하는 문제중 하나가 사용자가 주제와 관련 없는 질문을 하는 경우 이를 어떻게 판별하고 필터링할 것인가이다. 예를 들어 LLM(ChatGPT등) API를 바로 연결해서 여행 사이트용 챗봇을 만들었다고 가정하자. 이때 사용자가 악의적으로 여행과 관련 없는 질문을 하더라도 LLM API로 전달된 질문은 답변이 되기 때문에 악용 될 수 있다. 예를 들어 아래 프롬프트는 챗봇에게 여행사이트 챗봇의 역할을 부여하고 컨택스트를 강제하여 주었지만 사용자가 미국 자동차 모델중 최고 모델을 질의하는 프롬프트인데, 여행 챗봇임에도 불구하고 이 질문에 대해서 답변..

LangChain에서 Vertex.AI LLM 사용하기

LangChain 에서 Vertex.AI LLM 사용하기 조대협 (http://bcho.tistory.com) 라이브러리 설치 !pip install 'google-cloud-aiplatform>=1.25.0' !pip install --user langchain 필요라이브러리로는 Google Cloud AI Platform SDK 1.25 버전 이상이 필요하며, Langchain 라이브러리를 같이 설치한다. 환경 설정 구글 클라우드에서 LLM API 를 호출하기 위해서는 API 인증 및 사용하는 프로젝트를 지정해야 한다. 여기서는 편의상 구글 클라우드 Vertex.ai workbench (매니지드 Jupyter 노트북)을 생성하면서 Service account를 먼저 생성해놓고, Vertex.AI를 호..

LLM 모델과 프롬프트 작성 방법

LLM 모델과 프롬프트 작성 방법 조대협 (http://bcho.tistory.com) LLM (Large Language Model)은 생성형 AI (Generative AI) 중의 하나로, 자연어 처리를할 수 있는 머신러닝 모델로, 자연어로 내리는 명령어 대해서 텍스트 아웃풋을 내는 모델이다. 예를 들어 문장을 요약하거나, 검색 엔진처럼 특정 질문에 대해서 답변을 하는 등의 기능을 수행할 수 있다. 일반적으로 LLM로 제공되는 모델들은 다음과 같다. LLM : 일반적인 LLM으로 일반적인 자연어 처리 엔진이다. Coding : 코딩에 최적화된 모델로 자연어로 입력을 받아서 소스 코드를 생성하거나, 코드 자동완성, 코드에 대한 주석 생성등을 지원한다.Coding LLM도 일반적인 Q&A나 명령을 수행하..

Google JAX 소개

모두의 연구소 JAX님 영상 강의 요약 Numpy의 대체제이지만 GPU,TPU 사용이 가능함. 구글과 허깅페이스가 강력하게 밀고 있는 프레임웍. Functional programming 모델로 Numpy와 프로그래밍 모델이 다소 다름. Immutable(변경 불가능 특징)을 가짐. 예를 들어 # In NumPy arrays are mutable x = np.arange(size) print(x) x[index] = value print(x) JAX의 경우 직접 값을 변경하는것이 불가능하고 set function을 직접 사용해야 한다. # Solution/workaround: y = x.at[index].set(value) print(x) print(y) JIT 컴파일 방식을 사용함. @jit 데코레이터나..

쿠버네티스 Config 변경을 위한 Kustomize

쿠버네티스 Config 변경을 위한 Kustomize 조대협 (http://bcho.tistory.com) 쿠버네티스 환경을 운영하면, 같은 설정을 다른 클러스터에 배포해야 하는 시나리오가 있다. 예를 들어서 애플리케이션을 개발/테스트/운영 (dev/stage/production)환경에 배포해야 하는데, 이 경우에 세부 설정이 조금씩 다를 수 있다. 이때 각 환경별로 파일을 만들면 관리가 어렵고 비효율적이기 때문에, 다른 세부 설정만 이러한 문제를 해결하기 위한 도구들이 Kubernetes 배포 도구이다. 대표적인 도구로 Kustomize, Helm, Ksonnet 예를 들어 아래 그림과 같이 deployment를 정의한 YAML 파일이 있을때 전체 설정을 수정하지 않고 replica 수만 개발/테스트/..

간단하게 알아보는 Kubernetes Operator의 개념과 Kopf 프레임웍

간단하게 알아보는 Kubernetes Operator의 개념과 Kopf 프레임웍 조대협 (http://bcho.tistory.com) 쿠버네티스에는 Deployment, Service,Pod 등 여러 predefined resource가 있다. 이런 pre-defined resource 이외에 새로운 리소스를 정의해서 등록해서 사용할 수 있는데, 이를 Controller 또는 Operator라고 한다. Controller와 Operator는 용어가 종종 혼용되어 사용되는데, 분류를 하자면 Controller는 Kubernetes에 이미 정의되어 있는 Pre-defined resource를 , Operator는 사용자가 정의한 애플리케이션 리소스를 지칭한다. Operator는 Stateless applic..

이벤트 베이스 쿠버네티스 오토스케일링 KEDA

이벤트 베이스 쿠버네티스 오토스케일링 KEDA 보통 인스턴스 수를 늘이는 오토 스케일러는 메모리나 CPU와 같은 기초적인 자원 사용양에 따라서 작동하는 경우가 많다. 그러나 이보다는 애플리케이션의 큐 길이나 메시지 큐의 길이 또는 특정 이벤트에 따라서 자원을 스케일링 하는 것이 더 논리적인데, 이렇게 하기 위해서는 커스텀 메트릭을 프로메테우스등으로 수집한후, 이 메트릭을 CA (Cluster Autoscaler)에 적용하는 방법으로 구현해야 하는데, 구현의 복잡도가 높다. KEDA 오픈 소스는 Redis나 기타 오픈소스 또는 클라우드 자원과 쉽게 통합하여, 거기서 발생하는 이벤트를 이용하여 오토 스케일링을 손쉽게 가능하게 해준다. https://keda.sh/docs/1.4/scalers/redis-li..

쿠버네티스의 HPA/VPA 오토스케일링을 위한 모니터링 아키텍처

쿠버네티스의 HPA/VPA 오토스케일링을 위한 모니터링 아키텍처 조대협 (http://bcho.tistory.com) 쿠버네티스에서 HPA/VPA는 내부 메트릭을 이용하여 오토스케일링을 판단하는데, 이를 위해서 내부 메트릭을 수집하고 서빙하기 위한 모니터링 아키텍쳐가 어떻게 구현되었는지에 대해서 알아본다. 각 노드에서 동작하는 컨테이너에 대한 리소스 정보 (CPU,메모리, 네트워크 사용량)은 cAdvisor를 통하여 수집되어 Kubelet을 통해서, 컨트롤 플레인에 전달된다. cAdvisot는 컨테이너에 대한 리소스 정보만 수집하지만, Kubelet은 컨테이너 이외의 노드나 애플리케이션에 대한 정보를 수집한다. 이렇게 Kubelet에 저장된 정보는 metric server로 전달되고, metric api..

도커 컨테이너 파일 포맷 및 Image Pull Time

도커 이미지는 JSON 설정 파일 및 각 레이어 파일로 되어 있는데, 이 레이어 파일을 tar / gzip 으로 되어 있음 = 아래 Docker 컨테이너 이미지 Manifest file = { "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "config": { "mediaType": "application/vnd.docker.container.image.v1+json", "size": 30008, "digest": "sha256:4e35ecd1a7547e482e9db2c4a889fe9085c6b8a61285cc921ca1ce6f6c7cf5bb" }, "layers": [ { "mediaType..

Apache Spark #1 - 아키텍쳐 및 기본 개념

Apache Spark의 개념 이해 #1 기본 동작 원리 및 아키텍처 조대협 (http://bcho.tistory.com) 아파치 스파크는 빅데이터 분석 프레임웍으로, 하둡의 단점을 보완하기 위해서 탄생하였다. 하둡을 대체하기 보다는 하둡 생태계를 보완하는 기술로 보면 되는데 실제로 기동할때 하둡의 기능들을 사용하게 된다. 하둡이 맵리듀스 방식으로 디스크(HDFS)에 저장된 파일 데이터를 기반으로 배치 분석을 진행한다면, 스파크는 디스크나 기타 다른 저장소(데이터 베이스등)에 저장된 데이터를 메모리로 올려서 분석하는 방식으로 배치 분석 뿐만 아니라, 스트리밍 데이터 양쪽 분석을 모두 지원한다. 기본 동작 원리 및 아키텍쳐 기본적인 동작 원리를 살펴 보면 다음과 같다. 스파크 클러스터의 구조는 크게 Mas..

L2 Regularization

머신러닝 모델 학습에서 일어나는 오버피팅 문제를 해결하기 위한 방법으로 여러가지 방안이 있는데, 뉴럴 네트워크에서 drop out , Early stopping (모델이 오버피팅 되기전에 학습을 멈추는 방법) 등이 있다. 여기서 살펴볼 내용은 오버피팅을 해결하기 위한 기법중의 하나인 L2 Regularization이다. 일반적으로 loss 함수는 아래 그림과 같이 (y-y':원본데이타 - 예측데이타) 의 차이를 최소화하는 값을 구하는 식으로 되어 있다. L2 Regularazation 기법은 이 Loss 함수의 값 뿐만 아니라, 모델의 복잡도를 최소화하는 weight 값을 차는 방식으로 식을 변형한다. 모델의 복잡도에 대한 계산은 weight 값의 최소값을 구하는 방식을 사용하는데, L1 Regularz..

Feature Crossing

Feature crossing 피쳐 크로싱이란, 주어진 피쳐로 문제를 해결할 수 없을때 (특히 선형문제), 두개 이상의 피쳐를 곱해서 새로운 피쳐를 생성해내는 방버이다. Overcrossing 피쳐크로싱을 한 피쳐를 많이 사용하게 되면 오히려 역효과(오버피팅등)이 발생할 수 있는데, 이를 오버크로싱이라고 한다. 아래 그림을 보면 X1,X2 피쳐를 크로싱한 3개의 추가 피쳐를 사용하였는데, 그림과 같이 분류 모델의 그래프과 왼쪽 상단에도 생기고 또한 분류 경계가 직선으로 아래그림 다음 그림과 같이 선형이면 충분함에도 불구하고, 오히려 곡선으로 구부러지면서 오버피팅이 되는 것을 확인할 수 있다. 아래는 해당 데이터 셋에 대한 이상적인 경계선을 표현한다. 여기서는 피쳐 크로싱된 데이터를 사용하지 않았다.

Vertex AI : 모델 학습 및 하이퍼 패러미터 튜닝

Vertex AI : 모델 학습 및 하이퍼 패러미터 튜닝 조대협 (http://bcho.tistory.com) 가장 기본적이지만 클라우드를 사용하면서 가장 효과적인 기능이 모델 학습과 하이퍼 패러미터 튜닝이다. 모델 학습을 위해서는 CPU/GPU 고사양의 컴퓨터가 필요하지만, 이 고사양의 컴퓨팅 파워가 항상 이용되는 것이 아니라. 학습때 많은 컴퓨팅 자원이 필요하기 때문에, 온프렘등에서 장비를 사놓고 학습때만 사용하고 평소에 장비를 사용하지 않는 것 보다는 학습때만 클라우드에서 컴퓨팅에서 컴퓨팅 자원을 사용하는 것이 오히려 비용 효율적이라고 볼 수 있다. 하이퍼 패러미터 모델을 학습함에 있어서 모델에는 여러가지 튜닝이 가능한 패러미터가 있다. 예를 들어 학습 속도 (Learning Rate)나, 또는 뉴..

구글 클라우드 Vertex.AI Model 학습 및 모델 배포&서빙

Vertex.AI Model 학습 및 모델 배포&서빙 조대협 (http://bcho.tistory.com) 머신러닝 환경에서, 학습을 수행하기 위해서는 프레임웍에 맞는 환경 (파이썬,텐서플로우)등을 설치하고, 필요한 컴퓨팅 리소스 (CPU,GPU)등을 프로비저닝 한후, 학습을 진행해야 한다. 학습이 완료되면 서빙을 위해서 모델을 export 하고, 서빙을 위한 API 서버를 설치 한 후에, 모델을 배포해서 서빙을 해야 한다. 서빙시에는 학습시 데이터와 서빙 요창에 들어온 데이터가 크게 차이가 나지 않는지 (training & serving detection), 또는 서빙 요청이 들어온 데이터가 이전 서빙 요청이 들어온 데이터와 크게 차이가 나지 않는지 (data drift detection)등의 체크를 ..

Vertex.AI로 파이프라인과 metadata 구현하기

Vertex.AI Pipeline(Kubeflow pipeline) & metadata 조대협 (http://bcho.tistory.com) 이 글은 google developer codelab의 Using Vertex ML Metadata with Pipeline 예제를 기반으로 한다. . (코드 소스 : https://codelabs.developers.google.com/vertex-mlmd-pipelines) 예제 코드의 실행은 위의 링크를 참고하면, step by step으로 진행할 수 있다. Vertex.AI는 구글 클라우드의 AI 플랫폼 솔루션으로 여러가지 컴포넌트를 가지고 있다. 이 예제에서는 데이터를 읽어서 학습하고, 모델을 만들어서 배포하는 파이프라인에 대해서 설명한다. 파이프라인의 개..

40대 중반에 새로운 여행을 떠납니다.

근 20년이 넘게 한국에서 IT 업종에서 일해왔습니다. 작은 병특회사에서 시작해서, 외국계 벤더에서 서포트,컨설턴트 여러가지 일도 해보고, 국내 인터넷 회사에도 들렀다가, 잘 다니던 대기업을 그만두고 스타트업 CTO로 가면서 도전을 했고, 성공하지 못했습니다. 몸도 많이 힘들고 잃은 것도 많지만 경험적으로 얻은 것도 많았습니다. 그리고 좋은 분들의 도움으로 구글에서 엔지니어로써 일해오고 있습니다. 그러다가 재 작년에 가족들과 미국에 여행을 갔을때, 아이들이 자유롭게 놀고 창의적으로 공부하는 모습이 눈에 많이 들어오더군요. 한국에서는 어린 나이부터 대학 입학을 위해서 선행 학습을 해야 하고 늦게 까지 주입식 교육을 해야 하는데.... 정말 이건 아니다 싶더군요. 그래도 서울시내에 있는 대학이라도 갈려면 최..

사는 이야기 2021.05.28

머신러닝 파이프라인에서 데이터 전처리 방법

Data Preprocessing in ML Pipeline 본글은 구글 클라우드 블로그에 포스팅한 글을, 재 포스팅 허가를 받은 후 포스팅한 글입니다. 다른 좋은 글들도 많으니 아래 출처 링크를 참고해 주새요출처 링크 머신러닝 파이프라인에서, 데이터는 모델 학습 및 서빙의 입력에 알맞게 가공되어야 한다. 이를 전처리라고 하는데, 이번 글에서는 전처리에 대한 개념과 이에 대한 구현 옵션등에 대해서 알아보도록 한다.처리 단계별 데이터 분류머신러닝에서 데이터 전처리는 모델 학습에 사용되는 데이터 형태로 데이터를 가공하는 과정을 이야기한다.데이터 전처리는 여러 단계로 이루어지는데, 단계별로 처리된 데이터에 대해서 다음과 같이 명명한다. Raw data초기에 수집된 원본 데이터로 분석이나, 머신러닝 학습 용도로..

분산형 데이터 분석 아키텍처-데이터 매쉬

Data mesh조대협 (http://bcho.tistory.com) Data mesh는 빅데이터 분석 시스템의 아키텍쳐 스타일로, 마이크로 서비스 아키텍처 (이하 MSA)컨셉과 유사하게 데이터 분석 시스템을 각각의 분산된 서비스 형태로 개발 관리하는 아키텍쳐 모델이다. 이번 글에서는 차세대 데이터 분석 시스템 아키텍처인 Data mesh에 대해서 알아본다. 데이터 분석 시스템의 역사Data mesh에 대해서 이해하려면 기존의 데이터 분석 시스템의 아키텍처와 그 역사에 대해서 이해하라 필요가 있다.데이터 분석 시스템은, DataWare house를 거쳐 현재는 Data Lake 형태가 주류를 이루고 있으며, 차세대로는 Data Mesh가 각광 받고 있다. 각각 아키텍처 스타일을 보면 다음과 같다.Data..

Kubeflow pipeline 과 TFX 메모

Kubeflow pipeline 과 TFX 메모 TFXTFX는 Tensorflow Extended 로, 머신러닝 파이프라인을 구현하는데 필요한 여러가지 컴포넌트들을 지원한다. TFDV : 모델 Validation으로, EDA뿐만 아니라 데이터의 특성을 파악하여 저장한후에, 향후에 데이터가 들어 왔을때 Validation이 가능하다TFT : 데이터 Transformation 작업을 한다TFMA : 학습된 모델에 대한 평가 작업을 한다TF-Serving : Prediction RunTime 엔진을 제공한다.파이프라인 엔진이렇게 각각의 컴포넌트가 있을때, 이 컴포넌트를 묶어서 오케스트레이션을 해야하는데, 이를 위해서 제공되는 것이 TFX pipeline이다. 실제 런타임 엔진이 있는 것이 아니라 SDK형태를 ..

Prometheus 를 스케일링 하기 위한 Thanos (타노스)

문제 정의 프로메테우스가 좋은 모니터링 시스템이긴 하지만 두가지 결정적인 문제점을 가지고 있다. 결정적으로 클러스터링 구조를 지원하지 않기 때문에, 확장성과 가용성 문제를 가지고 있다. 확장성 측면에서는 디스크를 증설하거는 것과 같은 하드웨어 스펙 증설로 어느정도는 해결이 가능하지만 데이타 볼륨이 늘어나고 모니터링 대상이 늘어나면 하나의 프로메테우스 인스턴스로는 감당이 어렵다. 이런 문제를 해결하는 방법으로는 Federation 이라는 방법을 사용한다. 프로메테우스 인스턴스를 여러개를 기동한 다음에, 중앙에 다른 프로메테우스로 부터 메트릭을 수집하는 다른 프로메테우스를 놓는 방식이고, 데이타 양에 대한 문제는 데이타의 해상도 (예를 들어 전면에 데이타 수집 서버가 10초 단위로 수집 했다면, 중앙 서버에..

오픈소스 모니터링 툴 - Prometheus #3 그라파나를 이용한 시각화

프로메테우스 #3. 그라파나를 이용한 시각화조대협 (http://bcho.tistory.com) 그라파나(Grafana)는 메트릭을 시각화 해주는 오픈소스 도구이다. Graphite, Prometheus, InfluxDB등 다양한 데이타베이스와 메트릭수집 시스템을 지원하고, 하나의 대쉬보드에 동시에 여러 메트릭 시스템들의 지표를 표시할 수 있고 무엇보다 설치 및 사용 방법이 쉽기 때문에 널리 사용되고 있다특히 프로메테우스를 잘 지원하고 있기 때문에, 프로메테우스의 메트릭을 그래프로 시각화 하는데도 많이 사용된다. 그라파나의 설치는 비교적 간단한 편이기 때문에 여기서는 별도로 설명하지 않는다. 설치 방법은 공식 문서 https://grafana.com/docs/grafana/latest/installati..

오픈소스 모니터링 툴 - Prometheus #2 Hello Prometheus

프로메테우스#2 Hello Prometheus 조대협 (http://bcho.tistory.com)프로메테우스에 대해서, 이해하기 위해서 간단한 테스트를 진행하는데, 테스트는 http://www.katacoda.com/ 를 이용하였다. 웹상에서 쿠버네티스, 프로메테우스,텐서플로우등 다양한 기술을 별도의 설정이나 서버없이 해볼 수 있기 때문에, 기술에 대한 개념을 잡는데 매우 유용하다. 설정 파일 정의 프로메테우스의 설정은 prometheus.yml 파일에 정의 한다. 아래는 간단한 예제이다. global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets..

오픈소스 모니터링툴 - Prometheus #1 기본 개념과 구조

프로메테우스 #1 기본 개념과 구조조대협 (http://bcho.tistory.com) 프로메테우스는 오픈 소스 기반의 모니터링 시스템이다. ELK 와 같은 로깅이 아니라, 대상 시스템으로 부터 각종 모니터링 지표를 수집하여 저장하고 검색할 수 있는 시스템이다. 구조가 간단해서 운영이 쉽고, 강력한 쿼리 기능을 가지고 있으며, 그라파나(Grafana) 를 통한 시각화를 지원한다. 무엇보다 넓은 오픈 소스 생태계를 기반으로 해서, 많은 시스템을 모니터링할 수 있는 다양한 플러그인을 가지고 있는 것이 가장 큰 장점이다. 특히 이런 간편함 때문에 특히나 쿠버네티스의 메인 모니터링 시스템으로 많이 사용되면서 요즘 특히 더 주목을 받고 있다. 기본 구조프로메테우스의 기본적인 아키텍처 부터 살펴보자먼저 수집 저장 ..

오픈소스 부하테스트툴 Locust #2 - 분산 부하 테스팅 (with 쿠버네티스)

Locust 와 쿠버네티스를 이용한 분산 부하 테스트조대협 (http://bcho.tistory.com)분산 부하 테스트locust는 여러개의 worker를 이용하여, 부하를 대량으로 발생 시키는 분산 부하 테스트가 가능하다. 특히 분산 클러스터 구성 설정이 매우 간단하다는 장점을 가지고 있다. 마스터 노드의 경우에는 아래와 같이 --master 옵션을 지정하여 마스터 노드로 구동하면 되고, % locust -f {task file name} --host={target host address} --master 워커 노드의 경우에는 실행 모드를 slave로 하고, 마스터 노드의 주소만 명시해주면 된다. % locust -f {task file name} --host={target host address} ..

오픈소스 부하테스트툴 Locust #1 - 설치와 스크립트 작성 방법

부하테스트를 위한 Locust조대협 (http://bcho.tistory.com) 백앤드 개발을 하다보면 많이 사용되는 도구 중의 하나가 부하 테스트 툴인데, 대표적인 도구로는 Apache Jmeter, nGrinder,SOAP UI 등의 도구가 있지만 다소 사용이 어렵고 스케일링을 하는데 어려움이 있는데, locust라는 도구는 설치와 사용이 편리하고, 테스트 시나리오를 파이썬 스크립트로 작성을 하기 때문에 다양한 시나리오 구현이 가능하다. 특히 쿠버네티스에 쉽게 배포할 수 있도록 Helm으로 패키지화가 되어 있기 때문에, 필요한 경우 대규모 부하테스트 환경을 설치하고 테스트가 끝나면 쉽게 지워버릴 수 있다. (참고 : locust는 영어로 메뚜기라는 뜻인데, 부하를 주는 것을 swarming 이라고 ..