기술면접 스터디 5일차.
우선 Rest Client는 REST API 서버와 HTTP 통신을 할수 있게하는 도구입니다. 이를 통해서 서버에서 제공하는 API에 HTTP요청을 보내고 응답을 받아와서 처리할 수 있습니다.
Spring에서는 대표적으로 RestTemplate과 WebClient를 Rest Client로 제공합니다.
RestTemplate은 java의 HTTP 클라이언트 라이브러리를 사용한 Rest Client API를 제공합니다. Blocking I/O기반의 동기적인 API를 제공합니다. 그래서 쓰레드는 해당 요청이 다 처리될 때 까지 대기상태에 있는 단점이 있습니다.
그래서 이를 개선하기 위해 Spring 5 버전 부터는 WebClient가 나왔습니다. non-Blocking I/O 기반의 비동기식 API를 제공하기 때문에 입출력 작업이 완료할 때 까지 쓰레드가 대기하지 않고 다른작업을 수행할 수 있어 효율적인 작업이 가능합니다. 그래서 일반적으로 WebClient 사용이 권장됩니다.
Blocking/non-Blocking : 호출되는 함수가 바로 리턴 하느냐 여부에 따라 나뉜다. 호출된 함수가 바로 리턴해서 호출한 함수에게 제어권을 넘겨주고 다른 일을 할 기회를 주면 non-blocking. 호출된 함수가 자기 작업을 다 마칠 때까지 제어권을 안넘겨주고 대기하게 만들면 Blocking
Synchronous/Asynchronous(동기/비동기) : 호출되는 함수의 작업 완료여부를 누가 신경쓰냐. 호출한 함수가 작업 완료 여부를 계속 신경쓰면 Synchronous 동기적. 호출된 함수가 작업 완료 여부를 신경쓰면 Asynchronous 비동기적.
스프링부트에서는 특정 어노테이션을 붙여주면 해당 테스트를 위한 설정을 자동으로 제공해주는데 SpringBootTest와 WebMvcTest가 대표적입니다. 두 어노테이션은 테스트의 목적과 범위에 차이점이 있습니다.
@SpringBootTest는 통합 테스트를 위한 환경을 준비하며, 애플리케이션의 모든 구성요소와 Bean, 설정을 로드하여 실제 환경과 가장 유사한 테스트를 제공합니다.
반면에 @WebMvcTest는 Spring MVC 웹 계층의 컨트롤러 테스트를 위해 사용되며, 관련된 Bean들만 로드하여 가볍고 빠른 부분 테스트를 제공합니다.