반응형

분류 전체보기 199

Kubernetes MongoDB Community 버전 업그레이드 가이드 (6.0.5 → 8.2.6)

개요MongoDB Community Operator를 사용하여 Kubernetes에서 운영 중인 MongoDB를 6.0.5에서 8.2.6으로 업그레이드하는 과정을 정리합니다.Operator: mongodb-kubernetes (Community) v1.7.0업그레이드 경로: 6.0.5 → 7.0.31 → 8.0.20 → 8.2.6MongoDB 설치 방법에 대한 글은 아래 링크를 타고 가시면 볼 수 있습니다.Kubernetes에 MongoDB 설치하기사전 지식MongoDB는 Major 버전을 건너뛸 수 없다MongoDB는 Major 버전을 순차적으로 업그레이드해야 합니다. 예를 들어 6.0에서 8.0으로 바로 올릴 수 없습니다.6.0 → 7.0 → 8.0 → 8.2featureCompatibilityVer..

DB 2026.03.27

Kubernetes에 MongoDB 설치하기

들어가며Kubernetes 환경에서 MongoDB를 운영하려면 직접 Pod를 관리하는 것보다 MongoDB Community Operator를 활용하는 것이 훨씬 효율적입니다. Operator를 사용하면 MongoDB의 설치, 업그레이드, 사용자 관리 등을 Kubernetes 리소스(CRD)로 선언적으로 관리할 수 있습니다.설치 환경Kubernetes: EKSMongoDB Community Operator: v1.7.0MongoDB: 6.0.5Storage: AWS EBS gp3Node: 전용 노드 그룹 (Taint/Toleration 적용)저는 위 환경에서 진행을 하였습니다.1. MongoDB Community Operator 설치아래 주소는 MongoDB 공식문서 주소 입니다.참고링크Helm Repo..

DB 2026.03.27

Kafka Schema Registry 구축 - EKS에 Apicurio Registry 설치하기

Kafka 스키마 레지스트리란 무엇인가?앞선 글에서 스키마 레지스트리가 무엇인지, 왜 필요한지 살펴보았습니다.이번 글에서는 실제로 Apicurio Registry를 EKS 환경에 설치하고 내부적으로 어떻게 동작이 되는지 알아보겠습니다.사전 준비EKS 클러스터ArgoCD 설치 및 Git 레포지터리 연결Kafka 클러스터 (Strimzi 등)1. Apicurio Operator 설치Apicurio Registry는 Kubernetes Operator 방식으로 동작합니다.Operator를 먼저 설치해야 이후 Registry 인스턴스를 CRD로 생성할 수 있습니다.1-1. Operator YAML 준비저는 공식 Github에서 제공하는 apicurio-registry-operator-3.1.7.yaml 다운로드..

Kafka 2026.02.27

Kafka 스키마 레지스트리란 무엇인가?

스키마(Schema) 란?데이터의 구조(형식)를 정의한 설계도즉,어떤 필드가 있는지각 필드의 타입이 무엇인지필수인지 선택인지기본값은 무엇인지를 정의한 문서Kafka 스키마 레지스트리(Schema Registry) 란?Kafka는 원래 메시지 바이트 배열 만 저장/전달 합니다.즉, Kafka 자체는 “이 데이터가 어떤 구조인지(필드/타입)”을 모릅니다.그래서 스키마 레지스트리는 Kafka 메시지의 데이터 구조(스키마)를 중앙에서:저장(버전 관리)호환성 검사(Compatibility)조회(역 직렬화에 사용)해주는 메타 데이터 서버 입니다.핵심: 데이터는 Kafka에 저장되고, 스키마는 Registry에 저장사용 이유스키마 변경으로 인한 장애를 막기 위해예를 들어) Producer가 갑자기 필드 타입을 바꾸거..

Kafka 2026.02.26

Strimzi Kafka + Debezium으로 MySQL CDC 구축하기

CDC 사용하는 이유CDC는 Change Data Capture 의 약자 입니다.서비스를 운영하다 보면 DB의 변경사항을 다른 시스템에 전파해야 하는 상황이 생깁니다. 흔히 애플리케이션 코드에서 직접 이벤트를 발행하는 방식을 쓰지만, 이 경우 DB 저장과 이벤트 발행이 동시에 성공해야 한다는 부담이 있습니다.이 문제를 해결하는 방법 중 하나가 CDC(Change Data Capture) 입니다. DB에 직접 쓰기만 하면 변경사항이 자동으로 이벤트로 발행되기 때문에, 애플리케이션 코드를 건드릴 필요가 없습니다.이번 글에서는 Kubernetes 환경에서 Strimzi Kafka와 Debezium을 사용해 MySQL의 변경사항을 실시간으로 Kafka 토픽으로 스트리밍하는 방법을 정리해보겠습니다.사전 준비k8s..

Kafka 2026.02.24

EKS 내부 서비스들을 하나의 Internal NLB로 통합하여 비용 개선 (ECS 연동 개선기)

이번 글에서는 NLB 하나에 여러 서비스를 사용할 수 있도록 해보겠습니다.해당 작업을 하게된 계기현재 대부분의 코어 서비스들은 EKS 클러스터 내부에서 동작하고 있습니다.Redis, Kafka, OpenObserve, AI-Gateway 등 주요 인프라 구성 요소들이 모두 Kubernetes 환경 위에서 운영되고 있습니다.하지만 AI Agent 중 일부 애플리케이션은 안정성을 최우선으로 고려하여 ECS Fargate Task 기반으로 실행되고 있었고,이 애플리케이션이 EKS 내부 서비스들과 통신해야 하는 요구사항이 발생했습니다.처음 고려했던 구조: Internal ALB 통합여러 서비스를 외부로 노출해야 하는 상황에서, 처음에는 하나의 Internal ALB에 여러 서비스를 묶는 구조를 고려했습니다.AL..

AWS 2026.02.12

Prometheus에서 수집 가능한 커스텀 메트릭 만들기 (Python)

커스텀 메트릭 생성하게 된 계기기존에는 KEDA를 사용하여 SQS 큐 안에있는 메시지 개수를 보고 오토스케일링을 했었는데, 문제는 파드가 늘어나면 SQS 메시지 수를 파드 수로 나누어 평균 분산 해버리는 구조여서 원하는 방식대로 오토스케일링 기준을 잡기가 어려웠습니다.이에 따라 개발자분이 만들어둔 SlotManager의 슬롯 상태를 기준으로 오토스케일링을 하려고 메트릭을 만들게 되었습니다.메트릭 생성이제 실제로 제가 어떻게 했는지 과정을 말씀드리겠습니다.Prometheus Client 의존성 추가먼저 Python 애플리케이션에서 Prometheus 메트릭을 만들기 위해 prometheus-client 라이브러리를 추가하였습니다.prometheus-client이 라이브러리는, Counter, Gauge, ..

개발/Python 2026.01.08

[Go 언어 학습기 #9] Go 언어(Golang) 의 포인터

이 글은 Must Have Tucker의 Go 언어 프로그래밍 책을 참고하여 작성하였으며, 개인적인 학습 내용을 정리한 글입니다.포인터포인터는 메모리 주소를 값으로 갖는 타입입니다.포인터를 이용하면 동일한 메모리 공간을 여러 변수가 가리킬 수 있습니다.예를 들어 int 타입 변수 a를 선언하면, 변수 a는 메모리에 저장되어 있고 속성으로 메모리 주소를 가지고 있습니다.var a int = 3---- 변수 a는 값 10으로 선언- 메모리 어딘가에 저장됨- 그 메모리 주소를 가리키는 것이 포인터이 때 변수 a의 주소가 0x0100 번지라고 가정을 했을 때, 메모리 주솟값(0x0100) 또한 숫자값이기 때문에 다른 변수의 값으로 사용될 수 있습니다.이렇게 메모리 주솟값을 변숫값으로 가질 수 있는 변수를 포인터..

개발/Go 2025.12.24

[Go 언어 학습기 #8] Go 언어(Golang) 의 슬라이스

이 글은 Must Have Tucker의 Go 언어 프로그래밍 책을 참고하여 작성하였으며, 개인적인 학습 내용을 정리한 글입니다.슬라이스슬라이스는 Go 언어에서 제공하는 동적 배열 입니다.동적 배열 이란? 자동으로 배열 크기를 증가시키는 자료 구조 입니다.일반적인 배열은 처음 배열을 선언할 때 정한 길이에서 더 늘어나지 않습니다.하지만 슬라이스를 사용하면 이런 불편함에서 벗어날 수 있습니다.바로 선언 방법에 대해 알아보겠습니다.슬라이스 선언var slice []int기존 배열 선언에서 배열의 길이만 정의하지 않으면 됩니다.그러다보니 슬라이스 길이를 초기화 해주지 않으면 길이가 0인 슬라이스가 됩니다.예시 코드를 보면,package mainimport "fmt"func main() { var slic..

개발/Go 2025.12.23

[Go 언어 학습기 #7] Go 언어(Golang) 의 패키지

이 글은 Must Have Tucker의 Go 언어 프로그래밍 책을 참고하여 작성하였으며, 개인적인 학습 내용을 정리한 글입니다.패키지 란?Go에서 패키지는 코드를 묶는 가장 큰 단위 입니다.패키지 = 관련된 Go 파일들의 집합하나의 패키지는 하나의 디렉터리같은 디렉터리에 있는 .go 파일들은 모두 같은 패키지명을 가져야 합니다.코드 재사용, 의존성 관리, 네임스페이스 역할myapp/ ├─ main.go ← package main ├─ utils/ │ ├─ math.go ← package utils │ └─ string.go ← package utilsutils 디렉터리에 있는 .go 파일들은 모두 package utils 로 같은 패키지를 사용하는데,main.go 는 pack..

개발/Go 2025.12.22
반응형