학습주제
모델만들기
학습내용
사실 서버는 정해진 답을 그려주기 보단 DB에 저장되어 있는 값을 가지고 와서 웹 페이지에 그려주는 경우가 대부분.
프로그래머스 커뮤니티를 보면,
여러 글 목록이 있고 작성자에 대한 정보가 나와있다. 이는 모두 DB에 저장되어 있는 자료다.
웹페이지는 DB를 읽어들여 화면에 표시함.
모델은 DB를 테이블 별로 읽어서 하나의 테이블에 저장되어 있는 값을 코드에서 읽을 수 있게 도와준다. 이를 ORM이라고도 한다. 과정은 크게
# 모델 생성
# 모델을 테이블에 써 주기 위한 마이그레이션이라는걸 만든다.
# 이 모델에 맞는 테이블을 만듭니다.
간단한 설문에 답을 하는 기능을 구현할 예정. questions라는 모델에 만들어볼 예정. 이 때 models.Model
을 상속받아야 함.
class 뒤에 기본적인 틀을 모두 만들어주는 자동완성 기능을 되게 하려고 검색해봤지만 아직 찾지 못하였음. 일단 vscode의 터미널을 가상환경 터미널로 사용. 인터프리터는 django-venv의 python.exe를 사용하였다. 코드 자동완성 기능이 없어도. 일단 기본적인 사용은 가능해 진행하기로 한다. 하려고 했는데 코드 뜨는게 너무 편리해보여서 이것저것 알아보다
이걸 설치했다. 설치했더니 예상되는 문장이 뜨는 것을 확인할 수 있었다. 지금은 연습단계니 직접 입력한다.
클래스 두개를 생성
질문 내용과 질문을 생성한 날짜로 구성.
question column 생성. 이 질문의 Choice는 질문에 딸려있음. 이게 어떤것에 대한 옵션인지 알아야 되기 때문. question은 class Question의 유니크 id를 저장하는 공간.
질문의 여러가지 옵션 중 하나.
votes는 IntegerField
인데 숫자를 저장하는 필드. 몇개의 투표를 받았는지 저장할 예정.
이렇게 만든 모델을 테이블로 전환하는 작업. 모델과 테이블은 1:1으로 매칭됨.
마이그레이션을 만들이 전에, 이 앱을 등록해줘야 함. 장고의 마이그레이션 기능은 설치된 앱에 대해 지원하기 때문.
mysite의 setting.py
로 가 INSTALLED_APPS
에 추가하여야 함.
무엇을?
polls
의 apps.py
로 가면
PollsConfig
를 등록해야함.
최상단에 polls.apps.PollsConfig
를 등록. 이렇게 등록된 앱을 기반으로 마이그레이션을 만들 수 있다.
터미널에 python manage.py makemigrations polls
를 해주면,
이런 결과가 나온다.
저 뜻은 polls에 대해서 Question, Choice 모델을 만든다.
마이그레이션 내용을 살펴보기 위해선,
python manage.py sqlmigrate polls 0001
을 입력
이렇게 내용을 표시해준다. 내용은,
Question 모델을 만드는데, CREATE TABLE ~ 이하의 명령어를 통해 만듦.
Choice 모델을 만드는데, CREATE TABLE ~ 이하를 통해 만듦
그 중 우리가 지정하지 않은 id
column이 생성된 것을 볼 수 있다. NOT NULL 이고, PRIMARY KEY AUTOINCREMENT로 설정.
두 모델 모두 id 칼럼이 자동으로 생성되었다.
CREATE INDEX의 경우 question의 id에 대해서 인덱싱을 하고 있다.
우리는 앞으로 Question의 id를 가지고 choice들을 자주 조회하게 될 예정. 1번 question 에 대한 choice들을 불러와줘 등. 그러한 쿼리들을 많이 날릴 예정. 인덱싱이 되어있지 않다면, DB는 full scan으로 조건에 맞는것들을 찾아옴. 인덱싱이 되어 있다면 DB는 상대적으로 바로 찾아올 수 있음. 그래서 foreignkey에 대해서 항상 인덱싱을 함.
python manage.py migrate
을 치면, 다음과 같이 생성.
내용을 보면
Apply all migrations: admin, auth, contenttypes, polls, sessions
라고 되어있다. polls만 했는데, 나머지는 디폴트로 설치되어 있었던 것들이다. 이것들에 대한 테이블이 만들어졌다고 볼 수 있다.
polls도 잘 만들어졌다.
migrate을 한번 더 실행할 경우, 더 실행할 마이그레이션이 없다고 한다.
처음 모델을 생성, 모델을 적용할 마이그레이션, 마이그레이트를 통해 테이블을 실제로 변경.
다 돌린 결과는 저장되어 있음. 그래서 더 이상 돌릴 마이그레이션이 없다고 한 것.
sql이랑 섞이기 시작하니까 헷갈린다. 주말 등을 이용해서 sql을 복습하는 것이 좋아 보인다. 아니면 수업을 끝내고 남는 시간마다 sql을 하는 것도 좋아보인다. 기능, 변수 등 수업의 호흡이 갑자기 빨라진 느낌이다. 충분히 숙지될 수 있도록 많이 보고, 따라해보는 것이 좋을 것 같다. 나중에 다시 연습을 하기 위해 블로그를 꼼꼼히 쓸 예정이다.