본문 바로가기
728x90

전체 글101

Netty - 2. 핵심 구성 요소(채널, 채널파이프라인, 이벤트, 핸들러) 안녕하세요. Netty는 비동기 이벤트 기반 네트워크 애플리케이션 프레임워크로 만들어주는 핵심 구성 요소를 알아보겠습니다. 1. Channel & Channel Pipeline Netty의 채널은 이름처럼 Java의 NIO를 기반으로 합니다. 채널은 네트워크 소켓이나 read, write, connect, bind 같은 I/O작업을 수행할 수 있는 컴포넌트와 연결할 수 있는 연결점 입니다. 이 채널에서 발생한 모든 이벤트는 채널파이프라인을 따라 이동합니다. 2. Event & Handler Netty는 네트워크 송수신에 관련된 일련의 일들을 각종 이벤트로 추상화했습니다. 채널에서 발생하여 채널 파이프라인을 따라 흐르는 이벤트를 처리하는 인터페이스가 핸들러입니다. 네티는 이벤트를 인바운드 이벤트(Inbou.. 2023. 11. 29.
Nagle's Alghorithm (네이글 알고리즘) Nagle의 알고리즘은 TCP/IP 데이터 전송에 사용하는 알고리즘입니다. Nagle의 알고리즘은 네트워크를 통해 전송해야 하는 패킷 수를 줄여 TCP/IP 네트워크의 효율성을 향상시키는 수단입니다. 이 알고리즘의 핵심은 '가능하면 데이터를 나누어 보내지 말고 한꺼번에 보내라'는 원칙을 기반으로 합니다. small-packet problem (소형 패킷 문제)이 있습니다. 키 누른 것이 바로 전송되는(Telnet세션 같은) 애플리케이션은 크기가 1바이트에 불과한 작은 청크를 반복적으로 내보내는데요, 이 때 TCP 패킷에는 40바이트의 헤더가 있으므로, 1바이트의 청크에는 41바이트의 패킷이 생성됩니다. 그러므로 이런 반복적인 소형 패킷의 전송에 엄청난 오버헤드를 발생시키게 됩니다. 이런 문제를 방지하기 .. 2023. 11. 27.
Zero Copy Transfer (제로 카피 전송) 안녕하세요! 오늘은 Zero Copy Transfer에 대해 알아보겠습니다. 제로카피 전송이란? 데이터를 복사하거나 전송하는 과정에서 중간 버퍼를 사용하지 않고 데이터를 직접 전송하는 방법으로 데이터 이동을 최적화하고 시스템 성능을 향상시키기 위한 방법입니다. 먼저 전통적인 방법과 개선된 방법, 보다 개선된 방법까지 총 3단계를 거쳐 어떻게 달성하게 되었는지 확인해보겠습니다. 단계 1. 전통적인 방법 보통 우리는 파일을 읽고 전송한다면 아래와 같은 코드를 작성할 것입니다. File.read(fileDesc, buf, len); Socket.send(socket, buf, len); 이것은 내부적으로 아래와 같은 과정을 거치게 됩니다. 이 전통적인 과정에서는 총 두 개의 불필요한 작업이 있습니다. (파일을.. 2023. 11. 24.
Netty - 1. 개요 안녕하세요! 오래 전부터 관심이 있던 Netty 공부를 시작하게 되었습니다. 하나씩 차근차근 공부해봅시다! Netty 공식홈페이지에 대문짝만하게 써진 글이 있습니다. Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty는 비동기 이벤트 기반 네트워크 애플리케이션 프레임워크로, 유지보수 가능한 고성능 프로토콜 서버&클라이언트를 빠르게 개발할 수 있다. 여기에 Netty의 핵심 키워드가 모두 들어간 것 같습니다. 비동기 : Netty는 리액터 패턴을 통해 비동기 호출을 위한 API를 .. 2023. 11. 24.
분산 컴퓨팅의 오류 (Fallacies of distributed computing) 안녕하세요! 소프트웨어101 책을 보다가 ‘분산컴퓨팅의 오류’ 라는 아티클을 접하게 되었습니다. 당연하지만 새삼 놓치기 쉬운 부분이라고 생각하여 정리해봅니다. 위키피디아 : Fallacies of distributed computing — Wikipedia 오류1. 네트워크는 믿을 수 있다. 과거에 비해 네트워크가 좋아졌다고 하지만 여전히 네트워크는 믿을 수 없습니다. 네트워크는 신뢰하기 어렵기 때문에 타임아웃, 서킷브레이커 같은 개념들이 있는 것입니다. ‘마이크로서비스 아키텍쳐’같이 네트워크에 의존할 수록 시스템의 신뢰도는 잠재적으로 떨어질 가능성이 있습니다. 오류2. 레이턴시는 0이 아니다. t_remote는 t_local보다 클 수밖에 없고 모든 분산 아키텍처에서 레이턴시는 0이 아닙니다. (보통 .. 2023. 11. 6.
728x90