설렘 프로젝트에 카카오 로그인 기능을 도입하며 Non-Blocking, Asyn 웹 서비스 프레임워크인 Spring WebFlux 의 공식문서를 공부하고 필요한 부분은 기록하려고 한다.
기존에 Spring 의 RestTemplate 을 사용해 Blocking 방식으로 외부 API 를 호출하는 기능을 구현했었는데,
RestTemplate 이 maintenance mode 가 되었을 뿐만 아니라 사용하는 과정에서 불편함이 많았다.(특히 Latency 문제)
그래서 Non-Blocking, Asyn 방식의 장점을 경험해보기 위해 Spring WebFlux 를 사용하기로 했다.
트래픽을 고려해서 성능적인 이점을 측정해보고 도입하라는 공식문서의 표현이 있었지만, 우리 서비스는 트래픽이 적어서 사실 큰 의미는 없을 수 있지만, 그래도 더 진보된 기술이고 나의 학습과 경험을 위해 해보려고 한다.
이전부터 노션에 기록중이었는데 이제 블로그에 작성해보려고 한다.
노션
https://my-little-seollem.notion.site/OAuth2-b0823605f72848478733dc5bf6c24821
OAuth2 소셜 로그인
중요한 내용은 지금 문장처럼 콜아웃 되어 있습니다.
my-little-seollem.notion.site
Annotated Controller
Exceptions
Spring MVC 와 같이 @Controller + @ControllerAdvice 또는 @RestController + @RestControllerAdvice 사용이 가능하다. @ExceptionHandler를 사용하는 것도 동일하다.
URI Links
UriComponents
RestTemplate 와 함께 사용했던 라이브러리이다.
UriComponents uriComponents = UriComponentsBuilder
.fromUriString("https://example.com/hotels/{hotel}")
.queryParam("q", "{q}")
.encode()
.build();
URI uri = uriComponents.expand("Westin", "123").toUri();
UriBuilder
UriComponentsBuilder 는 UriBuilder 의 구현체이다. UriBuilderFactory 를 통해 UriBuilder 를 생성할 수 있다. UriBuilderFactory 는 기본 URL, 인코딩 기본 설정 및 기타 세부 정보와 같은 공유 구성을 기반으로 URI 템플릿에서 URI를 빌드할 수 있다.
아래는 WebClient 에서의 예시코드 이다.
// import org.springframework.web.util.DefaultUriBuilderFactory.EncodingMode;
String baseUrl = "https://example.org";
DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory(baseUrl);
factory.setEncodingMode(EncodingMode.TEMPLATE_AND_VALUES);
WebClient client = WebClient.builder().uriBuilderFactory(factory).build();
'Spring' 카테고리의 다른 글
| @Repository 어노테이션 (1) | 2023.02.27 |
|---|---|
| JPQL (0) | 2023.02.20 |
| JPA 연관관계 (0) | 2023.02.16 |
| @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor (0) | 2023.02.13 |
| Spring Security (0) | 2023.02.05 |