목록분류 전체보기 (181)
초보개발자 긍.응.성
개인적으로 Spring WebFlux를 공부한 적은 있었지만, 실제 프로젝트에 적용해본 경험은 없었다. 그러던 중 사내 레거시로 서버를 재개발할 기회가 생겼고, 상황과 조건이 맞아 SpringMVC로 개발중이었던 프로젝트를 WebFlux로 전환하게 되었다. 또한, 부서 내에서 WebFlux 경험을 공유하는 자리를 가졌었는데 스스로 공부가 많이되었기에, 이렇게 블로그에도 남긴다. WebFlux란? WebFlux는 Spring 5에 새롭게 추가된 Reactive-stack의 웹 프레임워크이다. WebFlux는 클라이언트와 서버에서 리액티브 애플리케이션 개발을 위한 논블로킹 리액티브 스트림을 지원한다. WebFlux 논블로킹으로 동작하는 웹 스택의 필요성 때문에 등장하게 되었다. 기존 SpringMVC의 Se..
현재 우리팀은 Java8을 사용중이다. 동료분이 JVM 버전을 11 업그레이드 하자는 제안이 있었고, 주요 변경 내용을 소개하는 중에 새로운 가비지 컬렉터를 지원한다는 내용이 있었다. Java11부터 experimental하게 ZGC를 사용가능하며 현재사용하는 G1GC보다 짧은 지연 시간을 갖도록 개선된 GC라고 들었다. GC에 대한 배경지식이 부족했던 터라 자료를 찾던 중 baeldung 아저씨의 블로그를 보게되었고, 이는 그 블로그의 내용의 정리한 글이다. JVM Garbage Collectors Garbage Collection(이하 GC)은 이름에서 알 수 있듯이 메모리의 garbage를 찾아 제거하는 역할을 한다. 실제 동작으로는 JVM 힙 메모리의 사용가능한 모든 Object를 트래킹하며 사용..
1.1 아카란 무엇인가? 아카는 액터 프로그래밍 모델, 실행 환경 그리고 확장 가능한 애플리케이션을 구축할 때 필요한 여러 지원 도구를 제공하는 툴킷. 1.2 액터: 간략한 정리 액터는 설정과 메시지 브로커(message vroker) 설치라는 부가 비용이 들지 않는 메시지(message queue)와 비슷하다. 액터는 프로그래밍 가능한 메시지 큐를 아주 작은 크기로 줄인 것이다. 각 액터는 메시지를 받기 전까지는 아무런 일도 수행하지 않는다. 액터가 받는 메시지는 생성된 다음에는 변경될 수 없다(불변 immutable) 액터는 한 번에 하나의 메시지를 받을 수 있으며, 메시지를 받을 때마다 어떤 동작을 수행한다. 액터가 수행하는 모든 것은 비동기적으로 실행된다. 1.3 확장성에 대한 두 가지 접근 방법..
리액터 프로젝트 필수 요소 목적 - 콜백 지옥, 깊게 중첩된 코드를 생략 가독성을 높이고 리액터 라이브러리에 의해 정의된 워크플로에 조합성(composability)를 추가 리액트 API 연산자로 실행 그래프를 제작 실제 구독을 만들기 전까지 아무 일도 발생하지 않으며 구독을 했을 때만 데이터 플로가 기동 비동기 요청의 결과를 효율적으로 처리가능 오류 처리 간단, 복원력 있는 코드 작성 가능 배압 제공 푸시 전용 : subscription.request(Long.MAX_VALUE) 풀 전용 : subscription.request(1) 풀-푸시 혼합 풀-푸시 모델 미 지원하는 이전 API 사용 시 예전 스타일의 배압 메커니즘 제공 리액터 추가 io.projectreactor reactor-core 3.2..
CompletionStage를 이용하는 자바 코어 라이브러리 RxJava와 같은 다양한 라이브러리 존재 코드 작성시 다양한 선택 가능 풀 방식과 푸시 방식 리액티브 초기 단계에서 모든 라이브러리의 데이터 흐름은 소스에서 구독자에서 푸시되는 방식이었다. 푸시 모델을 채택하는 가장 큰 이유는 요청하는 횟수를 최소화 하기 위해서이다. 반면 푸시 모델만 사용하는것은 기술적 한계가 있다. 메시지 기반 통신의 본질은 요청에 응답하는 것 프로듀서가 컨슈머의 처리 능력을 무시하면 전반적인 시스템 안정성에 영향을 미칠 수 있다 프로듀서 컨슈머 동작 케이스 1. 느린 프로듀서 빠른 컨슈머 동적으로 시스템의 처리량을 증가시키는 것은 불가능 (프로듀서가 따라와줘야함) 2. 빠른 프로듀서와 느린 컨슈머 프로듀서가 컨슈머가 처리..
관찰자(Observer) 패턴 Subject와 Observer 두 개의 인터페이스로 구성된다 Observer는 관찰자 이며, Subject는 주체이다. Observer는 Subject에 등록되며 Subject로 부터 알림을 수신한다. java.util 패키지에서 Observer, Observable 제공 JDK 1.0에 릴리즈, 제네릭이 없어 type safety 하지 못함 옵저버 패턴은 멀티스레드 환경에서 효율적이지 않다private final ExecutorService executorService = Executors.newCacheThreadPool(); public void notifyObservers(String event) { observers.forEach(observer -> { exec..