파이썬 웹 서비스 만들기

2. MVC: 모델/폼 - 뷰 - 로직(컨트롤)

영바이트 2020. 9. 14. 20:28

본격적으로 웹 서비스 프로젝트를 시작하기 앞서 도움될 만한 개념을 하나 살펴보자. 막상 웹 서비스를 하나 만들어야지 생각하더라도 어디서 부터 시작해야 할 지 막막하다. 이럴 때 '모델-뷰-로직(또는 컨트롤)' 개념을 알고 있으면 어디서 부터 시작해야 할 지 알 수 있다. 모델-뷰-로직(컨트롤)을 각 요소의 앞 글자를 따서 MVC라고 부른다.

 

웹 페이지가 보여주는 것은 서버에 접속한 사람이 요청한 '데이터'다. 예를 들어 방송사 웹 페이지에 접속해서 그 날의 편성표를 찾아본다고 하면 방송사 웹 서버에 저장되어 있는 해당 날짜의 프로그램 정보가 웹 페이지를 통해 보여진다. 여기서 프로그램 정보를 '모델(model)'이라고 할 수 있고, 이를 보여주는 페이지를 '뷰(view)'라고 한다.

 

정보는 어떤 체계를 가지고 저장되어 있다. 다시 방송사 프로그램의 예를 살펴보자. 프로그램 마다 제목, 방송시간 등은 다르지만 이들 정보들을 저장하기 위한 '틀'은 동일하다. 이 '틀'을 '모델'이라고 부른다.

programInfo["제목"] = 'TV 동물농장'
programInfo["방송시간"] = '매주 일요일 오전 9시 30분'
programInfo["상태"] = '방영'
programInfo["소개"] = '...'
programInfo["웹페이지"] = '...'

 

 

뷰는 이들 정보들을 보여주기 위한 (웹) 페이지라고 보면 된다. 페이지들은 자주 봐왔기 때문에 무엇인지 명확하다. 로직은 무얼 의미할까?

 

로직은 웹 서비스가 동작하는 메커니즘을 일컫는다. 웹 서버에 접속한 사용자가 원하는 정보를 파악하고, 저장되어 있는 데이터를 꺼내와서 (템플릿 엔진 등을 이용해서) 웹 페이지를 구성하고 사용자의 컴퓨터로 보내는 과정을 로직이 담당한다.

 


 

 

실제 예제 코드를 보자. 아래 코드에서 데이터가 코딩된 부분을 모델이라고 볼 수 있고, 클라이언트의 요청을 받아서 데이터를 보여주는 웹 페이지를 제공하는 코드 부분을 로직이라고 할 수 있다.

from flask import Flask, render_template, redirect, url_for, Blueprint

####	모델(Model)
programs = [
    {
        'title': '놀면 뭐하니',
        'airTime': '매주 토요일 저녁 6시30분',
        'state': '방영',
        'page': '...'
    },
    {
        'title': 'TV 동물농장',
        'airTime': '매주 일요일 오전 9시30분',
        'state': '방영',
        'page': '...'
    }
]

####	로직(Logic)
main = Blueprint('main', __name__)

@main.route("/")
@main.route("/home")
def home():
    return render_template("home.html", contents = programs)

 

그리고 웹 브라우저 등을 통해 보여지는 아래 웹 페이지 home.html가 뷰이다. 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="{{url_for('static', filename='css/main.css')}}">
        <title>방송 편성</title>
    </head>
    <body>
        <div>
            {%for content in contents%}
                <h1>{{contents.title}}</h1>
                <p>{{contents.airTime}}</p>
                <p>{{contents.state}}</p>
                <p>{{contents.page}}</p>
            {%endfor%}
        </div>
    </body>
</html>

 


 

모델-뷰-로직(컨트롤), MVC에 대해 간략히 살펴보았다. MVC 개념을 알고 있으면 웹 서비스를 개발할 때 그 구성 요소들을 알고 있기 때문에 어디서부터 개발을 시작해야 하는지 알 수 있다. 일반적으로 '모델'을 먼저 정의하고(대부분 정보를 제공하기 위한 목적으로 웹 서비스를 개발하기 때문에 어떤 정보를 다룰지 먼저 정의하게 된다) 정보를 담는 '뷰'를 만들면서 '모델'과 '뷰'를 연결하는 '로직'을 나중에 개발하게 된다.