[Netty] ๋คํฐ๋?
๐ ๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ ๊ธ์์๋ ์๋ฐ ๋คํธ์ํฌ ํ๋ ์์ํฌ Netty๋ฅผ ์ ๋ฆฌํ๋ค.
Netty๋? ์๋ฐ ํ๊ฒฝ์์ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ์์ฝ๊ฒ ํด์ฃผ๋ ํ๋ ์์ํฌ. ๊ณ ์ฑ๋ฅยท๊ณ ์์ ์ฑ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์๋ค. ์์ ์์ผ ํ๋ก๊ทธ๋๋ฐ๋ณด๋ค ์ถ์ํ๋ก ํจ์ฌ ๊ฐ๊ฒฐํ๋ค.
1
2
3
Client โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Server
Outbound โโโบ Send (๋ช์์์?) โโโบ Inbound
Inbound โโโ (์คํ 8์) Response โโโ Outbound
Netty = ๋น๋๊ธฐ(Async) + ๋ ผ๋ธ๋กํน(Non-blocking) + ์ด๋ฒคํธ ๊ธฐ๋ฐ(Event-driven)
1. ๋๊ธฐ/๋น๋๊ธฐ vs ๋ธ๋กํน/๋ ผ๋ธ๋กํน
ํํ ํผ๋ํ์ง๋ง ์๋ก ๋ณ๊ฐ์ ๊ฐ๋ ์ด๋ค.
| ๊ฐ๋ | ๊ธฐ์ค | ์ ์ |
|---|---|---|
| ๋๊ธฐ/๋น๋๊ธฐ | ์์ ์ ์์ยท์ข ๋ฃ ์๊ฐ | ๋๊ธฐ: ์๊ฐ์ ๋ง์ถค / ๋น๋๊ธฐ: ๊ฐ์ ๋ณ๋ |
| ๋ธ๋กํน/๋ ผ๋ธ๋กํน | ๋ค๋ฅธ ์ฃผ์ฒด๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๊ฐ | ๋ธ๋กํน: ๊ธฐ๋ค๋ฆผ / ๋ ผ๋ธ๋กํน: ๊ณ์ ์งํ |
๐ก ๋ธ๋กํน ์: JDBC๋ก DB์ ์ง์ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ๋๊น์ง ๋๊ธฐ. ๋ ผ๋ธ๋กํน ์: ์์ฒญ๋ง ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์๊ธฐ ์ผ์ ๊ณ์.
๋น๋๊ธฐ + ๋ ผ๋ธ๋กํน ์กฐํฉ์ ์์์ด ์ถฉ๋ถํ๋ฉด ํจ์จ์ด ์ข๋ค. ์๊ธฐ ์์ ์ด ๋ฉ์ถ์ง ์๊ณ , ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ฉด ์ฝ๋ฐฑ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
| ์ ํฉํ ์ํฉ | ์ |
|---|---|
| ๋๊ท๋ชจยท๋๊ธฐ ๋ถํ์ | ๋๋ ํธ์ ๋ฉ์์ง ์ ์ก |
| ์ฌ๋ฌ ์ธ๋ถ API ๋์ ํธ์ถ | API ๋ณ๋ ฌ ํธ์ถ |
2. ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ
์ด๋ฒคํธ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํ๊ณ , ์ด๋ฒคํธ ๋ฐ์ ์ ์คํ๋ ์ฝ๋๋ฅผ ์ค๋นํ๋ค. (๋ ผ๋ธ๋กํน ์์ผ์ Selector I/O ๊ฐ์ง๊ฐ ๋ํ์ )
๋คํธ์ํฌ์์ ์ด๋ฒคํธ ๋ฐ์ ์ฃผ์ฒด๋ โ์์ผโ์ด๋ฉฐ, ์ด๋ฒคํธ ์ข ๋ฅ๋ ์์ผ ์ฐ๊ฒฐยท๋ฐ์ดํฐ ์ก์์ ์ด๋ค.
๐ก ๋คํฐ๋ ์ฑ๋์ ์ง์ ์ฝ๊ณ ์ฐ์ง ์๊ณ ๋ฐ์ดํฐ ํธ๋ค๋ฌ๋ฅผ ํตํด ์์ ํ๋ค. ๊ทธ ์ฅ์ ์:
- ์๋ฒ ์ฝ๋๋ฅผ ํด๋ผ์ด์ธํธ์์๋ ์ฌ์ฌ์ฉ
- ์ด๋ฒคํธ๋ณ ๋ก์ง ๋ถ๋ฆฌ โ ๊น๋
- ์๋ฌ ์ด๋ฒคํธ๋ ํจ๊ป ์ ์ โ ์๋ฌ ์ฒ๋ฆฌ ๋ถ๋ดโ
3. ChannelPipeline โ ๋คํฐ์ ํต์ฌ
๊ฐ TCP ์ฐ๊ฒฐ(
SocketChannel)์ ChannelPipeline์ ๊ฐ์ง๋ฉฐ, ์ด๋ ChannelHandler ์ธ์คํด์ค์ ๋ฆฌ์คํธ๋ค.
1
2
์์ผ โ [ChannelInboundHandler ์ฒด์ธ] โ ์ ํ๋ฆฌ์ผ์ด์
(์์ )
์ ํ๋ฆฌ์ผ์ด์
โ [ChannelOutboundHandler ์ฒด์ธ] โ ์์ผ (์ก์ )
| ๋ฐฉํฅ | ํธ๋ค๋ฌ ์ฒด์ธ |
|---|---|
| ์์ (Inbound) | ์์ผ ๋ฐ์ดํฐ โ Inbound ์ฒด์ธ โ ์ฑ |
| ์ก์ (Outbound) | ์ฑ ๋ฐ์ดํฐ โ Outbound ์ฒด์ธ โ ์์ผ |
๐ก ์ด ์ฒด์ธ ๋๋ถ์ ๋คํธ์ํฌ ํต์ ์ ์ ์ ํ ์ฒ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ๋ฃ์ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๊ฐ์ฒด ์ ์ก ์, ์ฒด์ธ ์์์ ์ง๋ ฌํ โ ์์ถ โ ๋ฐ์ดํธ ์ ์ก์ด ์๋์ผ๋ก ์ฒ๋ฆฌ๋๋ค. ํ ๋ฒ ๊ตฌํํด๋๋ฉด, ๊ฐ๋ฐ์๋ ๊ทธ๋ฅ ๊ฐ์ฒด๋ฅผ
write()๋ง ํ๋ฉด ์ ์ก๋๋ค.
๐ ์ ๋ฆฌ
1
2
3
4
5
6
Netty
โโ ์ ์ฒด ์๋ฐ ๋คํธ์ํฌ ํ๋ ์์ํฌ (๊ณ ์ฑ๋ฅยท๊ฐ๊ฒฐ)
โโ ํน์ง ๋น๋๊ธฐ + ๋
ผ๋ธ๋กํน + ์ด๋ฒคํธ ๊ธฐ๋ฐ
โโ ๊ฐ๋
๋๊ธฐ/๋น๋๊ธฐ(์๊ฐ) vs ๋ธ๋กํน/๋
ผ๋ธ๋กํน(๋๊ธฐ)
โโ ์ด๋ฒคํธ ์์ผ ์ด๋ฒคํธ(์ฐ๊ฒฐยท์ก์์ )๋ฅผ ํธ๋ค๋ฌ๋ก
โโ ํต์ฌ ChannelPipeline = ํธ๋ค๋ฌ ์ฒด์ธ (Inbound/Outbound)
| ๊ฐ๋ | ํ ์ค ์ ์ |
|---|---|
| Netty | ์๋ฐ ๊ณ ์ฑ๋ฅ ๋คํธ์ํฌ ํ๋ ์์ํฌ |
| ๋น๋๊ธฐ/๋ ผ๋ธ๋กํน | ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฝ๋ฐฑ์ผ๋ก |
| ChannelPipeline | ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํธ๋ค๋ฌ ์ฒด์ธ |
Netty์ ํต์ฌ์ ChannelPipeline(ํธ๋ค๋ฌ ์ฒด์ธ)์ผ๋ก ๋คํธ์ํฌ ์ฒ๋ฆฌ๋ฅผ ์ถ์ํํ๋ ๊ฒ์ด๋ค. ์ง๋ ฌํยท์์ถ ๊ฐ์ ๋ฐ๋ณต ์ฒ๋ฆฌ๋ฅผ ์ฒด์ธ์ ๋ฃ์ด๋๋ฉด, ๊ฐ๋ฐ์๋ write() ํ ๋ฒ์ผ๋ก ๋ณต์กํ ๋คํธ์ํฌ ํต์ ์ ๊ฐ๊ฒฐํ๊ฒ ๋ค๋ฃฐ ์ ์๋ค.




Comments powered by Disqus.