
๊ฐ๋ฐ์ ๋ฐฐ์ฐ๋ ํ์์ผ๋ก์, GitHub Copilot Chat์ ํ์ฉํ์ฌ To-Do List ์น์ฑ์ ๊ฐ๋ฐํ ๊ฒฝํ์ ๊ณต์ ํฉ๋๋ค. ๋จ์ํ AI์๊ฒ ์ฝ๋๋ฅผ ํต์งธ๋ก ๋งก๊ธฐ๋ ๊ฒ์ด ์๋๋ผ, ์ง์ ์ค๊ณ๋ฅผ ์ฃผ๋ํ๊ณ ๋จ๊ณ๋ณ๋ก ๊ตฌํํ๋ฉฐ AI๋ฅผ ํํธ๋๋ก ํ์ฉํ๋ ๋ฐฉ์์ ์ด์ ์ ๋ง์ท์ต๋๋ค.
์ฝ๋ฉ์ ์์ํ๊ธฐ ์ , Copilot๊ณผ ๋ํํ๋ฉฐ ํ๋ก์ ํธ๋ฅผ ๋จ๊ณ๋ณ๋ก ๊ตฌํํ๊ธฐ ์ํ ๋ก๋๋งต์ ๊ทธ๋ ธ์ต๋๋ค.
๊ฐ์ฅ ๋จผ์ ๊ธฐ์ ์คํ์ ์ ํด์ผ ํ์ต๋๋ค. ์ ๋ ์ฒ์์ Flask(๋ฐฑ์๋) + Django(ํ๋ก ํธ์๋)๋ผ๋ ์กฐํฉ์ ์๊ฐํ์ต๋๋ค.
User: "๋ฐฑ์๋๋ Flask, DB๋ MySQL, ํ๋ก ํธ์๋๋ Django๋ฅผ ์ฐ๊ณ ์ถ์๋ฐ..."
Copilot: "Flask์ Django๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ด์ง ์์ต๋๋ค. ํ์ ์ ์ฅ์์๋ Django ํ์คํ(์ต์ 1)์ ์ถ์ฒํฉ๋๋ค."
Copilot์ ์กฐ์ธ์ ๋ฐ์๋ค์ฌ Django ํ์คํ์ผ๋ก ๋ฐฉํฅ์ ์ก๊ณ , 1๋จ๊ณ ๊ฐ๋ฐ์ ์์ํ์ต๋๋ค.
| ๊ตฌ๋ถ | ๋์ ์์ฒญ / ์ํฉ | Copilot์ ์ํ ๋ด์ฉ |
|---|---|---|
| ์คํ ์ปจ์คํ | Flask+Django ํผํฉ ์คํ ๋ฌธ์ | ๋นํจ์จ์ฑ์ ์ง์ ํ๊ณ Django ๋จ์ผ ํ์คํ ์ถ์ฒ |
| ํ๊ฒฝ ์ค์ | Conda ๊ฐ์ํ๊ฒฝ(py313) ์ฌ์ฉ ์์ฒญ | ํฐ๋ฏธ๋ ๋ช
๋ น์ด๋ฅผ ํตํด Django ์ค์น ๋ฐ ํ๋ก์ ํธ(todo_config), ์ฑ(tasks) ์์ฑ |
| ๊ตฌ์กฐ ์ก๊ธฐ | ํ๋ก์ ํธ ํธ๋ฆฌ ๊ตฌ์กฐ ์์ฒญ | settings.py, urls.py, templates ๋ฑ ํ์ค ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ ์์ฑ |
| ์ด๊ธฐ ๊ตฌํ | DB ์์ด ์๋ํ๋ CRUD ์์ฒญ | tasks ๋ฆฌ์คํธ(List) ๋ณ์๋ฅผ ์ ์ญ์ผ๋ก ์ ์ธํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ์ ์ฅ์ ๊ตฌํ |
| ๋ทฐ(View) | ํด๋์ค ๊ธฐ๋ฐ ๋ทฐ(CBV) ์์ฒญ | ListView, CreateView ๋ฑ์ ์์๋ฐ์ ๊ธฐ๋ณธ ๋ก์ง ์์ฑ |
๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ ์๋ฒ๋ฅผ ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ ์๊ฐ๊ธฐ ๋๋ฌธ์, DB๋ฅผ ์ฐ๋ํด์ผ ํ์ต๋๋ค. ์ด๊ธฐ์๋ ์ค์ ์ด ์ฌ์ด SQLite๋ก ๊ตฌํํ๊ณ , ์ดํ MySQL๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ์๋ํ์ต๋๋ค. ์ด ๊ณผ์ ์์ ๋ก์ปฌ ํ๊ฒฝ ์ด์๋ก ๊ฝค ๊ณ ์ํ์ผ๋ Copilot์ ๋์์ผ๋ก ํด๊ฒฐํ์ต๋๋ค.
| ๊ตฌ๋ถ | ๋์ ์์ฒญ / ์ํฉ | Copilot์ ์ํ ๋ด์ฉ |
|---|---|---|
| ORM ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ฝ๋๋ฅผ DB ์ฝ๋๋ก ๋ณ๊ฒฝ | models.py์ Task ๋ชจ๋ธ ์ ์ ํ, views.py๋ฅผ ๋ฆฌํฉํ ๋งํ์ฌ QuerySet ์ฌ์ฉ |
| ๊ด๋ฆฌ์ | ๋ฐ์ดํฐ ๊ด๋ฆฌ ํ์ | admin.py์ ๋ชจ๋ธ์ ๋ฑ๋กํ์ฌ Django Admin ํ์ด์ง ํ์ฑํ |
| DB ์ค์น | ๋ก์ปฌ์ MySQL์ด ์์์ | winget์ ์ฌ์ฉํ์ฌ MySQL Community Server ์๋ ๋ค์ด๋ก๋ ๋ฐ ์ค์น ์คํฌ๋ฆฝํธ ์คํ |
| ํธ๋ฌ๋ธ ์ํ | mysqlclient ๋๋ผ์ด๋ฒ ํธํ์ฑ ์๋ฌ | ๊ธฐ์กด ๋๋ผ์ด๋ฒ ๋์ ์์ ํ์ด์ฌ ๋๋ผ์ด๋ฒ์ธ PyMySQL ์ค์น ๋ฐ Django ์ค์ ํจ์น ์ ์ |
| ๋ง์ด๊ทธ๋ ์ด์ | DB ๋ณ๊ฒฝ ํ ํ ์ด๋ธ ์์ฑ | makemigrations ๋ฐ migrate ๋ช
๋ น์ด๋ฅผ ํตํด ์คํค๋ง ๋๊ธฐํ ์๋ฃ |
๐ก ๋ก์ปฌ์ MySQL ์๋ฒ๊ฐ ๊น๋ ค์์ง ์์ ์ํฉ์์๋ Copilot์ด ํฐ๋ฏธ๋ ๋ช ๋ น์ด๋ก ์ค์น๋ถํฐ ์๋น์ค ์คํ, DB ์์ฑ(CREATE DATABASE)๊น์ง ์ ๋ถ ์ํํด ์ฃผ๋ ๋ชจ์ต์ด ์ธ์์ ์ด์์ต๋๋ค.
๊ธฐ๋ฅ์ ๋์ํ์ง๋ง ๋์์ธ์ด ๋๋ฌด ํฌ๋ฐํ์ต๋๋ค. Bootstrap 5๋ฅผ ์ ์ฉํ์ฌ "์์ฅ์ฑ ์๋ ์์ค"์ ๋์์ธ์ ์์ฒญํ์ต๋๋ค.
| ๊ตฌ๋ถ | ๋์ ์์ฒญ / ์ํฉ | Copilot์ ์ํ ๋ด์ฉ |
|---|---|---|
| ๋์์ธ | Bootstrap 5 ์ ์ฉ ์์ฒญ | base.html์ CDN ๋งํฌ ์ถ๊ฐ ๋ฐ ๋ค๋น๊ฒ์ด์
๋ฐ, ํธํฐ๊ฐ ํฌํจ๋ ๋ ์ด์์ ๊ตฌ์ฑ |
| UX ๊ฐ์ | ์ญ์ ์ ๋ฐ๋ก ์ง์์ง๋ ๋ฌธ์ | JavaScript ๊ธฐ๋ฐ์ ์ญ์ ํ์ธ ๋ชจ๋ฌ(Modal) ์ฝ๋ ์์ฑ |
| ํผ๋๋ฐฑ | ์์ ์๋ฃ ์ฌ๋ถ ํ์ธ ์ด๋ ค์ | Django Messages ํ๋ ์์ํฌ๋ฅผ ํ์ฉํด ์ฐ์ธก ์๋จ์ ๋จ๋ ํ ์คํธ(Toast) ์๋ฆผ ๊ตฌํ |
| ์คํ์ผ๋ง | ๋ฐ๋ฐํ ํ ์ด๋ธ | ์ํ(์๋ฃ/์งํ)์ ๋ฐ๋ผ ์์์ด ๋ณํ๋ ๋ฐฐ์ง(Badge)์ ์นด๋ํ UI ์ ์ฉ |
๋ง์ง๋ง์ผ๋ก ์ค๋ฌด ์ฑ์ฒ๋ผ ๊ธฐ๋ฅ์ ๊ณ ๋ํ ์ํค๊ณ ์ ํ์ต๋๋ค. ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์์ ํ๊ณ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ผ ํ๋ ๊ณผ์ ์ด์์ต๋๋ค.
| ๊ตฌ๋ถ | ๋์ ์์ฒญ / ์ํฉ | Copilot์ ์ํ ๋ด์ฉ |
|---|---|---|
| ๋ชจ๋ธ ํ์ฅ | ์ฐ์ ์์, ์นดํ ๊ณ ๋ฆฌ ๊ธฐ๋ฅ ์ถ๊ฐ | Priority ํ๋์ Category ๋ชจ๋ธ(์ธ๋ํค) ์ถ๊ฐ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์
๊ฐ์ด๋ |
| ๊ฒ์ ๊ธฐ๋ฅ | ์ ๋ชฉ+๋ด์ฉ ๊ฒ์ ์์ฒญ | Django์ Q ๊ฐ์ฒด๋ฅผ ํ์ฉํ์ฌ OR ์กฐ๊ฑด ๊ฒ์ ์ฟผ๋ฆฌ ์์ฑ |
| ํํฐ/์ ๋ ฌ | ๋ค์ํ ์กฐํ ์กฐ๊ฑด ํ์ | URL ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ ์ฟผ๋ฆฌ์
์ ํํฐ๋ง(filter)ํ๊ณ ์ ๋ ฌ(order_by)ํ๋ ๋ก์ง ๊ตฌํ |
| ๋์๋ณด๋ | ํต๊ณ ์ ๋ณด ํ์ | ์ ์ฒด ํ ์ผ ๊ฐ์, ์๋ฃ์จ ๋ฑ์ ๊ณ์ฐํ์ฌ ํ ํ๋ฆฟ์ ์ ๋ฌ |
MySQL๋ก DB๋ฅผ ์์ ํ ๊ต์ฒดํ ํ, ์น์ฑ์ ์ ์ํ๋ ๊ธฐ์กด์ SQLite์์ ์์ฑํ ๋ฐ์ดํฐ๊ฐ ํ๋๋ ๋ณด์ด์ง ์์์ต๋๋ค.
settings.py์ DB ์ฐ๊ฒฐ ์ ๋ณด๋ง ๋ณ๊ฒฝํจ.migrate_data_to_mysql.py๋ผ๋ ํ์ด์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์ฆ์์์ ์์ฑํด ์ค.bulk_create๋ก ๋ฐ์ด ๋ฃ๋ ๋ก์ง.์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด AI ์ฝ๋ฉ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ํ๋๊ฐ ๋ฐ๋์์ต๋๋ค.
๊ฒฐ๋ก : Copilot์ ๋จ์ํ ์๋์์ฑ ๋๊ตฌ๊ฐ ์๋๋ผ, ๋ด ์์ ์์ ๋ ๋ ํ ์๋์ด ๊ฐ๋ฐ์๋ก ์๊ฐํ๊ณ ํ์ฉํด์ผ ํ๋ค๋ ๊ฑธ ์ฒด๊ฐํ์ต๋๋ค. ๋ค์์๋ ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฌ ๋ชจ๋ธ ๋ณ๋ก ์์ผ ๋ณธ ๋ค์์ ๋ชฉ์ ๋ณ ์ ์ ํ ๋ชจ๋ธ์ ์ฐพ์๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋๋ ์ง์ ์ค๊ณ๋ฅผ ์ฃผ๋ํ๊ณ ๋จ๊ณ๋ณ๋ก ๋ฐ์ ์ํค๋ ์ฐ์ต์ ํด๋ณด๊ฒ ์ต๋๋ค. ๐