๋ชฉ๋ก์คํฐ๋/Web (9)
Study Anything ๐ง
ํ๋ก์ ํธ ๊ฐ๋ฐ์ด ๋ชจ๋ ๋๋ ํ ๊ทธ ํ๋ก์ ํธ์ ๋ง์ง๋ง ๋จ๊ณ๋ ๋จ์ฐ์ฝ ์๋ฒ์ ์ฌ๋ ค์ ์ ์๋ํ๋์ง ํ์ธํ๋ ๊ฒ์ผ ๊ฒ์ด๋ค. ๋ง์นจ ์ผ๋ง ์ ์ ํ๋ก์ ํธ ๊ฐ๋ฐ์ด ๋ชจ๋ ๋๋์ ์๋ฒ์ ์ฌ๋ ค๋ณด๋ ค๋ ์ค์ธ๋ฐ ์ฌ๋ฌ ์๋ฒ ํ๋ซํผ์ด ์์ง๋ง, GCP๊ฐ ๋ฌด๋ฃ ์ฒดํํ ๋ฑ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ๋ค์ด ์์ด์ ์ฐ๋ฆฌ๋ Google Cloud Platform(์ดํ GCP)๋ฅผ ์ด์ฉํด์ ์๋ฒ์ ์ฌ๋ ค๋ณด๋ ค๊ณ ํ๋ค. ๋จผ์ GCP ์ฝ์์ ์ ์ํ๋ค. https://console.cloud.google.com/ ๊ทธ ๋ค์์ผ๋ก๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค. ํน์ ์ด๋ฏธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด์ ๋์๋ณด๋๊ฐ ๋ฌ๋ค๋ฉด ์๋จ์ ํ๋ก์ ํธ ์ด๋ฆ์ ํด๋ฆญํด ๋จ๋ ์ฐฝ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ์ ์๋ ๋ฒํผ์ด ์๋ค. ํ๋ก์ ํธ ์ด๋ฆ๊ณผ ์์น๋ฅผ ์ค์ ํ๊ณ '๋ง๋ค๊ธฐ' ๋ฒํผ์ ํด๋ฆญํ๋ค. ํ๋ก์ ํธ๊ฐ ์์ฑ๋๋ฉด..
ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฌ ๋ช ์ด ํจ๊ป ์งํํ๋ค๋ณด๋ ๊ฐ ํ์์ด ์๋ก ๋ค๋ฅธ ์ฑ์ ๊ตฌํํ๊ฒ ๋๋๋ฐ, ์ด ๋ ๋ค๋ฅธ ์ฑ์ ๋ชจ๋ธ ํ๋๋ฅผ ์ธ๋ํค๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ชจ๋ธ ์์ฒด๋ฅผ ๋ด ์ฑ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ์ฌ์ฉํ๋ฉด ๋๋์ง์ ๋ํ ๋ด์ฉ์ ๋ค๋ค๋ณด๋ ค๊ณ ํ๋ค. ํธ์์ ๋ด ์ฑ์ ์ด๋ฆ์ 'myapp', ๋ค๋ฅธ ํ์์ ์ฑ ์ด๋ฆ์ 'yourapp'์ผ๋ก ์์ ํ๋๋ก ํ๊ฒ ๋ค. ๋ชจ๋ธ๋ค์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค. # myapp/models.py class Review(models.Model): ... userId = models.ForeignKey(User, on_delete=models.CASCADE) ... # yourapp/models.py class User(models.Model): ... Review ๋ชจ๋ธ์์๋ User ๋ชจ๋ธ์ ์ธ๋ํค๋ก ์ฌ์ฉํ์ง๋ง ..
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค๊ฐ ์ด๊ธฐ์ ์์ฑํ๋ ๋ชจ๋ธ ๋ด์ฉ์ ์์ ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ญ์ ํด์ผ ํ ์ด์๊ฐ ๋ฐ์ํด์ ๊ด๋ จ ๋ด์ฉ์ ์ํํ๊ณ ๊ธ๋ก ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค. (1) ๋ชจ๋ธ ์์ ํ๊ธฐ ๊ธฐ์กด์ ์์ฑํ๋ ๋ชจ๋ธ์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค. # app/models.py class Review(models.Model): reviewId = models.IntegerField(primary_key=True)# ์ญ์ ํ ๋ด์ฉ userId = models.ForeignKey(User, on_delete=models.CASCADE) bookId = models.CharField(max_length=30) reviewTxt = models.TextField() ์ด ๋ด์ฉ์์ ์ํ ์ ๋ชฉ, ์ํ ํ์ , ์ํ ์์ฑ๋ ์ง ํ๋๋ฅผ ์ถ๊ฐํ๊ณ PK์ธ rev..
์ฐธ๊ณ : https://www.django-rest-framework.org/api-guide/serializers/ ์ฅ๊ณ ๋ ์คํธ ํ๋ ์์ํฌ(Django REST Framework)๋ฅผ ์ด์ฉํด REST API ํ๊ฒฝ์ ๊ตฌ์ถํ๋ค๋ณด๋ฉด Serializer๋ฅผ ๊ฑฐ์ ํ์์ ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ค. ํ์ง๋ง Serializer๊ฐ ์ด๋ค ๊ฐ๋ ์ธ์ง ์ ์๋ฟ์ง ์์์ Serializer์ ๋ํด ๊ณต๋ถํ๊ณ ์๊ฒ ๋ ๊ฒ๋ค์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค. (1) Serializer๋? ์ฟผ๋ฆฌ์ ์ด๋ ๋ชจ๋ธ ์ธ์คํด์ค ๊ฐ์ ๋ณต์กํ ๋ฐ์ดํฐ๋ค์ ๋ค์ดํฐ๋ธ ํ์ด์ฌ ๋ฐ์ดํฐ ํ์ ์ผ๋ก ๋ณํํ์ฌ json, xml ๋ฑ์ ์ปจํ ์ธ ํ์ ์ผ๋ก ์ฝ๊ฒ ๋ ๋๋งํ ์ ์๊ฒ ํ๋ค. ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํ๋ Serializer๋ ์ญ์ง๋ ฌํ ๊ธฐ๋ฅ ๋ํ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ ํ์ ๋ถ..
์ฅ๊ณ ์ ๋ฆฌ์กํธ๋ฅผ ์ฐ๊ฒฐํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ ์ค DRF(Django REST Framework)๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. REST API ๋ฅผ ํตํ๋ฉด ๋ฐ์ดํฐ์ CRUD(Create, Read, Update, Delete)๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ฐ, ์ด๋ฒ ํฌ์คํธ์์๋ ํนํ ๋ฐ์ดํฐ์ Create, ๋ฆฌ์กํธ์์ ์์ฑํ ๊ธ์ ์ฅ๊ณ ๋ชจ๋ธ์ ๋ฑ๋กํ๋ ๊ณผ์ ์ ๋ค๋ค๋ณด๋ ค๊ณ ํ๋ค. (๋ฆฌ์กํธ์ ์ฅ๊ณ ์ ์ค์น๋ ์๋ตํ๋๋ก ํ๊ฒ ๋ค.) ์ฅ๊ณ REST API ๋ฅผ ๊ตฌ์ถํ๋ ๊ณผ์ ์ ์ด์ ํฌ์คํธ์์ ๋ค๋ฃจ์๋ค. ์ฅ๊ณ ๋ชจ๋ธ์ json ๊ฐ์ฒด๋ก ์ถ์ถํ๊ธฐ (DRF) ์ฅ๊ณ ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋ฉด ํ๋ก ํธ์ ์ฐ๋ํ๊ฒ ๋ ๋๊ฐ ์๋ค. ์ด ๋ฐฉ๋ฒ๋ค์ ์ด์ ํฌ์คํธ(link)์์ ์์ธํ ์ค๋ช ํ๊ณ , ์ด ํฌ์คํธ์์๋ ๊ทธ ์ค ์ฅ๊ณ ์์ ๋ง๋ ๋ชจ๋ธ์ json ๊ฐ์ฒด๋ก ์ถ์ถํด์ ์ ..
์ฅ๊ณ ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋ฉด ํ๋ก ํธ์ ์ฐ๋ํ๊ฒ ๋ ๋๊ฐ ์๋ค. ์ด ๋ฐฉ๋ฒ๋ค์ ์ด์ ํฌ์คํธ(link)์์ ์์ธํ ์ค๋ช ํ๊ณ , ์ด ํฌ์คํธ์์๋ ๊ทธ ์ค ์ฅ๊ณ ์์ ๋ง๋ ๋ชจ๋ธ์ json ๊ฐ์ฒด๋ก ์ถ์ถํด์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ๋ค. Django REST Framework(DRF)๋ ์น์์ REST API ์๋ฒ๋ฅผ ๊ตฌ์ถํ ์ ์๋๋ก ๋์์ฃผ๋ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ๋ค์ํ ๊ธฐ๊ธฐ์ ํ๋ซํผ์ด ๋ง๋ค์ด์ง๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ๊ธฐ์กด์ ๋ฐฉ๋ฒ์ ํ๊ณ๊ฐ ์๊ฒผ๊ณ , ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๋๊ตฌ๊ฐ REST API์ด๋ค. (1) ์ค๋นํ๊ธฐ ๋จผ์ , DRF ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํฐ๋ฏธ๋์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด DRF๋ฅผ ์ค์นํ๋ค. pip install djangorestframework ๋ค์์ผ๋ก ๋ฆฌ์กํธ์์ ์ฅ๊ณ ๊ฐ ๋ง๋๋ api์ ์ ๊ทผํ ์ ..
์ฐธ๊ณ : https://wikidocs.net/70650 ์ด์ ๊ธ์์ ๋ชจ๋ธ์ ๋ง๋ค๊ณ migrate ํด์ ์ฑ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ๊น์ง ๋ฐฐ์ ๋ค. ์ด๊ฒ์ ๋ด ํ๋ก์ ํธ์ ์ ์ฉํด์ ๋ชจ๋ธ์ ๋ง๋ค๊ณ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ๋ค. (1) ๋ชจ๋ธ ๋ง๋ค๊ธฐ (models.py ํ์ผ ์์ฑ) ๋ชจ๋ธ > User ํ ์ด๋ธ ์์ฑ๋ช ๋ฐ์ดํฐํ์ userId (PK) int userEmail varchar(30) userPw varchar(20) userName varchar(20) ๋ชจ๋ธ > Review ํ ์ด๋ธ ์์ฑ๋ช ๋ฐ์ดํฐํ์ reviewId (PK) int userId (FK) int bookId varchar(30) reviewTxt text ๋ค์์ ์์ฑ์ ๊ฐ์ง ์ ์ ํ ์ด๋ธ๊ณผ ์ํ ํ ์ด๋ธ์ ์์ฑํ๋ค. class User(mo..
์ฐธ๊ณ : https://wikidocs.net/73306 (1) ์ฑ ์ฅ๊ณ ์์๋ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด '์ฑ'์ด๋ผ๋ ํ์์ ์ฌ์ฉํ๋ค. ํ๋ก์ ํธ์ ์ฑ์ ๋ง๋๋ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค. (mysite) C:\(์๋ต)\DjangoProj\mysite>django-admin startapp myapp#์ฑ ์ด๋ฆ: myapp ์ฑ์ด ์์ฑ๋์์ผ๋ ํ์ํ ๋ด์ฉ๊ณผ ๊ตฌํํ ๊ธฐ๋ฅ์ IDE์์ ์์ฑํ๊ณ ๊ฐ๋ฐ์๋ฒ๋ฅผ ๊ตฌ๋ํ ๋ค์ ์ฃผ์ ๋ค์ '/myapp' ๋ฅผ ๋ถ์ด๋ฉด ํด๋น ๊ธฐ๋ฅ์ด ๊ตฌํ๋ ์น ํ์ด์ง๊ฐ ๋์์ง๋ค. ํด๋น ํ์ด์ง๊ฐ ์ ๋๋ก ์๋ํ๋ ค๋ฉด 'ํ๋ก์ ํธ/config/urls.py' ์ url ๋งคํ์ ์ถ๊ฐํด์ผ ํ๋ค. (...) urlpatterns = [ (...) path('myapp', ํจ์๋ช ) (...) ] (...) ๋ค์๊ณผ ๊ฐ์ด ๋งคํ์..
์ฐธ๊ณ : https://wikidocs.net/72280 ์ฅ๊ณ ๋ฅผ ์ฒ์ ์ ํ๋ค๋ณด๋ ๊ฐ๋ฐ ํ๊ฒฝ์ด ๋ง๋ จ๋์ด์์ง ์์์ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ๋ฉฐ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ค. (1) ๊ฐ์ ํ๊ฒฝ ๊ตฌ์ถ ๊ฐ์ ํ๊ฒฝ์ ๋ง๋๋ ์ด์ ๋ ์ ์๋ฃ์ ์์ธํ ์ค๋ช ๋์ด ์๋ค. ๊ฐ๋จํ๊ฒ ์๊ธฐํ์๋ฉด ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ์ํํ๋ค๊ฐ ํ์ด์ฌ ๋ฒ์ ์ ๋ค๋ฅด๊ฒ ์ฌ์ฉํ๋ ๋ฑ ์ฐจ์ด๋ฅผ ๋ฌ์ผํ ๋๊ฐ ์๋๋ฐ ๊ฐ์ ํ๊ฒฝ์์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด ์ด๋ฐ ๊ฒฝ์ฐ์ ๊ฐ ํ๊ฒฝ ๋ณ๋ก ๋์ฒํ๊ธฐ๊ฐ ์ฝ๋ค. ๋ณธ์ธ์ mysite ๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ฐ์ ํ๊ฒฝ์ ๋ง๋ค์ด๋ณด์๋ค. C:\venvs\mysite\Scripts> activate cmd ์์์ ์ํ๋ ํด๋๋ก ์ด๋ํ ํ, activate ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๊ฐ์ ํ๊ฒฝ์ผ๋ก ์ด๋ํ๋ค. (mysite) C:\venvs\mysite\Scripts> deact..