달나라 노트

Python django project 1 - 게시판 만들기 ch.2 : django의 구조 본문

Python django/Python django project 1

Python django project 1 - 게시판 만들기 ch.2 : django의 구조

CosmosProject 2020. 12. 12. 23:37
728x90
반응형

 

 

본격적인 django 개발을 하기 전에 django가 어떻게 작동하는지 체크해볼 필요가 있습니다.

 

django는 크게 다음 세 가지 part로 구성됩니다.

 

- Model

- Template

- View

 

1. Model

Model은 data와 관련된 부분입니다.

예를들어 어떤 사람이 회원가입을 하게되면해당 유저의 id, password 등의 정보가 있어야 할 곳이 필요합니다. 이것이 Model입니다.

어떤 게시판의 내용을 요청했을 때 이 게시판의 제목, 내용, 작성자, 작성시간 등을 불러와야하는데 이러한 정보가 저장되는 곳이라고 보시면 됩니다.

 

 

 

2. Template

Template은 간단하게 HTML 코드라고 생각하시면 됩니다.

즉, 유저가 어떤 web사이트에 접속했을 때 보이는 화면입니다.

이를 Model과 연결지어 생각해봅시다.

 

만약 어떤 유저가 게시글 목록을 나타내주는 web 페이지에 접속했다고 가정을 해봅시다.

그러면 우리는 다음 두 가지 작업이 필요합니다.

1. 존재하는 게시글들의 정보를 불러옵니다.

2. 불러온 게시글들의 정보를 미리 작성해둔 html파일의 형식에 맞게 표시해줍니다.

 

여기서 1번은 당연히 model에 저장된 게시글 정보를 불러오게 되며

2번은 불러온 정보들을 작성해둔 template(html 코드)에 맞게 표시해줍니다.

 

 

 

 

3. View

View는 model과 template사이에서 이뤄지는 여러 동작들에 대한 로직을 담고있습니다.

 

View의 기능은 되게 범위가 넓습니다.

예시를 보는게 이해가 더 빠를겁니다.

 

e.g. 1.

어떤 유저가 web에 접속하면 특정한 url을 web browser에 입력할 것이고, 이 url에 해당하는 화면이 출력될겁니다.

근데 하나의 사이트에 단순히 하나의 화면만 존재하는게아니죠? 버튼을 클릭하면 화면이 바뀌기도 합니다.

따라서 django project 내에는 여러 개의 template(html 파일)이 존재하게 될것입니다.

여기서 우리는 유저가 입력한 url에 따라 어떤 template을 보여줘야할지를 정해줘야하는데 이러한 내용을 view에 작성하게 됩니다.

 

e.g. 2.

만약 유저가 신규 회원가입을 한다고 가정해봅시다.

회원가입 진행 중에 깜빡하고 password를 입력하지 않았다면 회원가입이 되어야할까요? 당연히 아니죠.

이런 경우 에러 메세지를 출력하거나 하여 유저에게 입력한 값에 어떤 문제가 있다는걸 알려줘야합니다.

이렇게 값의 validation을 할 수 있는 로직을 view에 작성하게 됩니다.

 

e.g. 3.

model에서 불러온 데이터를 template에 담아 표시해준다고 했습니다.

근데 model에 저장된 모든 데이터가 아니라 일부만 표시해주고싶으면 어떻게 해야할까요?

예를들어 여러 유저가 게시글을 작성하고 model에는 그 모든 게시글 정보가 다 담겨있는데, user1이라는 유저가 작성한 글만 template에 표시해주고 싶다면?

이런 경우 위 조건에 맞는 model data만을 filter링하여 template에 전달해줘야하는데 이러한 여러 로직들이 view에 담기게 됩니다.

 

 

일단 예시를 들어 대표적인 경우 몇가지를 체크해봤는데 사실 이게 전부는 아니지만 대략적인 감만 잡으면 됩니다.

 

 

 

 

 

그래서 최종적으로 django의 동작 흐름을 보자면 다음과 같습니다.

 

1. user가 url을 입력

2. 해당 url에 연결된 view가 실행됨.

3. 이 view는 model에서 필요한 데이터를 불러오고(필요한 데이터가 없으면 model의 data를 불러오지 않습니다.) 이 데이터를 template에 전달함.

4. 전달된 template에 model의 data가 덧붙여져 유저에게 표시됩니다.

 

이렇게 model, template, view를 합쳐 MTV(Model-Template-View)라고 하며 django는 기본적으로 이러한 구조를 가지고 작동됩니다.

 

 

 

 

4. App

django에는 app이라는 것이 있습니다.

app은 위에서 말한 MTV가 모여있는 하나의 세트를 의미한다고 생각하면 됩니다.

 

예를들어 어떤 홈페이지의 유저 관련 기능이 로그인, 로그아웃, 회원가입 두 가지가 있다고 해봅시다.

이러한 기능을 구현하기 위해 필요한 것이 뭐가 있는지 알아보면 다음과 같습니다.

 

1. 유저 정보 -> Model

2. 로그인, 회원가입 화면 -> Template

3. 로그인 시에 입력받은 값과 model에 저장된 정보를 비교하여 맞는 정보인지 체크하거나, 회원가입 시 입력받은 정보를 model에 저장하는 등의 로직 -> View

 

위 내용을 보면 MTV 패턴이 모두 존재함을 알 수 있습니다.

1~3번 필요사항을 충족하기위해 하나의 app에 필요한 파일들을 체크해보면 아래와 같습니다.

 

Model -> 유저정보 model 파일 (마치 Database같은 존재입니다.)

Template -> 로그인 화면의 html 파일, 회원가입 화면의 html파일

View -> 로그인 관련 로직을 담은 파일, 회원가입 관련 로직을 담은 파일

 

이렇게 본인이 원하는대로 app을 분할하여 MTV 세트를 구성시킬 수 있고, 하나의 app 내부에는 MTV가 모두 존재합니다.

 

 

 

728x90
반응형
Comments