마이크로서비스 아키텍처는 시스템을 작고 독립적인 서비스로 나눕니다. 하지만 서비스가 많아질수록 서비스 간 통신과 통합이 복잡해집니다. Apache Camel은 이런 복잡성을 관리하는 데 탁월한 도구입니다.
전통적인 ESB(Enterprise Service Bus)는 중앙 집중식으로 모든 통합 로직을 처리합니다. 마이크로서비스에서는 이런 중앙화가 오히려 병목이 됩니다. Camel은 각 서비스에 내장(embedded)되어 분산 방식으로 통합을 처리합니다.
마이크로서비스는 인스턴스가 동적으로 생성/삭제됩니다. Camel은 Consul, Kubernetes, Eureka 등 서비스 디스커버리 시스템과 통합해 동적으로 서비스 주소를 찾을 수 있습니다.
// Kubernetes 서비스 이름으로 자동 라우팅
from("direct:callPayment")
.to("http4://payment-service/api/pay?bridgeEndpoint=true"); Kubernetes 환경에서는 서비스 이름이 DNS로 자동 해석되므로, IP 주소 대신 서비스 이름을 그대로 사용할 수 있습니다.
외부 서비스가 느리거나 다운됐을 때 요청이 쌓여 자체 서비스까지 망가지는 것을 막는 것이 Circuit Breaker입니다. Camel 3.x부터 Resilience4j와 통합을 지원합니다.
from("direct:callExternalService")
.circuitBreaker()
.to("http4://external-service/api")
.onFallback()
.setBody(constant("서비스 일시 중단, 나중에 다시 시도하세요"))
.end(); Circuit Breaker는 실패 임계값을 초과하면 자동으로 “열려서” 외부 호출을 차단합니다. 일정 시간 후 다시 시도해 성공하면 “닫혀서” 정상 운영됩니다.
REST 호출 대신 이벤트(메시지)로 서비스 간 통신하면 더 느슨한 결합을 달성할 수 있습니다. Camel은 Kafka, RabbitMQ 등 이벤트 스트리밍 플랫폼과 쉽게 연동됩니다.
// 주문 이벤트 발행
from("direct:placeOrder")
.marshal().json()
.to("kafka:order-events?brokers=kafka:9092");
// 재고 서비스에서 구독
from("kafka:order-events?brokers=kafka:9092&groupId=inventory")
.unmarshal().json(OrderEvent.class)
.to("bean:inventoryService?method=reserve"); 유튜브에 AI 자동 생성 영상이 넘쳐납니다. 진짜 크리에이터들은 어떻게 살아남아야 할까요? AI와 경쟁하는 3가지 생존…
이틀 전에 사이드카가 걸렸을 때만 해도 "한 번 놀란 장"으로 끝날 줄 알았는데요. 15일 아침…
오전 시황 글에 이어 장중 후속 정리입니다. 코스피는 개장 직후 5%대였던 낙폭이 오전 10시 전후에…
10월 15일 목요일 아침, 코스피가 전날 종가보다 5.59% 낮은 5,673.01로 출발했습니다. 장 시작 7분 만에…
삼성 갤럭시 AI, 써보니 실망스러웠다. 온디바이스 한계, 지역 제한, 낮은 일상 활용도 등 현실적인 문제점…
주 52시간 상한이 기업 성과에 어떤 영향을 줬는지를 다룬 KDI(한국개발연구원) 연구 내용이 10월 14일 국회를…