• [Spring] ์ž๋ฐ” ๋ฐฑ์—”๋“œ ์›น ๊ธฐ์ˆ ์˜ ์—ญ์‚ฌ

    2023. 12. 8.

    by. @leeeun

    ๊ณผ๊ฑฐ ๊ธฐ์ˆ 

    • ์„œ๋ธ”๋ฆฟ - 1997
      • TCP/IP ์—ฐ๊ฒฐ.. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ.. ์ด๋Ÿฐ๊ฑฐ ํž˜๋“ค์–ด์„œ
      • ๋‹จ์ ) ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์งœ์„œ html ๋™์  ์ƒ์„ฑ ์–ด๋ ค์›€

    • JSP -1999
      • ์„œ๋ธ”๋ฆฟ ๋‹จ์  ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅ
      • JSP๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ•จ
      • HTML ์ƒ์„ฑ์€ ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ๋งŽ์€์—ญํ•  ๋‹ด๋‹น

    • ์„œ๋ธ”๋ฆฟ, JSP ์กฐํ•ฉ MVC ํŒจํ„ด ์‚ฌ์šฉ
      • ๋ชจ๋ธ, ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์—ญํ• ์„ ๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœ
      • ํ™”๋ฉด) ๋ทฐ JSP, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง) ์ž๋ฐ”์ฝ”๋“œ๋‚˜ ์„œ๋ธ”๋ฆฟ..MVC ํ”„๋ ˆ์ž„์›Œํฌ ์ถ˜์ถ” ์ „๊ตญ ์‹œ๋Œ€ - 2000๋…„ ์ดˆ ~ 2010๋…„
        • ์ˆ˜๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์˜ ๋“ฑ์žฅ..
        • MVC ํŒจํ„ด ์ž๋™ํ™”, ๋ณต์žกํ•œ ์›น ๊ธฐ์ˆ ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ์ง€์›
        • ์ŠคํŠธ๋Ÿฟ์ธ (๊ตญ๋‚ด ๊ฐ•์„ธ), ์›น์›Œํฌ, ์Šคํ”„๋ง MVC(๊ณผ๊ฑฐ ๋ฒ„์ „)
        • ์ด๋•Œ๋Š” ์Šคํ”„๋ง์ด ๋ณ„๋กœ ์•ˆ ์ข‹์•„์„œ ์ŠคํŠธ๋Ÿฟ์ธ ๋ฅผ ์•ž์— ๊น”๊ณ  ๋’ค์— ์Šคํ”„๋ง (์„œ๋น„์Šค, repository, DAO) ์กฐํ•ฉํ•˜๋Š” ์‹œ๋Œ€..

     

    ํ˜„์žฌ ์‚ฌ์šฉ ๊ธฐ์ˆ 

    • ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์Šคํ”„๋ง MVC ๋“ฑ์žฅ(@Controller)
      • ์–˜๊ฐ€ ์ถ˜์ถ”์ „๊ตญ์‹œ๋Œ€๋ฅผ ๊ทธ๋ƒฅ ์ •๋ณตํ•ด๋ฒ„๋ ธ๋‹ค!

     

    • ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ๋“ฑ์žฅ
      • ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์„œ๋ฒ„๋ฅผ ๋‚ด์žฅ
      • ๊ณผ๊ฑฐ์—๋Š” ์„œ๋ฒ„์— WAS๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•˜๊ณ , ์†Œ์Šค๋Š” War ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ์„ค์น˜ํ•œ WAS์— ๋ฐฐํฌ → ๋ณต์žก
      • ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ๋นŒ๋“œ ๊ฒฐ๊ณผ(Jar)์— WAS ์„œ๋ฒ„ ํฌํ•จ → ๋นŒ๋“œ ๋ฐฐํฌ ๋‹จ์ˆœ
      • ์ตœ๊ทผ์—๋Š” ๋‹ค ์Šคํ”„๋ง ๋ถ€ํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค

     

    ์ตœ์‹  ๊ธฐ์ˆ  - ์Šคํ”„๋ง ์›น ๊ธฐ์ˆ ์˜ ๋ถ„ํ™”

    • Web Servlet - Spring MVC
      • ์Šคํ”„๋ง MVC๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋ธ”๋ฆฟ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘
      • HTTP request-response์ด๋Ÿฐ๊ฑฐ ๋‹ค ์‚ฌ์šฉ, ์›น ์ปจํ…Œ์ด๋„ˆ์— ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์žฅ์ (์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ)
      • ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

    • Web Reactive - Spring Web
      • ์™„์ „ ์ตœ์‹  ๊ธฐ์ˆ !

     

    ์Šคํ”„๋ง ์›น ํ”Œ๋Ÿญ์Šค(WebFlux)

    • ๋น„๋™๊ธฐ ๋„Œ ๋ธ”๋Ÿฌํ‚น ์ฒ˜๋ฆฌ
    • ์ตœ์†Œ ์“ฐ๋ ˆ๋“œ๋กœ ์ตœ๋Œ€ ์„ฑ๋Šฅ
      • ์“ฐ๋ ˆ๋“œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ ๊ฑฐ์˜ ๋“ค์ง€ ์•Š์Œ ⇒ ํšจ์œจ์ 
      • ex) CPU ์ฝ”์–ด๊ฐ€ 4๊ฐœ์žˆ์œผ๋ฉด ์“ฐ๋ ˆ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์ฝ”์–ด ๊ฐœ์ˆ˜์— ๋งž์ถฐ ๊ณ ํšจ์œจ์„ ๋‹ฌ์„ฑํ•จ
    • ํ•จ์ˆ˜ํ˜• ์Šคํƒ€์ผ๋กœ ๊ฐœ๋ฐœ - ๋™์‹œ์ฒ˜๋ฆฌ ์ฝ”๋“œ ํšจ์œจํ™”
      • ๋™์‹œ์— ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋ฅผ ์กฐํšŒํ•  ๋•Œ ์ผ๋ฐ˜์ ์ธ ์ž๋ฐ” ์ฝ”๋“œ๋Š” ์งœ๊ธฐ ์‰ฝ์ง€ ์•Š์Œ.
    • ์„œ๋ธ”๋ฆฟ ๊ธฐ์ˆ  ์‚ฌ์šฉX
    • Netty ์›น ํ”„๋ ˆ์ž„์›Œํฌ

    ๊ทธ๋Ÿฌ๋‚˜!

    • ์›น ํ”Œ๋Ÿญ์Šค๋Š” ๊ธฐ์ˆ ์  ๋‚œ์ด๋„ ๋งค์šฐ ๋†’์Œ
    • ์•„์ง์€ RDB(๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค) ์ง€์› ๋ถ€์กฑ ⇒ redis, mongoDB, Elastic Search๋Š” ๊ฐฑ์ถ˜..
    • ์ผ๋ฐ˜ MVC์˜ ์“ฐ๋ ˆ๋“œ ๋ชจ๋ธ๋„ ์ถฉ๋ถ„ํžˆ ๋น ๋ฅด๋‹ค.
    • ์‹ค๋ฌด์—์„œ ์•„์ง ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์Œ
    • ์ด๋Ÿฐ ์ด์œ ๋“ค๋กœ ์šฐ๋ฆฌ๋Š” ์Šคํ”„๋ง MVC ๊ธฐ์ˆ ๋งŒ ๋ณด์ž!

     

    ์ž๋ฐ” ๋ทฐ ํ…œํ”Œ๋ฆฟ ์—ญ์‚ฌ

    HTML์„ ๋ฐฑ์—”๋“œ์—์„œ ๋™์ ์œผ๋กœ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๋ทฐ ๊ธฐ๋Šฅ

    • JSP
      • ์†๋„ ๋Š๋ฆผ, ๊ธฐ๋Šฅ ๋ถ€์กฑ
    • ํ”„๋ฆฌ๋งˆ์ปค, Velocity
      • ์†๋„ ๋ฌธ์ œ ํ•ด๊ฒฐ, ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ
    • ํƒ€์ž„๋ฆฌํ”„
      • ๋‚ด์ถ”๋Ÿด ํ…œํ”Œ๋ฆฟ: HTML์˜ ์†์„ฑ์— ํƒœ๊ทธ๋ฅผ ๋„ฃ์–ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ํ˜•ํƒœ → HTML ๋ชจ์–‘์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ทฐ ํ…œํ”Œ๋ฆฟ ์ ์šฉ ๊ฐ€๋Šฅ
      • ์Šคํ”„๋ง MVC์™€ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ํ†ตํ•ฉ์ด ๊ฐ•๋ ฅ(์Šคํ”„๋ง์—์„œ ๋ฐ€์–ด์คŒ)
      • ์ตœ์„ ์˜ ์„ ํƒ ์–˜๋ฅผ ์“ฐ์ž!, ๋‹จ ์„ฑ๋Šฅ์€ ํ”„๋ฆฌ๋งˆ์ปค, ๋ฒจ๋กœ์‹œํ‹ฐ๊ฐ€ ๋” ๋น ๋ฆ„

     

     

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

    ๋Œ“๊ธ€