웹 프레임워크 중 하나인 장고(django)의 주목할 만한 개념은 ORM이다.
(O
bject-r
elational m
apping)
위키피디아에서 ORM에 대한 내용은 다음과 같다.
과거에 존재했던 전화번호부를 떠올려 보자.
전화번호부에는 개의 전화번호와 개의 주소가 있다.
(즉, 명의 사람이 있다는 말이다.)
위의 나열한 정보를 OOP개념으로 다루되,
한 발 더 나아가서 그러한 전화번호들, 그리고 주소들까지도
'객체화'한다고 생각해보자.
전화번호부 책 그 자체는 하나의 객체
인데,
그 내부의 속성들 역시각각의 객체
가 되는 컨셉으로 생각해 보자는 것이다.
실생활(현실세계)에 존재하는 로직을 우선 하나의 형태로 보고,
다시 그 내부 정보들 역시 접근하여 다룰 수 있지 않을까 하는 것이 시작점이다. 저장과 접근이 가능한 개념이라는 것인데, 이러한 컨셉이 ORM의 시작점이며, 데이터베이스의 설계를 직접 구현할 수가 있다.
따라서 그러한 이유로 모델링
이라는 개념이 장고에서 특히! 어쩌면 가장 중요하다.
장고에서 웹페이지는 웹 앱들로 구성된다. 하나의 웹에는 모델, 뷰, 템플릿 그리고 tests 등이 있다.
여기서모델
은 실은 database table 인 것이다.
장고는 뉴스 보도를 위한 웹을 구축하기 위해 탄생한 웹 프레임워크다.
장고 공식문서에 나와있는 모델링 및 models.py 모듈을 살펴보자.
웹에 기사를 작성하는 웹앱을 만들어야 한다.
Reporter
와 Article
이 둘은 one to many 데이터 연결 관계다.
리포터가 여러개의 기사를 포스트할 수 있다. 간단한 예시를 위해
공동집필 케이스는 배재하였다.
from django.db import models
class Reporter(models.Model):
full_name = models.CharField(max_length=70)
def __str__(self):
return self.full_name
class Meta:
name = 'reporter'
class Article(models.Model):
pub_date = models.DateTime()
headline = models.CharField(max_length=200)
article = models.TextField()
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
def __str__(self):
return self.headline
class Meta:
name = 'article'
장고 공식문서에 나와있는 표현을 인용해보겠다.
Although you can use Django without a database,
it comes with an object-relational mapper in which you describe your database layout in Python code.
즉, 데이터베이스 설계를 -> 파이썬으로 구현한 ORM으로 접근하겠다는 것이다.
따라서,
장고 공식문서에 아래와 같이 서술되어 있다.
"so to keep the database and the models.py synchronized."