본문 바로가기

Spring22

[Spring] RestTemplate과 WebClient 이해하기 Intro 외부 API 정보를 요청하려면 어떻게 해야할까? 가장 흔하게 사용하는 방식은 Http Client 이다. Web으로 API를 호출하기 위해 사용하는 Http 모듈 중 하나인 Spring WebClient에 대해 알아보려 한다. RestTemplate vs WebClient 기존에 많이 사용한 RestTemplate과 가장 큰 차이점은 RestTemplate는 Blocking이고, WebClient는 Non-Blocking 방식이라는 것이다. (Blocking은 호출되는 함수가 호출하는 함수에게 제어권을 넘기지 않고 대기하게 한다. Non-Blocking은 제어권을 바로 넘긴다. 관련 포스팅은 여기를 참고) 현재 RestTemplate는 Spring 5.0 이후부터 Deprecated되었고, W.. 2021. 9. 12.
[SpringBoot] Request로 오는 객체 검증(Validation) 알아보기 객체 검증은 정말 자주 하는 작업이지만 정말 중요한 작업이기도 하다. Annotation만 붙일 것이 아니라, 어떻게 동작하는지 또 어떻게 깔끔한 유효성 검사를 할 수 있는지 알아보자. Intro 일반적 애플리케이션의 Validation 검시 시, 아래와 같은 문제를 갖고 있다. 애플리케이션 전체에 분산되어 있다. 코드 중복이 심하다. 비즈니스 로직에 섞여있어 로직 추적이 어렵고, 복잡해진다. Bean Validation 위와 같은 문제를 해결하기 위해 Java에서는 Bean Validation이라는 유효성 검사 프레임워크를 제공해준다. 도메인 모델에 어노테이션으로 정의할 수 있다. dependency 추가 org.springframework.boot spring-boot-starter-validatio.. 2021. 8. 15.
[Spring] Transactional 어노테이션 이해 및 사용하기 다양한 옵션들을 잘 모르고 @Transactional 을 사용하다 보니 다양한 상황을 고려하지 못하고 개발하는 경우가 있다. 무작정 사용하지 말고, 이해하고 사용하도록 하자! 트랜잭션 비즈니스 로직에서 쪼개질 수 없는 하나의 작업 단위. 원자성(Atomicity) 한 트랜잭션 내에서 실행한 작업들은 하나로 간주. (모두 성공 or 모두 실패) 일관성(Consistency) 트랜잭션은 일관성 있는 데이터베이스 상태를 유지. 격리성(Isolation) 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않게 격리. 영속성(Durability) 트랜잭션을 성공적으로 마치면, 결과가 항상 영속적으로 보관되어야 함. Spring에서 트랜잭션 처리 보통 @Transactional 어노테이션을 선언하여 사용한다. 동작방.. 2021. 8. 3.
[Spring] WebFlux - Mono의 동작방식과 block() *토비의봄 12회, 13회 를 바탕으로 정리하였습니다 SpringWebflux Mono Webflux의 대표적 return 타입 파라미터를 한번에 전달하고, 한번에 받아온다. Mono 안에 들어가서 이를 반환하다. (일종의 컨테이너 느낌, List, Optional, Stream 등..) @GetMapping("/rest") public Mono rest(int idx) { String s = "Hello"; Mono m = Mono.just("Hello"); //Mono가 제공하는 기능들 사용이 가능해짐 return Mono.just("hello"); } Publisher는 Subscriber가 구독하지 않으면 데이터를 전송하지 않는다. Mono로 리턴하면 그때 Spring 자체에서 Subscribe .. 2021. 3. 1.