Netty 이벤트 루프 쓰레드에서 블로킹하면, BlockingOperationException이 발생할 수 있다.

회사에서 연동 중인 사우나 락커는 업체의 DCU를 통해 컨트롤 되며, 우리 서버는 Netty를 활용하여 통신을 하고 있다.

문제가 발생한 흐름은 다음과 같다.

1. dcu의 문제가됐든 우리 현장 서버의 문제가 됐던 읽기/쓰기 중 TImeOutException 혹은 DecodException 등이 발생한다.

2. 이러한 예외가 발생하면 채널을 닫는다.

3. 채널이 닫히면 최초 연결 시에 등록해둔 ChannelCloseEvent로 인해, reconnect 로직이 수행된다.

4. 연결과정에서 sync() 를 호출해 동기적으로 연결 결과를 기다리게 되는데, 여기서 BlockingOperationException이 발생하게 된다.

스크린샷 2024-09-06 오후 4.59.48.png