✅ APISIX로 Java Spring Boot API Gateway 대체항목 Spring Cloud Gateway Apache APISIX💡 목적Java 기반 API Gateway고성능 Nginx 기반 API Gateway🔄 라우팅Java 코드/설정으로 제어CRD(YAML) 또는 Admin API로 제어🚀 성능Java 서버 기반 → 높은 리소스 사용Nginx 기반 → 매우 가볍고 빠름🔒 인증/보안JWT, OAuth2 지원 (Spring Security 필요)JWT, OAuth2, IP 필터 등 내장 플러그인📊 모니터링Actuator 기반Prometheus, Grafana 연동 플러그인🧱 확장성Java 코드 커스터마이징Lua 플러그인 또는 WebAssembly☸️ 쿠버네티스 친화도일부 구성 필..
🔁 예시 플로우 (Custom Plugin + Kafka Proxy)[클라이언트 요청 JSON] → [Lua 커스텀 플러그인] - JSON 파싱 - 필요한 필드 추출/변환 - 새로운 JSON 구성 - ngx.ctx.kafkavalue에 저장 → [Kafka Proxy Plugin] - 변환된 JSON 값을 Kafka에 전송🎯 예시 목표요청 바디:{ "user_id": 42, "event": "signup", "password": "secret"}➡️ Kafka로는 아래와 같은 값만 보내고 싶어요:{ "event": "signup", "user": 42}🧩 1. Lua 플러그인 작성 (custom-transform.lua)local c..
🔷 Lua 언어란?Lua는 1993년 브라질의 PUC-Rio 대학에서 개발된 경량 스크립트 언어입니다. "루아(Lua)"는 포르투갈어로 "달(Moon)"을 뜻하며, 작고 효율적이면서도 유연한 언어로 유명합니다.✅ 대표적인 특징:가볍다 (Lightweight)빠르다 (Fast)내장하기 쉽다 (Embeddable)🔶 주요 특징 및 기능 소개1. ✏️ 간결한 문법Lua는 문법이 단순해서 배우기 쉽습니다. 복잡한 선언 없이 변수, 함수 등을 간단하게 정의할 수 있습니다.-- Hello World 예제print("Hello, Lua!")2. 🧠 동적 타이핑변수를 선언할 때 자료형을 명시할 필요 없이, 자동으로 타입을 결정합니다.x = 10 -- 정수x = "hello" -- 문자열3. 📦 ..
🎯 UUID란?**UUID (Universally Unique Identifier)**는"전 세계적으로 고유한 식별자"를 의미하는 128비트 값입니다.예시:e5f63194-9e7c-11ee-a1b8-0242ac120002🧩 UUID 사용 목적 사용처 설명Kafka 메시지 key메시지 분산과 추적을 위한 고유 IDDB row IDMongoDB, PostgreSQL 등에서 주키(primary key)로 사용Request IDAPI 요청 추적(trace)용이벤트 트래킹"OrderCreated", "UserUpdated" 같은 이벤트 고유 식별☕ Java에서 UUID 생성 (Spring 기준)import java.util.UUID;String id = UUID.randomUUID().toString();Sy..
✅ 전환 전략 요약: "RabbitMQ → Kafka 직접 치환"RabbitMQ를 완전히 제거하고 Spring Boot에서 Kafka만 사용하는 구조로 바꾸는 단계별 가이드입니다.🛠 단계별 전환 방법1. RabbitMQ 관련 코드 제거RabbitTemplate, @RabbitListener, Queue, Exchange, Binding 등 모든 RabbitMQ 의존성과 Bean 제거spring-boot-starter-amqp 의존성 제거// 제거// implementation 'org.springframework.boot:spring-boot-starter-amqp'2. Kafka 의존성 추가// build.gradledependencies { implementation 'org.springfra..
처리 방식 설명 사용 예1. Proxy 방식들어온 요청을 그대로 Kafka Bridge로 forwardGateway가 중계만 할 때2. Custom 처리API Gateway가 JSON 파싱 후 Kafka로 직접 전송사용자 정의 처리 필요할 때🧭 1. Proxy 방식 (요청 그대로 Kafka Bridge로 전달)🔁 흐름[Client] → [API Gateway] → [Kafka Bridge (REST)] → Kafka✅ 구현: Spring Cloud Gateway (또는 WebFlux)로 프록시 라우팅# application.ymlspring: cloud: gateway: routes: - id: kafka-bridge uri: http://bridge-s..
🔎 Kafka Proxy란?Kafka는 기본적으로 **Kafka protocol (TCP 기반)**을 사용합니다.하지만 Kafka Proxy는 이를 HTTP/REST 인터페이스로 감싸주는 역할을 해요.목적 설명✅ Kafka를 REST로 접근POST/GET 방식으로 Kafka에 메시지 전송, 조회✅ Kafka 클라이언트 설치 없이 연동IoT, 외부 API 서버 등과 연동에 유리✅ K8s에서 서비스화 쉬움Ingress, Service 등 활용 가능🔌 대표 Kafka 프록시 종류 (모두 무료)프록시 이름설명라이센스Confluent REST Proxy가장 많이 쓰는 공식 REST 프록시Apache 2.0 (무료)Landoop Kafka Rest Proxy (Fast Data)간단한 REST 프록시Apache..
🧩 Apache Pulsar 란 무엇인가요?🐳 경량화 단일 노드 Pulsar개발/테스트용 standalone 모드로 실행하는 환경⚙️ Pulsar 기능 제한형 구성Function, KoP, Tiered Storage 등을 제외한 최소 기능 셋🎈 IoT, Edge 용 경량 Pulsar리소스 제한 환경을 위한 맞춤형 빌드 (예: ARM 등)☁️ Pulsar Proxy 기반 게이트웨이Kafka 클라이언트 또는 REST 게이트웨이만 얹은 경량 Pulsar Wrapper✅ PulsarLite = 흔히 “개발/테스트용 경량화 구성”을 의미예시 1: Docker로 띄우는 Standalone Pulsardocker run -it -p 6650:6650 -p 8080:8080 apachepulsar/pulsar:..
Kubernetes의 ConfigMap과 Secret은 애플리케이션 구성 정보를 외부에서 주입(injection)하기 위한 중요한 리소스입니다. 둘 다 환경 변수, 커맨드라인 인자, 볼륨을 통해 파드에 주입될 수 있으며, 애플리케이션 코드 수정 없이 환경 설정 변경이 가능하게 해줍니다.하지만 사용 목적과 보안 수준에서 중요한 차이점이 존재합니다. 🔍 ConfigMap vs Secret: 차이점 항목 ConfigMap Secret용도일반 설정값 저장 (예: DB 호스트, 포트 등)민감한 정보 저장 (예: 비밀번호, API 키, TLS 인증서 등)데이터 저장 방식일반 텍스트 (Base64 인코딩 없이 저장됨)Base64 인코딩된 문자열로 저장됨보안암호화 없이 저장됨 (노출 위험 높음)기본적으로 etcd에..
🔌 1. 동기식 통신(Synchronous Communication)대표 기술:HTTP/RESTgRPC특징:즉시 응답을 받아야 하는 요청에 적합클라이언트는 응답이 올 때까지 대기함개발이 상대적으로 쉬움장점:간단한 요청-응답 처리 구조디버깅 및 로깅이 쉬움단점:서비스 간 강한 결합 발생한 서비스의 장애가 다른 서비스에 전파될 위험 있음확장성과 복원력이 낮음예시:Client → Order Service → Product Service → 응답 반환📩 2. 비동기식 통신(Asynchronous Communication)대표 기술:메시지 브로커 (Kafka, RabbitMQ, NATS 등)이벤트 기반 아키텍처특징:요청을 큐나 토픽에 발행하고 바로 다음 작업으로 넘어감소비자는 메시지를 수신하고 독립적으로 처리..