TIL 40. django란?

rahula·2021년 6월 15일
0

django

목록 보기
1/5
post-thumbnail

Django 기초에 대해 배운 점들을 기록합니다. 이 글은 javatpoint OneQ를 토대로 작성했습니다.

Django로 웹사이트 만들기

프레임워크란? (프레임워크와 라이브러리의 차이점)

프레임워크는 규칙이 짜여져있어서 개발자의 주체성이 적은 대신 편리하고 개발속도가 빠르다. 반면 라이브러리는 재료가 하나하나 따로따로 있는 구조라서 개발자가 직접 짜집기를 해야하는 대신 더 주체적으로 프로젝트를 구성할 수 있다.

DJango란?

django는 웹개발을 쉽고 빠르게 만들어주는 python기반 웹프레임워크이다.
django를 쓰는 이유는 크게 2가지다.

ORM을 통한 DB 접근

장고는 orm을 이용해서, sql문을 몰라도 쉽게 DB에 접근할 수 있게 만들어준다. 그러나 ORM은 우리가 직접 짠 코드가 아니기 때문에, 효율성을 높이기 위해서는 나중에 ORM을 SQL문으로 다시 바꿔줘야 한다.

정해진 파일구조

django를 프로젝트에 설치하는 순간, django는 웹개발에 필수적인 파일들을 중심으로 패턴을 다 짜준다. 따라서 초기 세팅 및 구조 짜기가 쉽다.

MVT 패턴

MVT패턴이란 웹개발을 3가지로 나눠서 하는 방식이다. Model, View, Template으로 구성된다.

model

The Model helps to handle database. It is a data access layer which handles the data.

model은 데이터베이스의 테이블과 필드를 정의한다.

View

The View is used to execute the business logic and interact with a model to carry data and renders a template.

로직을 처리. 데이터를 가져오고, 가져온 데이터를 가공하고, 가공한 데이터를 돌려준다. CRUD의 과정이 다 들어있다.

여기서 CRUD란 create, read, update, delete의 약자로 데이터를 다루는 거의 모든 일이라고 쉽게 생각할 수 있다. View는 웹사이트의 데이터를 다루는 관제탑이라고 생각하면 될 것 같다.

Template

The Template is a presentation layer which handles User Interface part completely.

사용자가 보게 될 화면의 모습을 정의한다. 즉 HTML파일을 말한다.
브라우저상의 이벤트와 사용자의 입력에 대해 생각하는 부분이다.

MVC? MVT?

Although Django follows MVC pattern but maintains it?s own conventions. So, control is handled by the framework itself.

Here, a user requests for a resource to the Django, Django works as a controller and check to the available resource in URL. If URL maps, a view is called that interact with model and template, it renders a template. Django responds back to the user and sends a template as a response.

django workflow

위 그림에서 왼쪽의 Client와 요청 부분은 프론트엔드가 맡는 일이고, 오른쪽으 DB와 SQL문 부분은 ORM이 자동적으로 해결해주는 일이기 때문에, 당장 django로 컴팩트한 웹사이트를 만드는 데 있어서는 제외된다.

즉, django 백엔드 개발자가 가장 집중해야 할 점은 3가지이다.

URLconf

쉽게 말해서 url 설정이다. urls.py 파일에서 대부분의 URLconf 작업이 이루어지는데, 어떤 url로 요청을 보내면 어떤 응답을 해줄지를 결정한다.

view

쉽게 말해서 로직이다. 내 생각엔 django로 하나의 웹사이트를 만든다고 하면, 대부분의 코드가 view쪽에 쓰여지지 않을까. 왜냐하면 HttpRequest가 어떤 정보를 담고 있느냐에 따라 분기처리를 해야 하고, 문제가 있다면 에러메세지를 보내거나 다른 페이지로 redirect해야 하기 때문이다.

model

ORM으로 데이터를 요청하는 지점이다.

프로젝트 시작하기

django 프로젝트 시작은 정말 쉽다.

프로젝트 생성 : django-admin startproject 프로젝트이름
app 만들기 : ./manage.py startapp 앱이름

wsgi와 asgi는 건드릴 일이 많이 없다고 한다. 중요한 파일은settings.py, manage.py, __init__.py이다.

settings.py

django 앱에 대한 모든 설정을 다루는 파일이다. 각각의 설정은 특정 변수에 값으로 들어가게 된다.

주요 변수는 다음과 같다.

DEBUG : 디버그 모드를 True 혹은 False로 설정할 수 있는 변수.
INSTALLED_APPS : pip로 설치한 다른 앱 혹은 자신이 만든 앱을 추가하는 변수.
MIDDLEWARE : HTTP통신, 즉 요청과 응답 사이에 주요한 기능을 넣는 변수.
TEMPLATES : template, 즉 django에서 다루는 HTML을 설정하는 변수.
DATABASE : 데이터베이스 엔진에 대해 설정하는 변수.

manage.py

manage.py는 프로젝트를 관리하는데 쓰이는 명령어들을 모아놓는 파일이다.

주요 명령어는 다음과 같다.

startapp : 앱 생성
runserver : 서버 실행
createsuperuser : 관리자 계정 생성
makemigrations app : app의 모델 변경사항 체크
migrate : 변경사항을 DB에 반영
shell : commend line과 마찬가지로, django의 쉘을 이용해서 어떤 파일에서 짠 코드가 잘 굴러가는지 테스트할 수 있다.

django 프로젝트에 관련된 모든 명령어는 manage.py에서 오는 것이므로, shell에 명령어를 쓸 때엔 manage.py를 같이 써야 한다.

init.py

__init__.py파일은 어떤 디렉토리가 하나의 패키지라는 것을 알려주는 파일이다. 빈 파일일지라도 python은 이 파일을 패키지라는 의미라고 인식한다.

추가 질문

  1. 데이터에 대한 가공은 어느쪽에서 할까? view쪽에서 할 것 같기는 하다.
  2. MVC와 MVT의 차이점을 아직 이해 못한것 같다. django가 MVT라는 이름 뒤에서 구체적으로 무엇을 도와주는지(controller) 궁금하다.
  3. migration이라는 개념이 아직 감이 안온다. DB와 동기화되는 느낌인가.
profile
백엔드 지망 대학생

0개의 댓글