이끼의 생각

Django Web (6) Model 장고 모델 본문

파이썬 장고 웹 프레임워크

Django Web (6) Model 장고 모델

IKKIson 2019. 5. 19. 20:41

이번 편은 Model에 대해서 알아보겠습니다. 일반적으로 웹서버 시스템을 구현하는 방법 중 MVC 패턴을 사용하는데 이번편에서는 다루지 않고 추후에 제대로 정리해보겠습니다.


장고 모델을 이해하기 위해서는 우선 객체지향이라는 패러다임을 이해해야됩니다. 간단하게 객체지향에 대해 설명을 하겠습니다. 만약 여러분들이 프로그래밍, 개발을 이용해서 경제활동을 하실 계획이시라면 반드시 객체지향을 공부하시기 바랍니다.




객체 지향 Object-Oriented


(1) 객체 지향 프로그래밍?


 객체 지향 프로그래밍(Object-Oriented Programming, OOP)는 프로그래밍 설계방법론의 패러다임 중 하나로 아주 오랫동안 사용된 방식입니다. 이전의 C언어와 같은 절차지향에서 특징과 기능을 갖춘 독립된 단위로 나누며 이 단위를 객체라고 합니다. 이 객체의 속성과 기능 묶음을 정의하고, 객체들의 상호작용을 서술하는 방법입니다.

 프로그램이 유연하고 변경이 용이하며 


 상당히 사전적으로 설명했는데, 조금 부드럽게 애기하면 현실에 존재하는 특징과 행동을 갖춘 대상을 객체(Object)라 하며 어떤 것이든 객체로 표현할 수 있습니다. 이 객체에서 필요한 속성(특징)과 기능(행동)들만을 정의한것이 클래스(Class)라 하며 이 과정을 모델링이라합니다. 객체지향적으로 클래스는 Templete으로 미리 정의하여 필요할 때 사용할 수 있습니다. 마지막으로 여러분들이 실제로 사용하기 위해 클래스 변수를 선언하여 메모리를 할당받은 것을 인스턴스라 할 수 있습니다.(자세한 내용은 제외)

 



(2) 잠깐! 모델링을 해보자


 예를 들어, 독수리(Eagle)이라는 객체를 모델링을 해보겠습니다. 이 독수리라는 객체는 여러 속성과 기능을 가지고 있어요. 깃털, 부리, 날개, 발, 눈, 나이, 서식지..... 이런 속성들과 날개짓을 한다, 먹이를 찾는다, 먹이를 잡는다 등등 기능들이 있습니다. 

 독수리의 먹이가 되는 물고기라는 객체도 만들어 봅시다. 속성으로는 비닐, 무게, 지느러미 개수 .... 기능은 헤엄치다, 도망가다, 아가미로 호흡하다 .... 이렇게 적을 수 있겠네요. 


그러며 이런 모든 속성과 기능들을 정의해야될까요? 차라리 백과사전을 클래스로 만드는게 빠르겠죠?


필요하지도 않은 것들을 굳이 정의할 필요가 없습니다. 필요한 경우가 발생하여 몇가지를 추가하고 싶으면 소스코드를 수정하거나 소스코드 내에서 객체지향의 특징으로 상속성, 다형성이 있습니다.


자! 그럼 필요한 것만 정의 해보겠습니다.


class Eagle

-----------------------

날개

부리

-----------------------

날다()

먹이를 먹는다()

먹이를 찾는다()

먹이를 잡는다()


class Fish

-----------------------

몸무게

-----------------------

헤엄치다()

도망가다()



어디서 많이 보았죠? 소프트웨어공학 분야에서 객체지향설계 과정에서 하위설계, UML로 클래스 정의서를 만드는 것과 같습니다.


다시 정리를 해볼께요.


객체지향설계 개념은 현실에 존재하는 것을 객체라하며 이 객체의 속성과 행위를 필요한 것만 정의한것입니다. 객체 속성은 Property, 기능을 Methods 로 구현하게 되죠.




(3) 블로그 모델


우리는 함께 장고를 이용하여 웹사이트를 만들고 있습니다. 그렇다면 블로그를 모델로 만들어 볼까요??


블로그의 게시글의 속성을 정의해볼께요.


Post(게시글)

-----------------------

title(제목)

text(내용)

author(글쓴이)

created_date(작성일)

published_date(게시일)


블로그 게시글로 할 수 있는 기능은 게시글을 게시하는 메서드가 있겠죠?


속성과 기능을 추가해 가면서 장고에서 모델을 만들어볼께요~


잠깐!! 객체지향, 절차지향 등의 패러다임을 떠나서 프로그래밍을 하실때 처음부터 완벽하게 정하는 것이 아닙니다. 딱딱한 설명으로 완벽하게 만든 후 진행하지 마세요.




장고 모델 (Model)


여러분들은 객체를 모델링하는 방법을 습득했습니다. 조금 더 공부하시면 UML, 설계도 멋지게 하실 수 있습니다.


장고 안의 모델은 객체의 특별한 종류인데, 이 모델을 저장하면 그 내용이 데이터베이스에 저장되는 것이 특별한 점입니다. 데이터베이스의 데이터를 다루기 위해 데이터베이스와 1대1 대응되는 객체가 모델입니다.


잠깐!! 앞에서 말한 모델, 모델링은 객체를 추상화하는 과정을 의미하지만, 장고에서의 모델 혹은 웹 개발을 하면서 사용되는 모델이라는 용어는 데이터베이스를 사용하기 위한 것이라는 차이가 있으니 혼동에 조심하세요. 


데이터 베이스는 데이터의 집합과 데이터 집합을 설명하는 메타데이터의 집합입니다. 데이터베이스에 사용자의 정보, 지금부터 만들 블로그의 모든 정보 등 수 많은 데이터들이 저장됩니다.


우선, 데이터를 저장할 데이터베이스를 선택(?)할 것인데, 데이터베이스를 선택한다는 건 데이터베이스 관리 시스템 (DBMS, Database Management System)을 정하는 것이고 MySQL, Oracle, MS-SQL 최근 유행하는 Postgre 등이 DBMS 입니다. 우리는 SQLite3를 사용하겠습니다^^. 파이썬 설치 시 자동설치 됬는데 sqlite 데이터베이스는 기본 장고 데이터베이스 어댑터이기 때문이죠.


잠깐!! SQLite는 MySQl이나 PostgreSQL같은 DBMS는 맞지만, MySQL의 Workbench처럼 데이터베이스 서버를 사용하지않고 응용프로그램에 넣어 사용하여 비교적 가벼운 데이터베이스입니다. 대규모작업에 적합하지않고 비교적 중소 규모에서 사용됩니다. API는 단순한 라이브러리 호출하는 것만 있습니다. 대표적으로 안드로이드, iOS와 같은 모바일과 Django에서 사용됩니다.


데이터베이스가 어떻게 생겼는지 궁금하신 분들도 있는데, MS-Office에서 엑셀(Excel)을 사용해보셨죠? 엑셀표에서 상단 가로(열-Row)에 어떤 데이터인지 단어가 들어가고 밑으로 세로방향(행-Column)으로 데이터들이 착착 들어갑니다. 이런 엑셀 스프레드시트와 동일하게 구성됩니다.



Comments