Java NIO 와 동기 non-blocking + CPU 자원

Java 2023. 11. 15. 23:37

Java NIO (new IO) 를 이용한 Server - Client 의 동작을 동기 / 비동기, blocking / non-blocking 관점에서 알아보겠다. 참고로 java.nio 패키지에 존재하는 selector 는 다음 포스팅에서 다루겠다. Java IO 와 다르게 Java NIO 는 non-blocking 하게 동작할 수 있는 옵션이 존재한다. -> ServerSocketChannel::configureBlocking 메서드를 호출해주고 파라미터 값으로 false 를 전달한다. 해당 옵션을 사용하면, accept 와 read 에서 blocking 되지 않고 바로 넘어간다. 각각 null, 0 을 리턴해버린다. accept 의 예시 코드를 보며 계속 하겠다. 즉, non-blocking mod..

Article Thumbnail
Java IO 와 동기 blocking + CPU 자원

Java 2023. 11. 15. 21:14

이번 포스팅에서는 Java IO 를 이용한 Server - Client 의 동작에서 동기 / 비동기, blocking / non-blocking 관점과 CPU 자원 소모를 알아보겠다. server side accept 서버를 구동하면 blocking 되는 첫번째 포인트이다. 클라이언트에서 연결 요청이 올때까지 blocking 된다. read 클라이언트에서 요청 데이터를 보내서 서버 버퍼에 도착할 때까지 blocking 된다. write 서버에서 클라이언트로 보낼 응답 데이터를 서버 OS 네트워크 버퍼에 적재를 완료할 때까지 blocking 된다. -> accept, read 와 다르게 클라이언트의 시그널을 기다리는 것은 아니다. client side connect 클라이언트가 서버에 연결될 때까지 blo..

Article Thumbnail
Spring 은 SOLID 원칙을 잘 지키도록 도와준다.

Spring/Core 2023. 11. 14. 22:18

이번 포스팅 주제는 개인적으로 생각하는 Spring 의 철학입니다. 들어가기 앞서 SOLID 원칙에 대해 살짝 알아보고 가봅시다. SRP (Single Responsibility Principle) 단일 책임 원칙입니다. 하나의 클래스는 하나의 책임만 가져야 한다. 다른 말로는 클래스가 변경되는 이유는 한가지여야 한다 입니다. OCP (Open / Close Principle) 개방 폐쇄 원칙입니다. 풀어서 보면, 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 입니다. 좀더 쉽게 보자면, 확장에는 열려있다. -> 애플리케이션의 요구 사항이 변경될 때, 이 변경에 맞게 새로운 동작을 추가해 모듈을 확장할 수 있다. 수정에 닫혀있다. -> 기존의 소스 코드를 수정하지 않아도 모듈의 기능..

Article Thumbnail
Reactive Stream

Spring Reactive Stack/Reactive Streams 2023. 11. 8. 23:47

본격적으로 Reactive Stream 에 대해 알아보겠다. (by java.util.concurrent.Flow) Publisher Reactive Stream 의 Publisher 이다. - publisher 는 데이터 혹은 이벤트(메시지)를 제공한다. subscribe - publisher 에 subscriber 를 등록할 수 있다. (다수를 등록할 수 도 있다.) Subscriber Reactive Stream 의 Subscriber 이다. Subscriber 는 Publisher 로 부터 다양한 이벤트가 들어오는 채널을 구현해야한다. 참고 publisher 에서 subscriber 에게 데이터 혹은 이벤트를 전달하는 방식은 push 방식이다. onSubscribe - publisher 에서 호출..

Article Thumbnail
Reactive Programming (Reactive stream)

Spring Reactive Stack/Reactive Streams 2023. 11. 8. 00:58

지난 포스팅(Reactive manifesto) 에 이어 작성한다. Reactive Programming (반응형 프로그래밍) 이란.. 비동기 이벤트 처리 및 데이터 스트림 개념을 기반으로 하는 선언적 프로그래밍 패러다임이다. 위의 정의를 대충 느끼지말고 정확하게 의미를 짚어서 이해를 해보자.. 그럼, 알아야할 개념을 한단계씩 알아가보겠다. 고차 함수 (High Order Function) 란.. 함수를 매개변수로 받거나 함수를 리턴하는 함수를 뜻한다. 일급 객체 (First Class Object) 란.. - 변수에 할당할 수 있어야한다. - 객체의 인자로 넘길수 있어야한다. - 객체의 리턴 값으로 리턴할 수 있어야한다. 참고 자바 8 이전에서는 함수가 일급 객체에 해당되지 않았지만.. 자바 8 이후 ..

Reactive Manifesto (Reactive System Guide)

Spring Reactive Stack/Reactive Streams 2023. 11. 6. 23:38

이번 포스팅의 주제는 Reactive Manifesto - Published on September 16 2014. (v2.0) 이다. https://www.reactivemanifesto.org/ The Reactive Manifesto Responsive: The system responds in a timely manner if at all possible. Responsiveness is the cornerstone of usability and utility, but more than that, responsiveness means that problems may be detected quickly and dealt with effectively. Responsive systems www.rea..

Article Thumbnail
Marble diagrams

Spring Reactive Stack/Reactor 2023. 11. 5. 18:32

Marble Diagram 이란.. projectreactor 의 Reactor 를 사용하면 자주 보이는 다이어그램이다. Marble Diagram 은 Mono 와 Flux 의 연산자 동작을 시각적으로 보여주기 위함이며, javadoc 전체에서 쉽게 볼 수 있을 것이다. Marble Diagram 읽는 법 위의 화살표는 시간의 흐름을 나타낸다. 왼쪽에서 오른쪽 방향으로 시간 순서이다. 위 다이어그램에서 도형은 파이프라인을 지나는 하나의 element 라 보면된다. 세로 선은 onComplete 이벤트를 뜻한다. C 다이어그램에서는 타임라인에 "X" 표시가 있는데 이는 onError 이벤트가 발생되었음을 나타낸다. D 다이어그램에서는 타임라인에 element 만 존재하고, 이벤트는 발생하지 않아서 종료 되..

Article Thumbnail
Kafka 6

Message Broker 2023. 9. 25. 20:41

공부한 개념을 한 문장씩 쭉 세워본다. 멱등성 프로듀서.. 멱등성 프로듀서는 동일한 데이터를 여러번 전송하더라도 카프카 클러스터에 한번만 저장됨을 보장하는 프로듀서이다. 기본 프로듀서는 적어도 한번 전달됨을 보장한다. (At least once) 그래서 카프카 클러스터에 중복 적재될 수 있다는 말이다. 예를 들면, 프로듀서가 send 를 통해 데이터를 브로커로 전달하고, 브로커는 정상 적재를 하였으나.. 모종의 이유로 브로커가 프로듀서로, 적재 완료 응답메시지가 정상 전달되지 않아서 프로듀서는 데이터를 재전송하게되는 상황이 있다. 하지만, 이러한 상황은 극히 드문 상황이므로 두려워하지 않아도 된다. 멱등성 프로듀서 동작 방식.. 멱등성 프로듀서는 데이터를 브로커로 전달할 때 프로듀서의 고유 ID(PID)..