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