์ถ์ฒ
ChatGPT
์ฑ๋์ด๋ Channel
์ฑ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๋ ์๋ฐฉํฅ ๋ฐ์ดํฐ ํต๋ก์ด๋ค. ๊ธฐ์กด์ ์คํธ๋ฆผ์ ์ ๋ ฅ ๋๋ ์ถ๋ ฅ ์ค ํ ๋ฐฉํฅ์ผ๋ก๋ง ๋์ํ์ง๋ง, ์ฑ๋์ ์์ชฝ ๋ชจ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
์ฑ๋์ ์ฃผ๋ก ํ์ผ, ์์ผ, ๋๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ์์ค์์ ๋ฐ์ดํฐ ์ ์ก์ ์ฌ์ฉ๋๋ฉฐ, ๋น๋๊ธฐ์ ์ธ I/O๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
java.nio (New I/O) ํจํค์ง์ ํฌํจ๋ ๊ฐ๋ ์ด๋ค.
๐ค ์ฑ๋์ ์ ์๋ฐฉํฅ์ ์ง์ํ ๊น
์ฑ๋๊ณผ ๋ฒํผ์์ ๊ด๊ณ
์ฑ๋์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ผ๊ณ ์ฐ๋ ๋์ , ๋ฒํผ๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. ์ฆ, ์ฑ๋์ ๋ฒํผ์ ์ํธ์์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋๋ ์ฑ๋์์ ๋ฒํผ๋ก, ๋ฐ์ดํฐ๋ฅผ ์ธ ๋๋ ๋ฒํผ์์ ์ฑ๋๋ก ์ ์กํ๋ ๊ตฌ์กฐ์ด๋ค.
์ฑ๋์ ์ข ๋ฅ
๊ฐ ์ฑ๋์ ํน์ ํ ๋ฐ์ดํฐ ์์ค๋ ๋ชฉ์ ์ง์ ์ฐ๊ฒฐ๋๋ค.
FileChannel
ํ์ผ์ ์ฝ๊ณ ์ฐ๊ธฐ ์ํ ์ฑ๋์ด๋ค. FileInputStream, FileOutputStream ๋๋ RandomAccessFile๊ณผ ํจ๊ป ์ฌ์ฉํด ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ธ ์ ์๋ค.
FileChannel์ ํ์ผ์ ํน์ ์์น๋กค ์ด๋ํด ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ ์ ์ํํ ์ ์์ด ๋๋ค ์ก์ธ์ค๊ฐ ๊ฐ๋ฅํ๋ค.
SocketChannel
๋คํธ์ํฌ ์์ผ๊ณผ ์ฐ๊ฒฐ๋ ์ฑ๋์ด๋ค. TCP ์์ผ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ธ ์ ์๋ค.
SocketChannel์ ๋ธ๋กํน ๋ชจ๋์ ๋ ผ๋ธ๋กํน ๋ชจ๋๋ก ๋์ํ ์ ์์ด ๋น๋๊ธฐ์ ์ธ ๋คํธ์ํฌ ํต์ ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ์ฉํ๋ค.
ServerSocketChannel
์๋ฒ ์์ผ๊ณผ ์ฐ๊ฒฐ๋ ์ฑ๋๋ฌ์ด๋ค. ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ์ ์์ ํ๋ ์๋ฒ ์์ผ์ ์์ฑํ๊ณ ์ฒ๋ฆฌํ ์ ์๋ค.
DatagramChannel
UDP ํ๋กํ ์ฝ์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฑ๋์ด๋ค.
๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน
๋ธ๋กํน ๋ชจ๋ Blocking Mdoe
๊ธฐ๋ณธ์ ์ผ๋ก, ์ฑ๋์ ๋ธ๋กํน ๋ชจ๋๋ก ๋์ํ๋ค. ์ด ๋ชจ๋์์๋ ์ ์ถ๋ ฅ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ์ค๋ ๋๊ฐ ๋๊ธฐ ์ํ์ ์๊ฒ ๋๋ค.
๋ ผ๋ธ๋กํน ๋ชจ๋ Non-blocking Mode
๋ ผ๋ธ๋กํน ๋ชจ๋์์๋ ๋ฐ์ดํฐ๊ฐ ์ค๋น๋์ง ์๋๋ผ๋ ์ฆ์ ๋ฆฌํดํ ์ ์๋ค. ๋ฐ๋ผ์ ํน์ ์์ ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์์ด ํจ์จ์ ์ธ ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ๋ค.
์ด ๋ชจ๋๋ ์๋ฒ๊ฐ ๋์์ ๋ง์ ํด๋ผ์ด์ธํธ์ ํต์ ํด์ผ ํ๋ ์ํฉ์์ ๋งค์ฐ ์ ๋ฆฌํ๋ค.
Selector์์ ์ฐ๋
์๋ฐ์ NIO์์๋ Selector๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ํ๋์ ์ค๋ ๋๋ก ์ฌ๋ฌ ์ฑ๋์ ๊ด๋ฆฌํ ์ ์๋ค.
Selector๋ ๋น๋๊ธฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ ์ฑ๋์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ(์: ์ฝ๊ธฐ ๊ฐ๋ฅ, ์ฐ๊ธฐ ๊ฐ๋ฅ)๋ฅผ ๊ฐ์ํ๊ณ , ์ฒ๋ฆฌํ ์ ์๋ค. ์ด๋ฅผ ํตํด ํ๋์ ์์ผ์ ํ๋์ ์ค๋ ๋๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ ธ ์๋ฒ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํจ๋ค.
์ฑ๋์ ์ฃผ์ ๋ฉ์๋
- read() : ์ฑ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋ฒํผ์ ์ ์ฅํ๋ค.
- write() : ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ฑ๋์ ์ด์ฉํด ๋ฐ์ดํฐ ์์ค๋ก ์ ์กํ๋ค.
- position() : ํ์ฌ ์ฑ๋์ ์์น๋ฅผ ์ค์ ํ๊ฑฐ๋ ์ป๋๋ค.
- truncate() : ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ค์ธ๋ค. (FileChannel์์ ์ฌ์ฉ)
- force() : ์ฑ๋์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋์คํฌ์ ๊ฐ์ ๋ก ๊ธฐ๋กํ๋ค.(FileChannel์์ ์ฌ์ฉ)
๊ธฐ์กด I/O์์ ๋น๊ต
- ์คํธ๋ฆผ์ ๋จ๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ ์ ์ก(์ฝ๊ธฐ ๋๋ ์ฐ๊ธฐ)๋ง ๊ฐ๋ฅํ์ง๋ง, ์ฑ๋์ ์๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๋ค.
- ์คํธ๋ฆผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋กํน I/O๋ฐฉ์์ด์ง๋ง, ์ฑ๋์ ๋ ผ๋ธ๋กํน I/O๋ฅผ ์ง์ํด ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ค.
- ์ฑ๋๊ณผ ๋ฒํผ์ ์กฐํฉ์ ๋ ํฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋๋ค ์ก์ธ์ค๋ฅผ ์ฝ๊ฒ ์ํํ๊ฒ ํด์ฃผ๋ฉฐ, NIO์ ๊ณ ์ฑ๋ฅ ๋น๋๊ธฐ I/O ์์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋ฐ] ์์์ฑ ํ๋ ์์ํฌ Persistence Framework (0) | 2024.10.14 |
---|---|
[Java] IO, NIO ์ฐจ์ด (1) | 2024.10.14 |
[Java] I/O Buffer (1) | 2024.10.14 |
[ํ๋ก๊ทธ๋๋ฐ] RPC Remote Procedure Call ์๊ฒฉ ํ๋ก์์ ํธ์ถ (3) | 2024.10.14 |
[ํ๋ก๊ทธ๋๋ฐ] ํจ์ํ ํ๋ก๊ทธ๋๋ฐ (3) | 2024.10.11 |