인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

FeignClient 사용 ②

MS간 호출에 있어 질문이 있습니다.

작성

·

288

2

feign client를 이용해 order-service의 컨트롤러를 호출하는 방식으로 이해했습니다.

 그런데, 실제 order-service의 getOrder라는 컨트롤러 메서드는 반환타입이 ResponseEntity로 한번 감싸져 있습니다. 이를 user-service에서 이용할때는 ResponseEntity가 벗겨진 List<ResponseOrders>를 바로 사용했구요.

아마, @FeignClient 어노테이션을 사용함으로써 이렇게 바로 파싱받아 사용할 수 있는 것 같은데.. ResponseEntity로 감싸져 있는 것만 파싱할 수 있는건가요?

답변 1

5

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다. 

ResponseEntity는 HTTP 응답에 대한 전체 내용을 가지고 있는 객체입니다. Status Code와 Header, Body를 포함하고 있으며, 요청하는 측에서 ResponseEntity 반환 받아, Status Code, Header, Body의 값을 사용할 수 있습니다. 

order-service의 getOrders() 메소드에서 반환 값을 ResponseEntity 감싸지 않고 전달하면, Status Code와 Header는 제어하지 못하고, 그냥 Body만 전달하게 됩니다 (200 OK).

Feign Client의 사용 여부와 상관없이 RestTemplate을 사용하여 호출한다고 해도, user-service에서는 ResponseEntity 형식으로 반환 받을 수도 있고, 그냥 ResponseEntity에 포함되어 있는 Body의 형식으로 반환받을 수도 있습니다. Status Code나 Header값을 사용하는지 여부에 따라 반환 값의 유형을 정하시면 될 것 같습니다.

order-service에서 ResponseEntity로 감싸서 반환하지 않더라도, List<ResponseOrder>는 ResponseEntity의 형식으로 반환 되고, user-service에서 ResponseEntity 반환 받지 않더라도, ResponseEntity의 Body 형식으로 반환 받아 사용하실 수 있습니다. 그러나, order-service의 getOrders() 메소드의 반환 타입과 ResponseEntity를 반환 받는 반환 타입이 다를 경우에는 에러가 발생하게 되니, 양쪽 같의 데이터 타입을 맞춰서 사용하시기 바랍니다. 

감사합니다. 

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기