본문 바로가기

Spring18

Spring WebFlux Error Handling Spring WebFlux 의 Reactive Stream (Mono, Flux) 를 처리하다 보면 발생되는 예외 상황들을 어떻게 처리하면 좋을지 고민하게 된다. 발생되는 예외들을 throw 시켜서 GloabalExceptionHandler(Advice) 에서 통합적으로 처리해줄 수 있겠지만, 때론, 해당 예외들을 직접 처리해줘야 하는 경우도 있을 수 있다. 이번 게시글에선 해당 예외 등의 에러 처리를 어떻게 할 수 있을지 작성하고자 한다. onErrorReturn - 에러 발생 시 기본 값 사용하기 onErrorReturn 은 Reactive Stream 처리 과정 중 에러가 발생하였을 때 정해진 Fallback Value 를 반환하는 방식이다. public final Mono onErrorReturn.. 2021. 4. 12.
Spring Data R2DBC 연관관계 구현 - ManyToOne 지난 게시글은 OneToMany 연관관계 관계를 R2DBC 를 통해 어떤 식으로 구현할 수 있는지를 살펴보았다. 참고 - heesutory.tistory.com/34 Spring Data R2DBC 연관관계 구현 - OneToMany (2) 지난 번 작성된 R2DBC 에서 OneToMany 를 구현하는 부분을 이어서 작성한다. 지난 첫 게시글에선 DatabaseClient 로 별도의 Custom Repository 를 정의하였고, 해당 부분에서 Member 와 Order 를 JOIN 하여 처리하.. heesutory.tistory.com 이번 시간은 ManyToOne 관계를 한번 알아볼 수 있도록 해보겠습니다. 이번 게시글에서도 회원(Member) 와 주문(Order) 를 사용하여 구현해보도록 하겠습니다.. 2021. 4. 2.
Spring Data R2DBC 연관관계 구현 - OneToMany (2) 지난 번 작성된 R2DBC 에서 OneToMany 를 구현하는 부분을 이어서 작성한다. 지난 첫 게시글에선 DatabaseClient 로 별도의 Custom Repository 를 정의하였고, 해당 부분에서 Member 와 Order 를 JOIN 하여 처리하였다. 참고 - heesutory.tistory.com/33 Spring Data R2DBC 연관관계 구현 - OneToMany R2DBC 는 ORM 이 아니기 때문에 JPA 와는 다르게 지원되지 않는 기능들이 몇가지 있다. 대표적으로 연관관계 매핑이 그러하다. Spring Data R2DBC aims at being conceptually easy. In order to achieve this it.. heesutory.tistory.com 하지만 .. 2021. 3. 31.
Spring Data R2DBC 연관관계 구현 - OneToMany R2DBC 는 ORM 이 아니기 때문에 JPA 와는 다르게 지원되지 않는 기능들이 몇가지 있다. 대표적으로 연관관계 매핑이 그러하다. Spring Data R2DBC aims at being conceptually easy. In order to achieve this it does NOT offer caching, lazy loading, write behind or many other features of ORM frameworks. This makes Spring Data R2DBC a simple, limited, opinionated object mapper. JPA 사용자였다면, 다양한 연관관계를 어노테이션을 통해 명시해주고 JPQL, EntityGraph, QueryDSL 을 이용하여 조인하.. 2021. 3. 28.
Spring Data R2DBC 사용 Reactive Relational DataBase Connectivity (R2DBC) 는 기존 Blocking 기반의 RDB 를 Reactive 하게 사용할 수 있도록 API 를 제공한다. 기존 Spring WebFlux 에서 RDB 를 사용하는 경우 온전한 Reactive 한 구현을 하기 어려웠었다. (Blocking 기반 API 제공) 그렇지만, WebFlux 와 R2DBC 를 사용하는 경우 Reactive 한 느낌만 내는 것이 아니라, 애플리케이션이 온전히 Reactive 하게 동작할 수 있도록 지원한다. R2DBC 는 완전한 Reative RDB 사용을 위해 non-blocking I/O layer 위에 Database 유선 프로토콜 계층까지 완전히 새롭게 구현한 드라이버를 제공. R2DBC .. 2021. 3. 28.
Custom Validation 사용해보기 실제 애플리케이션을 개발하다 보면 어떤 객체의 값이 비었는지, 공백인지, 재대로 된 패턴에 맞는지 등의 유효성 검사를 빈번하게 사용해야 하는 경우가 많습니다. Spring 에서는 Java Bean Validation 을 이용하여 검사 대상 클래스에 어노테이션 기반 제약 조건을 선언하여 간결하게 유효성 검사를 할 수 있습니다. 의존성 ... dependencies { ... implementation("org.springframework.boot:spring-boot-starter-validation") ... } ... spring-starter-validation 의존성을 추가하여 사용 사용 예시 @NoArgsConstructor(access = AccessLevel.PRIVATE) public cla.. 2021. 3. 20.
빈 스코프 빈 스코프란? 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때 까지 유지된다고 학습했다. 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다양한 스코프를 지원한다. 싱글톤 - 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입 - 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. (생성과 초기화까지만 관여하고 끝낸다.) 웹 관련 스코프 request - 웹 요청이 들어오고 나갈 때까지 유지되는 스코프이다. session - 웹 세션이 생성되고 종료될 때까지 유지되는 스코프.. 2020. 12. 26.
빈 생명주기 콜백 빈 생명주기 콜백 시작 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링을 통해 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 알아보자 스프링 빈은 간단하게 다음과 같은 라이프사이클을 가진다. 객체 생성 → 의존관계 주입 (생성자 주입 제외) 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 한다. 그런데 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까? 스프링은 의존관계 주입이 완료되면.. 2020. 12. 23.
Spring 의존관계 자동 주입 다양한 의존관계 주입 방법 의존관계 주입은 크게 다음과 같이 4가지가 있다. 생성자 주입 수정자 주입 (Setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존관계를 주입 받는 방식이다. 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존 관계에 사용된다. 참고 ✓ 생성자가 딱 1개만 있으면 @Autowired 를 생략해도 자동 주입이 된다. (스프링 빈에만 해당) ✓ 생성자에선 null 값을 허용하지 않기 때문에 불변 및 필수 관계에 있어 사용한다. (자바 컨벤션) ✓ 생성자 주입은 해당 빈을 등록(생성)하는 단계에서 생성자가 호출되기에 해당 과정에서 의존 관계 주입이 된다. (자바 코드 생성자 호출) 수정자 주입 Setter 라 불리는 필드의.. 2020. 12. 21.
Spring Component Scan Component Scan 과 의존관계 자동 주입 현재까지 알아본(Spring Container, Bean 편) Spring Bean 을 등록할 때는 자바 코드의 @Bean 이나 XML 의 등을 통해서 설정 정보에 직접 등록할 Spring Bean 을 나열했다. 예제 속 등록해야할 빈의 개수는 몇개 되지 않아 문제가 없었지만, 실제 등록해야할 빈의 개수가 수십, 수백개가 되면 등록하기 굉장히 불편하고, 설정 정보도 커지고, 누락하는 문제도 발생한다. 따라서, Spring 은 설정 정보가 없어도 자동으로 Spring Bean 을 등록하는 Component Scan 이라는 기능을 제공한다. 또한, 각 Component 에 필요한 의존관계도 자동으로 주입해주는 @Autowired 기능도 제공한다. Compon.. 2020. 12. 13.