클라우드 컴퓨팅 & NoSQL 389

구글 클라우드-AppDev 알아보기 #2 CloudTask 를 이용한 Advanced Message

CloudTask는 GCP의 Pub/Sub 처럼 본질적으로는 메시지 큐라고 보면 된다. 단 Pub/Sub 보다 발전된 메시지 컨트롤 기능을 가지고 있다. 개념을 먼저 이해하자고 하면, 먼저 다음 그림을 참고하자. CloudTask에 전달/저장되는 메시지를 Task라고 하며, 메시지는 CloudTask 내부 큐에 저장이 된다. 그리고, Target Destination으로 최종 전달이 되는데, 이 Task를 받아서 처리하는 부분을 Handler라고 한다. 아래 구조와 같이 Cloud Task를 큐로 사용하여, Cloud Run등에 메시지를 Push (HTTP 호출) 방식으로 전달이 가능하다. 그렇다면, Cloud Task는 기존의 Pub/Sub Message Queue에 비해서 무엇이 다른가?Pub/..

구글 클라우드-AppDev 알아보기 #1 EventArc를 이용한 EDA 구축

AppDev 알아보기 #1 EventArc를 이용한 EDA 구축조대협 (http://bcho.tistory.com) 넷플릭스의 레퍼런스 아키텍쳐로 유명한 EDA (Event Driven Architecture)등은 구축하기 위해서, 이벤트 버스, 비동기큐, 워크플로우 엔진등 여러가지 복잡한 컴포넌트가 필요하고 이를 위한 운영이 어렵기 때문에 일반적인 오픈소스로 구축하기에는 부담이 많이 된다. 클라우드에서 이러한 EDA 아키텍처를 구축하기 위해서 핵심 컴포넌트들을 매니지드 서비스 형태로 제공하고 있다. 이 글에서는 구글 클라우드에서 EDA를 구축하기 위한 핵심 컴포넌트들에 대해서 알아보도록 한다. CloudSchedulerCloudScheduler는 GCP 기반의 Cron이라고 생각하면 된다. 스켈된 일..

2025년 Devops 트랜드 세미나 공지

2025년 Devops 트랜드에 대한 무료 세미나를 알려드립니다. https://docs.google.com/.../1FAIpQLScNuq7qBqEPVF.../viewform미국에서는 이제 Devops는 너무 필수적인 것이라 많이 이야기 하지 않습니다. 그보다 비용 효율화를 위한 Finops, 보안을 위한 Secops와 개발과/운영을 밀접하게 연계해서 비즈니스 임팩트를 주기 위한 부분을 많이 고민합니다.2025년 Devops트랜드에 대해서 구글의 정명훈님과 전 화해 CTO님 이재광님이 준비했습니다.

Nest.JS 살펴보기 - 2. Hello World

Nest.JS 살펴보기 - 2. Hello World조대협 (http://bcho.tistory.com)1. 프로젝트 생성:터미널을 열고 다음 명령어를 실행하여 hello-world라는 이름의 Nest.js 프로젝트를 생성한다.nest new hello-world프로젝트 생성 과정에서 패키지 매니저를 선택하라는 메시지가 나타나면 npm을 선택한다. 프로젝트 생성이 완료되면 hello-world 디렉토리로 이동한다. cd hello-world2. 주요 파일 설명:생성된 프로젝트에는 다음과 같은 주요 파일들이 있다.src/app.controller.ts: 애플리케이션의 컨트롤러를 정의하는 파일이다. 컨트롤러는 클라이언트로부터 들어오는 요청을 처리하고, 그에 대한 응답을 반환하는 역할을 수행한다. 라우팅 로직..

Nest.js 살펴보기 #1 - 환경 구성

Nest.js 살펴보기 #1 - 환경 구성조대협 (http://bcho.tistory.com) Nest.js 를 사용하기 위해서 먼저 환경을 구성해보자 Node.js 설치가장 먼저 Node.js를 설치해야 한다. Node.js는 Nest.js 애플리케이션을 실행하는 데 필요한 런타임 환경을 제공한다. Node.js 공식 웹사이트(https://nodejs.org/)에서 운영체제에 맞는 설치 파일을 다운로드 받을 수 있다. LTS(Long Term Support) 버전을 다운로드하는 것을 권장한다. 다운로드한 설치 파일을 실행하여 Node.js를 설치한다. 설치 과정에서 npm(Node Package Manager)도 함께 설치되는데, npm은 Node.js 패키지를 관리하는 도구이다.설치가 완료되면 터미..

쿠버네티스 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..