Django - 내가 처음 배울 때 알았으면 했던 것

코지클래식·2021년 9월 16일
5
post-thumbnail

많은 분들이 파이썬 Django로 개발에 입문하는 것으로 보입니다.

대부분의 수업과 책에서, Django의 큰 그림/Flow에 대해 설명함에도 불구하고,
초보자들은 Django의 구조를 이해하는데 시간이 꽤 걸립니다.

지금 있는 곳에서도 동료님들이 큰 그림을 이해하는데 시간이 좀 걸렸고
저도 처음 입문할 때 꽤 헤맸기 때문에 ...
큰 그림을 이해할 때 걸리는 시간을 아껴 드리고자 포스트를 작성합니다.

이 포스트는 Django 튜토리얼을 따라 해봤지만,
왜, 어떤 방식으로 Django가 작동하는건지?? 긴가민가 하신 분
들을 위해 바칩니다.

이 글을 보시기 전에, 적어도 1번 정도는 튜토리얼을 따라 model.py, views.py, urls.py를 작성하고 오시길 추천드립니다.



1. 웹페이지가 작동하는 구조

웹페이지(네이버, 다음 등)가 작동하는 데에는 일련의 과정이 필요합니다.
우리는 크롬의 주소창에 www.naver.com 을 입력하고 엔터치면 화면이 나타나는데,
이런 것이 어떻게 가능한걸까요?

1. 요청

"주소를 입력한 후 엔터를 치는 것"으로 웹페이지가 저장된 서버에 요청을 보냅니다.

  • 요청 에는 사용자가 입력한 주소의 정보가 들어 있습니다.
  • 요청은 "request"라고도 불립니다.

2. 응답

요청을 받은 서버는 응답을 사용자에게 답장을 보내줍니다.
응답을 받은 사용자의 컴퓨터는 이를 토대로 화면에 사이트의 내용을 표시합니다.

  • 서버는 naver 웹페이지이에 대한 정보를 저장해둔, 일종의 컴퓨터 입니다.
  • 응답은 "response"라고도 불립니다.

3. 요약

즉 , 우리가 웹을 사용하면 언제나 요청 과 응답 이라는 데이터가 왔다 갔다 하는 것입니다.

  • Django 튜토리얼을 보면, python manage.py runserver 라는 명령어를 사용합니다.
    이 명령어는, 여러분의 컴퓨터에서 데이터가 왔다 갔다하는 서버 프로그램이 작동하게 하는 명령어 입니다.

  • 즉, runserver 명령어를 입력하면, 여러분 컴퓨터의 장고 파일은 요청(request)을 받을 수 있는 상태가 된다는 뜻 입니다.



2. 함수가 작동하는 구조

그렇다면 서버는 어떻게 요청을 받고 어떻게 응답을 하는걸까요?
다들 알고 있는 함수를 사용합니다.

1. input(입력)과 output(출력)

def add(a,b) : return a+b 라는 간단한 함수는,
a,b를 input을 받으면 a+b라는 output을 돌려줍니다.

2. 서버와 함수

결국 서버도 일종의 함수처럼 작동하여,

요청 이라는 input을 받으면
응답 이라는 output을 돌려주는 것입니다.

Django와 Python은 이러한 복잡한 서버 함수를 구현해주는 일종의 도구라고 볼 수 있습니다.



3. 파이썬이 작동하는 구조

python manage.py 명령어는 manage.py라는 파이썬 파일을,
파이썬 프로그램으로 실행시키는 명령어 입니다.
그러면 무수히 많은 다른 파이썬 파일들은 무슨 의미가 있는걸까요?

1. 파이썬 파일 실행


위의 test.py파이썬 파일을 실행시키면,
터미널은 함수 example를 실행시켜서 3을 출력합니다.

2. import !!

그러면 여러개의 파이썬 파일을 한 번에 동작시키려면 어떻게 해야할까요?
main.py 함수의 첫 번째 줄에는 다음과 같이 적혀 있습니다.

test.py 파일에서 from test example함수를 불러와서 쓰겠다.(import example)

그래서, 한 파이썬 파일에서 다른 파이썬 파일을 작동하는 방법은
import 라는 문법을 사용하는 것입니다.




4. 종합 해보기

그렇다면 Django에는 서버가 어떤 식으로 굴러가는지,
위의 3가지 내용을 종합해서 생각해 봅니다.

Django는 대략적으로 아래와 같이 동작 합니다.

  1. 사용자에게서 요청(request, input)을 받는다.

  2. 서버에서, 사용자의 요청을, Django 내부의 어떤 파이썬 함수에 input으로 넣는다.

  3. input을 받은 파이썬 파일은, 다른 파이썬 파일을 import 해오면서, 여러 과정을 거쳐 계산을 한다.

  4. 계산이 완료된 결과를 응답(response)으로 사용자에게 돌려준다.


위의 내용을 간단하게 종합한 것이, 다들 한번씩은 봤을 Django의 MVT 모델 그림입니다.


이미지 출처 : https://butter-shower.tistory.com/49



5. Django에 적용하기

위에서 종합한 내용을 Django에 적용해서 설명해 봅니다.

1. 요청

먼저 사용자는, 서버에 요청(request)를 보냅니다.
장고 MVT 모델에서, 장고는 사용자의 요청을 urls.py에서 처음으로 받습니다.


2. urls.py의 동작

urls.py는 요청을 처리하기 위해,
먼저 해당 주소에 알맞은 views.py를 import 해옵니다.
그리고 urls.py에 적어둔 views.py 내부의 함수에 요청을 input으로 넣고 실행시킵니다.


3. views.py의 동작

views.py의 함수는 이 요청을 처리하기 위해 필요한 참조 값이 있습니다.
그 참조 값은 models.py 또는 templates.py에 있습니다.
그래서 models.py(template.py)의 클래스/함수를 import 해옵니다.

4.views.py 내부 함수의 동작

위의 views.py 파일을 보면, urls.py에서 호출받은 함수 index는
request를 input으로 받고, models.py 에서 불러온 데이터(objects.all())를 가공하여
return 하는 것을 알 수 있습니다.

5.views.py 내부 함수의 반환(return)

그 다음 views.py는 input 값으로 받은 요청(request)와,
계산에 필요해서 불러온 models의 데이터를 계산해서,
응답을 반환합니다.(return Response)



6. urls.py의 return

그런데 views.py가 응답하는 것은
urls.py에 호출되어서 urls.py 파일의 내부에서 응답하는 것이므로
이는 views.py가 사용자에게 바로 응답하는 것으로도 볼 수 있습니다.
그래서 MVT 모델에서는, views.py가 사용자에게 바로 응답하는 것으로 표현합니다.



Django와 다시 요약

결국 Django는 위에 적었던 것처럼 아래와 같이 동작하는 것입니다.

  1. 사용자에게서 요청(request, input)을 받는다.
    -> (urls.py)가 입력을 받음.

  2. 서버에서, 사용자의 요청을, Django 내부의 어떤 파이썬 함수에 input으로 넣는다
    -> urls.py에서, views.py의 함수를 import 한다.
    함수는 input(request)을 받아 동작한다.

  3. input을 받은 파이썬 파일은, 다른 파이썬 파일을 import 해오면서, 여러 과정을 거쳐 계산을 한다.
    -> 함수의 계산 과정에 필요한 중간 값을 model이나 template을 에서 가져온다. (import)

  4. 계산이 완료된 결과를 응답(response)으로 사용자에게 돌려준다
    -> 함수에서 응답을 return 한다.
    그런데, 함수는 views.py에 포함되어 있고,
    views.py는 urls.py에서 불러와서 호출한 것이기 때문에,
    결국 최초로 입력을 받은 urls.py에서 응답(response)를 return이 일어나는 것이다.



추가 - models.py의 역할

그러면 models가 데이터베이스랑 연결되어 있는건 무슨 뜻일까요?

간단히 말하면, views.py에서 계산을 하기 위해 models.py를 불러온 것처럼
models.py도 자신이 받은 요청을 응답하려고 계산하기 위해 데이터베이스와 연결해서
무언가 값을 불러오는 것입니다.

다만 데이터 베이스는 파이썬 파일이 아닙니다.
그래서 import로 데이터베이스를 불러올 수 없고,
데이터베이스와 동작하는 용도로 쓰는 Queryset API 문법을 사용합니다.




6. 마치며

제가 적은 내용은 생략된 부분이 많습니다.
manage.py를 실행시키는데 왜 urls.py가 응답하는지,
어떻게 데이터베이스와 연결되는지, views.py 파일이 많으면 어떻게 되는지 등등에 생략한 내용이 많습니다.
그러나 Django라는 프로그램이 왜 웹서버 프로그램인지,
어떻게 동작하는지에 대해 대략적으로 감을 잡기에는 도움이 되었으면 합니다.

감사합니다.

profile
코지베어

0개의 댓글