Skip to content

onjik/LAGACY-webflux-hls-video-streaming-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

64 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๊ฐœ์„ 

์ด ๊ธ€์—์„œ๋Š” ๋‚ด๊ฐ€ ์œ ํŠœ๋ธŒ ์„œ๋ฒ„์˜ ๋ฏธ๋””์–ด ๋„๋ฉ”์ธ์„ ๋งก์œผ๋ฉด์„œ ์–ด๋–ป๊ฒŒ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ์‹œ์ผœ ๋‚˜๊ฐ”๋Š”์ง€ ์„ค๋ช…ํ•œ๋‹ค.

๋‚ด๊ฐ€ ๋งก์€ ๋ฏธ์…˜

๋‚ด๊ฐ€ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๋งก์€ ์—ญํ• ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์œ ํŠœ๋ธŒ์—์„œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ด ๋˜๋Š” ๋™์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ ๋„๋ฉ”์ธ์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • ์œ ํŠœ๋ธŒ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ์ •์  ๋ฆฌ์†Œ์Šค๋“ค์„ ๊ด€๋ฆฌํ•œ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋™์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๊ตฌ์กฐ์ ์ธ ๊ด€์ ์—์„œ ๊ฐœ์„ ํ•œ ์ ์„ ๊ธฐ๋กํ•ด ๋‘๋ ค๊ณ ํ•œ๋‹ค.

1. ์ดˆ๊ธฐ ์„œ๋ฒ„ ๊ตฌ์กฐ

Untitled

์‚ฌ์‹ค ๊ตฌ์กฐ๋ž„ ๊ฒƒ๋„ ์—†๋Š” ๊ตฌ์กฐ์ด๋‹ค. ํŒ€์›๋“ค ์ค‘ ๋ฐฐํฌ๋‚˜ ์ด๋Ÿฐ ๋ฐฐํฌ ์•„ํ‚คํ…์ณ์— ๋Œ€ํ•œ ์ง€์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŒ€์›์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ์ € ๋‹จ์ˆœํ•˜๊ฒŒ ํ•˜๋‚˜์˜ spring boot ์„œ๋ฒ„๋ฅผ ๊ตฌ์ƒํ–ˆ์—ˆ๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ domain์„ ๋‚˜๋ˆ„์–ด ์ž‘์—…ํ•˜๋Š” ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ƒ์„ ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰์„ ํ•˜์˜€๋‹ค.

2. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ ๋ฐœ์ƒ : ๋ฏธ๋””์–ด ์„œ๋ฒ„์˜ ๋ถ„๋ฆฌ

์ด๋ ‡๊ฒŒ ์„ค์ •์„ ํ•˜๊ณ  ๋น„๋””์˜ค ์ŠคํŠธ๋ฆฌ๋ฐ์— ๋Œ€ํ•œ ํ”„๋กœํ†  ํƒ€์ž…์„ ์ž‘์„ฑํ•˜์˜€๋Š”๋ฐ, ์ •๋ง ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๐Ÿ‘‰ย ๋งˆ์ฃผํ•œ ๋ฌธ์ œ๋“ค

๋น„๋””์˜ค ์ธ์ฝ”๋”ฉ์— ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์†Œ๋ชจ๋œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์Šคํ”„๋ง์œผ๋กœ ๋งŽ์ดํ•˜๋Š” controller - service - dao - db ๋กœ ๋Œ€ํ‘œ๋˜๋Š” ๋กœ์ง๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ๋™์˜์ƒ์„ ์ธ์ฝ”๋”ฉํ•˜๊ณ  ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋กœ์ง์€ ์ •๋ง ๋งŽ์€ cpu burst๋ฅผ ํฌํ•จํ•˜๋Š” ์ž‘์—…์ด์—ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์„œ๋ฒ„ ์ŠคํŽ™์ด 1์ฝ”์–ด 1GB ๋ฉ”๋ชจ๋ฆฌ๋ผ๋Š” ์•ˆ์ข‹์€ ํ™˜๊ฒฝ์œผ๋กœ ์˜ˆ์ •์ด ๋˜์–ด์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“œ๋ ค๊ณ  ํ–ˆ๋‹ค.

๋˜ ๋ฏธ๋””์–ด ๋„๋ฉ”์ธ์˜ ์ž‘์—…์ด ์‹œ์Šคํ…œ ์ „์ฒด์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋˜๋ฉด, ์ „์ฒด ๋„๋ฉ”์ธ์˜ ์ž‘์—…์ด ๋™์‹œ์— ๋А๋ ค์ง€๋ฏ€๋กœ, ์ด๋Š” ํฐ ๋ฌธ์ œ์˜€๋‹ค

์ •์  ํŒŒ์ผ์ฒ˜๋ฆฌ๋Š” ์ƒ๋‹นํ•œ IO Blocking์„ ํฌํ•จํ•œ๋‹ค.

๋‚˜์˜ ๋กœ์ง์„ ์„ค๊ณ„ํ•˜๋ฉด์„œ ๋“  ์ƒ๊ฐ์€ ์ด ๋ฏธ๋””์–ด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋กœ์ง์ด ์ƒ๊ฐ๋ณด๋‹ค ๋„ˆ๋ฌด ๋งŽ์€ IO์ž‘์—…์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ผ๋‹จ ๋‹ค๋ฃจ๋Š” ํŒŒ์ผ ์ž์ฒด๊ฐ€ ๋™์˜์ƒ ํŒŒ์ผ์ด๋‹ค ๋ณด๋‹ˆ, ํŒŒ์ผ ์ž์ฒด์˜ ์šฉ๋Ÿ‰์ด ๋งค์šฐ ์ปธ๋‹ค.

๋˜ํ•œ ์˜์†์„ฑ ์žฅ์น˜๋กœ์˜ IO์ž‘์—…์€ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ CPU์˜ ์ฒ˜๋ฆฌ์†๋„๋ณด๋‹ค ๋А๋ฆฐ ๊ฒƒ์€ ๋งค์šฐ ์ž๋ช…ํ•œ ์‚ฌ์‹ค์ด์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚˜์˜ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด, ์š”์ฒญ-์‘๋‹ต ๊ฐ„ IO ๋ธ”๋กœํ‚น์ด ์ƒ๋‹น์‹œ๊ฐ„ ๊ฑธ๋ฆด๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ฏธ๋””์–ด ๋„๋ฉ”์ธ๋Š” ์“ฐ๋ ˆ๋“œ์˜ ๋Œ€๋ถ€๋ถ„์„ blocking์— ํ—ˆ๋น„ ํ•˜๊ณ  ์žˆ๋‹ค.

๋ฏธ๋””์–ด ๋„๋ฉ”์ธ๋Š” ์“ฐ๋ ˆ๋“œ์˜ ๋Œ€๋ถ€๋ถ„์„ blocking์— ํ—ˆ๋น„ ํ•˜๊ณ  ์žˆ๋‹ค.

Tomcat์€ ์“ฐ๋ ˆ๋“œํ’€ ๊ธฐ๋ฐ˜์œผ๋กœ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ์— ๋“ค์–ด๊ฐ€๋Š” ๋น„์šฉ ์ปค์ง€๊ฒŒ ๋˜๊ณ , ์ƒ์„ฑ๋œ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋Œ€๋ถ€๋ถ„ ๋ธ”๋กœํ‚น์„ ์œ„ํ•ด์„œ๋งŒ ์†Œ๋ชจ๋  ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ˜‘์—… ๊ด€์ ์˜ ๋ฌธ์ œ

๋‚˜์˜ ๋กœ์ง ์•ˆ์—๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ง์ ‘ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜, ์‹œ์Šคํ…œ ์ปค๋„์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•˜๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ์—ฌ๋Ÿฌ ๋ฌธ์ œ์ ์ด ์ƒ๊ฒผ๋‹ค.

  • ์ฝ”๋“œ, ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ๋ ค๋ฉด, ๊ฐ ํ˜‘์—…์ž์˜ ์ปดํ“จํ„ฐ์— ์•„ํ‚คํ…์ณ์— ๋งž๋Š” ์ปค๋„์„ ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค.
  • ๊ฐ ์šด์˜์ฒด์ œ๋ณ„๋กœ ํŒŒ์ผ ์ฃผ์†Œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๋‹ค.(์œˆ๋„์šฐ์™€ unix๊ธฐ๋ฐ˜์˜ ํŒŒ์ผ ํŒจ์Šค๋Š” ํ˜ธํ™˜์ด ๋˜์ง€ ์•Š๋Š”๋‹ค)
  • ๋‚˜์˜ ์ฝ”๋“œ๋ฅผ ๋กœ์ปฌ์—์„œ ๋Œ๋ฆฌ๊ฒŒ๋˜๋ฉด ํ˜‘์—…์ž์˜ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ ‘๊ทผํ•ด์„œ ์ž‘์—…์„ ํ•ด์•ผ๋˜๋Š”๋ฐ ์ด๋Š” ์ƒ๋‹นํ•œ ๋ถ€๋‹ด์ด์—ˆ๋‹ค.
  • ํŒ€์› ์ƒ๋‹น์ˆ˜๊ฐ€ ์•„์ง ์‹ค๋ ฅ์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค์–‘ํ•œ ์„ค์ •์„ ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์› ๋‹ค.

๊ธธ๊ฒŒ ๋‚˜์—ดํ–ˆ์ง€๋งŒ, ํ•œ๋งˆ๋””๋กœ ๋ง์„ ํ•˜์ž๋ฉด, ๋‚˜์˜ ๋„๋ฉ”์ธ์˜ ๋กœ์ง๋“ค์€ ์‹œ์Šคํ…œ์— ์ง์ ‘์ ์œผ๋กœ ์ข…์†๋˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•„์„œ ํ˜‘์—…ํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋งŽ์•˜๋‹ค.

์Šค์ผ€์ผ ์—…(์ˆ˜ํ‰์  ํ™•์žฅ)์˜ ๋ฌธ์ œ

๋งŒ์•ฝ ๋‚˜์ค‘์— ์„ฑ๋Šฅ์„ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋‘๊ณ  ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ์ƒ๋‹นํžˆ ๋น„ํšจ์œจ์ ์ด๊ฒŒ ๋ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ์„œ๋ฒ„๋ฅผ ๋Š˜๋ฆฌ๋Š” ์ด์œ ๋Š” ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์†Œ๋ชจํ•˜๋Š” ๋ฏธ๋””์–ด ๋„๋ฉ”์ธ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ธ๋ฐ, ์ด ๋กœ์ง์ด ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ํ•ฉ์ณ์ ธ ์žˆ๋‹ค๋ฉด, ๋ณ„๋กœ ํ™•์žฅ์ด ํ•„์š”์—†๋Š” ๋‹ค๋ฅธ ๋„๋ฉ”์ธ๋“ค๊นŒ์ง€ ํ•จ๊ป˜ ๋”ธ๋ ค์˜ค๊ฒŒ ๋˜๋ฏ€๋กœ ํ™•์žฅํ•  ์ˆ˜๋ก ๋น„ํšจ์œจ์ ์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๐Ÿ‘‰ย ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ

๊ทธ๋ž˜์„œ ๋‚œ ๊ฒฐ๊ตญ ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ๋กœ ๋งˆ์Œ์„ ๋จน์—ˆ๋‹ค.

๋ฏธ๋””์–ด ์„œ๋ฒ„๋ฅผ ๋ณ„๋„์˜ ์„œ๋ฒ„๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ณธ ์„œ๋ฒ„์™€๋Š” API๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š”๊ฒŒ ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์–ป๋Š” ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.

  • ์Šค์ผ€์ผ์—…์ด ์ž์œ ๋กญ๋‹ค
  • ํ˜‘์—…์ด ์šฉ์ดํ•˜๋‹ค.
  • ๋” ํšจ์œจ์ ์ธ ์„ค๊ณ„๋ฅผ ์œ„ํ•ด ์ž์œ ๋กญ๊ฒŒ ๊ธฐ์ˆ ์Šคํƒ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฏธ๋””์–ด ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ–ˆ๋‹ค.

๋ฏธ๋””์–ด ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ–ˆ๋‹ค.

3. ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ 1 : ์›น์„œ๋ฒ„(nginx) ๋„์ž…

๊ทธ ๋‹ค์Œ ์ƒ๊ฐํ•œ ๊ฒƒ์ด web server์˜€๋‹ค. ๊ณผ์—ฐ ์ •์ ํŒŒ์ผ์„ ๋‹จ์ˆœํ•˜๊ฒŒ ์‘๋‹ตํ•  ๋•Œ๋„ WAS์˜ ๋†’์€ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ๊ฐ€ ์˜€๋‹ค.

์‚ฌ์‹ค ๋‹จ์ˆœํ•œ ํŒŒ์ผ ์„œ๋น™์˜ ๊ฒฝ์šฐ ์›น์„œ๋ฒ„๊ฐ€ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ•˜์˜€๋‹ค. ๊ทธ๋ž˜์„œ ์›น์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ฒ„์‹œ ํ”„๋ก์‹œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๋„์ž…ํ•˜๋ฉฐ ๊ธฐ๋Œ€ํ•œ ํšจ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋ฏธ๋””์–ด ๋„๋ฉ”์ธ์˜ ๋‹จ์ˆœ ํŒŒ์ผ ์„œ๋น™ ๊ธฐ๋Šฅ์„ ์›น์„œ๋ฒ„๋กœ ๋„˜๊ธฐ๋ฉด์„œ WAS์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ธ๋‹ค.
  • ๋ฐ˜๋ณต๋˜๋Š” ์ •์  ์ปจํ…์ธ ๋Š” ์บ์‹ฑ์„ ํ†ตํ•ด ์„ฑ๋Šฅ์„ ๋†’์ธ๋‹ค.
  • ์ถ”ํ›„ ์„œ๋ฒ„๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ํ™•์žฅ ํ•  ๋•Œ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋กœ์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‚ด๋ถ€์— ์›น์„œ๋ฒ„๋ฅผ ๋‘์–ด ์ •์ ํŒŒ์ผ ์„œ๋น™ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜๊ณ , ์บ์‹ฑ์ด ์šฉ์ดํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

๋‚ด๋ถ€์— ์›น์„œ๋ฒ„๋ฅผ ๋‘์–ด ์ •์ ํŒŒ์ผ ์„œ๋น™ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜๊ณ , ์บ์‹ฑ์ด ์šฉ์ดํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

์„œ๋ฒ„ ๋ณผ๋ฅจ์„ ๊ฐ ๋„์ปค ์ด๋ฏธ์ง€์— ๋ณผ๋ฅจ ๋งˆ์šดํŠธ ์‹œํ‚ค๊ณ , WAS์„œ๋ฒ„๋Š” ์ •๋ง ๋น„๋””์˜ค ์ธ์ฝ”๋”ฉ์ด๋‚˜ ๋ณต์žกํ•œ ๋กœ์ง ์ฒ˜๋ฆฌ๋งŒ ๋‹ด๋‹นํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

๊ทธ๋ฆฌ๊ณ  Nginx๋Š” ๊ณต์œ ๋œ ๋ณผ๋ฅจ์—์„œ ๋™์˜์ƒ ํŒŒ์ผ์ด๋‚˜, m3u8 ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ, ์ธ๋„ค์ผ ํŒŒ์ผ๊ฐ™์ด ํฐ ๊ทœ๋ชจ์˜ ์ •์  ํŒŒ์ผ๋“ค์„ ์„œ๋น™ํ•˜๋„๋ก ์—ญํ• ์„ ๋ถ„๋ฆฌ์‹œ์ผฐ๋‹ค.

๋ฌผ๋ก  ๋‚˜์˜ ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ์ง‘์–ด ๋„ฃ์—ˆ์ง€๋งŒ, Nginx๋ฅผ ๋ณ„๋„๋กœ ๋ถ„๋ฆฌ์‹œ์ผœ๋„ ๋˜๊ณ , ์ € ๋ณผ๋ฅจ ๋งˆ์šดํŠธ ๋œ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋‹ค๋ฅธ CDN๊ฐ™์€ ์„œ๋น„์Šค๋กœ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ•  ๋ถ„๋‹ด์ด ์ด๋ฃจ์–ด ์กŒ๋‹ค.

Nginx

  • ์ •์ ํŒŒ์ผ ์„œ๋น™
  • ํ”„๋ก์‹œ/์บ์‹ฑ

Spring Webflux (WAS)

  • ์ธ์ฝ”๋”ฉ
  • ์ •์ ํŒŒ์ผ ์ƒ์„ฑ/์ €์žฅ
  • ์ธ์ฝ”๋”ฉ ์ƒํ™ฉ ์ค‘๊ณ„ ๋“ฑ ๋ณต์žกํ•œ ๋กœ์ง

๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ๋‘๊ณ , ์บ์‹ฑ์„ ํ•˜๋„๋ก ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜์˜€๋‹ค.

๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ๋‘๊ณ , ์บ์‹ฑ์„ ํ•˜๋„๋ก ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜์˜€๋‹ค.

4. ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ 2: ์ด๋ฒคํŠธ ๋ฃจํ”„์™€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

๊ทธ๋ž˜๋„ ๋‚จ์€ ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ๋‹ค.

๋‚˜์˜ ๋กœ์ง์˜ ๋Œ€๋ถ€๋ถ„์ด IO ๋ธ”๋กœํ‚น์ด ํฌํ•จ๋˜์–ด ์žˆ๊ณ , ์„œ๋ฒ„์˜ ์ŠคํŽ™์ด ์ข‹์ง€ ๋ชปํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์„œ๋ฒ„์˜ ์ŠคํŽ™์ด 1Gb ๋ฉ”๋ชจ๋ฆฌ์™€ 1Core cpu ์˜€๋Š”๋ฐ, ์ด ๋งˆ์ €๋„ ARM๊ธฐ๋ฐ˜์ด์—ˆ๋‹ค.

๋งŒ์•ฝ ๊ธฐ์กด์˜ ํ†ฐ์บฃ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„ํ•œ๋‹ค๋ฉด, ๊ณ„์†ํ•ด์„œ ๋Š˜์–ด๋‚˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฒ„ํ‹ฐ๊ธฐ ํž˜๋“ค๋‹ค๊ณ  ์ƒ๊ฐํ•˜์˜€๋‹ค. ๋˜ํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์ ๋„ ์žˆ์—ˆ๋‹ค.

  • ์‹ฑ๊ธ€ ์ฝ”์–ด ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋งŽ์€ ์–‘์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ทธ๋‹ค์ง€ ํšจ์œจ์ ์ด์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.
  • ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋งŽ์•„์ง€๋ฉด, Context Switching ๋น„์šฉ๊ณผ ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ๋น„์šฉ์ด ๊ธ‰๊ฒฉํžˆ ๋Š˜์–ด๋‚  ๊ฒƒ์ด๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์ด ๋ธ”๋กœํ‚น ์ž‘์—…์ด๊ณ , ๊ทธ ๋ธ”๋กœํ‚น ์‹œ๊ฐ„๋™์•ˆ ์—ฐ์‚ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งค์šฐ๋งค์šฐ ๋งŽ์ด ์†Œ๋ชจํ•œ๋‹ค.(์ธ์ฝ”๋”ฉ ์ž‘์—…)
  • ์ธ์ฝ”๋”ฉ ์š”์ฒญ์ด ๋งŽ์ด ๋“ค์–ด์˜ค๋ฉด, ์‹œ์Šคํ…œ์ด ๋” ๋А๋ ค์งˆ ๊ฒƒ์ด๊ณ , ์ด๋Š” ์ธ์ฝ”๋”ฉ ์ฒ˜๋ฆฌ๋ฅผ ๋” ๋А๋ฆฌ๊ฒŒ ๋งŒ๋“œ๋ฏ€๋กœ, ์š”์ฒญ์ด ๋”์šฑ ์ ์ฒด๋˜๊ฒŒ ๋งŒ๋“ค์–ด ์•…์ˆœํ™˜์ด ๋ฐ˜๋ณต๋œ๋‹ค.

์š”์ฒญ์ด ๋Š˜์–ด๋‚˜๋ฉด, ์ธ์ฝ”๋”ฉ ์ž‘์—…์ด ๋” ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ณ , ์ด๋Š” ๋ฌธ๋งฅ ์ „ํ™˜๋น„์šฉ์„ ๋„ˆ๋ฌด ๋†’์ธ๋‹ค.

์š”์ฒญ์ด ๋Š˜์–ด๋‚˜๋ฉด, ์ธ์ฝ”๋”ฉ ์ž‘์—…์ด ๋” ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ณ , ์ด๋Š” ๋ฌธ๋งฅ ์ „ํ™˜๋น„์šฉ์„ ๋„ˆ๋ฌด ๋†’์ธ๋‹ค.

๋”ฐ๋ผ์„œ ๊ธฐ์กด์˜ ์“ฐ๋ ˆ๋“œ ํ’€ ๋ฐฉ์‹์œผ๋กœ๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ•˜์˜€๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜ ๋ชฉํ‘œ๋ฅผ ์žก์•˜๋‹ค.

  • ์ธ์ฝ”๋”ฉ ์š”์ฒญ์ด ์˜ค๋ฉด, ํ์— ๋“ฑ๋กํ•˜๊ณ , ์ฆ‰์‹œ ํ™•์ธ์‘๋‹ต(์™„๋ฃŒ์‘๋‹ต์ด ์•„๋‹ˆ๋ผ)๋ฅผ ๋ณด๋‚ธ๋‹ค.
  • ๋ณ„๋„๋กœ ์ œํ•œ๋œ ์“ฐ๋ ˆ๋“œ ํ’€์„ ์ƒ์„ฑํ•˜๊ณ , ํ•œ๋ฒˆ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์ธ์ฝ”๋”ฉ ์ž‘์—… ์ˆ˜๋ฅผ ์ œํ•œํ•œ๋‹ค.
  • ๋Œ€๊ธฐ ์ค‘์ธ ์ž‘์—…์€ ๊ฐ€๋ฒผ์šด ์ธ์ฝ”๋”ฉ ์ฃผ๋ฌธ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ํ์— ์ €์žฅํ•œ๋‹ค.
  • ์“ฐ๋ ˆ๋“œ๋ฅผ ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ž.

์œ„์™€ ๊ฐ™์€ ์‚ฌํ•ญ์„ ๋งŒ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด WebFlux๋ฅผ ๋„์ž…ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฐฉ์‹์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

WebFlux๋ฅผ ์„ ํƒํ•œ ํ•œ๊ฐ€์ง€ ์ถ”๊ฐ€์ ์ธ ์ด์œ ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ๋ฏธ๋””์–ด ์„œ๋ฒ„์˜ ์ฃผ์š” API์ค‘ ํ•˜๋‚˜์ธ ์ง„ํ–‰ ์ƒํ™ฉ์„ SSE๋กœ BroadCastํ•˜๋Š” ์ž‘์—…์„ ์กฐ๊ธˆ๋” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ ์ด์—ˆ๋‹ค.

WebFlux๋„์ž…๊ณผ ์‹œ์Šคํ…œ ์„ค๊ณ„

WebFlux๋„์ž…๊ณผ ์‹œ์Šคํ…œ ์„ค๊ณ„

์ด๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.

  • Non-Blocking ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ๋„์ž…ํ•ด์„œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๋น ๋ฅด๊ฒŒ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. โ†’ ์ธ์ฝ”๋”ฉ์ด ์ ์ฒด๋˜์–ด ๋‹ค๋ฅธ ๊ฐ€๋ฒผ์šด ์‘๋‹ต์ด ์•ˆ๊ฐ€๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Bonded Thread Pool์€ ์‹œ์Šคํ…œ ์ฝ”์–ด์˜ ๋‘๋ฐฐ๊นŒ์ง€๋งŒ ์ƒ์„ฑ๋˜๋„๋ก ํ•˜์—ฌ ๊ณผ๋„ํ•œ ์“ฐ๋ ˆ๋“œ ๊ฒฝ์Ÿ ๋ฐฉ์ง€, ์•…์ˆœํ™˜ ์˜ˆ๋ฐฉ
  • ํŒŒ์ผ(๋น„๋””์˜ค)์„ ๊ทธ๋Œ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค ๋†“๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ผ๋‹จ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์›๋ณธ์„ ์ €์žฅํ•˜๊ณ , ๊ฒฝ๋กœ(String)๋งŒ ํ์— ๋“ฑ๋กํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ€์žฅ ํ•ต์‹ฌ์€, ์‹ฑ๊ธ€ ์ฝ”์–ด์— ์‚ฌ์–‘์ด ๋งŽ์ด ๋–จ์–ด์ง€๋Š” ์„œ๋ฒ„์—์„œ ์ƒ๋‹นํžˆ ๊ณ ํšจ์œจ๋กœ ๋กœ์ง๋“ค์„ ๋Œ๋ฆด ์ˆ˜ ์žˆ์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

5. ์ธ์ฝ”๋”ฉ ์ž‘์—…๊ณผ ํŒŒ์ผ ์ €์žฅ ์ž‘์—… ์“ฐ๋ ˆ๋“œ ๋ถ„๋ฆฌ

์ด๋ ‡๊ฒŒ ๊ฐœ์„ ํ•œ ์„œ๋ฒ„ ๋กœ์ง์ธ๋ฐ๋„ ์•„์ง ๋งŽ์ด ๋ถ€์กฑํ–ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

  • ๋™์˜์ƒ POST์š”์ฒญ์„ ์—ฐ์†ํ•ด์„œ 2๊ฐœ ์ด์ƒ ๋ณด๋‚ด๋ฉด, Connection Timeout์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

๋งจ ์ฒ˜์Œ์—๋Š” ์„œ๋ฒ„์˜ ์‚ฌ์–‘์ด ๋ถ€์กฑํ•ด์„œ ๊ทธ๋Ÿฌ๊ฒ ๊ตฌ๋‹ˆ ํ•˜๊ณ  ๋„˜์–ด๊ฐ”์ง€๋งŒ, ๊ณ„์†ํ•ด์„œ ์ƒ๊ฐํ•˜๋‹ค ๋ณด๋‹ˆ ๋ฌธ์ œ์ ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋‚˜์˜ ๋น„๋””์˜ค ์ €์žฅ๋กœ์ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ฅธ๋‹ค

  1. ์š”์ฒญ์„ ๋ฐ›๋Š”๋‹ค
  2. ์š”์ฒญ์„ ๊ฒ€์ฆํ•œ๋‹ค. (ํ•„๋“œ๋‚˜, ํŒŒ์ผ์˜ ํ˜•์‹์ด๋‚˜ ๋“ฑ)
  3. ํŒŒ์ผ์„ ์ €์žฅํ•œ๋‹ค. (๋ฉ”๋ชจ๋ฆฌ โ†’ ํŒŒ์ผ ์‹œ์Šคํ…œ)
  4. ์ €์žฅ๋œ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•œ ์ธ์ฝ”๋”ฉ ์š”์ฒญ์„œ (ํ™”์งˆ, ์˜ค๋””์˜ค ์—ฌ๋ถ€ ๋“ฑ)์„ ์ž‘์„ฑํ•ด์„œ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค.
  5. ์ˆœ์„œ๊ฐ€ ๋˜๋ฉด ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฐฐ์ •๋ฐ›๊ณ  ์ธ์ฝ”๋”ฉ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋ฌธ์ œ๋Š” ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๋กœ์ง๊ณผ ์ธ์ฝ”๋”ฉ์„ ํ•˜๋Š” ๋กœ์ง์ด ๋ชจ๋‘ Bounded ์“ฐ๋ ˆ๋“œํ’€์—์„œ ๊ฐ™์ด ๋Œ€๊ธฐ๋ฅผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

์ธ์ฝ”๋”ฉ ์ž‘์—…์€ ํ‰๊ท ์ ์œผ๋กœ ์‹œ๊ฐ„์„ ๋งŽ์ด ์žก์•„๋จน๊ณ , ํŒŒ์ผ ์ €์žฅ ์ž‘์—…์€ ๋น„๊ต์  ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋๋‚ฌ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

Bounded ์“ฐ๋ ˆ๋“œ ํ’€์— ๋™์˜์ƒ ์ธ์ฝ”๋”ฉ ์ž‘์—…์ด ๋ชจ๋‘ ๋“ค์–ด๊ฐ€๊ณ  ๋‚˜๋ฉด, ํŒŒ์ผ ์ €์žฅ๋กœ์ง์ด ๋Œ€๊ธฐ๋ฅผ ํ•˜๋А๋ผ ์š”์ฒญ์ด TimeOut ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹๊นŒ?

์ƒ๋‹นํžˆ ํ•ฉ๋ฆฌ์ ์ธ ์˜์‹ฌ์ธ ๊ฒƒ์ด, ๋‚˜์˜ ์„œ๋ฒ„ ์ฝ”์–ด ์ˆ˜๋Š” 1๊ฐœ์ด๊ณ  ๋”ฐ๋ผ์„œ 2๊ฐœ์งœ๋ฆฌ ์“ฐ๋ ˆ๋“œ ํ’€์ด ์ƒ์„ฑ์ด ๋ ํ…๋ฐ, ๊ทธ๋ ‡๋‹ค๋ฉด ์‹คํ—˜์ ์œผ๋กœ ์–ป์€ ์ตœ๋Œ€ 2๊ฐœ ์ธ์ฝ”๋”ฉ์ด๋ผ๋Š” ์ˆ˜์น˜๊ฐ€ ๋“ค์–ด๋งž์•˜๋‹ค. (2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ ์œ ๋‹นํ–ˆ์œผ๋ฏ€๋กœ)

๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐœ์„ ํ•˜์˜€๋‹ค.

๊ฐœ์„ ๋œ ์‹œ์Šคํ…œ, ๋” ์ด์ƒ ์š”์ฒญ์— ๋Œ€ํ•œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค

๊ฐœ์„ ๋œ ์‹œ์Šคํ…œ, ๋” ์ด์ƒ ์š”์ฒญ์— ๋Œ€ํ•œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค

์ธ์ฝ”๋”ฉ ์ž‘์—…๋งŒ์„ ์œ„ํ•œ Bounded ์“ฐ๋ ˆ๋“œ ํ’€์„ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•œ ํ›„, ์ธ์ฝ”๋”ฉ ์ž‘์—…์—๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฐฐ์ •ํ•˜์˜€๋‹ค.

์ด๋กœ์จ ์ธ์ฝ”๋”ฉ ์ž‘์—… ์“ฐ๋ ˆ๋“œํ’€์€ ์ธ์ฝ”๋”ฉ ์ž‘์—…๋งŒ ์ง„ํ–‰ํ•˜๊ณ , ๋‚˜๋จธ์ง€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ธ”๋กœํ‚น ์ž‘์—…์€ ์—ฌ๊ธฐ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ์ž˜ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

์ง์ ‘ PostMan์œผ๋กœ ์—ฐ์†ํ•ด์„œ ๋™์˜์ƒ ๋“ฑ๋ก ์š”์ฒญ์„ 10๋ฒˆ ์ •๋„ ๋ณด๋‚ด ๋ณด์•˜์ง€๋งŒ, ์š”์ฒญ๊ฐ„ ์ง€์—ฐ์‹œ๊ฐ„์ด ๋น„์Šทํ•˜๊ฒŒ ์ž˜ ์ฒ˜๋ฆฌ๋˜์—ˆ๋‹ค. (๋ฌผ๋ก  ์•ฝ๊ฐ„์˜ ์ง€์—ฐ์€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ, ๊ธฐ์กด์˜ TimeOut์— ๋น„ํ•˜๋ฉด, ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹ˆ์—ˆ๋‹ค.)

๊ฒฐ๊ณผ

์ด ๊ธ€์—์„œ๋Š” ๋‹ค๋ฅธ ๋ถ€๋ถ„์€ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ์— ๊ด€ํ•ด์„œ ๊ฐœ์„ ํ•œ ๋ถ€๋ถ„์„ ์œ„์ฃผ๋กœ ์ž‘์„ฑํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ฐœ์„ ์‚ฌํ•ญ์€ ๋‹ค๋ฅธ ๊ธ€์— ์ ๋„๋ก ํ•˜๊ฒ ๋‹ค.

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๋กœ์ง์ด ์•„๋‹Œ ์ด๋Ÿฌํ•œ ์„œ๋ฒ„์˜ ๋ฐฐ์น˜๋‚˜, ๋กœ์ง ๋ถ„๋ฐฐ, ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋งŒ์œผ๋กœ ์ƒ๋‹นํžˆ ๋งŽ์€ ๊ฐœ์„ ์„ ์ด๋ฃจ์—ˆ๋‹ค.

๋งจ ์ฒ˜์Œ WAS ํ•˜๋‚˜๋งŒ์œผ๋กœ ์ „์ฒด ์„œ๋ฒ„๋ฅผ ๋Œ๋ ธ์„ ๋•Œ๋Š” ํ•˜๋‚˜์˜ ์ธ์ฝ”๋”ฉ ์ž‘์—…๋„ ์ž˜ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜์˜€์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ฒˆ์˜ ๊ฐœ์„ ์„ ํ†ตํ•ด 1Gb ๋ฉ”๋ชจ๋ฆฌ์™€ 1Core(Arm) CPU๋ผ๋Š” ์—ด์•…ํ•œ ์„œ๋ฒ„ํ™˜๊ฒฝ์—์„œ๋„ ๋ฌด์‚ฌํžˆ ๋Œ์•„๊ฐ€๋Š” ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

๋น„๋™๊ธฐ ์ธ์ฝ”๋”ฉ ์ง„ํ–‰ ์ƒํ™ฉ ์ œ๊ณต

๋™์˜์ƒ ์ธ์ฝ”๋”ฉ์„ ๋น„๋™๊ธฐ๋กœ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋‹ˆ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์ด ์ƒ๊ฒผ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ๋™์˜์ƒ ์ธ์ฝ”๋”ฉ ์ž‘์—…์ด ์–ผ๋งˆ๋‚˜ ์ง„ํ–‰๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์ง€?

๋‚˜๋Š” ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ, ์„œ๋ฒ„ ๋‚ด๋ถ€์— ConcurrentHashMap์„ ๋‘์–ด ํ•ด๊ฒฐ ํ•˜์˜€๋‹ค.

์ธ์ฝ”๋”ฉ ์ž‘์—… ๋งˆ๋‹ค ๊ณ ์œ ํ•œ ํ‚ค ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ๋‚ด๋ถ€์— Project Reactor์˜ Flux.Sink๋ฅผ ๋‘์–ด BroadCast๋ฅผ ํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

ConcurrentHashMap์„ ์‚ฌ์šฉํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ์—”ํŠธ๋ฆฌ๋งˆ๋‹ค ๋ฝ์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋˜์–ด, ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ๋™์‹œ์— Map์„ ์กฐํšŒํ•˜๋”๋ผ๋„ ์„ฑ๋Šฅํ•˜๋ฝ์„ ์ตœ์†Œํ™”ํ•˜์˜€๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํ•˜์—ฌ, ๋™์˜์ƒ ์ž‘์—…์ด ์ ‘์ˆ˜๋˜๋ฉด, READY์ƒํƒœ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ , ๋™์˜์ƒ ์ธ์ฝ”๋”ฉ์ด ์ง„ํ–‰๋  ๋•Œ๋Š”, ffmpeg์˜ ๋กœ๊ทธ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ๋ฐฑ๋ถ„์œจ ํ˜•์‹์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ํผ๋ธ”๋ฆฌ์‹ฑ ํ•˜์˜€๋‹ค.

์ด ํผ๋ธ”๋ฆฌ์‹ฑ ํ•œ ์ด๋ฒคํŠธ๋Š” SSE๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ง€์†์ ์œผ๋กœ ์ „๋‹ฌํ•˜๋„๋ก ์„ค๊ณ„ํ•˜์˜€๋‹ค.

์ƒˆ๋กœ์šด ๋ฌธ์ œ์ ๊ณผ ๋‹ค๋ฅธ ํ•™์Šต

์ด๋ ‡๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ๋‚˜๋‹ˆ, ํ™•์‹คํžˆ ๋ณด๋Š” ๋ˆˆ์ด ๋งŽ์ด ๋‹ฌ๋ผ์กŒ๋‹ค. ๊ธฐ์กด์—๋Š” ๋ฐฐํฌ๋‚˜, ํ˜‘์—… ๊ด€์ ์˜ ๋ฌธ์ œ๋Š” ๊ฒฝํ—˜ํ•ด ๋ณธ์ ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋๋‚ด๊ณ  ๋‚˜๋‹ˆ, ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ ์ด ๋งŽ์ด ๋ณด์˜€๋‹ค.

์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค์˜ ํ•„์š”์„ฑ - ์„œ๋ฒ„๊ฐ„ ํ†ต์‹ 

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์ฒ˜์Œ์œผ๋กœ ์„œ๋ฒ„๊ฐ„ ํ†ต์‹ ์„ ํ•˜๋ฉฐ ๋กœ์ง์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(?) ๊ฐ™์€ ๋ฐฉ์‹์„ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด ๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ ์ƒ๋‹นํžˆ ๋งŽ์€ ๋ฌธ์ œ์ ์ด ๋ณด์˜€๋‹ค.

์ผ๋‹จ ์„œ๋ฒ„๊ฐ„ ์˜์กด์„ฑ์ด ๋งค์šฐ ์ปค์ง„๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๋˜ํ•œ API ์„œ๋ฒ„๊ฐ€ ์ด ํฐ ๋™์˜์ƒ ํŒŒ์ผ์„ ๋ฐ›์•„์„œ ๋˜ ๋‹ค๋ฅธ ์„œ๋ฒ„์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์ด ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ด์—ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ณ„์†ํ•ด์„œ ์ง„ํ–‰ํ•˜๋ฉด ๋งŽ์€ ๋น„ํšจ์œจ์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ๋ฒˆ์— ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋งŒ์•ฝ ์„œ๋ฒ„๊ฐ€ ๋‘๋Œ€๊ฐ€ ์•„๋‹ˆ๋ผ ๋งŽ์€ ๋„๋ฉ”์ธ์ด ์žˆ๋‹ค๋ฉด? ์ด๊ฑด ๋ญ ์ƒ์ƒํ•˜๊ธฐ๋„ ์‹ซ๋‹ค. ์„œ๋กœ ์ปค๋„ฅ์…˜์ด ์–ฝํžˆ๊ณ  ์„ฅํ˜€์„œ ๋””๋ฒ„๊น…๋„ ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์„œ๋กœ์˜ ip์ฃผ์†Œ๋‚˜ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•ด์•ผํ•˜๊ณ , ๋ฌธ์ œ์ ์ด ๋„ˆ๋ฌด ๋งŽ์ด ๋ณด์˜€๋‹ค.

์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค์˜ ํ•„์š”์„ฑ - ์ค‘๊ณ„๋กœ์ง

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ๋งŒ ํ•ด๋„ ํด๋ผ์šฐ๋“œ์— ๋Œ€ํ•œ ์ง€์‹์ด ์ „๋ฌดํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„œ๋ฒ„์— ์˜ฌ๋ฆฌ๊ณ  ํ•˜๋ฉฐ aws๋‚˜ ๋‹ค๋ฅธ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์ž ์‹œ ์•Œ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์™„์ „ํžˆ ๋‹ค๋ฅธ ์‹œ์•ผ๊ฐ€ ๋ณด์˜€๋‹ค.

๋‚ด๊ฐ€ ์ธ์ฝ”๋”ฉ ๋กœ์ง์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ์“ฐ๋ ˆ๋“œํ’€์„ ๋‘์–ด ์ฒ˜๋ฆฌํ•œ ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ, ์˜คํ† ์Šค์ผ€์ผ๋ง์ด๋‚˜ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์ด๋‚˜, ์ •๋ง ๋” ํƒ์›”ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ๋‹ค์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋™์˜์ƒ ํŒŒ์ผ์˜ ์ฒ˜๋ฆฌ

๋™์˜์ƒ ํŒŒ์ผ์„ ์„œ๋ฒ„ ์ž์ฒด์— ์ €์žฅํ•˜๋Š”๊ฒƒ ๋˜ํ•œ ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ๊ณ„์†ํ•ด์„œ ๋Š˜์–ด๋‚œ๋‹ค๋ฉด? ์ด ๋ชจ๋“  ๊ฒƒ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅํ•  ๊ฒƒ์ธ๊ฐ€?

๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๋™์˜์ƒ์˜ ๋ถ„์„์˜ ํ•„์š”์„ฑ

๋™์˜์ƒ์„ ๊ฒ€์ƒ‰ํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

WebFlux์˜ ์ž˜๋ชป๋œ ๋„์ž…

์ด์ œ๊นŒ์ง€ WebFlux์˜ ์žฅ์ ์„ ์ˆ˜๋‘๋ฃฉํ•˜๊ฒŒ ์จ๋†“๊ณ  ์ด์ œ์™€์„œ ์ž˜๋ชป๋œ ๋„์ž…์ด๋ผ๋‹ˆ?

์ผ๋‹จ ๋‚˜์˜ ๋กœ์ง ์ž์ฒด๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด ๋ธ”๋กœํ‚น ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์—, WebFlux์˜ ๋…ผ๋ธ”๋กœํ‚น ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ์žฅ์ ์„ ์ „ํ˜€์‚ด๋ฆฌ์ง€ ๋ชปํ–ˆ๋‹ค. ์‹ค์ œ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์ด ์“ฐ๋ ˆ๋“œ ํ’€์— ๋ฐฐ์ •์ด ๋˜์–ด, ์ผ๋ฐ˜ ์„œ๋ธ”๋ฆฟ ํ†ฐ์บฃ ๊ธฐ๋ฐ˜์˜ ์„œ๋ฒ„์™€ ๋‹ค๋ฅผ๋ฐ”๊ฐ€ ์—†์—ˆ๋‹ค.

๋˜ํ•œ Reactor์˜ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์€ ์ •๋ง ๋‹ค๋ฅธ ์‹œ๊ฐ์„ ์ฃผ๊ณ  ๋ถ„๋ช…ํžˆ ์œ ์šฉํ•œ ๋ถ€๋ถ„์ด ์žˆ์—ˆ์ง€๋งŒ, ์ต์ˆ™ํ•˜์ง€ ์•Š์•„ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๊ณ , ์ž˜๋ชป ์„ค๊ณ„ํ•˜๋ฉด ์ „ํ˜€ ๊ทธ ์žฅ์ ์„ ๊ฐ€์ ธ๊ฐ€๊ธฐ ์–ด๋ ค์› ๋‹ค. ๋˜ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ฌด์กฐ๊ฑด ์šฐ์›”ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ๋„ ์•Œ์•˜๋‹ค. ๋ถ„๋ช…ํ•œ ์žฅ๋‹จ์ ์ด ์žˆ์—ˆ๋‹ค.

์–ด๋–ค ์ฝ”๋“œ์—์„œ๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋…์„ฑ์„ ์˜ฌ๋ ค์ค€ ๋ฐ˜๋ฉด, ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งŽ์•˜๋‹ค. ๋˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ํž˜๋“ค๊ณ , ์˜ˆ์ƒํ•˜๊ธฐ ํž˜๋“ค๋‹ค. ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋‹ค๋ฅด๊ธฐ๋„ ํ–ˆ๊ณ , ๊ฐ๊ฐ์— ์˜ˆ์™ธ ์ฝœ๋ฐฑ์„ ๋‹ฌ์•„์ค˜์•ผํ•˜๊ณ , ์ „์ฒด์ ์ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ๋ฆ„์„ ๋ณด๊ธฐ๊ฐ€ ์–ด๋ ค์› ๋‹ค.

๊ทธ๋‹ค์Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฌธ์ œ๋Š”, R2DBC ์˜ ์„ฑ์ˆ™๋„ ๋ฌธ์ œ์˜€๋‹ค. R2DBC๋Š” ๋ฆฌ์•กํ‹ฐ๋ธŒ ์ง„์˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋…ผ๋ธ”๋กœํ‚น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๋„๊ตฌ์ด๋‹ค. ๋…ผ๋ธ”๋กœํ‚น์ด ๊ฐ€์žฅ ํฐ ํŠน์ง•์ด๋‹ค. ํ•˜์ง€๋งŒ, ์ •๋ง ์„ฑ์ˆ™๋„๊ฐ€ ๋„ˆ๋ฌด ๋ถ€์กฑํ–ˆ๋‹ค. ํŠนํžˆ Hibernate๊ฐ™์€ ์šฐ๋žŒํ•œ ๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ๋Š” JPA์™€๋Š” ๋‹ฌ๋ฆฌ, ๊ตฌํ˜„์ฒด๋“ค์˜ ์ง€์›๋„ ํŠน์ • ๊ฐœ์ธ์ด ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๊ณ , ์œ ์ง€๋ณด์ˆ˜๋„ ์ž˜ ๋˜์ง€ ์•Š์•˜๋‹ค. (์ผ๋ก€๋กœ, Mysql ๊ตฌํ˜„์ฒด์˜ ๊ฒฝ์šฐ ์–ด๋–ค ์ค‘๊ตญ ์œ ์ €๊ฐ€ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, git์— ๋“ค์–ด๊ฐ€ ๋ณด๋ฉด, ์ฝ”๋กœ๋‚˜๋กœ ์ธํ•ด ์‚ถ์ด ํž˜๋“ค์–ด์ ธ์„œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค๋‹ค๊ณ  ์ ํ˜€์žˆ๋‹ค.) ์‹ฌ์ง€์–ด, ๋ฒ„์ „์— ๋”ฐ๋ผ์„œ๋Š” exits๋ฌธ์„ ํ˜ธ์ถœํ•˜๋ฉด ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ NumberFormatCasting ๊ด€๋ จ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. (Integer โ†’ Long) ๊ทธ๋ƒฅ ํ•˜๋Š”์ˆ˜ ์—†์ด, ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์—ฌ ๋ฌด์‹œํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

๋˜ํ•œ JPA๊ฐ™์€ ๊ตฌํ˜„์ฒด์—์„œ๋Š” ์—”ํ‹ฐํ‹ฐ์— ์™ ๋งŒํ•œ ํƒ€์ž…์„ ๋ถ™์—ฌ๋„ ๋‹ค ์ž๋™์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์‹คํ–‰๋˜๋Š” ํ•œํŽธ, ๋Œ€๋ถ€๋ถ„ ๋‚ด๊ฐ€ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ๋‹ฌ์•„์ค˜์•ผํ–ˆ๊ณ , ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์ด๋‚˜, ManyToOne๊ณผ ๊ฐ™์€ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘๋„ ์กด์žฌํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ƒฅ ๋ง๊ทธ๋Œ€๋กœ SQL๋ฒˆ์—ญ๊ธฐ ๊ฐ™์€ ๋А๋‚Œ.

๊ทธ๋ž˜์„œ ๋‚˜์˜ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ ๋ถ€ํ„ฐ๋Š” ์™ ๋งŒํ•˜๋ฉด ๊ธฐ์กด ์ „ํ†ต์ ์ธ ์Šคํ”„๋ง์œผ๋กœ ์ž‘์—…์„ ํ•  ์˜ˆ์ •์ด๋‹ค. ๋‹จ ๋ธ”๋กœํ‚น ์ž‘์—…์ด ์ ๊ณ , ๋น ๋ฅธ ์‘๋‹ต์†๋„์™€ ๋ฆฌ์†Œ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ๋„์ž…ํ• ๋งŒ ํ•˜๋‹ค๊ณ  ๋А๊ผˆ๋‹ค. ๋Œ€์‹ , ๊ทธ๋•Œ๋Š” ์˜ค๋ผํด ๊ฐ™์ด R2DBC์— ๋Œ€ํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ์ง€์›ํ•ด์ฃผ๋Š” DB๋ฅผ ์„ ํƒํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•ด ๋ณด์˜€๋‹ค.

๋ฌธ์ œ์ ์˜ ํ•ด๊ฒฐ๋ฐฉ์•ˆ - ๋ฏธ๋ž˜ ๊ณต๋ถ€๋ฐฉํ–ฅ

๊ทธ๋ ‡๋‹ค๋ฉด ๋‚˜์˜ ๋กœ์ง ์„ค๊ณ„๋Š” ์™„์ „ํžˆ ํ‹€๋ฆฐ๊ฒŒ๋˜์—ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚˜๋„, ์ €๋ ‡๊ฒŒ ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ๊ฐฏ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋ฉฐ ์‹คํ–‰ํ• ๊ฒƒ์ธ๊ฐ€?
  • ๋งŒ์•ฝ ๋ฏธ๋””์–ด ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ๋Œ€ ์‹คํ–‰๋˜๋ฉด, ConcurrentHashMap์„ ๊ณต์œ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ๋˜๋Š”๊ฐ€?
  • ๊ฐ๊ฐ์˜ ์ด๋ฒคํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ๋…ํ•  ๊ฒƒ์ธ๊ฐ€?

์ด๋Ÿฐ ์ƒ๊ฐ์„ ํ•˜๊ณ  ๋‚˜๋‹ˆ, ๋‚˜์˜ ๋กœ์ง์ด ์™„์ „ํžˆ ํ‹€๋ ธ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ๊ฒƒ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

  • ์ธ์ฝ”๋”ฉ ๋กœ์ง์€ ์“ฐ๋ ˆ๋“œ ํ’€๋กœ ์ œํ•œ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ณ„์†ํ•ด์„œ ๋ฐฐ์ •๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ  ๋Œ€์‹  ์˜คํ†  ์Šค์ผ€์ผ๋ง๊ณผ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ†ตํ•ด ์ด๋ฅผ ์ œ์–ดํ•œ๋‹ค.
  • ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ์ธ์ฝ”๋”ฉ์˜ ์ง„ํ–‰์ƒํ™ฉ์€, ๊ฐ๊ฐ์˜ ์ฒ˜๋ฆฌ ์„œ๋ฒ„์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๋„๋ก ํ•˜๊ณ , ์ด๋ฅผ ๊ตฌ๋…ํ•œ ์„œ๋ฒ„์—์„œ ์ง„ํ–‰์ƒํ™ฉ์„ ์•Œ๋ ค์ฃผ๋Š” ์‹์œผ๋กœ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค.
  • ํŒŒ์ผ์€ aws S3์— ์ €์žฅํ•˜๋„๋ก ํ•˜๊ณ , ์ด ์ด๋ฒคํŠธ๋ฅผ ํ™œ์šฉํ•ด์„œ ์ธ์ฝ”๋”ฉ ์ž‘์—…์„ ๋น„๋™๊ธฐ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•œ๋‹ค.
  • ์›๋ณธ ํŒŒ์ผ๊ณผ ๊ฐ™์€ ํŒŒ์ผ์€ ๋งŽ์ด ์ ‘๊ทผํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋” ์ €๋ ดํ•œ ์ €์žฅ์†Œ์— ๋ณ„๋„๋กœ ์ €์žฅํ•œ๋‹ค.
  • ๋™์˜์ƒ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด, ๋™์˜์ƒ์„ ๋‚ฎ์€ ํ™”์งˆ๋กœ ์••์ถ•ํ•œ ๋ฒ„์ „์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด, ์ž„์‹œ ํ”„๋ก์‹œ s3์— ์ €์žฅํ•˜๋„๋ก ํ•˜๊ณ , ๋’ท๋‹จ์—์„œ ๋™์˜์ƒ ๋ถ„์„ ์ž‘์—…์ด๋‚˜, ์ž๋ง‰ ์ž‘์—… ๋“ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • S3์˜ ์ •์  ํŒŒ์ผ๋“ค์€ ํด๋ผ์šฐ๋“œ์˜ CDN ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ์บ์‹ฑ์„ ์ง„ํ–‰ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๋‹ค์–‘ํ•œ ์ƒ๊ฐ์ด ๋“ค๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ธฐ์กด์˜ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ž…์ถœ๋ ฅ ๊ธฐ๋ฐ˜์—์„œ๋Š” ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์•ž์œผ๋กœ ๊ณต๋ถ€ ๋ฐฉํ–ฅ์„ ์ •ํ–ˆ๋‹ค.

  • MSA, ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ, ์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ ์•„ํ‚คํ…์ณ
  • ์•„ํŒŒ์น˜ ์นดํ”„์นด
  • ์—˜๋ผ์Šคํ‹ฑ ์„œ์น˜
  • ์„œ๋ฒ„๋ฆฌ์Šค(aws lambda)์˜ ํ™œ์šฉ

ํ˜„์žฌ๋Š” ์ฑ…์„ ์‚ฌ๊ณ , ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐ๋ชจ๋ฅผ ๋งŒ๋“ค๋ฉฐ ์ด ์ƒˆ๋กœ์šด ๋ถ„์•ผ์— ๋Œ€ํ•ด ๋” ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋‹ค.

๋А๋‚€์ 

์œ ํŠœ๋ธŒ ํด๋ก  ํ”„๋กœ์ ํŠธ์—์„œ ๋™์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ์ด๋‚˜, ์ •์ ํŒŒ์ผ์„ ๋‹ค๋ฃจ๋Š” ๋ฌธ์ œ๋Š” ๋‹ค๋“ค ์ฒ˜์Œ ๋‹ค๋ฃจ๋Š” ๋ฌธ์ œ๋ผ ๋งก๊ธฐ๋ฅผ ๊บผ๋ คํ–ˆ๋‹ค.

๋‚˜๋„ ์ฒ˜์Œ ํ•ด๋ณด๋Š” ๋ฏธ๋””์–ด ๋„๋ฉ”์ธ์„ ๋งก์œผ๋ฉฐ, ๋งŽ์€ ๊ฒƒ์„ ๋‹จ์‹œ๊ฐ„์— ๊ณต๋ถ€ํ–ˆ๋‹ค.

  • Reactor (Flux, Mono)
  • Webflux
  • Docker
  • Nginx
  • ๋ฐฐํฌ, ๋„คํŠธ์›Œํฌ
  • hls ํ”„๋กœํ† ์ฝœ
  • ffmpeg

์‚ฌ์‹ค ์ค‘๊ฐ„์— ์‹œํ—˜๊ธฐ๊ฐ„์„ ์ œ์™ธํ•˜๋ฉด 2๋‹ฌ๋™์•ˆ ํ•™๊ต ์ˆ˜์—…๊ณผ ๊ณผ์ œ๋ฅผ ๋ณ‘ํ–‰ํ•˜๋ฉฐ, ๊ณต๋ถ€ํ•œ๊ฑฐ๋ผ ์ •๋ง ์‰ฝ์ง€ ์•Š์•˜๋‹ค. ํ•˜์ง€๋งŒ, ์ฒ˜์Œ ๋ฐฐํฌ๋ฅผ ํ•ด๋ณด๊ณ  ์ฒ˜์Œ ํ˜‘์—…์„ ํ•ด๋ณด๋ฉฐ, ์ •๋ง ๋„์›€์ด ๋งŽ์ด ๋˜์—ˆ๊ณ  ๋” ๋„“์€ ์‹œ์•ผ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํŠนํžˆ ์•ž์œผ๋กœ msa๋‚˜ ์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ, ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ๋ฅผ ๊ณต๋ถ€ํ•  ๋•Œ ๋‹จ์ˆœํžˆ ํ•ซํ•œ ๊ธฐ์ˆ ์ด์–ด์„œ๊ฐ€ ์•„๋‹Œ, ๋ถ„๋ช…ํ•œ ์ด์œ ์™€ ๋™๊ธฐ๋ฅผ ์–ป์€๊ฑฐ ๊ฐ™์•„ ๋งค์šฐ ๋„์›€์ด ๋˜์—ˆ๋‹ค.

About

video streaming server with hls and webflux, ffmpeg, nginx

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published