본문 바로가기

Java/Netty

(3)
ChannelGroup과 GlobalEventExecutor ChannelGroup 생성 시 왜 GlobalEventExecutor 를 사용하는지, GlobalEventExecutor 가 어떤건지 여쭤보셨습니다.  GlobalEventExecutor 가 단일 스레드 싱글톤 EventExecutor라는 내용은 알고 있었지만 어떻게 동작하는지는 알고 있지 않아서 이에 대해 알아보고자 합니다. ChannelGroup우선 ChannelGroup은 채널을 저장할 수 있으며, Channel이 닫히면 ChannelGroup 컬렉션에서도 자동으로 제거되는 Netty 제공 인터페이스입니다. 여러 Channel을 그룹화하여 관리하는 인터페이스라고 볼 수 있습니다.ChannelGroup 은 스레드 안전하며, 하나의 channel은 여러 ChannelGroup에 속할 수 있고, 소속된..
TCP Keepalive TCP 연결이 설정된 이후 정상적인 상황이라면 FIN 메시지를 송수신 했을 때, 연결이 해제됩니다.하지만 전원이 차단되거나 오류에 의해 오동작을 하면 하나의 단말만 연결이 유지되는 Half Open Connection이 발생할 수 있습니다. 이러한 소켓이 꽉차면 정상적인 Connection요청에 응답을 할 수 없는 상황이 발생하게 됩니다.이런 현상을 막기 위해 Keep-alive라는 기능이 있습니다. TCP KeepaliveTcp Keep-alive는 한 번 맺은 세션을 요청이 끝나더라도 유지해주는 기능입니다. tcp_keepalive_time으로 설정한 keepalive timeout 시간이 지나면 서버에서 Keepalive 확인 패킷을 보냅니다.이 패킷에 대한 응답(ACK 패킷)을 받으면 타이머는 원..
Netty의 이벤트 루프 이해하기 이벤트 루프 기반 프레임워크 동작 방식은 단일 스레드 이벤트 루프와 다중 스레드 이벤트 루프로 나눌 수 있습니다.Netty 동작 방식 이해를 위해 두 가지 차이점을 비교해보겠습니다.   단일 스레드 이벤트 루프이는 이벤트를 처리하는 스레드가 하나인 상태를 의미합니다. 이벤트 루프의 구현이 단순하고 예측 가능한 동작을 보장합니다. 하나의 스레드가 이벤트 큐에 입력된 이벤트를 처리하므로 이벤트가 발생한 순서대로 처리할 수 있습니다.단점 1 - 다중 코어 CPU를 효율적으로 사용하지 못함단점 2 - 이벤트 메서드에 처리 시간이 오래 걸리는 작업이 있는 경우 다음 이벤트 처리 지연 발생대표적인 프레임워크 -  Node.js 다중 스레드 이벤트 루프이벤트를 처리하는 스레드가 여러개입니다.  단일 스레드 이벤트 루..