• [Spring] ์Šคํ”„๋ง MVC : ์Šค๋ ˆ๋“œ๋ž€? ์„œ๋ฒ„์—์„œ์˜ ์Šค๋ ˆ๋“œ ์‚ฌ์šฉ๋ฐฉ์‹, ์Šค๋ ˆ๋“œ ํ’€(Thread pool)

    2023. 12. 3.

    by. @leeeun

    [3] ๋™์‹œ ์š”์ฒญ - ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ

    ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ→ WAS๊ฐ€ ์‘๋‹ต → TCP/IP ์—ฐ๊ฒฐ → ์„œ๋ธ”๋ฆฟ์„ ํ˜ธ์ถœ.

    ์ด ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ๋ˆ„๊ฐ€ ํ˜ธ์ถœํ•˜๋Š”๊ฐ€? ์“ฐ๋ ˆ๋“œ

     

    ์“ฐ๋ ˆ๋“œ

    • ์“ฐ๋ ˆ๋“œ=์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ
    • ์ž๋ฐ” ๋ฉ”์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์ฒ˜์Œ ์‹คํ–‰ํ•˜๋ฉด main์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰
    • ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅ
    • ์“ฐ๋ ˆ๋“œ๋Š” ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ฝ”๋“œ ๋ผ์ธ๋งŒ ์ˆ˜ํ–‰
    • ๋™์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑ

     

    ๋‹จ์ผ ์š”์ฒญ - ์“ฐ๋ ˆ๋“œ ํ•˜๋‚˜ ์‚ฌ์šฉ

    • WAS๋‚ด์— ์“ฐ๋ ˆ๋“œ๊ฐ€ 1๊ฐœ๋งŒ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •

    • ์š”์ฒญ์ด ์˜ค๋ฉด ์“ฐ๋ ˆ๋“œ ์—ฐ๊ฒฐ ๋ฐ ์„œ๋ธ”๋ฆฟ ํ˜ธ์ถœ

    • ์„œ๋ธ”๋ฆฟ ์‘๋‹ต

    • ์‘๋‹ต์„ ์ˆ˜ํ–‰ํ•œ ๋’ค ์“ฐ๋ ˆ๋“œ๋Š” ํœด์‹

     

    ๋‹ค์ค‘ ์š”์ฒญ - ์“ฐ๋ ˆ๋“œ ํ•˜๋‚˜ ์‚ฌ์šฉ

    • ์“ฐ๋ ˆ๋“œ๋Š” ํ•˜๋‚˜์ธ๋ฐ ์š”์ฒญ์ด ์—ฌ๋Ÿฌ๊ฐœ ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ, ๋จผ์ € ๋“ค์–ด์˜จ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜ ์žˆ๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ• ๋‹น๋˜์–ด ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰
    • 1๋ฒˆ ์š”์ฒญ ์ฒ˜๋ฆฌ๊ฐ€ ์ž˜ ์ˆ˜ํ–‰๋˜๋ฉด, ์ˆœ์ฐจ์ ์œผ๋กœ 2๋ฒˆ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์ˆ˜ํ–‰ํ•˜๋ฉด ๋จ
    • BUT, 1๋ฒˆ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ ๋‚ด๋ถ€์˜ ์ด์œ ๋กœ ์ง€์—ฐ ๋ฐœ์ƒ

    • ์ง€์—ฐ ๋ฐœ์ƒ ์ค‘์— 2๋ฒˆ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, ์“ฐ๋ ˆ๋“œ๊ฐ€ 1๊ฐœ๋ฟ์ด๋ฏ€๋กœ ์š”์ฒญ2๋Š” ๋Œ€๊ธฐ
    • ๋ฌธ์ œ ๋ฐœ์ƒ) ์ง€์—ฐ์ด ๊ธธ์–ด์ง€๋ฉด 1๋ฒˆ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ๊ณผ 2๋ฒˆ ์š”์ฒญ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ๋ชจ๋‘ ์ฃฝ์–ด๋ฒ„๋ฆผ
      • 2๋ฒˆ ์š”์ฒญ์— ๋Œ€ํ•œ ์ˆ˜ํ–‰ ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€
    • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ• ⇒ ์š”์ฒญ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ฒ˜๋ฆฌ

     

    ์š”์ฒญ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ

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

    ์žฅ๋‹จ์ 

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

    ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€์— Thread Pool์ด ์กด์žฌ

    ์“ฐ๋ ˆ๋“œ ํ’€

    • ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ ํ’€์— ์š”์ฒญํ•˜์—ฌ, ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉ
    • ์“ฐ๋ ˆ๋“œ ์‚ฌ์šฉ์„ ์ข…๋ฃŒํ•˜๋ฉด ์“ฐ๋ ˆ๋“œ ํ•ด์ œ๊ฐ€ ์•„๋‹Œ ์“ฐ๋ ˆ๋“œ ํ’€์— ์‚ฌ์šฉํ•œ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฐ˜๋‚ฉ

    • ๊ธฐ์กด ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ชจ๋‘ ์‚ฌ์šฉ ์ค‘์ด๋ผ ์“ฐ๋ ˆ๋“œ ํ’€์— ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด, ์š”์ฒญ์„ ๊ฑฐ์ ˆํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ˆซ์ž๋งŒํผ ๋Œ€๊ธฐํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ

     

    ์š”์ฒญ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ์˜ ๋‹จ์  ๋ณด์™„

    • ํŠน์ง•
      • ํ•„์š”ํ•œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์“ฐ๋ ˆ๋“œ ํ’€์— ๋ณด๊ด€ํ•˜๊ณ  ๊ด€๋ฆฌํ•จ
      • ์“ฐ๋ ˆ๋“œ ํ’€์— ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ์“ฐ๋ ˆ๋“œ์˜ ์ตœ๋Œ€์น˜๋ฅผ ๊ด€๋ฆฌํ•จ
        • ํ†ฐ์บฃ์€ ์ตœ๋Œ€ 200๊ฐœ ๊ธฐ๋ณธ ์„ค์ • (๋ณ€๊ฒฝ ๊ฐ€๋Šฅ)
    • ์‚ฌ์šฉ
      • ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋ฉด, ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์“ฐ๋ ˆ๋“œ ํ’€์—์„œ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•จ
      • ์‚ฌ์šฉ์„ ์ข…๋ฃŒํ•˜๋ฉด ์“ฐ๋ ˆ๋“œ ํ’€์— ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฐ˜๋‚ฉํ•จ
      • ์ตœ๋Œ€ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ชจ๋‘ ์‚ฌ์šฉ์ค‘์ด์–ด์„œ ์“ฐ๋ ˆ๋“œ ํ’€์— ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—†์œผ๋ฉด?
        • ๊ธฐ๋‹ค๋ฆฌ๋Š” ์š”์ฒญ์€ ๊ฑฐ์ ˆํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ˆซ์ž๋งŒํผ๋งŒ ๋Œ€๊ธฐํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ
    • ์žฅ์ 
      • ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š” ๋น„์šฉ(CPU)์ด ์ ˆ์•ฝ๋˜๊ณ , ์‘๋‹ต ์‹œ๊ฐ„์ด ๋น ๋ฅด๋‹ค
      • ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ์“ฐ๋ ˆ๋“œ์˜ ์ตœ๋Œ€์น˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์ด ๋“ค์–ด์™€๋„ ๊ธฐ์กด ์š”์ฒญ์€ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค

    ์‹ค๋ฌด ํŒ

    • WAS์˜ ์ฃผ์š” ํŠœ๋‹ ํฌ์ธํŠธ๋Š” ์ตœ๋Œ€ ์“ฐ๋ ˆ๋“œ(max thread) ์ˆ˜์ด๋‹ค

    • ์ด ๊ฐ’์„ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด?
      • ๋™์‹œ ์š”์ฒญ์ด ๋งŽ์œผ๋ฉด, ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋Š” ์—ฌ์œ ๋กญ์ง€๋งŒ, ํด๋ผ์ด์–ธํŠธ๋Š” ๊ธˆ๋ฐฉ ์‘๋‹ต ์ง€์—ฐ
        • ์ตœ๋Œ€ ์“ฐ๋ ˆ๋“œ ์ˆ˜๋ฅผ 10์œผ๋กœ ์„ค์ •ํ•œ๋‹ค๋ฉด, ๋™์‹œ์— 100๊ฐœ์˜ ์š”์ฒญ์ด ์˜ค๋Š” ๊ฒฝ์šฐ 10๊ฐœ ์š”์ฒญ๋งŒ ์ฒ˜๋ฆฌํ•˜๊ณ  90๊ฐœ ์š”์ฒญ์€ ๋Œ€๊ธฐ or ๊ฑฐ์ ˆ
    • WAS๋Š” ์‚ด์•„์žˆ์„์ง€ ๋ชฐ๋ผ๋„ ์š”์ฒญ์ด ๋ฐ€๋ฆฌ๋ฉด์„œ ์„œ๋น„์Šค์—๋Š” ์žฅ์•  ๋ฐœ์ƒ
      • CPU์˜ 5%๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋งค์šฐ ๋น„ํšจ์œจ
      • ๋ชปํ•ด๋„ CPU ์‚ฌ์šฉ์œจ์€ 50%๋ฅผ ๋„˜๊ฒจ์•ผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด๋Š์ •๋„ ์ œ๋Œ€๋กœ ์„ธํŒ…ํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ
    • ์ด ๊ฐ’์„ ๋„ˆ๋ฌด ๋†’๊ฒŒ ์„ค์ •ํ•˜๋ฉด?
      • ๋™์‹œ ์š”์ฒญ์ด ๋งŽ์œผ๋ฉด, CPU, ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค ์ž„๊ณ„์  ์ดˆ๊ณผ๋กœ ์„œ๋ฒ„ ๋‹ค์šด
    • ์žฅ์•  ๋ฐœ์ƒ์‹œ?
      • ํด๋ผ์šฐ๋“œ๋ฉด ์ผ๋‹จ ์„œ๋ฒ„๋ถ€ํ„ฐ ๋Š˜๋ฆฌ๊ณ , ์ดํ›„์— ํŠœ๋‹
      • ํด๋ผ์šฐ๋“œ๊ฐ€ ์•„๋‹ˆ๋ฉด ์—ด์‹ฌํžˆ ํŠœ๋‹

     

    ์“ฐ๋ ˆ๋“œ ํ’€์˜ ์ ์ • ์ˆซ์ž

    • ์–ด๋–ป๊ฒŒ ์ฐพ๋Š”๊ฐ€?
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์˜ ๋ณต์žก๋„, CPU, ๋ฉ”๋ชจ๋ฆฌ, IO ๋ฆฌ์†Œ์Šค ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ชจ๋‘ ๋‹ค๋ฆ„
    • ์ค‘์š”ํ•œ ๊ฒƒ์€ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ
      • ์ตœ๋Œ€ํ•œ ์‹ค์ œ ์„œ๋น„์Šค์™€ ์œ ์‚ฌํ•œ ํ™˜๊ฒฝ์—์„œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์‹œ๋„
      • ํˆด: ์•„ํŒŒ์น˜ ab, ์ œ์ด๋ฏธํ„ฐ, nGrinder(์˜คํ”ˆ์†Œ์Šค) ๋“ฑ์„ ์ด์šฉ

     

    WAS์˜ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ์ง€์›

    • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋จ (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ) ⇒ ์Šค๋ ˆ๋“œ ๊ด€๋ จ์€ WAS๊ฐ€ ์ฒ˜๋ฆฌ!
    • ๊ฐœ๋ฐœ์ž๋Š” ๋งˆ์น˜ ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋“ฏ์ด ํŽธ๋ฆฌํ•˜๊ฒŒ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœ
    • ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋ฏ€๋กœ **์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด(์„œ๋ธ”๋ฆฟ, ์Šคํ”„๋ง ๋นˆ)**๋Š” ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉ

     

    ์ด ํฌ์ŠคํŠธ๋Š” ์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ ๊ฐ•์‚ฌ๋‹˜์˜ ๊ฐ•์ขŒ <์Šคํ”„๋ง mvc> ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    ๋Œ“๊ธ€