728x90
# Netty프레임워크에 대한 기초적인 개념과 Socket 통신과의 차이점에 대하여 알아본다.
Socket 통신
# 자바는 태어날때부터 Java.net을통해 socket프로그래밍 방식을 제공했다.
Socket 통신을 하기위해서 우선 소켓생성 -> 포트에 bind 하고 accept 해야하며 그후 input output stream을 얻습니다.
그후 쓰레드를 할당받아 read 및 write 과정을 거쳐 패킷을 전송합니다.
이렇게 bindng ,accept ,read ,write 과정을 직접 모두 구현해야하는 번거로움이 존재합니다.
그러나 Netty를 사용하면 이러한 과정(read,write)을 조금더 쉽게 구현하게 도와줍니다.
Netty의 구성요소
- Channel, EventLoop, EventLoopGroup
- channel
- i/o(bind,connect,read,write) 작업을 수행하는 요소 또는 네트워크 연결 - EventLoop
- Channel의 i/o를 처리 , 수명주기 동안 한 Thread에 바인딩
- Channel은 생명주기 동안 하나의 EventLoop에 바인딩
- EventLoop는 여러 Channel을 할당받아 처리할 수 있음 - EventLoopGroup
- N개의 EventLoop를 포함한 그룹
- ChannelHandler
- Channel의 I/O를 처리
- ChannelInboundHandler, ChannelOutboundHandler 로 나뉨 - ChannelInboundHandler
- Channel의 입력 데이터를 처리
- Method List
- channelRegistered
- channelUnregistered
- channelActive
- channelInactive
- channelReadComplete
- channelRead 가장많이 호출되며 받은 데이터에 대한 비즈니스로직은 해당 method에 구현 // channel read 구현인지 해당 메소드에 구현인지는 추후 찾아봐야겠다.
- useEventTriggered
- channelWritabilityChanged
- excepteionCaught - ChannelOutboundHandler
- Channel의 출력 데이터를 처리
- Method List
- bind
- connect
- disconnect
- close
- deregister
- read
- write
- flush - ChannelPipeline, ChaanelHandlerContext, ChannelInitializer
- ChannelPipeline
- ChannelHandler 이벤트 체인 관리
- Channel 생성 시 자동으로 할당
- ChannelHandlerContext
- ChannelHandler와 ChannelPipeline 간 연결을 나타냄
- ChannelHandler를 ChannelPipeline에 추가 시 할당
- ChannelInitializer
- 여러 ChannelHandler를 ChannelPipeline에 할당하기 위한 클래스
- Channel 생성시 호출
Bootstrap 과 , ServerBootstrap
# 애플리케이션의 동작 및 설정을 담당하는 헬퍼 클래스
- EventLoopGroup
- 소켓 입출력 모드
- EventHandler
- 서버 소켓 옵션 설정
- Bootstrap = Client
- ServerBootstrap = Server
즉,
- 네티는 네트워킹 도메인에서 가장 유명한 자바 프레임워크로 기반 구현의 복잡성을 단순한 추상화로 감춰 개발자가 어플리케이션 구현 영역에 집중할 수 있도록 도와준다.
- 블로킹/논블로킹 방식의 모두 지원
- 코어 자바 API보다 높은 처리량과 짧은 지연 시간. 풀링/재사용을 통한 리소스 소비 감소, 메모리 복사 최소화
728x90
'기초지식 > 네트워크' 카테고리의 다른 글
gRPC 프레임워크란 ? (0) | 2023.02.08 |
---|---|
RPC통신이란? (0) | 2023.02.08 |