๐ŸŽ„ ์„ฑ์žฅ์ผ์ง€ 4.0

์ฑ… ํ–‰๋ณตํ•œ ์ด๊ธฐ์ฃผ์˜์ž(์›จ์ธ ๋‹ค์ด์–ด)์˜ ๋‚ด์šฉ์— ์ž๊ทน๋ฐ›์•„ ์‹œ์ž‘ํ•˜๋Š” ์†Œ๋ฐ•ํ•œ ์„ฑ์žฅ๊ธฐ๋ก

์‚ด์•„์žˆ๋Š” ๊ฝƒ๊ณผ ์ฃฝ์€ ๊ฝƒ์€ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•˜๋Š”๊ฐ€?
์„ฑ์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
์ƒ๋ช…์˜ ์œ ์ผํ•œ ์ฆ๊ฑฐ๋Š” ์„ฑ์žฅ์ด๋‹ค!

๐ŸŒณ (1.0)ํ‚ค์›Œ๋“œ
์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌ, ์ถ”ํ›„์— ๋ณด๋ฉด์„œ ์Šค์Šค๋กœ ์„ค๋ช…
๐Ÿ‰ (2.0)๊ฒฝํ—˜ ์œ„์ฃผ๋กœ
๋‹จ์ˆœ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ๋ณด๋‹ค ๋ฌด์—‡์„ ๋ฐฐ์› ๊ณ  ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์งง๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑ
โ„๏ธ (3.0)์ •ํ•ด์ง„ ํ…œํ”Œ๋ฆฟ์— ๋งž์ถฐ์„œ
ํ‚ค์›Œ๋“œ, ๊ฒฝํ—˜ ๋ชจ๋‘ ์ข‹๋‹ค. ๋‹ค๋งŒ ๋งค์ผ ์ž‘์„ฑํ•˜๊ธฐ๋กœ ๋งˆ์Œ ๋จน์€๋งŒํผ ํ•ต์‹ฌ๋งŒ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ…œํ”Œ๋ฆฟ์„ ์ž‘์„ฑ
(3.1)230102๋ถ€ํ„ฐ ์‹œ์ž‘๋˜๋Š” ํ•™์Šต์— ๊ด€ํ•œ ๋‚ด์šฉ ์ถ”๊ฐ€
(3.2)230313๋ถ€ํ„ฐ ์ข€๋” ๊ฒฝํ—˜, ๊ฐ์ • ์œ„์ฃผ์˜ ๋‚ด์šฉ๋„ ๋‹ด๊ธฐ!
๐ŸŒพ (4.0)ํ•™์Šต ํ‚ค์›Œ๋“œ์—์„œ ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์ •๋ณด ์ œ๊ณต, ๊ณ ๋ฏผ์—์„œ ๋‚ด ๊ฒฝํ—˜์„ ์ž์„ธํžˆ ์ ์ž!

๐Ÿ”‘ ์˜ค๋Š˜์˜ ํ•™์Šต ํ‚ค์›Œ๋“œ

ํŒจํ„ด ์„ค๊ณ„ํ•ด๋ณด๊ธฐ

์ด๋ฒˆ ๊ธฐํšŒ์— MVC ํŒจํ„ด์„ component ๋ฐฉ์‹์— ์ ์šฉํ•ด๋ณด๊ณ  ์‹ถ์–ด์„œ(MVC๋„ ์ œ๋Œ€๋กœ ๋ฐฐ์šธ ๊ฒธ, component๋„ ๋งŒ๋“ค๊ฒธ!) ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํšจ๊ณผ์ ์œผ๋กœ ์ด ๋‘˜์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ ๊ณ ๋ฏผํ•ด๋ณด์•˜๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด MVC์—์„œ Controller์˜ ์—ญํ• ์„ Component์— ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ํ•˜๊ณ  Model์€ ์˜ค๋กœ์ง€ ๋ฐ์ดํ„ฐ, View๋Š” ํ™”๋ฉด๋งŒ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋˜ ์ค‘ ๊ฐ€๋งŒํžˆ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ state์— ๋”ฐ๋ฅธ UI ๋žœ๋”๋ง์ด ์ผ์–ด๋‚˜๋Š” React์™€ ๊ต‰์žฅํžˆ ๋‹ฎ์•˜๋‹ค๊ณ  ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•ด์„œ ์ด ๊ฐœ๋…์„ ๊ฐ–๊ณ  MVC ํŒจํ„ด์„ ์ด์šฉํ•œ react class component ๋งŒ๋“ค๊ธฐ๋กœ ๋‚˜๋ฆ„ ๊ฑฐ์ฐฝํ•œ ๊ตฌํ˜„์„ ์‹œ์ž‘ํ–ˆ๋‹ค.

export type Props = Record<string, string | number | boolean | []>;

export type State = Record<string, string | number | boolean | []>;

export interface Model {
  setState(newState: State): void;
  get state(): State;
}

export interface View {
  getTemplate(state: State): string;
  render(state: State): void;
  get element(): HTMLElement;
}

๋จผ์ € Props์™€ State์— ๋Œ€ํ•œ ํƒ€์ž…์„ ์ •์˜ํ•˜๊ณ  ์šฐ์„  Model, View์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.(์ถ”ํ›„ ์ž‘์„ฑํ•  ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ชจ๋‘ Model, View๋ฅผ ๋”ฐ๋กœ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ข€๋” ํ™•์žฅ์„ฑ์„ ๋†’์ด๊ณ  ์‹ถ์—ˆ๋‹ค.)

๐Ÿ€ ์˜ค๋Š˜์˜ ๊ณ ๋ฏผ ํ‚ค์›Œ๋“œ

Props์™€ State๋ฅผ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ ์„œ ๊ด€๋ฆฌํ•ด์•ผํ• ์ง€ ์• ๋งคํ•˜๋‹คโ€ฆ ์ผ๋‹จ State๋Š” Model์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์€๋ฐ Props๋Š” ์–ด๋–ป๊ฒŒ ํ• ๊นŒโ€ฆ ์ „์—ญ์œผ๋กœ ์•„์˜ˆ ๋นผ๋„ ๋  ๊ฒƒ ๊ฐ™๊ณ  ์•„์ง ๊ณ ๋ฏผ์ด ๋œ๋‹ค. ์–ด๋ ต์ง€๋งŒ ์ฆ๊ฑฐ์šด ๊ณ ๋ฏผ์ด๋‹ค!!!

๐Ÿ“ ์š”์•ฝ ๋ฐ ํ•˜๋ฃจ ๊ฐ„๋‹จ ํšŒ๊ณ 

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

์˜ค๋Š˜์˜ ์ž˜ํ•œ ์ 

  • ์ผ๋‹จ ์ฝ”๋“œ ์ž‘์„ฑ์€ ์‹œ์ž‘ํ•œ ์ 

์˜ค๋Š˜์˜ ์•„์‰ฌ์šด ์ 

  • ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ ์„ค๊ณ„ ๋ชปํ•œ ์ 

์ฐธ๊ณ