안녕하세요, 오늘은 서비스 간 통신을 위한 프로토콜의 종류와 구현 방법을 알아보았습니다. 우선 HTTP와 AMQP의 차이를 알아보고, http 통신 방식인 rt와 feign에 대해 실습하는 시간을 가졌습니다.
RestTemplate: Spring에서 제공하는 HTTP 클라이언트. (Spring 5부터는 비권장)
Feign: Netflix에서 만든 선언형 HTTP 클라이언트로, 인터페이스 기반으로 REST 호출을 간단하게 작성 가능.
※ RestTemplate과 Feign은 HTTP 기반의 동기 통신을 구현할 때 사용되는 도구
-Spring에서 제공하는 HTTP 클라이언트.
-String orderUrl = String.format("http://127.0.0.1:8000/order-service/%s/orders", userId);
-String orderUrl = String.format(env.getProperty("order_service.url"), userId);

-도메인 수정

-@loadBalanced 어노테이션 추가

-Netflix에서 만든 선언형 HTTP 클라이언트로, 인터페이스 기반으로 REST 호출을 간단하게 작성 가능
-LoadBalanced 자동 지원
-pom.xml에 의존성 추가, client 파일에서 @FeignClient 명시된 인터페이스 추가
(@FeignClient의 name 은 eureka에 등록된 app을 명시)

-application 파일에서 호출 방식 변경 (RT에 비해 코드가 간결해졌음)
-FeignLog 확인 가능

-없는 엔드포인트 명시 (404 오류 유발)


-긴 오류 코드를 노출하지 않고 객체화 할 수 있다.
(errorDecoder 코드 추가, app에 어노테이션, client에 configuration 추가)

-사용자가 보게 될 에러 메세지




- 동기화를 위해 하나의 DB 를 사용할 수 있음. : SharedDB
- 메세지 브로커를 활용해 DB 간 동기화를 할 수 있음 (rabbitmq OR kafka)
- Kafka 커넥터 + DB 를 활용해 변경 데이터 감지해서 구독자에게 변경 사항을 알림.
rt와 feign은 미니PJT 에서 외부 API 연동을 위해 활용해본 개념이었기 때문에 다른 개념에 비해 비교적 쉽게 이해할 수 있었습니다. rt는 deprecated 되었지만 여전히 쓰이는 곳이 많고, feign의 경우 rt에 비해 간소화된 소스로 구현이 가능하기 때문에 두 개념 모두 알아두는 것이 좋겠다고 생각됩니다.