Django CRUD Model #1


Django CRUD를 위한 Model을 공부하며 적어보려고 합니다!


Django app개발의 핵심 중 Model의 역할

이전 글에서 기술했듯이 Model의 역할은 ORM으로 DB의 Data생성, 조회, 수정 및 삭제등을 가능하게 함


ORM

객체(Class)와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는것을 의미함
이것이 왜 필요하냐면 객체와 테이블은 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데 ORM을 이용하여 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결할 수 있음

ORM 사용시의 장점

  • 완벽한 객체지향적인 코드

    ORM을 이용하면 Class의 method를 통해 db를 제어할 수 있어서 개발자가 Class model만 이용하여 프로그래밍 가능

  • 재사용, 유지보수, 리팩토링 용이

    기존 객체와 독립적으로 작성되어있고, 객체로 작성되어 재활용 가능 및 매핑하는 정보가 명확하여 ERD의존도를 낮출 수 있음

  • DBMS 종속성 하락

    프로그램 구조가 데이터 구조에 끼치는 영향이 줄어듬
    객체간의 관계를 바탕으로 SQL문을 자동으로 생성하고 객체의 자료형 타입까지 사용할수 있기 때문에 RDBMS의 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있음.
    객체에만 집중할 수 있어서 DBMS를 교체하는 큰 작업에도 리스크, 시간이 줄어듬

ORM 사용시의 단점

  • ORM이 모든것을 해결해줄 수 없음

    Project의 복잡성이 커질 수록 난이도 상승 및 부족한 설계로 잘못 구현되었을 경우 속도 저하, 일관성을 무너뜨리는 문제접 발생할 수 있고 일부 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하여 결국 SQL문을 사용해야 할 수도 있음


ERD를 따라 Class 작성하기

참고한 ERD 👇🏻


작성한 Class Code

DB Table을 만들기 위해 장고의 class인 models.Model을 작성한 class가 상속받을 수 있게 함
shell에서 작업하기 쉽게 __str__에 이름이 보일 수 있게 작성했고 Product와 Allergy class는 ManyToManyFieldM2M관계를 설정해줬음


Django Model을 활용하여 DB에 TABLE 생성하기

위에 Class를 만든다고 해서 DB에 모델이 생기지는 않기 때문에 만든 Class로 ORM을 통해 직접 DB에 Data Table을 만들어줘야 한다!

$ python manage.py makemigrations <app_name>

makemigrationsmigrate 파일을 만들어 주는 역할을 하는데 python코드를 SQL로 변환하기 위한 일종의 설계문을 생성한다고 볼 수 있다

$ python manage.py migrate

해당 migration 파일을 DB에 반영하는 명령어

위처럼 migrate가 완료되면 DB에 실제 Table들이 생성이 된 것을 확인 할 수 있다







글 내용 중 잘못된 부분 있으면 Feedback 부탁드립니다!👊🏻👊🏻👊🏻👊🏻












ref.
https://geonlee.tistory.com/207

좋은 웹페이지 즐겨찾기