모델링

hyuckhoon.ko·2020년 6월 12일
0

What I learned in wecode

목록 보기
50/109

웹 프레임워크 중 하나인 장고(django)의 주목할 만한 개념은 ORM이다.
(Object-relational mapping)






1. 모델링

위키피디아에서 ORM에 대한 내용은 다음과 같다.

과거에 존재했던 전화번호부를 떠올려 보자.

전화번호부에는 NN개의 전화번호와 NN개의 주소가 있다.
(즉, NN명의 사람이 있다는 말이다.)

위의 나열한 정보를 OOP개념으로 다루되,
한 발 더 나아가서 그러한 전화번호들, 그리고 주소들까지도
'객체화'한다고 생각해보자.

전화번호부 책 그 자체는 하나의 객체인데,
그 내부의 속성들 역시각각의 객체가 되는 컨셉으로 생각해 보자는 것이다.



실생활(현실세계)에 존재하는 로직을 우선 하나의 형태로 보고,
다시 그 내부 정보들 역시 접근하여 다룰 수 있지 않을까 하는 것이 시작점이다. 저장과 접근이 가능한 개념이라는 것인데, 이러한 컨셉이 ORM의 시작점이며, 데이터베이스의 설계를 직접 구현할 수가 있다.
따라서 그러한 이유로 모델링이라는 개념이 장고에서 특히! 어쩌면 가장 중요하다.

장고에서 웹페이지는 웹 앱들로 구성된다. 하나의 웹에는 모델, 뷰, 템플릿 그리고 tests 등이 있다.
여기서 모델은 실은 database table 인 것이다.



장고는 뉴스 보도를 위한 웹을 구축하기 위해 탄생한 웹 프레임워크다.
장고 공식문서에 나와있는 모델링 및 models.py 모듈을 살펴보자.





2. ERD 구성도 및 models.py 구현

웹에 기사를 작성하는 웹앱을 만들어야 한다.

  • Reporter는 full_name,
  • Article은 pub_date, headline, content를 가지고 있어야 한다.
    (물론, 필요에 맞게 다른 항목들을 추가할 수도 있는 것이다.)

ReporterArticle
이 둘은 one to many 데이터 연결 관계다.

리포터가 여러개의 기사를 포스트할 수 있다. 간단한 예시를 위해
공동집필 케이스는 배재하였다.



ERD 구성도를 통해 DB모델링을 하였으니 models.py를 작성해보자.

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."

0개의 댓글