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

작성자 없음

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

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

FeignClient 사용 ②

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

21.07.27 17:11 작성

·

276

2

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

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

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

답변 1

5

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

2021. 07. 28. 10:14

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

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를 반환 받는 반환 타입이 다를 경우에는 에러가 발생하게 되니, 양쪽 같의 데이터 타입을 맞춰서 사용하시기 바랍니다. 

감사합니다. 

작성자 없음

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

질문하기