๐Ÿ”ฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ + ๋ฆฌ์•กํŠธ: ๋””์ž์ธ ํŒจํ„ด ๋งˆ์Šคํ„ฐ ์™„๋ฒฝ ๊ฐ€์ด๋“œ (์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์ œ ํฌํ•จ!) ๐Ÿ”ฅ








๐Ÿ”ฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ + ๋ฆฌ์•กํŠธ: ๋””์ž์ธ ํŒจํ„ด ๋งˆ์Šคํ„ฐ ์™„๋ฒฝ ๊ฐ€์ด๋“œ (์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์ œ ํฌํ•จ!) ๐Ÿ”ฅ

๐Ÿ”ฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ + ๋ฆฌ์•กํŠธ: ๋””์ž์ธ ํŒจํ„ด ๋งˆ์Šคํ„ฐ ์™„๋ฒฝ ๊ฐ€์ด๋“œ (์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์ œ ํฌํ•จ!) ๐Ÿ”ฅ

๋ชฉ์ฐจ

์†Œ๊ฐœ

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

MVC ํŒจํ„ด

Model-View-Controller (MVC) ํŒจํ„ด์€ ๋ฐ์ดํ„ฐ(Model), ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(View), ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ์™€ ๋ทฐ ์‚ฌ์ด์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ œ์–ดํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ(Controller)๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ์—์„œ MVC ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์—ญํ• , ๊ทธ๋ฆฌ๊ณ  ์žฅ๋‹จ์ ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ์‹ค์ œ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด MVC ํŒจํ„ด์˜ ์ž‘๋™ ์›๋ฆฌ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.


// ์˜ˆ์‹œ ์ฝ”๋“œ (JavaScript)
class Model {
  // ...
}

class View {
  // ...
}

class Controller {
  // ...
}
    

Flux ์•„ํ‚คํ…์ฒ˜

Flux๋Š” Facebook์—์„œ ๊ฐœ๋ฐœํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์œผ๋กœ, ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Dispatcher, Store, View์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ œ์–ดํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ์™€ Flux๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‹ค๋ฌด์ ์ธ ์ ์šฉ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ์„ธ์š”.

Redux

Redux๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ์ปจํ…Œ์ด๋„ˆ๋กœ, ๋ณต์žกํ•œ ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Redux์˜ ํ•ต์‹ฌ ๊ฐœ๋…์ธ Store, Action, Reducer๋ฅผ ์ดํ•ดํ•˜๊ณ , ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Redux๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜ˆ์ œ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. Redux middleware, thunk, saga ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.


// ์˜ˆ์‹œ ์ฝ”๋“œ (JavaScript)
// ... Redux actions, reducers, store ์„ค์ • ...
    

๋‹ค๋ฅธ ์œ ์šฉํ•œ ๋””์ž์ธ ํŒจํ„ด

MVC, Flux, Redux ์™ธ์—๋„ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์–‘ํ•œ ๋””์ž์ธ ํŒจํ„ด๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Observer ํŒจํ„ด, Singleton ํŒจํ„ด, Decorator ํŒจํ„ด ๋“ฑ์„ ์†Œ๊ฐœํ•˜๊ณ  ๊ฐ ํŒจํ„ด์˜ ํŠน์ง•๊ณผ ์ ์šฉ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ํŒจํ„ด๋“ค์„ ์ดํ•ดํ•จ์œผ๋กœ์จ ๋”์šฑ ์œ ์—ฐํ•˜๊ณ  ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

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



“`

..

๋‹ต๊ธ€ ๋‚จ๊ธฐ๊ธฐ