본문 바로가기

Spring

(183)
[Spring Cloud] Connect - 활용 이전 장(링크) 에서는 Kafka의 Connect를 설치하는 방법에 대해서 알아보았다. 이번 장에서는 Source Connect와 Sink Connect를 사용하는 방법에 대해서 알아본다. 모든 소스 코드는 깃 허브 (링크) 에 올려두었다. 우리는 MariaDB의 Connect Source와 Connect Sink를 사용하여 아래와 같은 구조를 구축할 것이다. Connect Source는 데이터를 제공하는 쪽으로부터 데이터를 전달받아 Kafka Cluster로 전달하는 역할을 하고 Connect Sink는 Kafka Cluster를 대상 저장소에 전달하는 역할을 한다. 이전에 Producer와 Consumer를 사용하여 Kafka Cluster를 통해서 데이터를 제공하고 소비하는 작업을 진행했었다. 이번..
[Reactive Programming] 자바 & 스프링 비동기 기술 - Modern Spring WebFlux Series - 8 지금까지 우리는 자바의 Future(링크) 와 스프링의 Async(링크) 를 학습하면서 자바와 스프링의 비동기 기술에 대해서 알아보았다. 이번 장에서는 자바와 스프링의 비교적 최신 비동기 기술에 대해서 알아보도록 한다. 모든 코드는 깃허브 (링크)의 테스트 코드에 있으므로 필요하다면 참고하도록 한다. 개요 비동기 서블릿 출시 처음으로 비동기 서블릿이 언급되기 시작한 것은 스프링 3.0 버전부터이며 아래와 같은 기능을 가지고 있었다. HTTP Connection은 논블로킹 IO 서블릿 요청 읽기, 응답 쓰기는 블록킹 비동기 작업 시작 즉시 서블릿 스레드 반납 비동기 작업이 완료되면 서블릿 스레드를 재할당 하여 마무리 비동기 서블릿 컨텍스트 이용(AsyncCon..
[Spring Cloud] Connect - 설치 이전 장(링크) 에서는 Kafka의 Producer와 Consumer를 활용하여 데이터를 전송하는 방법에 대해서 알아보았다. 이번 장에서는 Kafka의 Connect를 사용하기 위해 설정하는 방법에 대해서 알아본다. 모든 소스 코드는 깃 허브 (링크) 에 올려두었다. Kafka Connect 우리는 일반적으로 데이터를 어느 한 쪽에서 다른 쪽으로 이동시키기 위해 코드를 작성해서 하나씩 전달한다. 하지만 Kafka Connect를 사용하면 코드 작성없이 Configuration 정보를 통해서 데이터의 Import와 Export가 가능해진다. 단일 클러스터를 위한 Standalone mode와 다중 클러스터를 위한 Distribution mode를 지원한다. RESTful API를 통해 이러한 기능들을 지원..
[Spring Cloud] Kafka - Producer & Consumer 이전 장(링크) 에서는 Kafka를 소개하고 설치해보는 시간을 가졌다. 이번 장에서는 Kafka의 Producer와 Consumer를 사용하여 통신하는 방법에 대해서 알아본다. 모든 소스 코드는 깃 허브 (링크) 에 올려두었다. Producer & Consumer Zoopeeker 실행 Kafka를 설치하기 위해 다운받은 압축파일의 압축이 풀린 경로로 이동하여 아래의 커맨드를 입력한다. $ ./bin/zookeeper-server-start.sh ./config/zookeeper.properties 아래의 이미지와 같이 출력된다면 정상적으로 Zookeeper가 실행된 것이다. Kafka 실행 Zookeeper를 실행시킨 경로에서 아래의 커맨드를 입력한다. ./bin/kafka-server-start.sh..
[Spring Cloud] Kafka - 소개 및 설치 이전 장(링크) 에서는 마이크로서비스 간의 통신을 다루면서 데이터 동기화의 한계에 대해서 알아보았다. 이번 장에서는 이런 한계를 돌파하기 위해 사용할 기술인 Apache Kafka가 무엇인지 알아보고 설치하는 방법에 대해서 알아본다. 모든 소스 코드는 깃 허브 (링크) 에 올려두었다. Intro Kafka는 Apache Software Foundation에서 Scalar 언어로 된 오픈 소스 메시지 브로커 프로젝트다. 링크드인에서 개발하였으며 2011년 오픈 소스화 하였으며 이후 Kafka를 개발하던 엔지니어들이 2014년 11월 Confluent라는 회사를 창립하였다. Kafka는 실시간 데이터 피드를 관리하기 위해 통일된 높은 처리량, 낮은 지연 시간을 지닌 플랫폼을 제공하는 장점이 인정되어 많은 글..
[Reactive Programming] 자바 & 스프링 비동기 기술 - @Async Spring WebFlux Series - 7 이전 장(링크) 에서는 자바와 비동기 기술 중 기본이 되는 Future에 대해서 알아보았다. 이번 장에서는 스프링의 비동기 기술 중에서 가장 많이 사용되는 @Async 애노테이션에 대해서 알아본다. 모든 코드는 깃허브 (링크)의 테스트 코드에 있으므로 필요하다면 참고하도록 한다. 테스트 코드 구성 @SpringBootApplication 애노테이션을 사용하여 테스트를 진행할 때 스프링 부트를 통해 테스트를 진행하도록 구현하였고 비동기 작업이 가능하도록 @EnableAsync 애노테이션을 사용하였따. ApplicationRunner을 스프링 빈으로 등록하여 프로젝트가 실행되면서 run() 메서드가 호출되도록 구현하였다. 우리가 작성하는 테스트 코드는 run()..
[Reactive Programming] 자바 & 스프링 비동기 기술 - Future Spring WebFlux Series - 6 이번 장에서는 자바와 스프링의 비동기 개발 기술 중 기본이 되는 Future에 대해서 알아본다. 모든 코드는 깃허브 (링크)의 테스트 코드에 있으므로 필요하다면 참고하도록 한다. 개요 리액티브 프로그래밍을 Flux와 Mono를 사용하여 몇가지 API를 작성하는 것만으로 이해했다고 보기는 힘들다. 물론 보는 관점에 따라 다를 수는 있지만 핵심 기술을 이해해야 리액티브 프로그래밍을 제대로 이해하고 사용할 수 있다. 리액티브 프로그래밍을 옵저버 패턴을 사용하여 역할이 다른 관찰자와 관찰 대상자를 나누어 구현하는 구조만을 말하는 것이 아니라 비동기적인 동작 환경에서 어떠한 의미를 가지는지 살펴봐야 한다. 스프링이 10년 이상 유지한 MVC 방식에서 어떠한 문제를 해..
[Spring Cloud] Synchronization Threshold 이번 장에서는 우리가 지금까지 다루었던 마이크로서비스 간 통신과 데이터 동기화의 한계에 대해서 다뤄본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. Scale Out Microservice 우리는 지금까지 Feign Client와 Rest Template을 사용하면서 서비스가 여러개로 분산되더라도 로드밸런싱을 통해서 분산된 서비스들에게 요청을 보낼 수 있도록 구현하였다. 하지만 Scale Out된 서비스들 간의 데이터 동기화 문제는 발생하게 된다. 예를 들어 아래와 같이 유저 서비스는 FeignClient를 사용하여 분산되어 있는 주문 서비스에게 데이터를 조회한다고 가정해본다. 우리는 따로 동기화 작업을 하지 않았기 때문에 60001 주문 서비스에 요청할 때와 60002 주문 서비스에 요청할 때 ..