Django CRUD를 위한 Model을 공부하며 적어보려고 합니다!
이전 글에서 기술했듯이 Model의 역할은 ORM
으로 DB의 Data생성, 조회, 수정 및 삭제등을 가능하게 함
객체(Class)와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는것을 의미함
이것이 왜 필요하냐면 객체와 테이블은 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데 ORM을 이용하여 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결할 수 있음
ORM을 이용하면 Class의 method를 통해 db를 제어할 수 있어서 개발자가 Class model만 이용하여 프로그래밍 가능
기존 객체와 독립적으로 작성되어있고, 객체로 작성되어 재활용 가능 및 매핑하는 정보가 명확하여 ERD의존도를 낮출 수 있음
프로그램 구조가 데이터 구조에 끼치는 영향이 줄어듬
객체간의 관계를 바탕으로 SQL문을 자동으로 생성하고 객체의 자료형 타입까지 사용할수 있기 때문에 RDBMS의 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있음.
객체에만 집중할 수 있어서 DBMS를 교체하는 큰 작업에도 리스크, 시간이 줄어듬
Project의 복잡성이 커질 수록 난이도 상승 및 부족한 설계로 잘못 구현되었을 경우 속도 저하, 일관성을 무너뜨리는 문제접 발생할 수 있고 일부 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하여 결국 SQL문을 사용해야 할 수도 있음
DB Table을 만들기 위해 장고의 class인
models.Model
을 작성한 class가 상속받을 수 있게 함
shell
에서 작업하기 쉽게__str__
에 이름이 보일 수 있게 작성했고 Product와 Allergy class는ManyToManyField
로M2M
관계를 설정해줬음
위에 Class를 만든다고 해서 DB에 모델이 생기지는 않기 때문에 만든 Class로 ORM을 통해 직접 DB에 Data Table을 만들어줘야 한다!
$ python manage.py makemigrations <app_name>
makemigrations
는migrate
파일을 만들어 주는 역할을 하는데python
코드를 SQL로 변환하기 위한 일종의 설계문을 생성한다고 볼 수 있다
$ python manage.py migrate
해당 migration 파일을 DB에 반영하는 명령어
위처럼 migrate
가 완료되면 DB에 실제 Table들이 생성이 된 것을 확인 할 수 있다
글 내용 중 잘못된 부분 있으면 Feedback 부탁드립니다!👊🏻👊🏻👊🏻👊🏻