DJANGO는 웹서버 인가 ? 🤔

4

DJANGO

목록 보기
4/9
post-thumbnail

이번 포스팅에서는 제가 DJANGO가 웹서버의 역할도 한다는 오해가 있어서, 그에 대한 포스팅입니다.


출처 :

DJANGO에 대한 오해 💻

먼저, DJANGO의 프로젝트 폴더를 생성하면 manage.py가 아래의 그림과 같이 기본적으로 생성되는데, 이 manage.py를 이용하여 runserver 을 하게되면 테스트용 개발 서버를 작동 시킬수 있죠.

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
project_dir $ python manage.py runserver

여기서 저는 막연하게 DJANGO가 웹서버의 역할까지 수행한다고 생각했었는데, 공식문서를 다시 보니 이런 문구가 있더군요.

Django 개발 서버를 시작했습니다. 개발 서버는 순수 Python으로 작성된 경량 웹 서버입니다. Django에 포함되어 있어 아무 설정 없이 바로 개발에 사용할 수 있습니다.
이쯤에서 하나 기억할 것이 있습니다. 절대로 개발 서버를 운영 환경에서 사용하지 마십시요. 개발 서버는 오직 개발 목적으로만 사용하여야 합니다(우리는 웹 프레임워크를 만들지 웹 서버를 만들지는 않거든요

DJANGO는 웹 프레임워크일뿐 ! 📦

위에서 알수 있듯이 DJANGO의 runserver 기능은 개발을 편하게 하는데 중점을 둔 서버일뿐 실제 웹서버로 이용하기에는 권장되지 않다는 군요. DJANGO는 웹 프레임워크이지, 웹서버가 아니니깐요.

추가적으로 장고의 github에 있는 파일들을 하나씩 뒤져보니 ...

HTTP server that implements the Python WSGI protocol (PEP 333, rev 1.21).
Based on wsgiref.simple_server which is part of the standard library since 2.5.
This is a simple server for use in testing or debugging Django apps. It hasn't
been reviewed for security issues. DON'T USE IT FOR PRODUCTION USE!

해당 runserver는 보안 이슈에 대해 체크하지 않았다고 ... 절대 배포용으로 사용하지 말라고도 하네요 ㅠ

그래서 장고를 이용한 웹 어플리케이션을 만들 때는 gunicorn이나 uwsgi와 같은 Gateway Interface를 통해서 다른 웹서버 프로그램과 통신을 한다고 합니다. 조금 더 살을 더하자면, 웹서버 프로그램들은 정적인 자료들 (CSS,JS,IMG)를 처리하고, 동적인 데이터들은 WSGI를 통해서 처리한다고 합니다. 위의 사진처럼요 !

잠깐 ! 웹서버 프로그램 간단 소개 ! (추후 블로깅할게 또 생겼네 ~ 앗싸 ~ 😭)

  • APACHE(아파치)
    가장 전통적이며, 웹서버의 산 증인이라고 무방할 정도로 웹서버 점유율이 독보적인 프로그램이다.클라이언트의 요청 하나당 스레드 하나가 처리하는 구조로 요청이 많으면 그 만큼 스레드를 생성하여 메모리와 CPU 소비량이 높다. 하지만, 점유율과 역사가 있다보니 제공되는 모듈이 많고 호환성과 안정성이 뛰어나다고 한다.
  • NginX(엔진엑스)
    스타크래프트의 홍진*와 같은 포지션... 만년 2등... 하지만 그의 점유율은 지속적으로 오르면서 결국 아파치를 따라잡을지도 ?!
    비동기 이벤트 기반으로 요청을 처리한다고 한다. (솔직히 무슨 말인지는 모르겠다 ... ㅎ) 일단 내가 이해한 것은 아파치보다 효율적으로 요청을 처리할 수 있는 아키텍쳐라고 하지만, 지원되는 모듈이 아파치 보다는 적다고 한다.

그래서, 여러 블로그 글들을 보다가 웹서버를 runnserver로 하면 아래의 표처럼 성능도 많이 난다고 하는 내용이 있어서 퍼옵니다 ㅎ

마치며 ... 🌈

솔직히 이 글을 적으면서 공부할게 너무 많다는 것을 느꼈습니다. 기본적으로 HTTP와 HTTPS의 차이 / APACHE와 NGINX의 작동 방식의 차이 / DJANGO의 runserver 를 함수를 실행시키는 로직이 궁금해서 알아볼려고 했지만, 아직 지식이 부족해서 인지 무슨 말인지 도통 이해할 수가 없군요. 천천히 이해하면서 포기하지 않고 계속 적으면서 남들에게 이해할 수 있는 정도가 되면 다시 이 글로 돌아와서 수정하도록 하겠습니다. (꾸벅 ㅠㅠ) 틀린게 있다면 지적해주시면 감사하겠습니다. 그럼 이만 ~~

-끝-

profile
# 개발 # 컴퓨터공학

3개의 댓글

오우 시원하게 이해했습니다~~

1개의 답글