Django는 파이썬을 기반으로한 웹 프레임워크이다.
- 웹프레임워크: 웹 페이지를 개발하는 과정에서 겪는 어려움을 줄이기 위해 데이터베이스 연동, 템플릿 형태의 표준, 세션 관리, 코드 재사용 기능을 포함하고 있는 구조체이다.
※ 요약
- django에는 기본적인 웹서버가 존재하고, runserver 명령으로 구동 가능하다.
- 하지만 runserver 구동 시 성능저하, 보안 문제로 실제 운영환경 배포에서는 권장 하지 않는다.
- 기본적으로 운영환경 배포시 nginx(web server) + gunicorn(wsgi) + django 조합으로 구성한다.
- 좋은 성능을 위해 wsgi + django를 사용하고 몇몇 wsgi는 SSL과 정적파일 지원하지 않고, DDos 공격과 같은 많은 주기적 요청이 발생하기 때문에 별도의 web server를 사용한다.
파이썬으로 만들어진 장고(Django) 프레임워크의 경우 동적 페이지 요청에서 웹서버와 통신이 필요한데 웹서버는 python으로 되어있지 않다. 그렇기 때문에 웹서버와 장고를 이어줄 중간 개체가 필요하다. 그 중간 개체는 WSGI(web server gateway interface) 서버이다. WSGI는 request/response를 동기적으로 처리하며, 멀티프로세싱 방식으로 동작하므로서 request가 많을 경우에도 병목현상이 일어나지 않도록 한다.
nginx는 웹서버의 한 종류이다.
웹서버: 웹 페이지를 클라이언트로 전달한다. 주로 정적인 정보(이미지, css, 자바스크립트)를 포함한 HTML문서가 클라이언트로 전달된다.
(동적인 정보(db 조회 등)를 전달하는 서버는 web application server이다. => django)
※ 아파치 vs 엔진엑스
- 아파치 : 다중 프로세스
- MPM, 멀티 프로세스 모듈 방식으로 일 처리
요청이 들어 올때마다 프로세스를 새로 생성하는 방식이 있고 한 프로세스 안에서 스레드를 생성하는 방식이 있다.- 오랜기간 사용 되어왔기 때문에 안정성이 더 좋다.
- Nginx : 이벤트로 일 처리
- event driven 방식 요청을 한줄로 세워 순차대로 진행함
- 성능면에서 아파치보다 좋다.
- 장고는 엔진엑스와 잘 맞는다.