본문 바로가기

웹 개발

[Django] Django 이해하기

오늘은 장고로 어떻게 웹 프로그램을 만들 수 있는지 장고에 사용되는 개념에 대해 이해하고

장고가 사용하는 MTV패턴이 무엇이고 MTV가 가리키는 Model, Templatem, View가 각각 어떤 역할을 하는지 배웠다.

장고를 제대로 이해하기 위해서 먼저 클라이언트와 서버의 관계를 알아야 한다.

 

클라이언트-서버 구조

우리가 사용하는 대부분의 서비스는 클라이언트-서버 구조를 가지고 있다.

클라이언트: 인터넷에 연결된 장치로 서비스를 요청하는 주체를 말한다.

서버: 자원을 가지고 있는 컴퓨터로 요청을 처리하고 결과를 돌려주는 주체를 말한다.

ex) 구글 사이트 접속

구글 사이트에 접속한다는 것은 구글 사이트를 가지고 있는 컴퓨터에게 'google.com.html을 줘' 라고 요청하는 것과 같다.

  1. google.com.html 파일을 요청함
  2. 구글 서버가 요청을 받아서 google.com.html 파일을 우리 컴퓨터에게 전달함
  3. 우리 컴퓨터의 웹 브라우저가 google.com.html 파일을 해석해서 이쁘게 보여줌
    여기서 웹 브라우저의 역할이 내가 원하는 페이지를 찾아서 보여주고 원래 코드로 되어있는 html파일을 우리가 평소에 보는 디자인된 화면으로 바꿔주는 프로그램이다. (이 바꿔주는 과정을 렌더링(Rendering)이라고 함)

 

여기서 개발자는 보이지 않는 부분인 서버 측의 작업을 담당하는 백엔드 개발자

사용자에게 동적이고 상호작용적인 웹 페이지를 보여줄 수 있게 웹 애플리케이션을 개발하는 프론트엔드 개발자로 나눈다

 

백엔드 개발자가 하는 일

  • 데이터베이스와의 상호작용, 비즈니스 로직 처리, 보안, 사용자 인증 등을 처리한다.
  • 사용자가 요청한 데이터를 처리하고 그에 따른 결과를 생성한다.
  • 주로 서버 사이드 언어 및 프레임워크를 사용하여 개발되며, 데이터베이스와의 통신을 담당한다.
  • 주요 목표는 안정성, 보안성, 성능을 유지하면서 프론트엔드와의 원활한 데이터 교환을 지원하는 것이다.

프론트엔드 개발자가 하는 일

  • 주로 JavaScript 프레임워크나 라이브러리를 사용하여 프론트엔드 기능을 개발하고, 데이터 처리와 상태 관리를 담당한다.
  • 백엔드와의 통신을 위한 API 요청 및 응답 처리, 데이터의 가공 및 표시, 사용자 입력에 대한 반응 등을 담당한다.
  • 주로 웹 애플리케이션의 비즈니스 로직과 상호작용적인 요소를 다루며, UI 컴포넌트의 상태 관리와 라우팅 등을 수행한다.
  • 프론트엔드 개발자는 보다 복잡하고 동적인 웹 애플리케이션을 만들기 위해 퍼블리셔와 협업하며, 웹 애플리케이션의 전체적인 아키텍처와 성능을 고려한다.
    (※ 퍼블리셔란? 디자이너에게 받은 웹 페이지 디자인을 html/css로 바꿔서 프론트엔드 개발자가 상호작용할 수 있게 하는 역할인데 요즘은 디자이너가 html/css를 다룰줄 알거나 프론트엔드 개발자가 html/css부분까지 개발을 겸하는 경우가 있어서 사라지고 있는 추세라고 한다.)

그럼 웹 개발에 있어서 요청과 응답은 어떤 작업일까?

요청은 클라이언트가 서버에게 특정한 작업을 요구하는 것인데, 클라이언트의 정보, 요청의 형식, 인증 정보 등을 포함한 데이터를 JSON이나 HTML 폼 데이터와 같은 형식으로 전달한다. 클라이언트가 요청하는 것이 무엇인지는 URL을 보면 파악할 수 있다.

응답은 서버가 클라이언트의 요청을 받고 처리한 후에 클라이언트에게 결과를 전송하는 것으로 결과에는 여러 가지 부가적인 정보를 포함한다. 보내는 응답은 HTML, JSON, XML 등의 형식일 수 있으며, 클라이언트가 요청한 작업에 따라 다양한 형태로 전송한다.

 

Django의 디자인 패턴

소프트웨어에서 디자인 패턴이란 자주 사용되는 소프트웨어 구조를 마치 건축에서 쓰이는 공법처럼 일반화를 한 것이다.

전세계의 개발자들이 개발을 하다가 비슷한 문제, 구조같은 것을 찾아내었고 해결책도 비슷하게 적용할 수 있다는 것을 알았고 그것을 패턴화를 했다. 우리가 처음 보았던 클라이언트-서버 역시 디자인 패턴중 하나이다.

디자인 패턴은 특정 구조에 대한 설계를 빠르게 할 수 있으며 공통적으로 발생하는 문제에 대해 재사용 가능한 해결 방법을 제시할 수 있다는 장점을 가지고 있다.

 

Django는 여기서 MTV 패턴을 사용하는데 MTV패턴은 MVC패턴을 살짝 변형한 것으로 기능은 거의 비슷해서 MVC패턴을 알면 MTV패턴도 거의 아는것이나 다름이 없다.

 

MVC 디자인 패턴: Model - View - Controller 이렇게 3파트로 나누어져있으며 데이터와 논리 구조를 제어하는 설계로 널리 사용되는 디자인 패턴 중 하나이다. 이렇게 분리해서 개발하는 이유는 각 부분을 독립적으로 개발할 수 있어서 생산성이 증가하고 유지보수가 쉬워진다는 장점이 있고, 다수의 멤버가 동시에 개발하기도 용이해진다.

  • Model : 데이터와 관련된 로직을 관리
  • View : 레이아웃과 관련된 화면을 처리
  • Controller : Model과 View를 연결하는 로직을 처리

그럼 MTV는 어떨까?

  • Model: MVC에서의 Model이며 데이터와 관련된 로직을 처리한다.
    (※ 데이터 구조 정의, 데이터베이스 기록 관리)
  • Template: MVC에서의 View이며 레이아웃과 화면상의 로직을 처리한다.
    (※ UI와 레이아웃을 다루는 곳)
  • View: MVC에서의 Controller이며 메인 비지니스 로직을 담당한다. 클라이언트의 요청에 대해 처리를 분기하는 역할을 한다.
    (※ DB조회, 외부에 DB요청, 응답을 만들어서 클라이언트에게 전달)

Django의 요청과 응답 과정


지금까지는 약간 개념에 대한 내용을 다루었지만 이제 직접 따라서 코딩해보며

Django 프레임워크를 이용해서 웹 개발을 하는 방법에 대해서 전체적으로 배워보려고 한다.