โ๏ธ ์์ ์ Node.js๋ฅผ ์ ๊น ๊ณต๋ถํ๋ฉด์ ๊ธฐ์ด ์ง์์ ์๋๋ค๊ณ ํด๋น ๊ฐ๋ ์ ์ค์ณ ์ง๋๊ฐ ๋ฏ ์ฐพ์ ๋ดค๋ ๊ธฐ์ต์ด ์๋ค.
๋ธ๋ก๊ทธ์ ์ ๋ฆฌ๋ ํ๋ ๊ฒ ๊ฐ์๋ฐ, ๋น์์๋ Thread์ Process ๊ทธ๋ฆฌ๊ณ ์ด๋ก ์ธํด ์ด์์ฒด์ ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์กฐ๊ธ๋ ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ ํ ์ดํด๊ฐ ์๋ ์ํ๋ก ๊ธ๋ง ์ ๋ฆฌํ์๋ค. (๋ณต๋ถ ์์ค)
์ด๋ฒ ์๊ฐ์๋ ๊ทธ๋๋ ์์ ๊ฐ๋ ์ ๋ํด ๋ฏธ์ฝํ๊ฒ๋๋ง ์ ๋ฆฌ๊ฐ ๋์์ผ๋ ์ด๋ฅผ ๋ฐํ์ผ๋ก ๋๊ธฐ์ ๋น๋๊ธฐ, Blocking๊ณผ Non-Blocking์ ๋ํด ๊ณต๋ถํด๋ณด์!
Blocking / Non-Blocking
Blocking : ์ด๋ ํ ํ์์ ์ํด ์์ ์ ํ์๋ฅผ ์ด์ด์ ์ํํ์ง ๋ชปํ๊ฑฐ๋ ๋งํ๋ ๊ฒ.
Non-Blocking : ์ด๋ ํ ํ์์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ์์ ์ ํ์๋ฅผ ์ํํ๋ ๊ฒ.
Sync / Async
ํ๋ก๊ทธ๋๋ฐ์์์ ๋๊ธฐ๋ ๋์์ ์ผ์ด๋๋ค๋ ๋ป์ผ๋ก, ์ด๋ ์์ฒญํ๋ ํจ์์ ์๋ตํ๋ ํจ์ ๊ฐ์ ๋ฐ์ดํฐ ๋๊ธฐ๋ฅผ ํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
์์ ์ ๋จ์ (Transaction)์ ๋๊ธฐํํ๋ฉด Sync, ๋๊ธฐํํ์ง ์๋๋ค๋ฉด Async์ด๋ค.
๊ฒฐ๊ตญ ๋์ ๋น์ทํ ๊ฐ๋ ์๋๊ฐ?
๋ถ๋ช
๋๊ธฐ์ ๋ธ๋ฝํน์ ์ธ๋ป ๋ณด๋ฉด ๋ง์น ๋์ผํ ๊ฐ๋
์ฒ๋ผ ๋ณด์ธ๋ค. ํ์ง๋ง ์ด ๋์ ๋ฐ๋ผ๋ณด๋ ์์ ์ ๋ฐ๋ผ ๊ทธ ์๋ฏธ๊ฐ ๋ฌ๋ผ์ง๋ค.
Blocking, Non-Blocking์ ๊ธฐ์ค์ ์ ์ด๊ถ์ ์ด๋ ์ชฝ์ด ๊ฐ์ง๊ณ ์๋๋๋ก ๋๋์ด์ง์ง๋ง, Sychronous, Asynchronous ๋ ์์
์ ๋ฐํ์ ๋ํด ์ํฅ์ ๋ฐ๋์ง ๋ฐ์ง ์๋์ง๋ก ๋๋์ด์ง๋ค.
๊ฐ๋จํ ์ค๋ช ์ ํตํด ์ดํดํด๋ณด์.
๐ Blocking
: A ๋ฉ์๋๊ฐ B ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์๊ฐ, A ๋ฉ์๋๋ B ๋ฉ์๋๊ฐ ์์ ์ ๋ง๋ฌด๋ฆฌํ์ง ๋ชปํ๊ฑฐ๋ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด A ๋ฉ์๋๋ ๋๋จธ์ง ์์ ์ ์ํํ์ง ๋ชปํ๋ค.
์ฆ, A ๋ฉ์๋์ ๋ํ ๊ถํ์ด B ๋ฉ์๋๋ฅผ ํธ์ถํจ๊ณผ ๋์์ ์ ์ด๊ถ์ด ๋์ด๊ฐ๊ฒ ๋๋ค.
๐Non-Blocking
: Blocking์ ๊ฒฝ์ฐ B ๋ฉ์๋์ ์ํด A ๋ฉ์๋์ ์์ ์ ์ด์ด๊ฐ์ง, ์ข ๋ฃ๋ ์ง๊ฐ ๊ฒฐ์ ๋์๋ค.
ํ์ง๋ง Non-Blocking์ B ๋ฉ์๋์ ์์ ์ํ์ ๋ํด ๊ด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ B ๋ฉ์๋๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋๊ฑฐ๋ ์์ ์ ๋ง๋ฌด๋ฆฌ ํ๋ค๊ณ ํด๋ ์ด์ ๋ํด ๊ฐ์ญ์ ๋ฐ์ง ์๋๋ค.
๐ Synchronous
: ์ด์ ์ ๋ฐฐ์ด synchronized ์์ฝ์ด๋ AtomicType ํด๋์ค๋ฅผ ์ง์ด๋ณด์.
Java์์๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ํน์ ๋ฐ์ดํฐ์ ์ ๊ทผํด์ผ ํ ๋ ๋์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด์ ๋ฐ์ดํฐ์ ๋จผ์ ์ ๊ทผํ ์ค๋ ๋์ ์์ ์ด ์ข ๋ฃ๋์ด์ผ ๋ค์ ์ค๋ ๋๊ฐ ๋ฐ์ดํฐ์ ์ ๊ทผ ํ ์ ์๋๋ก ํ ์ ์๋ค.
์ด๋ฅผ ํตํด Synchronous ๊ฐ๋ ์ ๋ง์ง Queue ์๋ฃ๊ตฌ์กฐ์ ๊ฐ์ด ์ ์ ์ ์ถ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค๊ณ ํ ์ ์๋ค.
๐ Asynchronous
: ์์ฒญ์ ๋ํ return ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ํจ๊ป ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ์์ ์ ์ํํ๋ ๊ฐ๋ ์ด๋ค.
์ฆ, A ์ค๋ ๋๊ฐ B ์ค๋ ๋์๊ฒ ์ด๋ค ์์ ์ ์์ฒญํ์ง๋ง, A ์ค๋ ๋๋ ํด๋น ์์ ์ ๋ํ B ์ค๋ ๋์ return ์ ๊ด์ฌํ์ง ์๊ณ B ์ค๋ ๋์๊ฒ ์์ฒญํจ๊ณผ ๋์์ ์์ ์ ๋๋จธ์ง ์์ ์ ์ํํ๋ค.
์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์ ๋ค๋ฐ์ ์ผ๋ก ๊ฐ์ ์์ ์ ์ํํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ์ฌ ์์ ํ๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ์ ๊ฐ์ด ์์๊ฐ๊ณผ ๋ค๋ฅผ ์ ์๋ค.
Blocking, Synchronous
๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ I/O ๋ชจ๋ธ๋ก, Read์ Write ๊ฐ์ I/O์ System Call์ ์๋ฏธํ๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ์ธ์ด๋ก๋ Java๊ฐ ๋ํ์ ์ด๋ค.
Stream์ ํตํด Java Application ์ธ๋ถ์ ํต์ ํ ์ ์๋๋ฐ, ์ด ๋ Stream์ ๋จ๋ฐฉํฅ ํต๋ก๋ก ๋ฐ์ดํฐ๊ฐ Input ํน์ Output Stream์ผ๋ก๋ง ํ๋ฅด๊ฒ ๋์ด ํด๋น Stream์ด ๋ซํ์ง ์์ผ๋ฉด (Closeable ๊ตฌํ) ์ดํ์ ์์
์ด ๋ถ๊ฐ๋ฅ ํ ์ ์ด Blocking, Synchronous ์ ์์๊ฐ ๋ ์ ์๊ฒ ๋ค.
Non-Blocking, Synchronous
์ ํ๋ฆฌ์ผ์ด์
์์ System Call์ ์์ฒญํ๋ฉด Kernel ์์๋ ํด๋น ์์ฒญ์ ๋ํ ์์
์ ์ฒ๋ฆฌํ์ง ์์์ง๋ง, ํ์ํ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐํํ๋ฉด์ ๋๊ธฐ์ ์ผ๋ก ์๋ก ํต์ ํ๋ค.
์ด ๋, ์ ํ๋ฆฌ์ผ์ด์
์ Kernel์ ์์ฒญํ ์ดํ๋ก ๋ฉ์ถ์ง ์๊ณ ๋๋จธ์ง ์์
์ ์ํํ์ง๋ง, ์์ฒญ์ ๋ํ ๋ฐ์ดํฐ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ํ์ธํ๊ฒ ๋๋๋ฐ ์ด๋ฌํ ๋ฐฉ์์ ๋ฐ๋ณต์ ์ธ System Call๋ก ์ธํด์ CPU ๋ญ๋น๋ฅผ ์ผ๊ธฐํ๋ค.
Blocking, Asynchronous
์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ System Call์ ์ํด Kernel์ ํด๋น ์์ฒญ์ ๋ํด ๋๋์ง ์์์ง๋ง ์ด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ตํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ด๊ถ์ด Kernel๋ก ๋์ด๊ฐ ์ํ์ด๋ Blocking ์ํ๋ก ์ ์ง๋๋ค.
์ดํ์ Kernel์์ ์์ฒญ์ ๋ํ ์์ ์ ์๋ฃํ ๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต์ ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ Blocking ์ํ๊ฐ ํด์ ๋๋ค.
๋ํ์ ์ผ๋ก Ajax ๊ฐ ์๋ค.
Non-Blocking, Asynchronous
์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๊ธฐ System Call์ Kernel์ ์์ฒญํจ๊ณผ ๋์์ Kernel์ ์ด์ ๋ํ ์๋ต์ ํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ์ ๋ํ ์๋ต์ ๊ด๊ณ์์ด ์์ ์ ์์ ์ ์ํํ๋ค. ๋ํ์ ์ผ๋ก Web Socket์ด Non-Blocking, Asynchronous์ ์ํ๋ค.
์ฐธ๊ณ ์ฌ์ดํธ
'Programming > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
F019 - Socket (0) | 2021.06.22 |
---|---|
F018 - Serializable (์ง๋ ฌํ, ์ญ์ง๋ ฌํ) (0) | 2021.06.16 |
F016 - File, I/O, Stream (0) | 2021.06.14 |
F015 - Set (์์ฑ ์ค) (0) | 2021.05.31 |
F014 - List (ArrayList, LinkedList, Vector, Stack) (0) | 2021.05.30 |