DevTales
close
프로필 배경
프로필 로고

DevTales

  • 분류 전체보기 (83)
    • Lang (49)
      • Java (21)
      • Kotlin (3)
      • C (12)
      • Go (9)
      • Python (4)
    • Spring (13)
      • Data (2)
      • Kafka (2)
      • Security (0)
      • Webflux (9)
    • Infra (9)
      • Database (3)
      • Middleware (0)
      • Container (1)
      • OS (5)
    • Build (0)
    • CS (3)
      • Network (1)
      • Security (1)
      • Architecture (1)
    • Leaner's High (5)
    • 기타 (4)
  • 홈
  • 방명록
[Java] 비동기 I/O 작업

[Java] 비동기 I/O 작업

Proactor Pattern 지난 포스팅에서 Selector와 Reactor 패턴에 대해 다뤘습니다.또한, Reactor 패턴을 활용하여 I/O Multiplexing이 가능한 EventLoop를 구현해 보았습니다. 하지만 Reactor 패턴에는 몇 가지 한계점이 존재합니다. 이번 글에서는 이러한 한계점과 그것을 극복한 Proactor 패턴에 대해 살펴보겠습니다. Reactor vs Proactor Reactor 패턴은 단일 쓰레드로 동기적으로 이벤트가 발생할 때마다 Selector가 이를 처리해야 합니다. 이로 인해, 트래픽이 과도하거나 이벤트 처리에 시간이 오래 걸리는 경우, 전체 시스템에 영향을 줄 수 있는 문제가 발생할 수 있습니다. 반면에, Proactor 패턴은 비동기적으로 I/O 작업을..

  • format_list_bulleted Lang/Java
  • · 2025. 11. 25.
  • textsms
[Java] Multiplexer

[Java] Multiplexer

I/O Multiplexing 이란? I/O Multiplexing이라는 기술은 여러 개의 입출력 작업을 동시에 처리하는 기법을 의미합니다. 일반적으로 하나의 프로세스(혹은 싱글 스레드)가 여러 개의 I/O 요청을 처리해야 할 때 사용됩니다. 대표적인 예로는 Netty와 Redis와 같은 고성능 네트워크 애플리케이션이 있습니다. 그렇다면 Java에서는 I/O Multiplexing을 어떻게 구현할 수 있을까요? Java에서는 I/O Multiplexing을 구현하기 위한 핵심 컴포넌트로 Java NIO의 Selector를 사용합니다. 또한 운영체제에 따라 Selector의 여러 가지 구현체를 제공합니다. 이 Selector를 사용하면 Java에서도 I/O Multiplexing이 가능한 EventLoop..

  • format_list_bulleted Lang/Java
  • · 2025. 11. 25.
  • textsms
[Java] CompletableFuture

[Java] CompletableFuture

자바에서의 비동기 처리 저번 글에서 동기 / 비동기, 블로킹 / 논블로킹에 대해 알아보았는데, 이번 글에서는 Java에서 비동기 작업을 처리하기 위한 강력한 클래스인 CompletableFutue에 대해 알아보겠습니다.CompletableFuture는 java.util.concurrent 패키지에 포함되어 있으며, Future 인터페이스와 CompletionStage 인터페이스를 구현하고 있는 클래스로 Java 8에서 추가된 기능입니다. 이로 인해 Lambda, Method reference 등 다양한 기능을 지원합니다. 이 글에서는 기존의 비동기 처리를 위해 사용하던 Future 인터페이스가 가지는 한계와 CompletableFuture가 그것을 어떻게 해결했는지, 그리고 CompletableFutur..

  • format_list_bulleted Lang/Java
  • · 2025. 11. 24.
  • textsms
[Java] 동기와 비동기, 블로킹과 논블로킹

[Java] 동기와 비동기, 블로킹과 논블로킹

동기와 블로킹은 다른건가요? 동기(Synchronous)와 블로킹(Blocking)은 개발을 하다 보면 흔히 접할 수 있는 개념들입니다.하지만 예전에는 이런 개념들을 막연히 알고 있었고, 그 차이점도 명확하게 이해하지 못했습니다.특히, '동기'와 '블로킹'이라는 개념을 혼동하며, 아래와 같이 생각했던 적도 있었습니다.동기(Synchronous)면 블로킹(Blocking) 아닌가? 동기/비동기, 블로킹/논블로킹은 애플리케이션의 성능과 효율성에 직결되기 때문에, 올바르게 이해하고 활용하기 위해서2가지 관점에서 자세히 살펴보겠습니다. 동기, 비동기란? 우선 동기,비동기, 블로킹, 논블로킹을 설명할 때 사용되는 단어들의 의미와동기, 비동기란 무엇인지 간단하게 확인하고 넘어가겠습니다. Caller : 작업을 ..

  • format_list_bulleted Lang/Java
  • · 2025. 11. 24.
  • textsms
[Java 21] (17) - I/O 2

[Java 21] (17) - I/O 2

표준 입출력과 File 표준 입출력 - System.in, System.out, System.err 표준 입출력은 콘솔(console, 도스창)을 통한 데이터 입력과 콘솔로의 데이터 출력을 의미합니다. 자바에서는 표준 입출력(standard I/O)을 위해 3가지 입출력 스트림, System.in, System.out, System.err을 제공하는데, 이 들은 자바 어플리케이션의 실행과 동시에 사용할 수 있게 자동적으로 생성되기 때문에 개발자가 별도로 스트림을 생성하는 코드를 작성하지 않고 사용이 가능합니다.아래의 System클래스의 소스에서 알 수 있듯이 in, out, err은 System클래스에 선언된 클래스 변수(static변수)입니다. 선언 부분만을 봐서는 out, err, in의 타입은 In..

  • format_list_bulleted Lang/Java
  • · 2025. 11. 21.
  • textsms
[Java 21] (16) - I/O 1

[Java 21] (16) - I/O 1

자바의 입출력 I/O란 Input과 Output의 약자로 입력과 출력, 간단히 줄여서 입출력이라고 합니다. 입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고 받는 것을 말합니다. 예를 들면 키보드로부터 데이터를 입력받는다듣가 System.out.println()을 이용해서 화면에 출력하는 것이 가장 기본적인 입출력의 예입니다. 스트림(stream) 자바에서 입출력을 수행하려면, 즉 어느 한쪽에서 다른 쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요한데 이것을 스트림(stream)이라고 정의했습니다. 스트림은 우리가 입출력을 쉽게 처리할 수 있게 도와줍니다.스트림이란 데이터를 운반하는데 사용되는 연결통로 스트림은 연속적인 데이터의 흐름을 물에 비유해..

  • format_list_bulleted Lang/Java
  • · 2025. 11. 19.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • ···
  • 9
  • navigate_next
전체 카테고리
  • 분류 전체보기 (83)
    • Lang (49)
      • Java (21)
      • Kotlin (3)
      • C (12)
      • Go (9)
      • Python (4)
    • Spring (13)
      • Data (2)
      • Kafka (2)
      • Security (0)
      • Webflux (9)
    • Infra (9)
      • Database (3)
      • Middleware (0)
      • Container (1)
      • OS (5)
    • Build (0)
    • CS (3)
      • Network (1)
      • Security (1)
      • Architecture (1)
    • Leaner's High (5)
    • 기타 (4)
최근 글
인기 글
최근 댓글
태그
  • #tucker의 go언어 프로그래밍
  • #R2DBC
  • #혼자 공부하는 C언어
  • #Netty
  • #Java의 정석
  • #비동기
  • #점프 투 파이썬
  • #java
  • #Kotlin In Action
  • #WebFlux
전체 방문자
오늘
어제
전체
Copyright © Kakao Corp. All rights reserved.
Designed by 티스토리

티스토리툴바