빙응의 공부 블로그

[1주차]Django의 기초 본문

goorm

[1주차]Django의 기초

빙응이 2024. 8. 26. 17:20

🧷회고

📌HTTP 

HTTP 관련 이야기가 가볍게 나오는데 전에 포스팅한 글로 대체하겠다.

'CS/네트워크' 카테고리의 글 목록 (tistory.com)

 

'CS/네트워크' 카테고리의 글 목록

늦은 대학생의 핵심 공부 정리 공간

quddnd.tistory.com

 

📝MTV와 MVC 패턴

스프링과 다르게 Django는 MTV 패턴을 사용한다.
두 패턴의 차이를 알아보자!

 

📌 MVC 패턴

MVC 패턴은 애플리케이션을 3가지 구성요소로 분리하여 구조화하는 방식이다.

스프링에서 보편화된 방식이기도 하다.

Model(모델)
  • 데이터 및 비즈니스 로직을 담당한다.
  • 데이터베이스와의 상호작용, 데이터의 상태 처리, 애플리케이션의 핵심 비즈니스 로직도 이곳에 위치한다.
View(뷰)
  • 사용자에게 보여지는 부분을 담당한다. UI를 구성하고, 데이터를 시각적으로 표현하는 역할을 한다.
  • HTML, CSS 등으로 구성된 웹페이지가 대표적이다.
Controller(컨트롤러)
  • 사용자의 입력을 처리하고, 모델과 뷰를 연결하는 역할을 한다.
  • 사용자의 요청을 받아 모델에 필요한 처리를 요청하고, 그 결과를 뷰에 전달하여 적절히 출력되도록한다.
  • 즉 중간 역할인 셈이다.

📌MTV 패턴

MTV 패턴은 또한 애플리케이션을 3가지 구성요소로 분리하여 구조화하는 방식이다.

MVC 패턴과 유사하지만 용어와 역할이 약간 다르며 파이썬 기반 웹 프레임워크인 Django에서 사용한다.

Model(모델)
  • 데이터 및 비즈니스 로직을 담당한다.
  • 데이터베이스와의 상호작용, 데이터의 상태 처리, 애플리케이션의 핵심 비즈니스 로직도 이곳에 위치한다.
Template(템플릿)
  • MVC의 뷰와 유사한 역할을 한다.
  • 사용자에게 보여질 UI를 구성하며, 데이터가 어떻게 표시될지를 정의하는 부분이다.
  • HTML과 같은 템플릿 언어를 사용해 데이터와 UI를 결합한다.
View(뷰)
  • MVC의 컨트롤러에 해당하는 역할을 한다.
  • 사용자의 욫어을 처리하고, 필요한 데이터를 모델에서 가져와 템플릿에 전달한다.

 

💡
이름만 다를뿐 차이가 없는거 같은데??

 

이처럼 이름만 바뀐것처럼 보이지만 주요한 차이점은 MVC의 뷰와 MTV의 템플릿의 차이가 있다.

  • MVC 패턴
    • View는 사용자 인터페이스(UI)를 구성하는 부분이다.
    • 주로 데이터를 시각적으로 표현하는 역할을 하며, HTML, CSS 등으로 구현된다.
  • MTV 패턴
    • Template은 MVC의 View와 유사하지만, MTV에서 View는 사용자 요청을 처리하고 데이터를 템플릿에 전달하는 역할을 한다.
    • 즉, MTV패턴에서의 템플릿은 UI와 데이터 바인딩을 더 집중적으로 다룬다.

 

이러한 차이로 인해 Django는 MTV 패턴을 사용하면, 템플릿을 통해 동적 웹페이즈를 직관적으로 생성하고,

데이터와 UI를 분리하여 개발할 수 있다. 이는 웹 개발에서 데이터 표현과 사용자 인터페이스를 관리하는 데 큰 도움이 된다.

 

🧷 RESTful MVC와 MTV

MTV의 장점인 데이터와 UI를 분리는
RESTful MVC도 할 수 있다.

RESTful MVC 패턴은 주로 API 중심으로 생성되어 View가 주로 데이터를 반환하는 데 초점을 맞춘다.

이 관점으로 볼때 MTV와는 차이가 없다.

그렇다면 다른점은 무엇일까?

 

내장된 템플릿 시스템 vs 프론트엔드 프레임워크
  • Django의 MTV 패턴은 템플릿 시스템이 내장되어 있어 서버 측에서 UI를 생성한다.
  • 반면, RESTful MVC는 프론트엔드에서 데이터를 처리하고 렌더링한다.

즉 Django는 서버에서 UI를 생성하는 반면, RESTful MVC는 클라이언트에서 UI를 담당한다.

사용 언어의 범위
  • Django는 파이썬의 장점을 최대한 활용하여 모델, 뷰, 템플릿을 유기적으로 생성한다.
  • RESTful MVC는 다양한 언어와 프레임워크의 조합이 가능하다.

📝Django의 URLconf

위 구조에서 한가지 모르는 것이 존재한다. 바로 URL conf이다.

URL conf는 Django에서 URL과 뷰를 연결하는 역할을 한다.
즉 Django의 라우팅 시스템이다.

 

RESTful MVC에서는 프론트엔드에서 라우팅을 책임진다.

그러나 Django는 서버에서 UI를 구현하기에 직접 라우팅을 해주는 것이다. 

Reate의 라우팅

리액트는 주로 상위 파일인 APP에서 라우팅을 설정한다.

const App = () => {
    return (
        <Router>
            <Navbar />
            <div style={{ paddingTop: '60px', backgroundColor: '#ece4ff' }}> 
                <Routes>
                    <Route path="/login" element={<Login />} />
                    <Route path="/redirect" element={<RedirectHandler />} />
                    <Route path="/" element={<Main />} />
                    <Route path="/create" element={<Create />} />
                    <Route path="/course/:id" element={<Course />} />
                    <Route path="/update/:id" element={<Update />} />
                    <Route path="/course/:id/feedback" element={<Feedback />} />
                </Routes>
            </div>
        </Router>
    );
};

 

Django의 라우팅

Django의 라우팅은 주로 urls.py 라는 파일로 정의하여 사용한다.

from django.urls import path
from . import views  # 현재 디렉토리의 views 모듈을 import

urlpatterns = [
    path('', views.home, name='home'),  # 루트 URL에 대한 처리
    path('about/', views.about, name='about'),  # /about/ URL에 대한 처리
]

📝Django의 흐름

Django가 HTTP 요청을 처리하는 과정을 알아보자.

 

1. Browser : 사용자가 브라우저를 통해 HTTP 요청을 보낸다.
2. Web Servcer : 웹 서버가 요청을 받고 WSGI 인터페이스로 전달한다.
3. WSGI : WSGI는 웹 서버와 Django 애플리케이션 간의 인터페이스이다.(일종의 미들웨어)
4. URL Resolution : 요청된 URL은 라우팅을 통해 뷰와 매칭된다.
5. View : URL 라우팅 후 해당 뷰를 실행하여 요청을 처리, DB 활용, 비즈니스 로직을 수행한다.
6. Model : 뷰에서 데이터를 요청하면, 모델이 데이터베이스를 상호작용하여 데이터를 활용한다.
7. Template : 뷰에서 처리된 데이터는 템플릿에 전달되어 HTML 페이지로 렌더링된다.
EX. Form : 만약 사용자 입력이 필요한 경우, Django의 폼 시스템을 사용한다. 폼은 Vaildation이 포함된다.

 

 

📝Django 기본 명령어

프로젝트 생성하기 (하나의 웹사이트)
$ django-admin startproject {프로젝트 이름}

 

앱 생성하기 (하나의 웹사이트 내에 있는 기능들에 해당)
$proj_1/python manage.py statapp app_1

 

프로젝트 관리 명령어(manage.py)

 

  • runserver: Django 개발 서버를 시작합니다.기본적으로 http://127.0.0.1:8000/에서 서버가 실행됩니다.
python manage.py runserver
  • migrate: 데이터베이스의 마이그레이션을 적용합니다. 모델의 변경사항을 데이터베이스 스키마에 반영합니다.
python manage.py migrate
  • makemigrations: 모델의 변경사항을 기반으로 마이그레이션 파일을 생성합니다.
python manage.py makemigrations
  • createsuperuser: 관리자(superuser) 계정을 생성합니다.
python manage.py createsuperuser
  • shell: Django의 쉘을 실행합니다. 데이터베이스와 모델에 직접 접근할 수 있는 인터랙티브한 Python 환경을 제공합니다.
python manage.py shell
  • collectstatic: 정적 파일(예: CSS, JavaScript, 이미지 등)을 수집하여 STATIC_ROOT 디렉토리로 복사합니다.
python manage.py collectstatic
  • test: 프로젝트의 테스트 케이스를 실행합니다.
python manage.py test
  • flush: 데이터베이스의 모든 데이터를 삭제하고, 데이터베이스를 초기 상태로 돌립니다.
python manage.py flush
  • dbshell: 데이터베이스의 쉘을 엽니다. 이를 통해 직접 데이터베이스 쿼리를 실행할 수 있습니다.
python manage.py dbshell
  • runserver_plus (django-extensions가 필요): Django 개발 서버를 실행하며, 더 많은 기능을 제공합니다.
python manage.py runserver_plus
  • showmigrations: 현재 적용된 마이그레이션과 마이그레이션 상태를 보여줍니다.
python manage.py showmigrations
  • check: Django 프로젝트에 대한 기본적인 검사를 수행합니다. 설정 오류나 잠재적인 문제를 찾아줍니다.
python manage.py check
  • dumpdata: 데이터베이스의 데이터를 JSON 형식으로 덤프합니다.
python manage.py dumpdata
  • loaddata: JSON, XML, 또는 YAML 형식으로 된 데이터를 데이터베이스에 로드합니다.
python manage.py loaddata <fixture_file>

 


 

1주차 끝!

 

 

🚩 1주차 회고

1주차는 기본적인 개념을 배우는 기간이었다. Django와 관련된 내용을 정리해 보자면 다음과 같다.

Django와 Spring의 차이점 및 공통점

Django는 Python 기반의 웹 프레임워크로, 내가 주로 사용하는 Spring과는 여러 면에서 다르다. 두 프레임워크는 사용하는 언어와 기본 구조에서 차이가 있지만, 웹 애플리케이션 개발을 위한 다양한 기능을 제공한다.

  • 언어 차이: Django는 Python으로 작성되었고, Spring은 Java로 작성되었다. 
  • 프레임워크 패턴: Django는 MTV 패턴을 사용하고, Spring은 MVC 패턴을 따른다. 하지만 두 패턴 모두 사용자 인터페이스와 데이터 처리 로직을 분리하여 유지보수를 용이하게 한다는 공통점이 있다.

MTV 패턴

Django는 MVC 패턴 대신 MTV 패턴을 사용한다. 이 패턴은 다음과 같은 구성 요소로 이루어져 있다:

  • Model: 데이터베이스와의 상호작용을 담당한다. 데이터 구조를 정의하고 데이터베이스 작업을 수행한다.
  • Template: 사용자에게 보여지는 HTML을 생성한다. 데이터와 템플릿이 결합되어 최종 사용자에게 표시되는 내용을 만든다.
  • View: 사용자의 요청을 처리하고, 적절한 모델과 템플릿을 결합하여 응답을 생성한다.

간단히 말해, Django의 MTV 패턴은 웹 애플리케이션의 전체적인 구조를 관리하는 데 도움을 준다. RESTful API를 구현하는 것과 유사하게, 웹 애플리케이션의 각 구성 요소를 효과적으로 연결하여 기능을 제공할 수 있다.

공부 방법

앞으로 Django와 Spring을 비교하여 공부할 것이다. 두 스택의 차이점과 공통점을 연관 지어 이해하는 것이 목표다. 

실습 자체는 Django로 할 예정이지만 Spring으로도 따로 구현할 예정이다.

일단 이 스터디를 제외하고 Django를 사용할 예정은 없기 때문이다.  

 

'goorm' 카테고리의 다른 글

[7주차]  (2) 2024.10.08
[6주차]이미지 처리와 OpenCV 인식  (0) 2024.10.02
[4,5주차]  (1) 2024.09.25
[3주차]Django  (1) 2024.09.09
[2주차]Django 본격적인 시작  (0) 2024.09.02