개발서적읽기/Spring in Action 제 5판
-
[스프링 인 액션] Chapter 12 - 리액티브 데이터 퍼시스턴스 :: 리액티브 몽고DB 리퍼지터리 작성하기개발서적읽기/Spring in Action 제 5판 2020. 10. 10. 02:18
NoSql 중 하나인 몽고DB는 문서형 DB다. 몽고DB는 BSON(Binary JSON) 형식의 문서로 데이터를 저장하며, 다른 DB에서 데이터를 쿼리하는 것과 거의 유사한 방법으로 문서를 쿼리하거나 검색할 수 있다. 몽고DB를 스프링 데이터로 사용하는 방법은 JPA나 카산드라를 스프링 데이터로 사용하는 방법과 크게 다르지 않다. 즉, 도메인 타입을 문서 구조로 매핑하는 애노테이션을 도메인 클래스에 지정한다. 그리고 JPA나 카산드라에서 알아보았던 것과 동일한 프로그래밍 모델을 따르는 Repository Interface를 작성하면 된다. ■스프링 데이터 몽고DB 활성화하기 리액티브 스프링 데이터 몽고DB 스타터 의존성을 추가하자. org.springframework.boot spring-boot-st..
-
[스프링 인 액션] Chapter 12 - 리액티브 데이터 퍼시스턴스 :: 스프링 데이터의 리액티브 개념 이해하기개발서적읽기/Spring in Action 제 5판 2020. 10. 9. 17:51
이전 포스팅에서는 스프링 WebFlux를 사용해서 리액티브하고 블로킹이 없는 컨트롤러를 생성하는 방법을 알아보았다. 그러나 같이 작동되는 다른 컴포넌트도 블로킹이 없어야 진정한 블로킹 없는 컨트롤러가 될 수 있다. 만일 블로킹 되는 리퍼지터리에 의존하는 스프링 WebFlux 리액티브 컨트롤러를 작성한다면, 이 컨트롤러는 해당 리퍼지터리의 데이터 생성을 기다리느라 블로킹될 것이다. 따라서 컨트롤러로부터 데이터베이스에 이르기까지 데이터의 전체 flow가 리액티브하고 블로킹되지 않는 것이 중요하다. ■스프링 데이터의 리액티브 개념 이해하기 스프링 데이터는 Kay 릴리즈 트레인부터 Reactvie Repository의 지원을 제공하기 시작했다. Reactvie Repository는 카산드라, 몽고DB, 카우치베..
-
[스프링 인 액션] Chapter 10 - 리액터 개요 :: 리액티브 오퍼레이션 적용하기개발서적읽기/Spring in Action 제 5판 2020. 10. 4. 21:32
Flux와 Mono는 리액터가 제공하는 가장 핵심적인 구성 요소(리액티브 타임)다. 그리고 Flux와 Mono가 제공하는 오퍼레이션들은 두 타입을 함께 결합하여 데이터가 전달될 수 있는 파이프라인을 생성한다. Flux와 Mono에는 500개 이상의 오퍼레이션이 있으며, 각 오퍼레이션은 다음과 같이 분류될 수 있다. 생성 오퍼레이션 조합 오퍼레이션 변환 오퍼레이션 로직 오퍼레이션 500개 이상의 오퍼레이션 모두를 살펴보면 좋겠지만, 분량이 많아서 그렇게 하기는 어렵다. 따라서 여기서는 가장 유용한 몇 가지 오퍼레이션을 선정하였다. 우선, 생성 오퍼레이션부터 시작해 보자. ■리액티브 타입 생성하기 스프링에서 리액티브 타입을 사용할 때는 Repository나 Service로부터 Flux나 Mono가 제공되므로..
-
[스프링 인 액션] Chapter 10 - 리액터 개요 :: 리액터 시작하기개발서적읽기/Spring in Action 제 5판 2020. 10. 3. 22:20
리액티브 프로그래밍은 명령형 프로그래밍과 매우 다른 다른 방식으로 접근해야 한다. 즉, 일련의 작업 단계를 기술하는 것이 아니라 데이터가 전달될 파이프라인을 구성하는 것이다. 그리고 이 파이프라인을 통해 데이터가 전달되는 동안 어떤 형태로든 변경 또는 사용될 수 있다. 예를 들어, 사람의 이름을 가져와서 모두 대문자로 변경한 후 이것으로 인사말 메시지를 만들어 출력한다고 해보자. 아래는 명령형 프로그래밍 코드이다.String name = "name"; String capitalName = name.toUpperCase(); String greeting = "Hello, " + capitalName + "!"; System.out.println(greeting);이 경우느 각 줄의 코드가 같은 스레드에서 ..
-
[스프링 인 액션] Chapter 10 - 리액터 개요 :: 리액티브 프로그래밍 이해하기개발서적읽기/Spring in Action 제 5판 2020. 9. 27. 23:46
애플리케이션 코드를 개발할 때는 명령형(imperative)과 리액티브(reactive) 두 가지 형태로 코드를 작성할 수 있다. 명령형 : 순차적으로 연속되는 작업이며, 각 작업은 한 번에 하나씩 그리고 이전 작업 다음에 실행된다. 데이터는 모아서 처리되고 이전 작업이 데이터 처리를 끝낸 후에 다음 작업으로 넘어갈 수 있다. 리액티브 : 데이터 처리를 위해 일련의 작업들이 정의되지만, 이 작업들은 병렬로 실행된다. 그리고 각 작업은 부분 집합의 데이터를 처리할 수 있으며, 처리가 끝난 데이터를 다음 작업에 넘겨주고 다른 부분 집합의 데이터로 계속 작업할 수 있다. 리액터는 스프링 프로젝트의 일부분인 리액티브 프로그래밍 라이브러리다. 그리고 리액터는 스프링 5에서 리액티브 프로그래밍을 지원하는 데 필요한..
-
[스프링 인 액션] Chapter 9 - 스프링 통합하기 :: 스프링 통합의 컴포넌트 살펴보기개발서적읽기/Spring in Action 제 5판 2020. 9. 27. 23:45
통합 플로우는 하나 이상의 컴포넌트로 구성되며, 그 리스트는 아래와 같다. 채널(Channel) : 한 요소로부터 다른 요소로 메시지를 전달한다. 필터(Filter) : 조건에 맞는 메시지가 플로우를 통과하게 해준다. 변환기(Transformer) : 메시지 값을 변경하거나 메시지 페이로드의 타입을 다른 타입으로 변환한다. 라우터(Router) : 여러 채널 중 하나로 메시지를 전달하며, 대개 메시지 헤더를 기반으로 한다. 분배기(Spliter) : 들어오는 메시지를 두 개 이상의 메시지로 분할하며, 분할된 각 메시지는 다른 채널로 전송된다. 집적기(Aggregator) : 분배기와 상반된 것으로 별개의 채널로부터 전달되는 다수의 메시지를 하나의 메시지로 결합한다. 서비스 액티베이터(Service act..
-
[스프링 인 액션] Chapter 9 - 스프링 통합하기 :: 간단한 통합 플로우 선언하기개발서적읽기/Spring in Action 제 5판 2020. 9. 26. 20:19
많은 애플리케이션은 외부 시스템과 연결하여 작업을 수행한다. 외부 시스템에서 데이터를 읽거나 쓸 때, 애플리케이션에서 필요한 형태로 변경하기 위해 특별한 데이터 처리 플로우가 필요할 수 있다. 이번 장에서는 데이터 이동을 처리하는 통합 패턴을 스프링 통합(Spring Integration)을 통해 알아볼 것이다. 각 통합 패턴은 하나의 컴포넌트로 구현되며, 이것을 통해서 파이프라인으로 메시지가 데이터를 운반한다. 스프링 구성을 사용하면 데이터가 이동하는 파이프라인으로 컴포넌트들을 조립할 수 있다. 우선 스프링 통합 사용 시의 기능과 특성을 보여주는 간단한 통합 플로우를 정의해보자.애플리케이션은 통합 플로우를 통해서 외부 리소스나 애플리케이션 자체에 데이터를 수신 또는 전송할 수 있으며, 스프링 통합은 이..
-
[스프링 인 액션] Chapter 8 - 비동기 메시지 전송하기 :: 카프카 사용하기개발서적읽기/Spring in Action 제 5판 2020. 9. 18. 01:11
아파치 카프카는 ActiveMQ, Artemis, RabbitMQ와 유사한 메시지 브로커다. 그러나 아파치 카프카만의 특징도 가지고 있다. 카프카는 높은 확작성을 제공하는 클러스터(cluster)로 실행되도록 설계되었다. 그리고 클러스터의 모든 카프카 인스턴스에 걸쳐 토픽을 파티션으로 분할하여 메시지를 관리한다. RabbitMQ가 거래소와 큐를 사용해서 메시지를 처리하는 반면, 카프카는 토픽만 사용한다. 카프카의 토픽은 클러스터의 모든 브로커에 걸쳐 복제된다. 클러스터의 각 노드(브로커)는 하나 이상의 토픽에 대한 리더(leader)로 동작하며 토픽 데이터를 관리하고 클러스터의 다른 노드로 데이터를 복제한다. 각 토픽은 여러 개의 파티션으로 분할될 수 있다. 이 경우 클러스터의 각 노드(브로커)는 한 토..