Bibi's DevLog ๐Ÿค“๐ŸŽ

์ •์  ์›น, ๋™์  ์›น, MVC ์›น ํ”„๋ ˆ์ž„์›Œํฌ ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ

์ •์  ์›น, ๋™์  ์›น, MVC ์›น ํ”„๋ ˆ์ž„์›Œํฌ

๋น„๋น„ bibi 2021. 3. 12. 00:12

MVC ์›น ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋ญ”๊ฐ€์š”?

MVC์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ, ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ๋Š” ์˜์ƒ์„ ๋ณด๊ณ  ์ •๋ฆฌํ–ˆ๋‹ค.

..๋ฅผ ๋ณด๋ ค ํ–ˆ๋Š”๋ฐ ์ด ์˜์ƒ์„ ์œ„ํ•ด ์ •์  ์›น์€ ๋ญ๊ณ  ๋™์  ์›น์€ ๋ญ”๊ฐ€์š”?๋ฅผ ๋ด์•ผ ํ•œ๋‹ค๊ณ  ํ•ด์„œ ํ•จ๊ป˜ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.

์ •์  ์›น static web, ๋™์  ์›น dynamic web

  • ์ •์  ์›น static web

    • ์–ธ์ œ ์ ‘์†ํ•ด๋„ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด๋‚ด ์ฃผ๋Š” ์›น ์‚ฌ์ดํŠธ.

    • ํŽธ์˜์  : ''์ค€๋น„๋œ ์Œ์‹''์„ ๋ฐ”๋กœ ๋จน๊ฑฐ๋‚˜ ๋‚ด๊ฐ€ ๊ฐ„๋‹จํžˆ ์กฐ๋ฆฌํ•ด ๋จน์Œ -> ์ •์  ์›น

    • ์„œ๋ฒ„๋Š” html, css, js ์ฝ”๋“œ ๋ฐ ์ด๋ฏธ์ง€&๋™์˜์ƒ์„ ์ค€๋น„๋œ ๊ทธ๋Œ€๋กœ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด ์ค€๋‹ค.

    • ๋งˆ์น˜ ์ง„์—ด๋Œ€์— ์ค€๋น„๋œ ์ƒํ’ˆ ๊ทธ๋Œ€๋กœ ์‚ฌ๊ฐ€๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Œ.

    • โ“ ๋“ค์–ด๊ฐˆ ๋•Œ ๋งˆ๋‹ค ๊ฐ™์€ ํ™”๋ฉด์ธ ๊ฒƒ = ์ •์  ์›น์ธ๊ฐ€?

      โ— ๊ผญ ๊ทธ๋ ‡์ง„ ์•Š๋‹ค. ๊ธฐ์ค€์€ ''์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š” html, css, js ์ฝ”๋“œ ๋ฐ ์ด๋ฏธ์ง€&๋™์˜์ƒ์ด ๊ฐ™์€์ง€''์ด๋‹ค.

    • ์ •์  ์›น์˜ ์˜ˆ์‹œ : ํ•™๊ต / ํšŒ์‚ฌ์˜ ์†Œ๊ฐœ ํŽ˜์ด์ง€

  • ๋™์  ์›น dynamic web

    • ์‹๋‹น : ''์ฃผ๋ฌธํ–ˆ์„ ๋•Œ'' ์Œ์‹์ด ์กฐ๋ฆฌ๋˜์–ด ๋‚˜์˜ด -> ๋™์  ์›น

    • ์š”์ฒญ ์‹œ, ์„œ๋ฒ„๊ฐ€ html, css, js์ฝ”๋“œ๋ฅผ ๊ทธ ๋•Œ ๊ทธ ๋•Œ ๋ณ€ํ™˜์‹œ์ผœ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด ์ค€๋‹ค.

    • ๋Š์ž„์—†์ด ์ƒˆ๋กœ์šด ์ •๋ณด๊ฐ€ ์˜ฌ๋ผ์˜ค๋Š” SNS, ๊ฒŒ์‹œํŒ ๋“ฑ์ด ๋™์  ์›น์— ์†ํ•จ.

      ์ƒˆ๋กœ์šด ์ •๋ณด๊ฐ€ ์˜ฌ๋ผ์˜ฌ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ ์ฝ”๋”ฉํ•  ์ˆœ ์—†์œผ๋ฏ€๋กœ ๋™์  ์›น์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

      ์ ‘์†ํ•  ๋•Œ ๋งˆ๋‹ค/์‹ค์‹œ๊ฐ„์œผ๋กœ ์ตœ์‹  ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค€๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค

    • php ๋ฐ ๊ฐ์ข… ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ๋™์  ์›น์„ ๊ฐœ๋ฐœํ•˜๋Š” ์–ธ์–ด์ด๋‹ค.

  • ๋™์  ์›น์ด ๋ฐ˜๋“œ์‹œ ์ •์  ์›น๋ณด๋‹ค ์ข‹์€๊ฐ€?

    • ๊ผญ ๊ทธ๋ ‡์ง„ ์•Š๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ๋ธ”๋กœ๊ทธ์˜ ๊ฒฝ์šฐ ๋งค๋ฒˆ ๊ฐ™์€ ๊ธ€์„ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ ๊ตณ์ด ๋™์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ๋‚ญ๋น„์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ตœ๊ทผ์˜ ๊ฒฝ์šฐ ์ •์  ๋ธ”๋กœ๊ทธ ์ƒ์„ฑ ํˆด (jekyll ๋“ฑ)๋„ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.
    • ~github.io ๋ธ”๋กœ๊ทธ๋“ค.

MVC ์›น ํ”„๋ ˆ์ž„์›Œํฌ

๋‹จ์ˆœํ•œ ์›น ์‚ฌ์ดํŠธ์˜ ๊ฒฝ์šฐ php๋กœ ๊ฐ„๋‹จํžˆ ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋„ค์ด๋ฒ„์ฒ˜๋Ÿผ ๋ณต์žกํ•˜๊ณ  ๋‹ค์–‘ํ•ด์ง€๋ฉด ๊ทธ๋Ÿฌ๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ํŠน์ • ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ชจ๋“ˆํ™”ํ•ด์„œ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.

MVC ์ ‘๊ทผ๋ฒ• : (์›น์‚ฌ์ดํŠธ๋ฅผ ํฌํ•จํ•œ)์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์ ‘๊ทผ๋ฒ•์˜ ํ•˜๋‚˜.

  • View : ๋ˆˆ์— ๋ณด์ด๋Š” ๊ฒƒ.
    • ์›น์˜ ๊ฒฝ์šฐ HTML, CSS๋ฅผ ๋งํ•œ๋‹ค
  • Controller : ์ œ์–ดํ•˜๋Š” ๊ฒƒ.
    • ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ด ๋ถ€๋ถ„์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์ด๋ฃจ์–ด์ง„๋‹ค (์ฝ”๋“œ๋กœ ์ œ์–ดํ•ด์•ผ ํ•˜๋ฏ€๋กœ)
  • Model : ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ (?)
    • ๊ทธ๋ƒฅ ''๋ฐ์ดํ„ฐ''์— ๊ด€๋ จ๋œ ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
    • DB๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ๋ถˆ๋Ÿฌ์˜ค๊ณ , ํ˜•์‹์„ ์ง€์ •ํ•˜๋Š” ๋“ฑ์˜ ์ฝ”๋“œ๊ฐ€ ModelํŒŒํŠธ์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.

์ฆ‰,

  • ๋ชจ๋ธ์€ DB์™€ ์—ฐ๊ฒฐ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ํŒŒํŠธ์ด๋‹ค
  • ๋ทฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์‹œ๊ฐํ™”ํ•˜๋Š” ํŒŒํŠธ์ด๋‹ค
  • ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ํŒŒํŠธ์ด๋‹ค. ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ทฐ์— ์—ฐ๊ฒฐํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ GUI๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ CRUD๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

๋™์  ์›น = ์‹๋‹น ๋น„์œ ๋ฅผ ์‘์šฉํ•˜์ž๋ฉด,

  • ๋ชจ๋ธ : ์‹๋ฃŒํ’ˆ ์ฐฝ๊ณ ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์Œ์‹์„ ์š”๋ฆฌํ•˜๋Š” ์ฃผ๋ฐฉ์žฅ
  • ๋ทฐ : ์ฃผ๋ฐฉ์žฅ์ด ์š”๋ฆฌํ•œ ์Œ์‹์„ ํ”Œ๋ ˆ์ดํŒ…ํ•˜๋Š” ์ง์›
  • ์ปจํŠธ๋กค๋Ÿฌ : ์ฃผ๋ฌธ๋„ ๋ฐ›๊ณ , ์„œ๋น™๋„ ํ•˜๋Š” ๋งค๋‹ˆ์ €

MVC ์›น ํ”„๋ ˆ์ž„์›Œํฌ

MVC๋Š” ์ผ๋‹จ ์ด ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๋‚˜๋ฉด ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ์ง€๋งŒ, ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ์— ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

-> ์ „๋ฌธ๊ฐ€๋“ค์ด MVC์˜ ์š”์†Œ๋ฅผ ๋ฏธ๋ฆฌ ์„ค๊ณ„ํ•ด ๋‘” ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์ด MVC ์›น ํ”„๋ ˆ์ž„์›Œํฌ!

์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค๋งˆ๋‹ค ๋‹ค์–‘ํ•œ MVC ์›น ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

(์ž๋ฐ”-์Šคํ”„๋ง, PHP-๋ผ๋ผ๋ฒจ, ํŒŒ์ด์ฌ-์žฅ๊ณ , ๋ฃจ๋น„-๋ฃจ๋น„ ์˜จ ๋ ˆ์ผ, Scala-Play, C#-dotnet ... )

+ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฐจ์ด?

๋‘˜ ๋‹ค '๋‚จ์ด ๋ฏธ๋ฆฌ ์งœ ๋†“์€ ์ฝ”๋“œ'๋ผ๋Š” ๊ณตํ†ต์ ์ด ์žˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Library

: "๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๊ฒƒ". ๊ฐ๊ฐ ๊ฐœ๋ณ„์ ์ธ ๊ธฐ๋Šฅ๋“ค (๋ฌธ์ง, ์š•์กฐ.. ๋“ฑ ๋ถ€์†ํ’ˆ๋“ค)์— ํ•ด๋‹นํ•จ.

ํ”„๋ ˆ์ž„์›Œํฌ Framework

: "๊ธฐ๋ณธ ํ‹€๋กœ ์‚ผ๊ณ  ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ง๋ถ™์—ฌ ๋งŒ๋“œ๋Š” ๊ฒƒ". ๊ฐœ๋ณ„์  ๊ธฐ๋Šฅ์ด ์—ฐ๊ฒฐ๋˜์–ด ๊ธฐ์ดˆ์  ์ œํ’ˆ ๊ณจ๊ฒฉ(์ง‘)์„ ๊ฐ–์ถ˜ ์ƒํƒœ.

+ ๋ผ์šฐํŒ… Routing์ด๋ž€?

์–ด๋–ค ์ฃผ์†Œ๋กœ ์ ‘์†ํ–ˆ์„ ๋•Œ ์–ด๋–ค ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค„์ง€ ๋ฏธ๋ฆฌ ์ •ํ•ด๋‘๋Š” ๊ฒƒ.