์ถ์ฒ
https://dev-coco.tistory.com/42
ChatGPT
https://systemdata.tistory.com/26
F-Lab ๋ฉํ ๋ง
I/O(Input/Output)๊ณผ NIO(New Input/Output)์ ๋ชจ๋ ์ ๋ ฅ ์ฒ๋ฆฌ๋ฅผ ์ํ API์ด์ง๋ง, ์ค๊ณ ์ฒ ํ๊ณผ ๊ธฐ๋ฅ ๋ฉด์์ ์ฐจ์ด๊ฐ ์๋ค.
1. I/O Input/Output
Java I/O๋ ์ ํต์ ์ธ ์ ์ถ๋ ฅ ๋ฐฉ์์ผ๋ก, ์๋ฐ์ java.io ํจํค์ง์์ ์ ๊ณต๋๋ค. ์คํธ๋ฆผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋กํน I/O๋ฅผ ์ฌ์ฉํ๋ค.
ํน์ง
๋ธ๋กํน I/O
์ ๋ ฅ/์ถ๋ ฅ ์์ ์ ์ํํ ๋, ๋ฐ์ดํฐ๊ฐ ์ค๋น๋์ง ์์ผ๋ฉด ์์ ์ด ์๋ฃ๋ ๋๊น์ง ์ค๋ ๋๊ฐ ๋ธ๋กํน๋์ด ๊ธฐ๋ค๋ฆฐ๋ค. ์ฆ, ํ๋์ ์ค๋ ๋๊ฐ ์์ฒญํ ์์ ์ด ๋๋ ๋๊น์ง ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ค.
์คํธ๋ฆผ ๊ธฐ๋ฐ
๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ๋๋ ๋ฌธ์ ๋จ์๋ก ์ฝ๊ณ ์ฐ๋ ๋ฐฉใ ์์ด๋ค. ์ ์ถ๋ ฅ ์คํธ๋ฆผ(์ : InputStream, OutputStream)์ ์ฌ์ฉํด ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
๋จ๋ฐฉํฅ ํต์
์ ๋ ฅ ์คํธ๋ฆผ๊ณผ ์ถ๋ ฅ ์คํธ๋ฆผ์ด ๋ถ๋ฆฌ๋์ด ์์ด ๊ฐ๊ฐ์ ์คํธ๋ฆผ์์ ๋ฐ์ดํฐ๊ฐ ํ ๋ฐฉํฅ์ผ๋ก๋ง ํ๋ฅธ๋ค.
์ฅ์
- ๊ตฌํ์ด ๋น๊ต์ ๊ฐ๋จํ๊ณ ์ดํดํ๊ธฐ ์ฝ๋ค.
- ์๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ ํฉํ ๋ฐฉ์
๋จ์
- ๋ธ๋กํน ๋ฐฉ์์ด๋ฏ๋ก ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ ๋ค์ค ์ค๋ ๋๊ฐ ํ์ํ๋ฉฐ ๋ฆฌ์์ค๊ฐ ๋ง์ด ์๋ชจ๋ ์ ์๋ค.
- ๋๊ท๋ชจ ์ฒ๋ฆฌ๋ ๋คํธ์ํฌ ์์ ์ ๋นํจ์จ์
์ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์๊น
์ฐ๊ฒฐ ํด๋ผ์ด์ธํธ ์๊ฐ ์ ๊ณ ์ ์ก๋๋ ๋ฐ์ดํฐ๊ฐ ๋์ฉ๋์ด๋ฉด์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋ ํ์์ฑ์ด ์์ ๊ฒฝ์ฐ
IO๋ ๋์ฉ๋ ์ฒ๋ฆฌ์ ํจ์จ์ ์ด๋ค. ๋์ฉ๋ ์ฒ๋ฆฌ์ IO๋ฅผ ์ด๋ค. IO๊ฐ ๋น๋๊ธฐ๋ฅผ ์ง์ํ์ง๋ ์์ง๋ง ๊ทธ๋ ๋ค๊ณ ํด์ ๋น๋๊ธฐ๋ก ๋ชป ์ฐ๋ ๊ฒ์ ์๋๋ค.
1. ์์ ๊ท๋ชจ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋๋ ๊ฐ๋จํ I/O ์์
์์
ํ ์คํธ ํ์ผ์ ๊ฐ๋จํ ์ฝ๊ณ ์ฐ๋ ์์์์ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ์ฒ๋ฆฌํ๋ ์์
์ด์
I/O๋ ๊ตฌํ์ด ๋จ์ํ๊ณ , ์์ผ ใด๋ฐ์ดํฐ์ ๋ํด์๋ ๋ณต์กํ ์ต์ ํ๊ฐ ๋ถํ์ํ๋ค๋ธ๋กํน ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์ค๋ ๋ ๊ด๋ฆฌ๊ฐ ๋น๊ต์ ๋จ์ํ๊ณ , ์ง๊ด์ ์ธ ์ฝ๋ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
2. NIO New Input/Output
Java 1.4๋ถํฐ ๋์ ๋ ๊ฐ์ ๋ ์ ์ถ๋ ฅ ๋ฐฉ์. java.nio ํจํค์ง์์ ์ ๊ณต๋๋ค. ์ฑ๋(Channel)๊ณผ ๋ฒํผ(Buffer)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ๋น๋ธ๋กํน I/O๋ฅผ ์ง์ํ๋ค.
ํน์ง
๋น๋ธ๋กํน I/O
๋ ผ๋ธ๋กํน ๋ชจ๋๋ฅผ ์ง์ํ๋ค. ์ด ๋ชจ๋์์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ธ ๋ ์ค๋ ๋๊ฐ ๋ธ๋กํน๋์ง ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ ๋๋ง ์ฒ๋ฆฌํ๋ค. ์ด๋ฅผ ํตํด ๋์์ฑ์ด ๊ฐํ๋๋ฉฐ, ์ ์ ์ค๋ ๋๋ก ์ฌ๋ฌ I/O ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค.
์ฑ๋๊ณผ ๋ฒํผ
์ฑ๋(Channel)๊ณผ ๋ฒํผ(Buffer)๋ฅผ ์ฌ์ฉํ๋ค. ์ฑ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์๋ฐฉํฅ ํต์ ํต๋ก์ด๋ฉฐ, ๋ฒํผ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐ์ํ๋ ์ญํ ์ ํ๋ค. I/O ์์ ์ ๋จผ์ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ์ ์ ์ฅํ ํ, ์ฑ๋์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
์ ๋ ํฐ Selector
์ ๋ ํฐ๋ฅผ ํตํด ๋น๋๊ธฐ I/O ์์ ์ ๊ด๋ฆฌํ๋ค. ํ๋์ ์ค๋ ๋๊ฐ ์ฌ๋ฌ ์ฑ๋์ ๊ฐ์ํ๊ณ , ๋ฐ์ดํฐ๊ฐ ์ค๋น๋์์ ๋๋ง ํด๋น ์์ ์ ์ํํ๋ค. ์ด๋ฅผ ํตํด ํจ์จ์ ์ผ๋ก ์ฌ๋ฌ I/O ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค.
์ฅ์
- ๋น๋ธ๋กํน I/O๋ฅผ ํตํด ํจ์จ์ ์ธ ์์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ ๋คํธ์ํฌ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ์ด ์ฐ์ํ๋ค.
- ๋์์ฑ์ ์ง์ํ์ฌ ๋จ์ผ ์ค๋ ๋๋ก๋ ์ฌ๋ฌ I/O ์์ ์ ์ฒ๋ฆฌํ ์ ์์
- ์ฑ๋์ ํตํธ ์๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ์ ๊ณตํ ์ ์ถ๋ ฅ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ค.
๋จ์
- ๊ตฌํ์ด ์๋์ ์ผ๋ก ๋ณต์กํ๊ณ ํ์ต ๊ณก์ ์ด ์์
- ์์ I/O ์์ ์๋ ์คํ๋ ค ๋ถํ์ํ๊ฒ ๋ณต์กํ ์ ์์
์ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์๊น
์ฐ๊ฒฐ ํด๋ผ์ด์ธํธ ์๊ฐ ๋ง๊ณ ์ ์ก๋๋ ๋ฐ์ดํฐ ์ฉ๋์ด ์ ์ผ๋ฉด์, ์ ์ถ๋ ฅ ์์ ์ฒ๋ฆฌ๊ฐ ๋นจ๋ฆฌ ๋๋๋ ๊ฒฝ์ฐ
NIO๋ ํ์ผ์ ์ธ ๋ IO๋ณด๋ค ์ข์ ์ ์ด ๊ฑฐ์ ์๋ค. ๋์ฉ๋ ํ์ผ์์ ๋ฒํผ๋ฅผ ์ด๋ค๋ฉด ๋ฒํผ๋ฅผ ํฌ๊ฒ ์ก์์ผ ํ๋ค. ๊ทธ๋์ ๋ฒํผ๋ฅผ ํ ๋นํ๋ ๊ฒ ์์ฒด๊ฐ ๋ถ๋ด์ค๋ฝ๋ค. ๊ทธ๋ ๊ฒ ํฌ๊ฒ ํ ๋น์ ๋ฐ๋ณต์ ์ผ๋ก ๊ณ์ ํด์ค์ผ ํ๋ค. NIO๋ ๋ด๋ถ์ ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ๋๊ณ ์ ๋ด๋ถ์ ์ผ๋ก ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๋ค. ์ด๋ฐ ๊ฒ๋ค๋ก ํจ์จ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง, ํ์ผ์ด ํฌ๋ฉด ์ค๋ ๋๋ ํ๋ ๋ฐ์ ์ฐ์ง ๋ชปํ๋ค. NIO๊ฐ ์ฌ๋ฌ ์ฐ๋ ๋๋ฅผ ์ด๋ค๋ ํจ์จ์ฑ์ด ๋์ฉ๋ ํ์ผ์์๋ ๋จ์ด์ง๋ค.
1. ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋๋ ๊ณ ์ฑ๋ฅ์ด ํ์ํ ์ํฉ
์์
๋คํธ์ํฌ ์์ผ์ ์ด์ฉํ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ ์กํ์ผ ์์คํ ์์ ๋์ฉ๋ ํ์ผ์ ํจ์ธ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ์์๋๊ท๋ชจ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ฐ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์ด์
๋น๋ธ๋กํน I/O๋ฅผ ํตํด ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ ๋๊ธฐ ์๊ฐ์ด ์ค์ด๋ค๊ณ , ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์์ ์ฐ๊ฒฐ์ ํตํด ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.ํ์ผ ์ฑ๋๊ณผ ๋ฒํผ๋ฅผ ํตํด ๋์ฉ๋ ํ์ผ ์ฒ๋ฆฌ๊ฐ ํจ์จ์ ์ด๋ฉฐ, ๋ณต์กํ ์ ์ถ๋ ฅ ์์ ์์ ์์ ๋ญ๋น๊ฐ ์ ๋ค.
- ๐ค ์ ํ์ผ ์ฒด๋๊ณผ ๋ฒํผ๋ฅผ ํตํด ๋์ฉ๋ ํ์ผ ์ฒ๋ฆฌ๊ฐ ํจ์จ์ ์ด๊ณ ๋ณต์กํ ์
์ถ๋ ฅ ์์
์์ ์์ ๋ญ๋น๊ฐ ์ ์๊น?
- ๋ฒํผ ๊ธฐ๋ฐ : ๋ฐ์ดํฐ๋ฅผ ์์ ๋จ์๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ, ํ ๋ฒ์ ํฐ ๋ฉ์ด๋ฆฌ๋ก ์ฒ๋ฆฌํ ์ ์์ด ๋์คํฌ I/O ํธ์ถ์ ์ค์ธ๋ค.
- ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ ์ฒ๋ฆฌํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ณ , ๋์คํฌ ์ ๊ทผ ๋น๋๋ฅผ ์ค์ฌ I/O ์์ ์ด ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ํ๋๋ค.
๋ค์์ I/O ์์ ์ ๋์์ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ ๋ ํฐ๋ฅผ ์ฌ์ฉํด ์ ์ ์ค๋๋๋ก๋ ๋์ ๋์์ฑ์ ๊ตฌํํ ์ ์๋ค.
2. ๋ฉ๋ฆฌ์ค๋ ๋ ํ๊ฒฝ์์์ ๋ณต์กํ ์ค๋ ๋ ๊ด๋ฆฌ
์์
๋คํธ์ํฌ ์๋ฒ์์ ๋ค์์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐํ์ผ ์ ๋ก๋/๋ค์ด๋ก๋ ์๋ฒ
์ด์
๋ค์ค ์ค๋ ๋ ์ฌ์ฉ์ ์ต์ํํ๋ฉด์๋ ์ฌ๋ฌ ์ ์ถ๋ ฅ ์์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ค.์ค๋ ๋ ์๊ฐ ๋ง์์ง๋ ๊ฒ์ ๋ฐฉ์ํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ CPU ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์๋ค.
- ๐ค ์ ์ค๋ ๋ ์๊ฐ ๋ง์์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋์ด๋ ๊น?
- ์ค๋ ๋๋ง๋ค ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ์ํ๊ธฐ ๋๋ฌธ์, ์ค๋ ๋ ์๊ฐ ๋์ด๋๋ฉด ๊ทธ๋งํผ ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ์๋ ๋์ด๋๋ค.
- ์๋ฐฑ, ์์ฒ ๊ฐ์ ์ค๋ ๋๋ฅผ ์ฌ์์ ๊ฒฝ์ฐ ๊ฐ ์ค๋ ๋๊ฐ ๋ฐ๋น๋ฐ๋ ์คํ ๋ฉ๋ชจ๋ฆฌ ์๊ฐ ๋ฉ๋ชจ๋ฆด ์ ์ฒด๋ฅผ ์ฐจ์งํ๊ฒ ๋์ด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค.
- ๐ค ์ ์ค๋ ๋ ์๊ฐ ๋ง์์ง๋ง CPU ์ค๋ฒํค๋๊ฐ ์๊ธธ๊น
- ์ค๋ ๋๊ฐ ๋ง์์ง๋ง ์ปจํ ์คํธ ์ค์์นญ(Context Switching)์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ค. ์ปจํ ์คํธ ์ค์์นญ์ CPU๊ฐ ํ ์ค๋ ๋์์ ๋ค๋ฅธ ์ค๋ ๋๋ก ์์ ์ ์ ํํ ๋ ๋ฐ์ํ๋ ๊ณผ์ ์ผ๋กค, ์ด ๊ณผ์ ์์ CPU ์์์ด ์๋ชจ๋๋ค.
- CPU๋ ํ ๋ฒ์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์คํํ ์ ์๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ์ค๋ ๋๋ฅผ ๋น ๋ฅด๊ฒ ์ ํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ์ด๋, ์ค๋ ๋์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ค์ ๋ก๋ํ๋ ์์ ์ด ํ์ํ๋ฉฐ, ์ด ๊ณผ์ ์์ CPU ์๊ฐ์ด ๋ญ๋น๋๋ค.
- ์ค๋ ๋ ์๊ฐ ๋ง์์ง์๋ก ์ปจํ ์คํธ ์ค์์นญ ๋น๋๊ฐ ๋์์ ธ, ์ค์ ๋ก ์ ํจํ ์์ ์ ์ฒ๋ฆฌํ๋ ์๊ฐ์ด ์ค์ด๋ ๋ค.
3. ์ง์ฐ ์๊ฐ์ด ์ค์ํ ๋คํธ์ํฌ ์ ํ๋ฆฌ์ผ์ด์
์์
์ฑํ ์ ํ๋ฆฌ์ผ์ด์ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์คํ ๋๊ท๋ชจ ์น ์์ผ ์๋ฒ
์ด์
์ง์ฐ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ๋ค์์ ์ฐ๊ฒฐ์ ๋น๋๊ธฐ์์ผ๋ก ์ฒ๋ฆฌํ์ฌ ํจ์จ์ ์ด๋ค.๋คํธ์ํฌ ์ ์ถ๋ ฅ์์ ๋์ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ ๋ ์์์ ๋ ์ ๊ฒ ์๋ชจํ๋ค.
4. ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ ๊ณ ๋ ค
์์
๋ค์ดํฐ๋ธ ์์คํ ๊ณผ ์ง์ ๋ฐ์ดํฐ ์ ์ก์ด ํ์ํ ๊ฒฝ์ฐ -> ๋ค์ดํฐ๋ธ ์์คํ ๊ณผ์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ ์ก์ ์ํด, ๋ค์ด๋ ํธ ๋ฒํผ๋ฅผ ์ฌ์ฉํจ.ํ์ผ ์์คํ ๊ณผ ๋คํธ์ํฌ ์ฅ์น ๊ฐ์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ ์ก
์ด์
๋ค์ด๋ ํธ ๋ฒํผ๋ฅผ ํตํด ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ ๊ณผ์ ์ ์ค์ด๊ณ , I/O ์์ ์ ์ฑ๋ฅ์ ๋์ผ ์ ์๋ค.
I/O์ NIO์ ์ฃผ์ ์ฐจ์ด์
I/O์ NIO ์ฌ์ฉ
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin] statement(๋ฌธ)์ expression(์) (0) | 2024.10.14 |
---|---|
[ํ๋ก๊ทธ๋๋ฐ] ์์์ฑ ํ๋ ์์ํฌ Persistence Framework (0) | 2024.10.14 |
[Java] I/O Channel (0) | 2024.10.14 |
[Java] I/O Buffer (1) | 2024.10.14 |
[ํ๋ก๊ทธ๋๋ฐ] RPC Remote Procedure Call ์๊ฒฉ ํ๋ก์์ ํธ์ถ (3) | 2024.10.14 |