동백 // Django 모델(ORM)이란 무엇일까???

2021. 12. 27. 14:47강의 정리/Django Models

반응형

출처 : https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%A5%EA%B3%A0-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard

 

장고(Django)를 배우기 시작한 입문자이시거나, 또는 배우고 싶은 생각이 있으신 분은 위 출처의 강의를 적극 추천드립니다!!!

 

 


 

 

애플리케이션의 다양한 데이터 저장방법

  • 데이터베이스 :  RDBMS, NoSQL 등
  • 파일 : 로컬, 외부 정적 스토리지(나스, 아마존 s3, 구글 스토리지)
  • 캐시서버 : memcached, redis 등

 

 

데이터베이스와 SQL

데이터베이스의 종류

  • RDBMS (관계형 데이터베이스 관리 시스템) ex) PostgreSQL, MySQL  -> MariaDB에 대해서 알고 싶다면
  • https://blog.naver.com/yardyard
  • NoSQL ex) MongoDB, Cassandra, CounchDB, Google BigTable
 

동백 : 네이버 블로그

Last chance

blog.naver.com

 

데이터베이스에 쿼리하기 위한 언어 -> SQL

  • 쿼리 : 쿼리는 웹 서버에 특정한 정보를 보여달라는 웹 클라이언트 요청(주로 문자열을 기반으로 한 요청이다)에 의한 처리이다. 출처 : http://www.terms.co.kr/query.htm

 

 

같은 작업을 하더라도 상대적으로 보다 적은 수의 SQL, 보다 높은 성능의 SQL을 추구해야한다.

 

 

직접 SQL을 만들기도 하지만, ORM(object-relational mapping)을 통해서 SQL을 생성 / 실행하기도 한다.

-> 생산성있게 서비스를 만들어갈 수 있다.

 

 

중요한 것은 ORM을 사용하더라도, 내가 작성했던 ORM 코드를 통해 어떤 SQL이 어떻게 실행되고, 작동되는지에 대해서 이해하고 최적화할 수 있어야 한다. -> django-debug-toolbar 적극 활용

 

 

장고 ORM인 모델은 RDB만을 지원함.

  • RDB(Relational Database)란 관계형 데이타 모델에 기초를 둔 데이타베이스입니다. 관계형 데이타 모델이란 데이타를 구성하는데 필요한 방법 중 하나로 모든 데이타를 2차원의 테이블 형태로 표현해줍니다. 관계형 데이타 모델의 개념은 표현 개체의 외부개념 관례를 적용한 것으로, 데이타 간의 상관관계에서 개체간의 관계를 표현한 것이라고 할 수 있습니다.

    출처: https://jwprogramming.tistory.com/52 [개발자를 꿈꾸는 프로그래머]

 

 

Django의 강점은 ModelForm이다.

  • Model과 Form을 통해 수월한 데이터베이스의 처리를 할 수 있다.
  • SQL을 직접 실행할수도있지만, 가능하면 ORM을 써야한다.

 

 

Django Model 

  • 장고 내장 ORM이다.
  • 데이터베이스 테이블과 파이썬 클래스를 1 : 1로 매핑해준다.
  • 모델 클래스명은 단수형으로 지정 ex) Posts (X) Post (O) #클래스이기에 반드시 첫글자가 대문자 CamelCase로 네이밍
  • 매핑되는 모델 클래스는 DB 테이블 필드 내역이 일치해야 한다. 
  • Model을 만들기 전에, 반드시 서비스에 맞는 데이터베이스 설계를 해야한다.
  • Model은 데이터베이스의 영역이므로 관계형 데이터베이스 학습도 필요하다.

 

 

Model의 예시 코드

from django.db import models

# Create your models here.

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True)

 

 

모델 활용 순서

Django model을 통해, 데이터베이스 형상을 관리할 경우

  1. 모델 클래스 작성
  2. 모델 클래스로부터 마이그레이션 파일 생성 -> makemigrations 명령
  3. 마이그레이션 파일을 데이터베이스에 적용 -> migrate 명령
  4. 모델 활용

Django 외부에서, 데이터베이스 형상을 관리할 경우 = 이미 데이터베이스를 구축해 놓은 경우

  1. 데이터베이스로부터 모델 클래스 소스 생성 -> inspectdb 명령
  2. 모델 활용

 

 

모델명과 DB 테이블명

  • DB 테이블명 : default(기본 값) "앱이름_모델명"
  • ex) blog앱 :  Post 모델 -> "blog_post", Comment 모델 -> "blog_comment"

 

 


 

Bouns

  • app을 추가할 때마다 프로젝트의 settings.py에 추가해주어야 함
  • INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'inflearn',
        'instagram',
    ]
  • app을 추가하고, urls.py를 생성하면, 프로젝트의 urls.py에 추가해주어야한다.
  • from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('inflearn/', include('inflearn.urls')),
        path('instagram/', include('instagram.urls')),
    ]
  • 위 두 작업이 마무리되었다면, model을 만들 차례이다.
  • from django.db import models
    
    # Create your models here.
    
    class Post(models.Model):
        message = models.TextField()
        created_at = models.DateTimeField(auto_now_add=True)
        updated_at = models.DateTimeField(auto_now_add=True)
  • model 작업도 마무리 되었다면 makemigrationsmigrate 를 수행해준다.
  • -> sqlmigrate는 실제로 데이터베이스에 들어가는 쿼리를 볼 수 있다.
  • dbshell은 sqlite와 연결을 해주어서 sql 명령문을 파이썬에서 실행할 수 있도록 해준다.
반응형