빙응의 공부 블로그
[1주차]Django의 기초 본문
🧷회고
📌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 |