Django란 무엇인가요?
Django는 웹 애플리케이션을 효율적으로 빠르게 개발하는 데 사용할 수 있는 소프트웨어입니다. 대부분의 웹 애플리케이션에는 인증, 데이터베이스의 정보 검색, 쿠키 관리 등의 몇 가지 공통적인 기능이 있습니다. 개발자는 작성하는 모든 웹 앱에 유사한 기능을 코딩해야 합니다. Django는 다양한 기능을 웹 애플리케이션 프레임워크라고 하는 재사용 가능한 모듈의 대규모 컬렉션으로 그룹화하여 작업을 더 쉽게 수행할 수 있도록 합니다. 개발자는 Django 웹 프레임워크를 사용하여 코드를 보다 효율적으로 구성하고 작성하며 웹 개발 시간을 크게 단축합니다.
웹 개발자가 Django를 선택하는 이유는 무엇일까요?
시장에는 여러 웹 프레임워크가 있습니다. Django는 Python 언어로 작성되었으며 많은 Python 웹 프레임워크 중 하나입니다. 그러나 다음과 같은 이유로 Django 웹 프레임워크가 다른 웹 프레임워크보다 선호되는 경우가 많습니다.
개발 속도
Django 프레임워크는 잘 구성되어 있으며 설치 및 학습이 간단하므로 몇 시간 내에 시작할 수 있습니다. Django 디자이너는 코드로 모든 웹 아키텍처를 신속하게 구현하기 위해 프레임워크를 만들었습니다. Django 프레임워크는 신속한 개발과 깔끔하고 실용적인 디자인을 지원합니다. Django는 다음과 같은 몇 가지 일반적인 웹 개발 태스크에 즉시 사용할 수 있는 구조를 제공하기 때문에 몇 줄만으로 코드를 작성할 수 있습니다.
- 사용자 인증
- 콘텐츠 관리
- 사이트 맵
- RSS 피드
비용 효율성
Django는 소프트웨어를 검토하고 유지 관리하는 활발한 커뮤니티가 있는 무료 오픈 소스 Python 프로젝트입니다. Django Software Foundation이라는 비영리 조직이 Django의 사용 및 유지 관리를 장려하고 지원합니다. 다른 개발자가 Django 프로젝트를 검토하고 기여할 수 있도록 정기 회의, 모임 및 커뮤니티 이벤트를 운영합니다. 그 결과 무료로 사용할 수 있는 풍부한 기능의 고품질 웹 프레임워크가 탄생했습니다.
인기
다음과 같은 수천 개의 오픈 소스 프로젝트와 유명 사이트에서 Django를 사용합니다.
- Mozilla Firefox
- National Geographic
높은 인기 덕분에 Django 프레임워크는 계속 발전하며 강력한 지원 인프라를 갖추고 있습니다. 많은 개인과 회사가 Django를 사용할 때 직면할 수 있는 개발 문제에 대해 무료 및 유료 지원을 제공합니다.
Django는 어떻게 작동하나요?
모든 웹 애플리케이션은 서버 코드와 클라이언트 코드의 두 부분으로 구성됩니다. 클라이언트 또는 웹 사이트 방문자는 브라우저를 가지고 있습니다. 브라우저에 URL을 입력하면 웹 앱이 실행 중인 웹 서버 시스템에 요청을 전송합니다. 서버는 데이터베이스를 사용하여 요청을 처리하고 응답으로 클라이언트에 정보를 다시 전송합니다. 클라이언트 코드는 방문자에게 웹 페이지로 정보를 표시합니다.
Django는 모델-보기-템플릿(MVT) 아키텍처를 사용하여 이 요청 및 응답 시스템에 대한 코드를 관리합니다.
모델
Django 모델은 데이터베이스와 서버 코드 간의 인터페이스 역할을 합니다. 또한 데이터에 대한 단일 최종 정보 소스입니다. 이러한 데이터 모델에는 데이터베이스와 상호 작용하는 데 필요한 필수 필드와 작업이 포함되어 있습니다. 따라서 Django 모델은 데이터베이스 테이블을 Python 코드의 클래스 또는 객체로 변환합니다. 이를 객체-관계형 매핑이라고 합니다.
일반적으로 각 모델은 단일 데이터베이스 테이블에 매핑되며 데이터베이스 필드를 나타내는 속성이 있습니다. 예를 들어, 웹 사이트가 직원 세부 정보로 구성된 경우 다음과 같이 표현할 수 있습니다.
- 직원 이름 및 주소 필드가 있는 직원 테이블
- Name과 Address라는 2개의 속성 또는 모델 필드가 있는 Class Employee라는 직원 모델
보기
Django 보기는 모델을 사용하여 요청을 처리합니다. 웹 사이트 방문자가 웹 사이트에 제출할 수 있는 각 요청 유형에 대해 보기 함수를 작성할 수 있습니다. 보기 함수는 요청을 입력으로 받아 오류 코드, 이미지, 파일을 비롯한 모든 유형의 데이터를 응답으로 반환할 수 있습니다.
Django에는 보기 함수를 URL에 매핑하는 URL 매퍼 또는 URL 디스패처 기능이 있습니다. 아래와 같이 URL 패턴을 작성하는 URL 매퍼 파일을 생성해야 합니다.
urlpatterns = [
path('employee/name', views.employee_name),
path('employee/<int:year>/', views.year_archive),
]
예를 들어, 웹 사이트 방문자가 특정 연도의 모든 직원 목록을 보도록 하려면 URL 경로 employee/year number를 설정하고 해당 Django 보기 함수 year_archive를 작성합니다. 웹 사이트 방문자가 브라우저에 ‘yourwebsitename.com/employee/2020’을 입력하면 다음 단계가 수행됩니다.
- 요청이 웹 앱으로 전송됩니다.
- Django 웹 프레임워크가 URL 매퍼에서 연도 숫자와 보기 함수 이름을 가져옵니다.
- 2020년에 대해 보기 함수 year_archive를 실행합니다.
- Year_archive는 직원 모델을 사용하여 2020년의 데이터베이스에서 모든 직원 데이터를 가져옵니다.
- Django 웹 프레임워크는 데이터를 응답으로 다시 전송합니다.
템플릿
Django 템플릿은 브라우저에서 웹 페이지 프레젠테이션을 관리합니다. 대부분의 웹 페이지는 HTML(Hypertext Markup Language)로 되어 있으므로 HTML과 유사한 스타일로 Django 템플릿 코드를 작성할 수 있습니다. 템플릿 파일에는 다음과 같은 특정 구성 요소가 들어 있습니다.
- 이미지, 버튼, 헤더 등의 최종 HTML 출력의 정적 부분
- 모든 요청에 따라 변경되는 동적 콘텐츠 또는 데이터의 삽입 방법을 설명하는 특수 구문
다음은 Django 템플릿 시스템의 구성 요소입니다.
템플릿 언어
템플릿 언어는 HTML 템플릿 코드를 작성하는 데 사용하는 프로그래밍 언어입니다. Django는 자체 Django 템플릿 언어와 이를 대신하는 인기 템플릿 엔진인 Jinja2를 지원합니다.
템플릿 엔진
템플릿 엔진은 템플릿 파일을 처리하고 최종 HTML 출력을 생성합니다. 이 출력에는 응답 데이터가 포함됩니다.
예를 들어, 웹 사이트 방문자가 직원 정보를 요청하면 방문자에게 표시되는 웹 페이지가 웹 사이트 헤더, 모든 직원의 이름과 주소가 포함된 테이블 및 Next 버튼으로 채워집니다.
Django에서 사용할 수 있는 다른 모듈로 무엇이 있나요?
MVT 아키텍처는 애플리케이션의 기본 구조를 정의하지만 Django에는 웹 사이트를 개선하는 몇 가지 다른 모듈이 있습니다. 다음은 몇 가지 예제입니다.
양식
대부분의 웹 사이트에는 등록 및 지불과 같은 태스크나 웹 사이트 방문자로부터 정보 수집을 위해 양식이 필요합니다. Django는 웹 사이트 양식을 관리하는 데 사용할 수 있는 많은 도구와 라이브러리를 제공합니다. 이를 통해 코드를 직접 작성하는 것보다 더 안전하게 양식 처리를 간소화하고 자동화할 수 있습니다.
Django는 다음과 같은 3가지 방법으로 양식 처리를 진행합니다.
- 표시할 데이터를 준비하고 재구성하여 양식 생성
- 클라이언트 측에서 HTML 양식을 확인하여 양식 검증
- 제출된 데이터를 수신하여 양식 처리
사용자 인증
현대의 웹 사이트는 사용자를 인증하고 권한을 부여해야 합니다. 인증은 사용자의 ID를 확인하고 권한 부여는 인증된 사용자가 사이트에서 수행할 수 있는 작업을 결정합니다. Django는 다양한 용도로 인증을 관리할 수 있습니다.
- 사용자 계정
- 사용자가 특정 웹 사이트 태스크를 수행할 수 있도록 허용하는 권한 및 예 또는 아니요 플래그
- 유사한 권한을 가진 여러 사용자 계정의 그룹
- 쿠키 기반 사용자 세션
또한 구성 가능한 암호 해싱 시스템과 양식 및 보기의 콘텐츠를 제한하는 도구를 제공합니다.
사이트 관리
Django 관리 사이트를 사용하면 사이트에 대한 관리 페이지를 쉽게 제공할 수 있습니다. 사이트 관리자는 이 페이지를 사용하여 사이트에서 데이터 모델을 생성 또는 편집하거나 볼 수 있습니다.
Django는 독선적인가요?
웹 개발자에게 프로세스를 강요하는 웹 프레임워크를 비공식적인 표현으로 ’독선적’이라고 합니다. 이러한 웹 프레임워크는 개발자가 특정 태스크를 수행할 때 따라야 하는 올바른 방법이나 의견을 갖고 있습니다. 예를 들어, 독선적 프레임워크는 일반적으로 해당 산업과 관련된 애플리케이션 태스크에 대한 자세한 설명서를 보관함으로써 특정 산업에서 효율적인 개발을 지원합니다.
반면에 비독선적 프레임워크는 서로 다른 MVT 구성 요소를 통합하는 방법에 대한 제한이 적습니다. 비독선적 프레임워크는 더 유연하지만 다른 개발자가 동일한 태스크에 대해 다양한 접근 방식을 사용할 수 있기 때문에 코드 구성이 복잡해집니다.
Django는 다소 독선적입니다. 광범위한 구성 요소를 제공하고 다양한 유형의 웹 개발 태스크를 처리하는 방법에 대한 설명서를 포함합니다. 개발자는 Django의 분리된 아키텍처를 사용하여 다양한 옵션 중에서 선택할 수 있으며 필요한 새 옵션에 대한 지원도 추가할 수 있습니다.
Django 보안이란 무엇인가요?
사이버 범죄자가 사용자 로그인, 금융 데이터 및 기타 민감한 정보에 액세스하기 위해 웹 앱을 표적으로 삼는 경우가 많습니다. Django 웹 프레임워크는 웹 앱과 사용자를 보호하기 위한 여러 기능을 제공합니다. Django 모범 사례를 따르면 많은 일반적인 보안 실수를 피할 수 있습니다. 다음은 몇 가지 예제입니다.
크로스 사이트 스크립팅 보호
크로스 사이트 스크립팅(XSS) 공격은 사이버 범죄자가 웹 사이트 사용자의 브라우저에 악성 코드를 삽입할 때 발생합니다. 다음과 같은 여러 방법으로 웹 앱을 속여 사용자를 공격할 수 있습니다.
- 서버가 다음 응답에서 실수로 악성 코드를 전송하도록 데이터베이스에 악성 스크립트 저장
- 사용자의 브라우저에서 코드 대신 악성 클라이언트 코드를 실행하게 하는 링크를 클릭하도록 사용자 기만
예를 들어, 사용자가 프로파일의 이름 필드에 입력하는 텍스트를 표시하는 {{name}}이 Django 템플릿에 있을 수 있습니다. 사이버 범죄자는 세션을 가로채고 이름을 <script>alert('hello')</script>와 같은 코드로 변경합니다. 템플릿이 {{<script>alert('hello')</script>}}로 변경됩니다.
화면에 ‘Hello’라는 텍스트 메시지가 나타나도록 이제 이 코드가 사용자의 브라우저에서 실행됩니다. 이 예제는 단순하지만 사이버 범죄자가 사용자의 컴퓨터를 제어하기 위해 어떻게 복잡한 스크립트를 삽입하는지 확인할 수 있습니다.
Django는 악성 코드를 나타내는 < 및 >와 같은 특정 문자를 사용자 입력에서 자동으로 이스케이프 처리하거나 무시하여 이러한 공격으로부터 사용자를 보호합니다.
무단 액세스 방지
크로스 사이트 요청 위조(CSRF) 공격은 해커가 사용자의 보안 인증 정보를 훔쳐 웹 앱에 무단 요청을 전송할 때 발생합니다. Django는 Django CSRF 모듈에서 대부분의 CSRF 공격 유형에 대한 보호 기능을 기본 제공합니다. 이 기능은 첫 로그인 시 모든 사용자에게 보안 암호 값을 전송하여 작동합니다.
새 클라이언트 요청에는 클라이언트의 신원을 증명하는 데 사용되는 보안 암호 값이 포함됩니다. 권한 있는 사용자의 브라우저만 보안 암호 값을 알고 있기 때문에 Django는 사용자를 가장하는 다른 시스템에서 오는 요청을 자동으로 거부할 수 있습니다. Django CSRF 모듈 설정을 활성화해야 이 기능이 작동합니다.
SQL 명령어 삽입 방지
사이버 범죄자는 SQL 명령어 삽입을 사용하여 POST와 같은 HTTP 요청을 사용하여 데이터베이스에 SQL 코드를 삽입합니다. 악성 코드는 실제 데이터를 도용하거나 삭제할 수 있습니다. Django는 디자인 자체에서 이 문제를 해결합니다. 파라미터라고 하는 사용자 전송 데이터는 모델 계층에 도달할 때까지 데이터베이스 쿼리와 별도로 유지됩니다. 그러면 Django 모델이 쿼리 코드를 생성할 때 위험한 문자를 이스케이프 처리할 수 있습니다.
커뮤니티 지원에 의한 보호
Django의 보호 기능은 기본 제공 보안 기능을 넘어섭니다. Django는 오픈 소스이기 때문에 많은 숙련된 개발자들이 Django 모듈을 사용하고 검토합니다. 철저한 테스트는 Django 코드의 신뢰성을 높이고 실수로 인한 보안 취약점 잔류를 방지합니다.
Django 확장성이란 무엇인가요?
웹 사이트 개발에서 확장성은 동시에 여러 클라이언트 요청을 처리할 수 있는 웹 사이트의 기능을 나타냅니다. Django 프로젝트는 확장성이 뛰어나며 수천 개의 요청을 처리할 수 있습니다. 다음과 같은 방법으로 Django 애플리케이션을 조정할 수 있습니다.
하드웨어
Django 팀은 시스템의 하드웨어를 효율적으로 사용하도록 웹 프레임워크를 설계했습니다. 비공유 아키텍처를 사용할 경우 Django는 데이터베이스 계층(모델) 및 애플리케이션 계층(보기)과 같은 구성 요소를 분리합니다. 시스템의 나머지 부분에 영향을 주지 않고 모든 수준에서 하드웨어를 추가할 수 있습니다. 시스템에 데이터베이스 서버 또는 애플리케이션 서버를 더 추가할 수 있으며 Django는 이러한 리소스를 효율적으로 사용하여 여러 방문자를 처리합니다.
캐싱
캐싱은 Django 앱이 요청을 더 빠르게 처리하고 규모를 늘릴 수 있도록 클라이언트의 서버 또는 중개 서버에 일부 웹 페이지 데이터를 저장하는 프로세스입니다. Django는 다음과 같은 다양한 수준의 캐싱 기능을 갖춘 강력한 캐싱 시스템을 제공합니다.
- 전체 웹 사이트를 캐시할 수 있습니다.
- 특정 보기 함수 출력을 캐시할 수 있습니다.
- 생성하는 데 시간이 많이 걸리는 특정 콘텐츠를 캐시할 수 있습니다.
Django 프로젝트는 타사 캐시와도 잘 작동합니다. 이러한 캐시에 대한 힌트를 제공하고 애플리케이션의 어느 부분을 캐시할지 알려주는 코드를 작성할 수 있습니다.