코드스테이츠_국비교육/[Section3]

42.03_[Spring MVC] API 계층; Rest Client_22.10.22

생각없이 해도 생각보다 좋다. 2022. 10. 22. 22:08

현재는 러프하게 이해한 상태이다. 이후 꼼꼼히 정리할 때, 조금 깊이있게 공부하고 유클의 심화학습도 참고하자.

 

Rest Client
>클라이언트와 서버
: 클라이언트와 서버의 관계는 상대적이다.
: 데이터를 요청하게 되면 그게 무엇이든 클라이언트가 되고, 데이터를 응답하는 것은 서버가 된다.
: 정확히는 어떤 서버가 HTTP 통신을 통해서 다른 서버의 리소스를 이용한다면, 그때 그 서버는 클라이언트 역할을 한다.

>Rest Client
: Rest API 서버에 HTTP 요청을 보낼 수 있는 클라이언트 툴 또는 라이브러리를 의미함.
: Postman 같은 경우가 Rest Client이다. 근데 UI가 갖춰진.
: Backend A와 Backend B 서버같이 UI가 없는 서버간 HTTP 요청을 보내기 위해서는 Rest Client 라이브러리를 사용한다.

>HTTP Client Library
: Java에서 사용가능한 java.net.HttpURLConnection, Apache HttpComponents, OkHttp 3, Netty 등이 있음.
: Spring에서는 RestTemplate가 대표적이다.

>RestTemplate
: Template이라고 명명된 이유는 말그대로 디자인은 구성되어 있고, 내용만 채우면 되기 때문.
: RestTemplate 클래스를 이용하면 위의 Java에서 사용가능한 HTTP Client Library 중 하나를 유연하게 사용할 수 있다.
: 즉, Java에서 사용가능한 HTTP Client Library을 쉽게 쓰게 만든 것을 Spring이 제공하는 것이다.

>RestTemplate의 사용
1. 객체 생성
: RestTemplate의 인스턴스를 생성하고, 그 생성자 HTTP Client Library의 구현 객체를 전달해야함. (main에 생성을 예시로 들자)
: builde.gradle의 dependencies 항목에 implementation 'org.apache.httpcomponents:httpclient' 를 추가.
2. URI 생성
: RestTemplate의 객체를 생성한 곳에서 UriComponents와 URI 객체로 URI를 생성한다.
: UriComponents 클래스를 이용하여 URI의 구성 요소를 갖춘다
: Uri 클래스로 변수를 지정하고 URI를 생성한다.
: 위 처럼 Stream 형식으로 작성(각각은 유어클래스 참고)
3. 요청 전송(응답 데이터 받는 방법)
: RestTemplate의 getForObject()메서드를 이용한다.
: getForObject()메서드는 첫번째 인자로 생성된 URI, 두번째 인자로 String.class를 주어 String 참조 변수로 값을 할당받는다.
: 두번째 인자는 Class<T> response Type이므로 응답으로 전달 받을 클래스 타입을 지정하면 된다.
: 해당 API에서 받을 정보 중 원하는 정보만 받고 싶다면, 해당 정보의 변수와 getter가 존재하는 클래스를 따로 생성하고 이 커스텀 클래스를 getForObject메서드의 전달 받을 클래스 타입으로 지정하면 된다.
: 추가로 getForEntity(), exchange() 메서드가 있다

>RestTemplate 사용 예시
: 외부 서비스로 제공되는 API 기능을 포함 시킬때 사용한다.
: 우리가 만드는 Sample 같은 경우에는 추가로 결제 서비스, 메시징 기능을 추가하는 상황에 RestTemplate를 사용할 수 있을 것이다.