Netty
Java Netty?
์๋ฐ ๋คํฐ(Java Netty)๋ ์๋ฐ์์ ๋น๋๊ธฐ์ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋คํธ์ํฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ธฐ ์ํ ์คํ์์ค ํ๋ ์์ํฌ์ ๋๋ค. ๋คํฐ๋ ๋ค์ํ ํ๋กํ ์ฝ(์: HTTP, ์น์์ผ, TCP, UDP)์ ์ง์ํ๋ฉฐ, ๋์ ์ฑ๋ฅ, ์์ ์ฑ, ํ์ฅ์ฑ, ์ ์ฐ์ฑ, ๋์ ๊ฐ์ฉ์ฑ ๋ฑ์ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์๋ฐ ๋คํฐ์ ํน์ง
1. ๋์ ์ฑ๋ฅ
์๋ฐ ๋คํฐ๋ ๋น๋๊ธฐ์์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋์ ์ฒ๋ฆฌ๋(Throughput)๊ณผ ๋ฎ์ ์ง์ฐ์๊ฐ(Latency)์ ๋ณด์ฅํฉ๋๋ค. ๋ํ, ๋คํฐ๋ ๋ค์ํ IO ๋ชจ๋(์: NIO, OIO)๋ฅผ ์ง์ํ์ฌ ์ด๋ค ์ํฉ์์๋ ๋์ ์ฑ๋ฅ์ ์ ์งํ ์ ์์ต๋๋ค.
2. ์์ ์ฑ
์๋ฐ ๋คํฐ๋ ์์ ์ฑ์ ์ํด ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ByteBuf์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์คํ ์ ์ ๊ณตํฉ๋๋ค. ๋ํ, ๋ค์ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ, ์ฑ๋ ํ์ดํ๋ผ์ธ ๋ฑ์ ์ ๊ณตํ์ฌ ์์ ์ ์ธ ๋คํธ์ํฌ ํต์ ์ ๊ตฌํํ ์ ์์ต๋๋ค.
3. ํ์ฅ์ฑ
์๋ฐ ๋คํฐ๋ ๋์ ํ์ฅ์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋คํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ํ ํ๋กํ ์ฝ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ผ๋ฉฐ, ์๋ก์ด ํ๋กํ ์ฝ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ํ๋กํ ์ฝ์ ์์ ํ๋ ๊ฒ๋ ์ฝ์ต๋๋ค.
4. ์ ์ฐ์ฑ
์๋ฐ ๋คํฐ๋ ๋ค์ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ, ์ฑ๋ ํ์ดํ๋ผ์ธ ๋ฑ์ ์ ๊ณตํ์ฌ ์ ์ฐํ ๋คํธ์ํฌ ํต์ ์ ๊ตฌํํ ์ ์์ต๋๋ค. ๋ํ, ๋คํฐ๋ ๋ค์ํ ์ธ์ฝ๋์ ๋์ฝ๋๋ฅผ ์ ๊ณตํ์ฌ ๋ฐ์ดํฐ ๋ณํ์ ๋ํ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
5. ๋์ ๊ฐ์ฉ์ฑ
์๋ฐ ๋คํฐ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๋์ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ํ ๋ก๋๋ฐธ๋ฐ์ฑ ๊ธฐ๋ฅ, ํด๋ฌ์คํฐ๋ง ๊ธฐ๋ฅ, ์ฌ์์ ๊ธฐ๋ฅ ๋ฑ์ ์ ๊ณตํฉ๋๋ค.
์๋ฐ ๋คํฐ์ ๊ตฌ์ฑ ์์
์๋ฐ ๋คํฐ์ ๊ตฌ์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ์ฑ๋(Channel)
์๋ฐ ๋คํฐ์์ ์ฑ๋์ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๋ํ๋ ๋๋ค. ์ฑ๋์ TCP, UDP, ์น์์ผ ๋ฑ ๋ค์ํ ํ๋กํ ์ฝ์ ์ง์ํฉ๋๋ค.
2. ์ด๋ฒคํธ(Event)
์๋ฐ ๋คํฐ์์ ์ด๋ฒคํธ๋ ์ฑ๋์์ ๋ฐ์ํ๋ ๋ค์ํ ์ด๋ฒคํธ๋ฅผ ๋ํ๋ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฑ๋์ด ์ฐ๊ฒฐ๋๊ฑฐ๋ ๋์ด์ง ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํฉ๋๋ค.
3. ์ด๋ฒคํธ ํธ๋ค๋ฌ(Event Handler)
์๋ฐ ๋คํฐ์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ๋ค์ํ ์ด๋ฒคํธ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
4. ์ฑ๋ ํ์ดํ๋ผ์ธ(Channel Pipeline)
์๋ฐ ๋คํฐ์์ ์ฑ๋ ํ์ดํ๋ผ์ธ์ ์ฑ๋์ ์ ์ถ๋ ฅ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค. ์ฑ๋ ํ์ดํ๋ผ์ธ์ ๋ค์ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ฑ๋์ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํฉ๋๋ค.
์๋ฐ ๋คํฐ๋ ๋์ ์ฑ๋ฅ, ์์ ์ฑ, ํ์ฅ์ฑ, ์ ์ฐ์ฑ, ๋์ ๊ฐ์ฉ์ฑ ๋ฑ์ ํน์ง์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ค์ํ ํ๋กํ ์ฝ์ ์ง์ํฉ๋๋ค. ๋คํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ์ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋คํธ์ํฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
Last updated