ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL.50 Django Model 과 ORM 정리
    TIL/Django 2020. 11. 28. 23:00
    728x90

    Model

    장고에서 모델이란 데이타 서비스를 제공하는 layer이다.

    부가적인 메타데이터를 가진 데이터베이스의 구조(layout)이라 할 수 있다.

     

    장고의 모델은 각 장고 App안에 기본적으로 생성되는 models.py 모듈 안에 정의하게 된다.

    models.py 모듈 안에는 하나 이상의 모델 클래스를 정의할 수 있으며 

    모델 클래스 하나는 데이터베이스에서이 하나의 테이블에 해당한다.

    모델을 선언한 뒤에는 데이터베이스에 해당 모델을 위한 테이블을 생성해야하므로

     

    반.드.시 migration 으로 활성화 시켜 내가 모델을 변경했다는 사실(또는 생성했다는 사실)과 이 변경사항을

    migration에 저장시키고 싶다고 Django에게 알려주는 것과 같다

    그다음 migrate 명령어로 데이터베이스에 모델과 관련된 테이블을 생성시키면 된다.

    python3 manage.py makemigrations app_1
    
    python3 manage.py migrate

    ORM

    장고는 ORM 으로 데이터 베이스의 데이터를 관리하는데 ORM은 정확히 무엇일까?

    출처 : https://velog.io/@yejin20/%EA%B0%95%EC%9D%98Django3.-Django-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%84%A4%EA%B3%84

    ORM (Object-Relational Mapping)

    객체(object)와 관계형 데이터베이스(Relational Database)의 데이터를 매핑(Mapping)해주는 것을 의미한다

    객체 간의 관계를 바탕으로 SQL을 자동으로 생성해서 sql쿼리문 없이도 데이터베이스의 데이터를 다룰 수 있게 해준다.

    (* SQL : 데이터베이스를 다루고 접근하기 위한 스탠다드 언어를 뜻한다.)

    (*SQL 쿼리문 : SQL문 또는 쿼리문 이라 불리기도 하는데, 이는 데이터베이스에 저장된 값을 불러오는 방법을 말한다.)

    * Java  Hibernate/ C# : NHiberante&Entity Framwork / Python : Django ORM & SQLAlchemy 등이 있다.

     

    즉 장고에서의 ORM을 간단히 설명하자면 

    장고의 모델은 파이썬 언어로 작성하는데 DB에서는 파이썬 언어를 알지 못하기에 이를 SQL문으로 변경해줘야 하는데

    이를 장고 ORM으로 해결 할 수 있다.

    따라서, 프로그래머는 내가 작성한 파이썬 언어가 DB의 어떤 SQL문으로 변환되어야 알 필요가 없어 유용하긴 하지만

    반대로 말하면 sql문을 모르는 바보가 될 수 있다. (후에는 sql 문을 작성하는 방법을 반드시 익혀야 한다고 한다.)

     

    ORM의 장점

    빠르게 개발이 가능하고 생산성이 증가한다.

    부수적인 코드가 줄어들어 객체에 대한 코드를 별도로 작성하기에 가독성이 좋아진다.

    유지보수에 있어 유용하며 코드의 재사용이 가능해진다.

     

    ORM의 단점

    해당 프로그래밍 언어를 사용하지만 ORM 라이브러리를 따로 배워야한다.

    규모가 크거나 복잡한 프로젝트의 경우 SQL문으로 작성하는것이 좋을 수 있다.

    정확한 원리를 이해하지 않고도 사용할 수 있다 보니 문제 대처능력이 떨이질 수 있다.

     

    출처 : ychae-leah.tistory.com/

     

    ychae-leah

     

    ychae-leah.tistory.com

    점프투장고

    wikidocs.net/70649

     

    위키독스

    온라인 책을 제작 공유하는 플랫폼 서비스

    wikidocs.net

     

    728x90
Designed by Tistory.