๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Front-End

Frontend Framework(Library)

by ์ฝ”๋”ฉํ•˜๋Š” ๋ถ•์–ด 2021. 11. 21.
๋ฐ˜์‘ํ˜•

๐ŸŒˆ Angular

2010๋…„ ๊ตฌ๊ธ€์—์„œ ๊ฐœ๋ฐœํ•œ SPA(Single Page Application) ๋ฐฉ์‹์˜ Javascript Framework.
TypeScript ๊ธฐ๋ฐ˜์œผ๋กœ ๋งค์šฐ ์•ˆ์ •์ ์ด๊ณ  ํƒ„ํƒ„ํ•œ ํ”„๋ก ํŠธ์—”๋“œ ์•ฑ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋ชจ๋ฐ”์ผ ์›น, ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋ฐ”์ผ, ๋ฐ์Šคํฌํƒ‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊นŒ์ง€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ๋‹ค.
Spring MVC์™€ ๊ต‰์žฅํžˆ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ง„ํ–‰๋œ๋‹ค.

 

๐Ÿ’ง ์žฅ์ 

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

๐Ÿ’ง ๋‹จ์ 

  • ๋ฐฉ๋Œ€ํ•œ ํ•™์Šต ๋ถ„๋Ÿ‰
    ์ฃผ๋ ฅ ์–ธ์–ด๊ฐ€ Typescript์ธ๋ฐ Typescript๋งŒ ๋ฐฐ์šฐ๋ฉด ๋์ด ์•„๋‹ˆ๋ผ Angular๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐœ๋…๋“ค์„ ์ตํžˆ๊ณ , ๊ทธ ๊ฐœ๋…๋“ค์ด ์–ด๋–ป๊ฒŒ Typescript๋กœ ํ‘œํ˜„๋˜๋Š”์ง€๋„ ์ตํ˜€์•ผ ํ•œ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  Angular์˜ ์žฅ์ ์ด ๋ผ์šฐํŒ…, ์ƒํƒœ๊ด€๋ฆฌ, ํผ ์œ ํšจ์„ฑ ๋“ฑ ํ•„์š”ํ•œ ๋„๊ตฌ๋ฅผ ๋ชจ์•„๋†“์€ All In One ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๋Š” ๊ฒƒ์ธ๋ฐ, ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ๋ฐฐ์šธ ๊ฒƒ์ด ๋งŽ๊ณ  ์–ด๋ ค์šด ํŽธ์ด๋‹ค.
  • ๋Š๋ฆฐ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„
    Angular๋กœ ๋งŒ๋“  SPA์˜ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋Š” ๋‹ค์†Œ ๋Š๋ฆฐ ํŽธ์ด๋‹ค.
  • ๊ฒ€์ƒ‰์—”์ง„ ์ธ๋ฑ์‹ฑ
    Angular๋กœ ๋งŒ๋“  SPA๋ฅผ ์ œ๋Œ€๋กœ ์ธ๋ฑ์‹ฑํ•˜์ง€ ๋ชปํ•˜๋Š” ํฌ๋กค๋Ÿฌ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ๋‹ค.

๐Ÿ”ฅAngular์™€ AngularJS์˜ ์ฐจ์ด

AngularJS์˜ ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•ด์„œ ๋‚˜์˜จ ๊ฒƒ์ด Angular์ด๋‹ค. ํ˜ธํ™˜์„ฑ์ด ์—†๋Š” ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • AngularJS๋Š” Javascript ๊ธฐ๋ฐ˜์ด๊ณ  Angular์€ Typescript ๊ธฐ๋ฐ˜์ด๋‹ค.
  • AngularJS๋Š” Controller์™€ $scope ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์ด๊ณ  Angular์€ Component ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์ด๋‹ค.
  • AngularJS๋ณด๋‹ค Angular๊ฐ€ ์ข€๋” ํ–ฅ์ƒ๋œ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ๊ณผ DOM ์ œ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ API ๋˜ํ•œ ๋‹จ์ˆœํ™”๋˜์—ˆ๋‹ค.
  • ์„ ํƒ์  ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์ง€์›ํ•˜๊ณ  ๋””๋ ‰ํ‹ฐ๋ธŒ์™€ ์„œ๋น„์Šค, ์˜์กด์„ฑ ์ฃผ์ž…์€ ๊ฐ„์†Œํ™”๋˜์—ˆ๋‹ค.



 

๐ŸŒˆ Vue

2014๋…„ Evan You๋ผ๋Š” ๊ฐœ์ธ์ด ๊ฐœ๋ฐœํ•œ Framework. ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•˜๊ณ  ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ƒ๊ฒผ์ง€๋งŒ ์„ฑ์žฅ ์†๋„๊ฐ€ ์ •๋ง ๋น ๋ฅด๋‹ค.

 

๐Ÿ’ง ์žฅ์ 

  • ์ ์€ ๋Ÿฌ๋‹์ปค๋ธŒ
    jQuery์— ์ต์ˆ™ํ•œ ๊ธฐ์กด ๊ฐœ๋ฐœ์ž๋„ ์‰ฝ๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค.
  • Component ๊ธฐ๋ฐ˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ
  • ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ๊ฐœ๋ฐœ
  • ์–‘๋ฐฉํ–ฅ๊ณผ ๋‹จ๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ ์ง€์›
  • Virtual DOM

๐Ÿ’ง ๋‹จ์ 

  • ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋ณด๋‹ค ์ ์€ ์ƒํƒœ๊ณ„
  • ๋‚ฎ์€ ์ธ์ง€๋„
  • ์ ์€ ์ˆ˜์˜ Plugin/Components
  • ์–ธ์–ด ์žฅ๋ฒฝ
    ๋ฉ”์ด์ € ๊ฐœ๋ฐœ์ž๋“ค์ด ๋Œ€์ฒด๋กœ ์ค‘๊ตญ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ง‘์ค‘๋˜์–ด ์žˆ๋‹ค.
  • ์ผ์ •ํ•˜์ง€์•Š์€ ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ
  • ์ž์ฒด ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ
    ์ž์ฒด ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฐ ๊ทœ๋ชจ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ๋ฌธ์ œ๋ฅผ ๊ฒช์„ ์ˆ˜ ์žˆ๊ณ  JS์™€์˜ ์ง์ ‘ ์—ฐ๊ณ„ ์ธก๋ฉด์—์„œ๋„ ๋ถˆํŽธํ•˜๋‹ค.
  • ํ•„์š” ์ด์ƒ์˜ ์œ ์—ฐ์„ฑ
    ํ”„๋กœ์ ํŠธ๊ฐ€ ๋” ๋ณต์žกํ•ด์ง€๊ฑฐ๋‚˜ ๋” ๋งŽ์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.



 

๐ŸŒˆ React

"์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ™”ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ" ์„ ๋ชฉํ‘œ๋กœ 2013๋…„ ํŽ˜์ด์Šค๋ถ์—์„œ ๊ฐœ๋ฐœํ•œ Javascript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. MVC Architecture(ex. Angular, Vue)์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋ฆฌ์•กํŠธ๋Š” ์˜ค๋กœ์ง€ View๋งŒ ๋‹ด๋‹นํ•œ๋‹ค. ๊ทธ๋งŒํผ ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•ด third-party ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(ex. React-router, Redux)๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค. ํŽ˜์ด์Šค๋ถ์˜ ์ง€์†์ ์ธ ๊ด€๋ฆฌ์™€ ํ•จ๊ป˜ ์ƒํƒœ๊ณ„๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ, ๊ทธ๋ฆฌ๊ณ  React Native์˜ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๊พธ์ค€ํžˆ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค.

 

๐Ÿ’ง ์žฅ์ 

  • Virtual DOM
    DOM ํŠธ๋ฆฌ๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ Javascript ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ๋‘๊ณ  ๋ณ€๊ฒฝ๋˜๋Š” ๋ถ€๋ถ„์€ Virtual DOM์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๋†’์ธ๋‹ค.
  • SSR - Next.js
  • ๐Ÿ”ฅ SSR์ด๋ž€?
    ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค„ ํŽ˜์ด์ง€๋ฅผ ๋ชจ๋‘ ๊ตฌ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • JSX - JavaScritp + XML
    JSX(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™•์žฅ ๋ฌธ๋ฒ•)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • React Native
    ์•ฑ ๊ฐœ๋ฐœ๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

๐Ÿ’ง ๋‹จ์ 

  • View Only
    ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง, Routing, Ajax ๋“ฑ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. View ์ด์™ธ์˜ ๊ธฐ๋Šฅ์€ ์จ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Third party library. ํŒจํ‚ค์ง€, ๋ชจ๋“ˆ๋กœ ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•จ)๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.
  • IE8 ์ดํ•˜ ์ง€์›ํ•˜์ง€ ์•Š์Œ
    IE8 ์ดํ•˜ ๋ฒ„์ „์„ ์ง€์›ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ v0.14 ๋ฒ„์ „์„ ์‚ฌ์šฉ ํ•ด์•ผํ•œ๋‹ค.
  • Javascript์— ๋Œ€ํ•œ ์ง€์‹์ด ์—†์„ ๋• ๋ฐฐ์šฐ๊ธฐ ํž˜๋“ค๋‹ค.
    View ์™ธ ๊ธฐ๋Šฅ๋“ค์€ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— JavaScript ๋ฐฐ๊ฒฝ์ง€์‹์ด ๋ถ€์กฑํ•  ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉ์ด ํž˜๋“ค๋‹ค.
๋ฐ˜์‘ํ˜•

'Front-End' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์‹œ๋งจํ‹ฑ ์›น(Semantic Web)์ด๋ž€?  (0) 2021.11.24
Refactoring(๋ฆฌํŒฉํ† ๋ง)  (0) 2021.11.21
์ธ์ฆ(Authentication)  (0) 2021.11.18
์ธ๊ฐ€(Authorization)  (0) 2021.11.18
Self Refactoring Tip  (0) 2021.11.17

๋Œ“๊ธ€