웹 개발 또는 웹 서비스 개발이란 용어를 좀 더 정확하게 표현하면, 웹 애플리케이션 개발이라고 할 수 있습니다.

그렇다면 애플리케이션이란 무엇일까요?


1. Django에서의 Application이란?

  웹 사이트를 설계할 때 가장 먼저 해야 할 일은 프로그램이 해야 할 일을 적당한 크기로 나누어서 모듈화하는 것입니다. 이 경우, 웹 사이트의 전체 프로그램 또는 모듈화된 단위 프로그램을 애플리케이션이라고 합니다. 즉, 프로그램을 코딩할 대상을 애플리케이션(Application)이라고 부릅니다.

  그러나 장고에서는 용어를 사용할 때, 애플리케이션의 개념을 웹 서버 개발 측면에서 좀 더 구체화하고 있습니다. 웹 사이트에 대한 전체 프로그램을 프로젝트(Project)라 하고, 모듈화된 단위 프로그램을 애플리케이션이라고 하고, 모듈화된 단위 프로그램을 애플리케이션이라 부르고 있습니다. 즉, 애플리케이션 프로그램들이 모여서 프로젝트를 개발하는 개념입니다. 장고는 기본적으로 MTV모델에 따라 애플리케이션을 개발하도록 유도합니다.



2. MTV 패턴

  웹 프로그램 개발 시 일반적으로 언급되는 MVC(Model-View-Cotroller)패턴이란 데이터(ModeL), 사용자 인터페이스(View), 데이터를 처리하는 로직(Controller)을 구분해서 한 요소가 다른 요소들에 영향을 주지 않도록 설계하는 방식입니다. 이런 방식으로 개발을 진행하면 UI 디자이너는 데이터 관리나 애플리케이션 로직에 신경 쓰지 않고도 화면 UI를 설계할 수 있고, 로직이나 데이터를 설계하는 개발자도 화면 디자인은 디자이너에게 맡기고 자신의 설계 및 개발 업무에만 집중할 수 있게 됩니다. 파이썬도 이러한 MVC개념을 그대로 받아들였는데, 용어는 다르게 사용하고 있습니다.

  장고 프레임워크에서는 View를 Templete, Controller는 View라고 표현하며, MVC를 MTV 패턴이라고 표현합니다. 예를 들면, 모델은 블로그의 내용을 데이터베이스로부터 가지고 오거나 저장, 수정하는 기능을, 템플릿은 출력을 위해 디자인과 테마를 적용해서 보여지는 페이지를 만들어주는 과정을, 뷰는 버튼을 눌렀을 때 어떤 함수를 호툴하며 데이터를 어떻게 가공할 것인지 결정하는 역할을 담당합니다.

    • Model : 모델은 데이터에 관한 정보를 담습니다. 데이터에 대한 접근, 검증, 작동과 데이터 사이의 관계를 정의하는데, 일반적으로 각각의 모델은 데이터베이스에서 테이블에 해당합니다. 장고에서는 모델을 정의할 때 필드의 종류를 지정해줘야 하는데, 이것이 데이터베이스에게 컬럼 타입을 알려주고 HTML 폼으로 표시 될 때의 입력 타입도 내포하는 역할을 수행합니다. 또한 장고의 폼 자동 생성 API를 이용할 때 데이터 검증에 쓰이기도 합니다.

    • Template : 사용자가 보게 될 화면의 모습을 정의하는 영역입니다. 데이터가 어떻게 표시되는지를 정의하며, 템플릿은 사용자에게 실제로 보여지는 웹 페이지나 문서를 다룹니다. 흔히 HTML에 기반하여 템플릿을 만들며, HTML에 동적인 요소를 추가하기 위해 파이썬의 일부 기능을 쓰게 도와주는 장고 템플릿 태그가 존재합니다.

    • View : 애플리케이션의 제어 흐름 및 처리 로직을 정의하는 영역입니다. 어떤 데이터가 표시될 것인지를 정의합니다. View는 HTTP 응답을 반환해야 하며 응답의 종류는 웹 페이지, 리디렉션, 문서 등의 다양한 형태가 가능합니다. 장고에는 자주 사용되는 형태의 뷰를 패턴화하여 추상화 해둔 재사용 가능한 뷰들을 내장해 놓았는데, 이들을 '제네릭 뷰'라고 하며 원하는 제네릭 뷰를 상속한 클래식 뷰를 생성하여 사용할 수 있습니다.


  웹 클라이언트의 요청을 받고, 장고에서 MTV 모델에 따라 처리하는 과정을 요약하면, 다음과 같습니다.

      1. 클라이언트로부터 요청을 받으면 URLconf 모듈을 이용하여 URL을 분석합니다.

      2. URL분석 결과를 통해 해당 URL에 대한 처리를 담당할 뷰를 결정합니다.

      3. 뷰는 자신의 로직을 실행하면서, 만일 데이터베이스 처리가 필요하면 모델을 통해 처리하고 그 결과를 반환받습니다.

      4. 뷰는 자신의 로직 처리가 끝나면 템플릿을 사용하여 클라이언트에 전송할 HTML 파일을 생성합니다.

      5. 뷰는 최종 결과로 HTML 파일을 클라이언트에게 보내 응답합니다.



Model - 데이터베이스 설계

  위에서 모델, 템플릿, 뷰에 대해 간략하게 살펴보았습니다. 이제부터는 조금 세부적인 내용을 살펴보도록 하겠습니다. 모델이란 사용될 데이터에 대한 정의를 담고 있는 장고의 클래스입니다. 장고는 ORM 기법을 사용하여 애플리케이션에서 사용할 데이터베이스를 클래스로 매핑해서 코딩 할 수 있습니다. 즉 하나의 모델 클래스는 하나의 테이블에 매핑되고, 모델 클래스의 속성은 테이블의 컬럼에 매핑됩니다. 애플리케이션에서는 데이터베이스에 대한 액세스를 SQL 없이도 클래스를 다루는 것처럼 할 수 있어서 편리합니다. 또한 SQLite3, MySQL, PostgreSQL 등 데이터베이스 엔진을 변경하더라도 ORM을 통한 API는 변경할 필요가 없기 때문에 필요에 따라 데이터베이스 엔진을 훨씬 쉽게 변경할 수 있습니다.

Template - 화면 UI 설계

  장고는 자체 템플릿 시스템을 갖고 있기 때문에 디자이너도 쉽게 이해할 수 있는 문법을 제공하고 있습니다. 화면의 디자인을 변경할 일이 생기면 디자이너는 프로그램 로직에 상관없이 문법에 맞게 템플릿만 수정하면 되므로, 디자이너와 개발자 간에 협업이 편리해졌습니다. 또한 장고에서 제공하는 템플릿은 파이썬 코드를 직접 사용할 수 있기 때문에 더욱 강력하고 확장하기 쉬운 구조로 되어 있습니다.
  템플릿 파일은 *.html 확장자를 가지며, 장고의 템플릿 시스템 문법에 맞게 작성합니다. 유의할 점은 템플릿 파일을 적절한 디렉토리에 위치시켜야 한다는 것입니다. 즉, 장고에서 템플릿 파일을 찾는 방식을 이해하고 있어야 하며, 장고는 그에 맞는 위치에 템플릿 파일이 위치해야 템플릿 파일을 찾을 수 있습니다.

View - 로직 설계

  일반적으로 뷰는 웹 요청을 받아서 데이터베이스 접속 등 해당 애플리케이션의 로직에 맞는 처리를 하고, 그 결과 데이터를 HTML로 변환하기 위하여 템플릿 처리를 한 후에, 최종 HTML로 된 응답 데이터를 웹 클라이언트로 반환하는 역할을 합니다. 
  장고에서 뷰는 함수 또는 클래스의 메소드로 작성되며, 웹 요청을 받고 응답을 반환해줍니다. 여기서 응답은 HTML 데이터일 수도 있고, 리다이렉션 명령일 수도 있고, 404 에러 메시지일 수도 있습니다. 다양한 형태의 응답 데이터를 만들어내기 위한 로직을 뷰에 작성하는 것입니다. 이러한 뷰는 보통 views.py 파일에 작성하지만, 원한다면 다른 파일에 작성해도 무방합니다. 다만 파이썬 경로에 있는 파일이어야 찾을 수 있습니다.



References
  • 'Django로 배우는 쉽고 빠른 웹 개발', 김석훈, 한빛미디어


+ Recent posts