728x90
1. 모든 내부 통신을 Kafka 기반 비동기 이벤트로 처리하면?
1) 주문하기와 같은 로직 처리 시 동기로 장바구니 data를 가지고 와야 하는데 kafka 이용 시 성능 감소 및 복잡성 증대
(return 받기 까지 처리시, consumer 제어에서 db 로 부터 data 를 가지고 와서 호출자에게 전달 할 때 - 폴링, 웹소켓등을 사용하여 전달 하여야 함!)
2) 소스레벨의 복잡성 증대로 인해, 개발 비용 증가
3) Kafka 이슈 발생 시 조회도 막힘(서킷 브레이커 fallback 지점 증가)
2. OpenFeign 이란?
1) netflix 에 의해 개발 됨(선언적 http client 도구)
2) HTTP API 호출을 인터페이스 선언만으로 추상화 가능
https://spring.io/projects/spring-cloud-openfeign
Spring Cloud OpenFeign
spring.io
3. OpenFeign 장점!
1) 인터페이스를 이용하여 소스 추상화 가능
2) 어노테이션 기반으로 가독성 향상
3) 요청/응답에 대한 타입을 컴파일 단계에서 오류 검증 가능
4) Resilience4j, Hystrix(레거시) 등과 결합하여 타임아웃, 재시도, 서킷 브레이커를 쉽게 적용가능
5) 공통 헤더, 인증, 로깅, 인코딩/디코딩을 인터셉터와 설정으로 일관되게 관리 가능
4. OpenFeign 으로 로직 구현
1) feign client interface
@FeignClient(
name = "product-service", // Service Discovery 연계
configuration = ProductFeignConfig.class,
fallback = ProductClientFallback.class // 장애 대응
)
public interface ProductClient {
@GetMapping("/api/products/{productId}")
ProductResponse getProduct(
@PathVariable Long productId,
@RequestHeader("X-USER-ID") Long userId
);
}
2) DTO
public record ProductResponse(
Long id,
String name,
int price,
int stockQuantity
) {}
3) 공통 config 설정
@Configuration
public class ProductFeignConfig {
@Bean
public RequestInterceptor authHeaderInterceptor() {
return requestTemplate ->
requestTemplate.header("X-INTERNAL-CALL", "true");
}
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}728x90
'Kotlin Spring > Kotlin Spring 강의 내용' 카테고리의 다른 글
| [부록] JPA(Java Persistence API) (0) | 2026.01.27 |
|---|---|
| [부록] Docker for Mysql, Redis, Kafka (0) | 2026.01.26 |
| 10) Kafka 기반 도메인 분리(3) - Saga 패턴이란? (0) | 2026.01.14 |
| 10) Kafka 기반 도메인 분리 (4) Transactional Outbox 패턴이란? (0) | 2026.01.13 |
| 10) Kafka 기반 도메인 분리 (2) 결제 시 쿠폰도메인을 완전하게 분리하기 (0) | 2026.01.13 |