LearnRun

Django Runserver 기능은 왜 라이브 서버로 활용할 수 없을까? 본문

메모장/WEB

Django Runserver 기능은 왜 라이브 서버로 활용할 수 없을까?

PROMPT_ 2023. 2. 1. 17:49

◈  Contents

     

     

    Django의 runserver 기능을 통해 테스트 서버를 가동하면서, 또 개발을 하다보면 의문점이 생깁니다.

     

    꽤 쓸만하다 싶은데(사실 아니지만) 라이브 서버로 활용할 수 없는지,

    왜 nginx 등의 도움을 받아야 하는지에 대해서 고민을 했던 바 있어 정리글을 썼습니다.

     

     

    공식 문서를 확인하면

    django 공식 문서 中 (참조 : https://docs.djangoproject.com/en/4.1/ref/django-admin/#runserver)

    프로덕션 서버(라이브 서버)로 활용할 수 없다는 공식 문서의 말은 쉽게 접할 수 있습니다.

    다만 보안과 성능이라는 모호한 말 때문에, 추상적으로 이해하게 되는 부분이 있다고 생각합니다.

    저는 그래서 아 그렇구나. 하고 넘기기 어려웠습니다. 

     

     

    성능의 측면에서

    동시성 문제

    뻗어버린 페이지

    많은 양의 요청을 처리할 수 없습니다. 즉, runserver는 단일 스레드에서 실행되며, 한번에 하나의 요청만을 처리합니다. 즉, Django runserver를 통해 라이브 서버를 가동하면, 이용자가 경험하는 응답 시간이 느려지고, 과부하 시 서버에 문제가 생길 수 있습니다.

     

    자원 관리

    메모리 및 CPU 사용률과 같은 리소스를 관리하기 위한 기본 제공 도구가 없으므로 성능이 저하되고 리소스 사용량이 감소할 수 있습니다.

     

    유지 관리 및 모니터링

    모니터링 또는 유지 관리를 위한 기본 제공 도구가 없어 성능 문제를 해결하기 어렵습니다.

     

    캐싱 기능 부재

    반복되는 요청에 대한 응답을 캐시하지 않으므로, 트래픽이 많을수록 배포 사이트의 성능에 부정적인 영향을 끼칩니다.

     

    정적 파일 서빙

    WAS가 직접 정적파일의 서빙을 맡게 되므로 부하가 증가합니다.

    일반적으로 nginx단에서 정적 파일을 보냄으로써, 부하를 분산할 수 있습니다.

     

     

    보안의 측면에서

    디버그 모드의 문제

    본 기능은 개발 및 테스트 목적으로 사용되며 기본적으로 디버그 모드를 활성화합니다. 디버그 모드는 스택 추적 및 설정과 같은 민감한 정보를 공개하여 공격자에게 취약할 수 있으므로 배포 환경에서는 절대로 활성화해서는 안 됩니다.

     

    충분치 못한 세션/사용자 관리

    사용자 데이터를 보호하고 무단 액세스로부터 보호하는 데 중요한 세션 및 사용자 관리를 적절하게 제공하지 않습니다. 적절한 세션 관리가 없으면 민감한 사용자 데이터를 쉽게 가로채고 손상시킬 수 있습니다.

     

    제한된 HTTPS 지원

    민감한 데이터를 암호화하고, 클라이언트와 서버 간의 안전한 통신을 보장하는 데 필수적인 HTTPS를 기본적으로 지원하지 않습니다. HTTPS가 없으면 비밀번호, 신용카드 번호 등의 개인 정보를 쉽게 가로챌 수 있습니다.

     

    보안 업데이트의 부재

    보안 업데이트를 자동으로 적용하지 않으므로 서버가 알려진 보안 취약점에 취약한 상태로 남게 됩니다. 이로 인해 보안 침해 및 데이터 손실이 발생할 수 있습니다.

     

    암호화

    네트워크를 통한 보안 통신을 위한 SSL/TLS 암호화를 제공하지 않으므로 중간자(MiTm) 공격에 취약합니다.

     

    입력 유효성 검사

    악의적인 사용자 입력에 대한 보호 기능을 제공하지 않으므로 SQL Injection, 사이트 간 스크립팅(cross site scripting) 공격에 취약합니다.

     

     

     

    마치며..

    고로 django runserver는 개발/제작 환경에서 사용하는게 합당한 것으로..

    단, nginx 레이어를 올리면서 정적 파일을 모아 경로를 지정하는 등 고민할 것은 좀 더 생깁니다.

     

     

    Application server와 CGI

    ◈ Contents 꾸준히 찾아보고 있는데, 조사하는 것 마다 좀 차이가 있는 것 같습니다. 계속 보강하겠습니다. Application Server 서비스 및 리소스를 호스트, 제공 및 관리하도록 설계된 서버 측 소프트

    ramda-tech.tistory.com

    전체적으로 조망하는 위 글을 보면 좀 더 도움이 될 것이라고 생각합니다.

    ‌ ‌ ‌
    Comments