동백 // Django 모델(ORM)이란 무엇일까???
2021. 12. 27. 14:47ㆍ강의 정리/Django Models
반응형
장고(Django)를 배우기 시작한 입문자이시거나, 또는 배우고 싶은 생각이 있으신 분은 위 출처의 강의를 적극 추천드립니다!!!
애플리케이션의 다양한 데이터 저장방법
- 데이터베이스 : RDBMS, NoSQL 등
- 파일 : 로컬, 외부 정적 스토리지(나스, 아마존 s3, 구글 스토리지)
- 캐시서버 : memcached, redis 등
데이터베이스와 SQL
데이터베이스의 종류
- RDBMS (관계형 데이터베이스 관리 시스템) ex) PostgreSQL, MySQL -> MariaDB에 대해서 알고 싶다면
- https://blog.naver.com/yardyard
- NoSQL ex) MongoDB, Cassandra, CounchDB, Google BigTable
데이터베이스에 쿼리하기 위한 언어 -> 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의 강점은 Model과 Form이다.
- 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을 통해, 데이터베이스 형상을 관리할 경우
- 모델 클래스 작성
- 모델 클래스로부터 마이그레이션 파일 생성 -> makemigrations 명령
- 마이그레이션 파일을 데이터베이스에 적용 -> migrate 명령
- 모델 활용
Django 외부에서, 데이터베이스 형상을 관리할 경우 = 이미 데이터베이스를 구축해 놓은 경우
- 데이터베이스로부터 모델 클래스 소스 생성 -> inspectdb 명령
- 모델 활용
모델명과 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 작업도 마무리 되었다면 makemigrations 과 migrate 를 수행해준다.
- -> sqlmigrate는 실제로 데이터베이스에 들어가는 쿼리를 볼 수 있다.
- dbshell은 sqlite와 연결을 해주어서 sql 명령문을 파이썬에서 실행할 수 있도록 해준다.
반응형
'강의 정리 > Django Models' 카테고리의 다른 글
동백 // QuerySet을 통한 간단 검색 구현 (0) | 2021.12.30 |
---|---|
동백 // Django 모델을 통한 조회 ( 기초 )Q (0) | 2021.12.30 |
동백 // Django 모델을 통한 조회 ( 기초 )Q (0) | 2021.12.29 |
동백 // Django media 파일을 다루는 방법 (0) | 2021.12.29 |
동백 // Django 모델 필드란 무엇일까??? (0) | 2021.12.27 |