Skip to Content
Suffering builds character
아카이브23.스프링 웹플럭스Java NIO, 네티논블로킹 소켓4.채널

4.채널 

파일이나 네트워크 소켓, 하드웨어 등을 통해 읽기 및 쓰기와 같은 I/O 작업이 수행되는 양방향 흐름

💡
Tip

채널, Channel

“Channel”은 영어로 “수로”, “통로” 또는 “전달 경로”를 의미 정보나 데이터가 한 지점에서 다른 지점으로 흐르는 경로를 나타내는 데 사용

네트워크 통신에서 “채널”은 데이터가 전송되는 경로 또는 흐름을 의미 ex. 비디오 스트리밍이나 네트워크 통신에서 데이터가 흐르는 경로를 가리킴

2. 대표적인 Channel 클래스

2-1. FileChannel

파일에 읽고 쓰기를 수행할 때 사용되는 객체

2-2. SocketChannel, ServerSocketChannel, DatagramChannel(UDP)

네트워크를 통해 데이터를 읽고 쓸 때 사용되는 객체

기존 Java I/O에서는 입출력을 위해 스트림(Stream)을 활용하였으나, NIO에서는 Channel을 활용

3. 스트림과 채널의 차이

3-1. 채널은 Blocking & Non-Blocking 모두 지원

채널은 블로킹(Blocking) 방식 뿐만 아니라 논블로킹(Non-Blocking) 방식으로도 읽기/쓰기가 가능

3-2. 스트림은 단방향이지만 채널은 양방향으로 동작

스트림은 입력 전용 스트림인 InputStream과 출력 전용 스트림인 OutputStream을 활용 채널은 하나의 채널(SocketChannel)로 읽기 / 쓰기가 모두 가능

3-3. 채널은 항상 버퍼를 통해 데이터를 읽거나 쓰는 작업을 수행

채널에 전송된 데이터는 먼저 버퍼에 위치해야 하고, 채널에서 읽어온 모든 데이터는 버퍼를 통해 읽어들임

Last updated on