[Django] 장고 + 리액트 2 (+ Forward, Redirect, request, session, application)
프로젝트 내부에 있는 패키지 형태의 디렉토리명은 내부에 있는 모듈들이 참조하고 있기 때문에, 함부로 바꾸면 안된다.
manage.py : 여러 장고 명령을 실행해주는 진입점이다.
__init__.py : 패키지를 임포트할 때 임포트의 대상이다.
settings : 현재 프로젝트의 기본 장고설정을 덮어썼으며, 새롭게 추가로 설정하는 것을 적어주면 됨
urls.py : 최상위 URL 설정 모듈
wsgi(+asgi).py : 실제 서비스에서의 웹서비스 진입점
장고의 주요 기능들
Function Based Views : 함수로 HTTP 요청 처리
Models : 데이터베이스와의 인터페이스 (ORM 기능의 영역)
Templates : HTML 문자열 조합 목적으로 사용하며, 푸쉬 메시지나 이메일 내용을 만들 때에도 쓰면 편리
Admin : 심플한 DB 레코드 관리 UI (간단한 관리자용)
Logging : 다양한 경로로 메세지 로깅
Stitic : 개발 목적으로의 정적인 파일 관리
Messages framework : 유저에게 1회성 메세지 노출 목적(알림창, 경고창)
Class Based Views : 클래스로 함수 기반 뷰 만들기
Forms : 입력 폼 만들기, 입력값 유효성 검사 및 DB에 저장
테스팅 / 국제화 & 지역화 / 캐싱 -> 표준화된 인터페이스로 지원해줌
Geographic / Sending Emails / Syndication Feeds / Sitemaps
웹 앱 연결구조
웹 브라우저 - 웹 서버(장고) - DB 서버
- 캐시 서버
장고에서는 URLconf / View / Model / Templates 기능을 한번에 지원해주는 것이다.
포워딩(RequestDispatcher)
웹브라우저에서 요청이 오면 서버 -> 서버로 요청하여 응답하게 한다.
서버에서 서버로 웹 컨테이너에 의해 다른 주소로 포워딩한다. 이때 객체 정보도 같이 전달한다.
그리고 서버는 새 주소에서 반환한 결과값으로 응답한다.
- 속도가 리다이렉트보다 더 빠르다
- 서버에서 서버로 페이지 요청을 하기 때문에, String 뿐만 아니라 객체도 전달할 수 있다.
- 문제는 응답 후에도 처음 클라이언트가 요청한 URL로 지정되어 있기 때문에, 새로고침을 하면 같은 정보가 여러 번 저장되는 경우이다.
리다이렉트(sendRedirect)
웹브라우저에서 요청이 오면 서버 -> 웹브라우저로 요청을 보내고 다시 웹브라우저 -> 서버 로 요청했을 때 서버가 응답하게 된다.
- 따라서 포워딩의 문제를 해결하기 위해서, 리다이렉트를 사용하면 된다.
- 클라이언트에서 요청이 들어오면 서버가 다른 주소로 요청하라고 응답한다.
- 그러면 클라이언트는 다시 새로운 URL에 재요청한다.
- 이때 request 와 response 객체가 새롭게 생성된다.
- 시스템의 변화가 생길 때(생성, 수정, 삭제 등) 재요청을 방지해준다.
- 리다이렉트는 GET방식으로 값을 전달해야 한다. 요청객체가 새로 생기기 때문에 값을 보내려면 URL도 같이 보내야하기 때문이다.
request
클라이언트에게 응답하기 전까지만 유효한다. 즉, 저장된 데이터는 응답을 보내기 전까지만 유효하고, 응답하면 제거된다.
- Form 전송, key value 값, request.setAttribute()
session
웹 브라우저를 닫거나, 로그아웃을 하기 전까지 유효하다. 보통은 30분 정도 유지된다.
- session.setMaxInactiveInterval(60) 처럼 유효 기간을 초 단위로 설정할 수도 있다.
application
리부팅하기 전까지 유효하다. 여기에 저장된 값은 서버를 끄기 전까지 유지된다.
- 모든 클라이언트가 공통적으로 사용하는 데이터는 application에 담는다.
외부 참조 링크
https://cafe.daum.net/flowlife/HqLp/5
Daum 카페
cafe.daum.net