๐Ÿฆ ๋ฉ‹์‚ฌ 5๋ฒˆ์งธ ํ™œ๋™

ํ™ฉ๋‹ค์€ยท2023๋…„ 5์›” 8์ผ
0

์˜ค๋Š˜์˜ ์‚ฌ์ง„..... ๋งค์šฐ ํ”ผ๊ณคํ•ด๋ณด์ด๋Š” ๊ณ ๋ช…๊ตฐ์œผ๋กœ ์‹œ์ž‘..........

git & github

๋จผ์ € git์€ ๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ (VCS:Version Control System)์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
ํŒŒ์ผ ๋ณ€ํ™”๋ฅผ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๊ธฐ๋กํ–ˆ๋‹ค๊ฐ€ ๋‚˜์ค‘์— ํŠน์ • ์‹œ์ ์˜ ๋ฒ„์ „์„ ๋‹ค์‹œ ๊บผ๋‚ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์ด๋‹ค.
VCS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ํŒŒ์ผ์„ ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๊ณ , ํ”„๋กœ์ ํŠธ ์ „์ฒด๋ฅผ ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๊ฑฐ๋‚˜ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์ˆ˜์ • ๋‚ด์šฉ์„ ๋น„๊ตํ•ด ๋ณผ ์ˆ˜ ์žˆ๊ณ , ๋ˆ„๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผฐ๋Š”์ง€๋„ ์ถ”์ ํ•˜๊ฑฐ๋‚˜ ์–ธ์ œ ๋งŒ๋“ค์–ด๋‚ธ ์ด์Šˆ์ธ์ง€๋„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”Ž git์ด ํ•„์š”ํ•œ ์ด์œ !

1. ๋ฒ„์ „๊ด€๋ฆฌ
-> ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ˜์˜์„ ๋ฐ˜๋ณตํ• ๋•Œ ์ฝ”๋“œ์™€ ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋•Œ ์ „์ฒด๊ฐ€ ๋‹ค์‹œ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์—…๋ฐ์ดํŠธ๋œ ๋ถ€๋ถ„๋งŒ ์ €์žฅํ•˜๊ฒŒ๋œ๋‹ค.
์ฆ‰! ๋ถˆํ•„์š”ํ•œ ์šฉ๋Ÿ‰ ์ฐจ์ง€๋ฅผ ์ค„์ด๊ณ  ๊ณผ๊ฑฐ ๋ฒ„์ „์˜ ์ฝ”๋“œ๋กœ ๋˜๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

2. ํ˜‘์—…
-> ์—ฌ๋Ÿฌ๋ช…๊ณผ ์ž‘์—…ํ• ๋•Œ ์ด๋ฉ”์ผ์ด๋‚˜ ๊ณต์œ  ๋“œ๋ผ์ด๋ธŒ๋กœ ์†Œํ†ตํ•˜๊ธฐ์—” ๋ณต์žกํ•˜๊ณ  ์ œ์•ฝ์‚ฌํ•ญ์ด ๋งŽ๋‹ค. ๋ฐ”๋กœ๋ฐ”๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜์ง€์•Š๊ณ  ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ˆ„๊ฐ€ ์–ด๋””๋ฅผ ์–ด๋–ป๊ฒŒ ์ž˜๋ชป๊ฑด๋“œ๋ ธ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ๋ถˆํŽธํ•˜๋‹ค.
์—ฌ๊ธฐ์„œ git์€ ๊ฐ์ž ๋งก์„ ์—…๋ฌด๋ฅผ ๋ถ„๋ฐฐํ•˜์—ฌ ํ•ด๋‹น ๊ธฐ๋Šฅ์— ๋งž๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ณ  ์ด๊ฒƒ๋“ค์„ ํ•ฉ์นจ์œผ๋กœ์จ ์—…๋ฌด ํšจ์œจ์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

๐Ÿ“™ Git repository

remote repository (์›๊ฒฉ ์ €์žฅ์†Œ)
-> ํŒŒ์ผ์ด ์›๊ฒฉ ์ €์žฅ์†Œ ์ „์šฉ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค. ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๊ณผ ํ•จ๊ป˜ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ๋ฅผ ๋งํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ github๊ฐ€ ์žˆ๋‹ค.

local repository (๋กœ์ปฌ ์ €์žฅ์†Œ)
-> ๋‚ด ์ปดํ“จํ„ฐ์˜ ์ €์žฅ์†Œ๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰ ๋‚ด pc์— ํŒŒ์ผ์ด ์ €์žฅ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ(๋ช…๋ น์–ด)

1. add
-> commit ์ž‘์—…์„ ํ•˜๊ธฐ ์ „๊นŒ์ง€์˜ ๋ณ€๊ฒฝ๋ถ„์„ ๋ชจ์•„๋†“๋Š” ์ž‘์—…
์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด๋„ git ์ €์žฅ์†Œ์˜ ๋ณ€๊ฒฝ์ด๋ ฅ์—๋Š” ์–ด๋– ํ•œ ์˜ํ–ฅ๋„ ๋ผ์น˜์ง€ ์•Š์œผ๋ฉฐ ์Šคํ…Œ์ด์ง• ์˜์—ญ์—๋งŒ ์˜ฌ๋ฆด๋ฟ git ์ €์žฅ์†Œ์— ์‹ค์งˆ์ ์ธ ์˜ํ–ฅ์ด ๋ผ์น˜์ง€ ์•Š๋Š”๋‹ค.

2. commit
-> ์ž‘์—… ์ˆ˜ํ–‰ ๋‚ด์šฉ์„ ์ €์žฅํ•˜๋Š” ์ž‘์—…
์ „์ฒด ๋ณต์‚ฌ๊ฐ€ ์•„๋‹Œ ๊ฐ ๋ฒ„์ „์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ๊ธฐ๋กํ•˜๋Š” ์ž‘์—…์ด๋‹ค. ์ €์žฅ์†Œ์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•ด local ์ €์žฅ์†Œ(๋‚ด pc)์— ์ž‘์—… ๋‚ด์šฉ์„ ์ €์žฅํ•œ๋‹ค. ์‹ค์งˆ์ ์œผ๋กœ git ์ €์žฅ์†Œ์— ์˜ํ–ฅ์„ ๋ผ์น˜๋Š” ์ž‘์—…์ด๋‹ค.
-> ๋ณ€๊ฒฝ์ด๋ ฅ์„ ๋‚จ๊ธฐ๋Š” ์ค‘์š”ํ•œ ์ž‘์—…์ด๋ฏ€๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ํ•„์ˆ˜๋กœ ์ž…๋ ฅํ•ด์•ผํ•œ๋‹ค. ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์œผ๋ฉด commit์ด ์‹คํ–‰๋˜์ง€์•Š๋Š”๋‹ค.

3. push
-> local ์ €์žฅ์†Œ์—์„œ commitํ•œ ์ž‘์—…์„ remote ์ €์žฅ์†Œ๋กœ ๋ณด๋‚ด๋Š” ์ž‘์—…์ด๋‹ค.
์ฆ‰, ๋‚ด pc์— ์žˆ๋Š” ๋ณ€๊ฒฝ์ด๋ ฅ์„ github์— ์—…๋กœ๋“œํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.

4. pull
-> remote ์ €์žฅ์†Œ์—์„œ local ์ €์žฅ์†Œ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ž‘์—…์ด๋‹ค.
์ฆ‰, github์— ์žˆ๋Š” ์ตœ์‹  ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๋‚ด pc์— ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.

github

-> git์œผ๋กœ ์ €์žฅ๋ผ์„œ ์›๊ฒฉ์ „์†ก๋œ ํŒŒ์ผ๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค

๋งŽ์ด ์“ฐ๋Š” ์ด์œ 
๋น„๊ณต๊ฐœ๋กœ ์˜ฌ๋ฆด๋•Œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” git์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋“ค๊ณผ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฌด๋ฃŒ๋กœ ์ „์†กํ•ด์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—!



Django ๊ธฐ์ดˆ!!

๋“œ๋””์–ด django ๊ธฐ์ดˆ์— ๋“ค์–ด๊ฐ”๋‹ค. ์‹œ์ž‘๋ถ€ํ„ฐ ์—๋Ÿฌ ํŒŒํ‹ฐ๊ธดํ–ˆ์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋‚˜๋ฆ„ ์žฌ๋ฏธ์žˆ์–ด์„œ ๋‹คํ–‰์“ฐ^^ ํ™•์‹คํžˆ ํ˜ผ์žํ• ๋•Œ๋ณด๋‹ค ๋” ๋‹ค์–‘ํ•œ ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜จ๋‹ค...... ์ง€์ง€์•Š๊ฒ ์–ด....!

Django๋ž€

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


MTV ํŒจํ„ด

๊ฐœ๋ฐœ(๋””์ž์ธ) ํŒจํ„ด์ค‘ MVC ํŒจํ„ด์— ํ•ด๋‹นํ•œ๋‹ค. ๋จผ์ € ๊ฐœ๋ฐœ ํŒจํ„ด์€ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š” ๊ฐœ๋ฐœ ์š”์†Œ๋“ค์— ๋Œ€ํ•œ ๊ทœ๊ฒฉํ™”๋œ ์–‘์‹์„ ๋งํ•˜๋Š”๋ฐ ์˜ˆ์‹œ๋กœ ๋ ˆ๊ณ  ์กฐ๋ฆฝ ์„ค๋ช…์„œ์™€ ์š”๋ฆฌํ•˜๋Š” ๊ณผ์ •์„ ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์žฌ๋ฃŒ๋ฅผ ์†์งˆํ•˜๊ณ  ์–‘๋…์žฅ์„ ๋งŒ๋“ค์–ด ์ด ๋‘˜์„ ์„ž์œผ๋ฉด ์š”๋ฆฌ๋ผ๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋˜๋Š” ๊ฒƒ.
์„ค๋ช…์„œ๋ฅผ ๋ณด๊ณ  ๋น„ํ–‰์„ ์˜ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ๋‚ ๊ฐœ์™€ ๋ชธํ†ต์„ ๋งŒ๋“ค์–ด ํ•ฉํ•˜๋ฉด ๋น„ํ–‰์„ ์ด๋ผ๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋˜๋Š” ๊ฒƒ.

์ด์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ๋„ ๋™์ผํ•˜๊ฒŒ ํ•„์š”ํ•œ ๋‚ด์šฉ์„ ๋ช‡๊ฐœ์˜ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ํ•˜๋‚˜์”ฉ ๋งŒ๋“  ํ›„ ์—ฐ๊ฒฐํ•˜๋ฉด ํ”„๋กœ์ ํŠธ๊ฐ€ ์™„์„ฑ๋œ๋‹ค!

MVCํŒจํ„ด์€ Model, View, Controller๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.
Controller๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ Model๋กœ ๋ณด๋‚ด๋ฉด Model์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด ๋‹ค์‹œ Controller๋กœ ๋ณด๋‚ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Controller๋Š” ์ฒ˜๋ฆฌ๋œ ์š”์ฒญ์„ View๋กœ ๋ณด๋‚ด๊ณ  View๋Š” ์ฒ˜๋ฆฌ๋œ ์š”์ฒญ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.


์žฅ๊ณ ์—์„œ๋Š” ์ด MVCํŒจํ„ด์„ ์•ฝ๊ฐ„ ๋ณ€ํ˜•ํ•˜์—ฌ MTVํŒจํ„ด์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ
MTVํŒจํ„ด์€ Model, Template, View๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.
Model์€ ์•ฑ์˜ ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ๋ถ€๋ถ„, Template์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ๋ถ€๋ถ„, View๋Š” Model์˜ ๋ฐ์ดํ„ฐ๋ฅผ Template์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ  Template์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.




์ฒซ๋ฒˆ์งธ ์‹ค์Šต : PhotoApp ๋งŒ๋“ค๊ธฐ

1. ์ž‘์—…ํ•  ํด๋” ์ƒ์„ฑ

  • mkdir 01_PhotoApp

2. ์ƒ์„ฑํ•œ ํด๋” ์•ˆ์— django ๋‹ค์šด๋กœ๋“œ

  • pip install django

3. django ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

  • django-admin startproject photoWeb .

4. photo ์•ฑ ์ƒ์„ฑ

  • python manage.py startapp photo

5. ํ”„๋กœ์ ํŠธ ์‹คํ–‰

  • python manage.py runserver

=> ๋กœ์ผ“ ํŽ˜์ด์ง€~~~!!

6. photo ์•ฑ ์ถ”๊ฐ€

  • settings.py -> INSTALLED_APPS ='photo', ์ถ”๊ฐ€

7. ํ”„๋กœ์ ํŠธ url ์ฃผ์†Œ ๋“ฑ๋ก

  • photoWeb/urls.py -> path('admin/', admin.site.urls), ํ™•์ธ

8. ๊ด€๋ฆฌ์ž ๊ณ„์ • ์ƒ์„ฑ

  • python manage.py createsuperuser

9. model ์ƒ์„ฑ

from django.db import models

class Photo(models.Model):
	title = models.CharField(max_length=50)
    author= models.CharField(max_length=50)
    image = models.CharField(max_length=200)
    description = models.CharField(max_length=100)
    
    def __str__(self):
    	return self.title
  • Photo๋ผ๋Š” ๋ชจ๋ธ์„ ๋งŒ๋“ ๋‹ค
  • Photo๋Š” title, author, image, description์ด๋ผ๋Š” ์†์„ฑ์„ ๊ฐ€์ง„๋‹ค.
    ๊ฐ ์†์„ฑ์€ ๋ฌธ์ž์—ด๋กœ ์„ค์ •ํ•˜๋˜ ์ตœ๋Œ€๊ธธ์ด ์ œํ•œ์„ ์ฃผ์—ˆ๋‹ค.

10. ์ˆ˜์ •์‚ฌํ•ญ ํŒŒ์ผ๋กœ ์ƒ์„ฑ

  • python manage.py makemigrations

11. ์ˆ˜์ •์‚ฌํ•ญ ์‹ค์ œ DB์— ๋ฐ˜์˜

  • python manage.py migrate

12. admin ์‚ฌ์ดํŠธ์— Photo ๋ชจ๋ธ ๋“ฑ๋ก

  • photo/admin.py ํŒŒ์ผ์„ ์—ด๊ณ 
from .models import Photo

admin.site.register(Photo)

์ž…๋ ฅ

  • ํ˜„์žฌํด๋” ๋‚ด์˜ models.py๋ฅผ ๋ถˆ๋Ÿฌ Photo ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์— Photo ๋ชจ๋ธ์„ ๋“ฑ๋กํ•œ๋‹ค.

13. ํ”„๋กœ์ ํŠธ ์‹คํ–‰

  • python manage.py runserver

0๊ฐœ์˜ ๋Œ“๊ธ€