๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Java] IO, NIO ์ฐจ์ด

์ถœ์ฒ˜

https://dev-coco.tistory.com/42

 

[Java] IO์™€ NIO์˜ ์ฐจ์ด์ ? / IO์™€ NIO์˜ ์„ ํƒ

NIO ? ์ž๋ฐ” 4๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ์ž…์ถœ๋ ฅ(New Input/Output)์ด๋ผ๋Š” ๋œป์—์„œ java.nio ํŒจํ‚ค์ง€๊ฐ€ ํฌํ•จ๋˜์—ˆ๋Š”๋ฐ ์ž๋ฐ” 7๋กœ ๋ฒ„์ „์—…ํ•˜๋ฉด์„œ IO์™€ NIO ์‚ฌ์ด์˜ ์ผ๊ด€์„ฑ ์—†๋Š” ํด๋ž˜์Šค ์„ค๊ณ„๋ฅผ ๋ฐ”๋กœ ์žก๊ณ  ๋น„๋™๊ธฐ ์ฑ„๋„ ๋“ฑ์˜ ๋„คํŠธ์›Œ

dev-coco.tistory.com

ChatGPT

https://systemdata.tistory.com/26

 

์ž๋ฐ”์˜ IO์™€ (New)NIO๋ž€?

๋ชฉ์ฐจNIO(New Input/Output)IO์™€ NIO์˜ ์ฐจ์ด์ 2-1. ์ž…์ถœ๋ ฅ ๋ฐฉ์‹2-2. ๋ฒ„ํผ ๋ฐฉ์‹2-3. ๋™๊ธฐ / ๋น„๋™๊ธฐ ๋ฐฉ์‹2-4. ๋ธ”๋กœํ‚น / ๋„Œ๋ธ”๋กœํ‚น ๋ฐฉ์‹๊ฒฐ๋ก 1. NIO(New Input/Output)๊ธฐ์กด java.io API์™€ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ์ž…์ถœ๋ ฅ API๋ฅผ ๋งํ•œ๋‹ค.NIO๋Š”

systemdata.tistory.com

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 java.io NIO java.nio
๋ธ”๋กœํ‚น ์—ฌ๋ถ€ ๋ธ”๋กœํ‚น I/O ๋ธ”๋กœํ‚น I/O, ๋น„๋ธ”๋กœํ‚น I/O ์ง€์›
๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ์ŠคํŠธ๋ฆผ ๊ธฐ๋ฐ˜ ์ฑ„๋„๊ณผ ๋ฒ„ํผ ๊ธฐ๋ฐ˜
๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ I/O์—์„œ ์ง€์› ์•ˆ ํ•จ
-> ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ฒ˜๋ฆฌ
NIO์—์„œ ์ง€์›
์…€๋ ‰ํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  ์–‘๋ฐฉํ–ฅ ํ†ต์‹ (์ฑ„๋„์„ ํ†ตํ•œ ์ž…์ถœ๋ ฅ)
์„ฑ๋Šฅ ์ž‘์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์ ํ•ฉ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ, ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉ
๋ณต์žก๋„ ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ„๋‹จ ์ƒ๋Œ€์ ์œผ๋กœ ๋ณต์žก

 

I/O์™€ NIO ์‚ฌ์šฉ

์ƒํ™ฉ I/O ์‚ฌ์šฉ NIO ์‚ฌ์šฉ
์ž‘์€ ๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ฐ„๋‹จํ•œ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์ด๋‚˜ ์†Œ๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ N/A
๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๋„คํŠธ์›Œํฌ ์ž‘์—… N/A ๋Œ€๊ทœ๋ชจ ํŒŒ์ผ ์ฒ˜๋ฆฌ, ๋„คํŠธ์›Œํฌ ์ž‘์—…์—์„œ ์„ฑ๋Šฅ ์ด์ 
๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋ฅผ ํ†ตํ•œ ๊ฐ„๋‹จํ•œ ์ฒ˜๋ฆฌ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋กœ ๋‹ค์ˆ˜์˜ ์ž…์ถœ๋ ฅ ์ž‘์—… ์ฒ˜๋ฆฌ
๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์‹œ๊ฐ„ N/A ์ง€์—ฐ ์‹œ๊ฐ„์ด ์ค‘์š”ํ•œ ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ N/A ๋‹ค์ด๋ ‰ํŠธ ๋ฒ„ํผ๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ ๋น„์šฉ ์ ˆ๊ฐ