Django

파이썬 장고 실무 심화 1주차_DRF, HTTP

끈끈 2023. 4. 18. 20:59

DRF

Django REST framework

Django를 기반으로 한 웹 프레임워크

RESTful API를 구축하기 위한 도구

 

Pure Django는 모델-뷰-컨트롤러(MVC) 아키텍처 기반으로

백엔드 로직과 데이터 처리를 처리하도록 설계되어 있음

 

프론트엔드/백엔드 분리!

백엔드는 데이터 부분만 처리해 json 형식으로 보내주는 방식

 

웹브라우저 흐름

  1. DNS(Domain name system) 조회
  2. HTTP 요청 메시지 작성
  3. Socket 라이브러리를 통해 전달
  4. TCP/IP 작성되고 이 안에 HTTP 메시지가 포함

 

프로토콜 계층

어플리케이션 → Socket Library  TCP  IP  LAN  인터넷

 

Internet Protocol

  • 지정한 IP주소로 전송
  • 출발지 IP와 목적지 IP를 작성
  • 송신하면 노드들을 거쳐서 송신이 됨
  • 받을 대상이 없을 수 있다
  • 중간에 패킷이 손실되거나 순서대로 

 

TCP

  • IP를 TCP로 보완
  • 출발지 port와 목적지 port 정보
  • 전송제어와 순서
  • 검증 정보 등
  • 연결지향 TCP 3 way handshake

 

UDP

User Datagram Protocol

 

TCP 기능들이 없다

IP와 유사한데 포트와 체크섬만 추가

 

PORT

항구

 

URI (Uniform Resource Identifier) : 리소스 식별

URL

URN

 

포트는 같은 IP내에서 프로세스 구분을 해줄 수 있다

포트 생략시 http 80 https 443

http가 더 옛날 방식이고 그걸 보완한 https가 더 안전한 방식

 


 

HTTP

HyperText Transfer Protocol

원래는 HTML 전송용, 현재는 모든 형태를 전송

 

클라이언트 서버 구조

클라이언트는 Request를 보내고 Response를 기다림

 

무상태 프로토콜(Stateless) (↔ Stateful)

세션이 종료될 때까지 클라이언트 세션 정보를 저장하지 않음

무상태는 응답 서버를 쉽게 바꿀 수 있음

세션 로그인은 상태가 있음. 최소한으로만 사용한다는 개념

 

비연결성

연결 유지를 하지 않으며 최소한의 자원 사용

HTTP는 기본적으로 연결을 유지하지 않음

초단위 이하의 빠른 응답

 

HTTP 메시지

요청메시지와 응답메시지가 다르게 생김

 

중요한 것은 리소스 식별

 

리소스

회원이라는 개념. 이것이 URI에 매핑되며

거기에 하는 행위가 메서드로 하는 것

 

Restful API

리소스와 행위를 분리하는 것

  • 리소스 : 회원
  • 행위 : 조회, 등록, 삭제, 변경

 


 

메서드의 종류

  • GET : 조회

데이터를 쿼리스트링으로 전달

  • POST : 등록

메시지 바디를 통해 서버로 요청 데이터 전달

데이터 처리

프로세스 처리

새로운 리소스가 생성되지 않을 수도 있음

JSON으로 조회 데이터를 넘기고 싶은데 GET 메서드를 쓰기 힘든 경우

  • PUT : 대체, 혹은 생성

파일 붙여넣기와 동일. 없으면 만들고 있으면 덮어쓴다

포스트와의 차이점 : PUT은 클라이언트가 URI를 지정하여 보냄

  • PATCH : 부분 변경
  • HEAD : GET과 동일하지만 상태줄과 헤더만 반환
  • DELETE
  • CONNECT
  • OPTIONS
  • TRACE

 

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods

 

HTTP request methods - HTTP | MDN

HTTP defines a set of request methods to indicate the desired action to be performed for a given resource. Although they can also be nouns, these request methods are sometimes referred to as HTTP verbs. Each of them implements a different semantic, but som

developer.mozilla.org

 

데이터 전송

  • 쿼리 파라미터 : GET (검색, 정렬 필터)
  • 메시지 바디 : POST, PUT, PATCH (회원가입, 상품주문, 리소스 등록 변경)

 

HTML Form : GET, POST만 지원

Content-Type: application/x-www-form-urlencoded

Content-Type: multipart/form-data

 

HTTP API : POST, PUT, PATCH도 메시지 바디로 데이터 전송 가능

서버 to 서버, 앱 클라이언트, 웹 클라이언트(ajax)

Content-Type: application/json

 

API 설계 예시

회원 관리 - 컬렉션 기반

  • GET /members : 회원 목록
  • POST /members : 회원 등록
  • GET /members/{id} : 회원 조회
  • PATCH,PUT,POST /members/{id} : 회원 수정
  • DELETE /members/{id} : 회원 삭제

 


 

HTTP Header

 

종류가 많음

field-name(key)는 대소문자 구분이 없다

content-type = Content-Type

 

표현 Header

리소스에 대한 정보. (html, xml, json)

 

Content-Type : 형식

  • text/html; charset-utf-8
  • application/json
  • image/png

 

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

 

HTTP headers - HTTP | MDN

HTTP headers let the client and the server pass additional information with an HTTP request or response. An HTTP header consists of its case-insensitive name followed by a colon (:), then by its value. Whitespace before the value is ignored.

developer.mozilla.org

 


 

공식 문서 읽기

 

https://mypy.readthedocs.io/en/stable/

 

mypy 1.2.0 documentation

Next Getting started

mypy.readthedocs.io

https://black.readthedocs.io/en/stable/#

 

Black 23.3.0 documentation

Next The Black Code Style

black.readthedocs.io

https://django-ninja.rest-framework.com/

 

Django Ninja

Django Ninja - Fast Django REST Framework Django Ninja is a web framework for building APIs with Django and Python 3.6+ type hints. Key features: Easy: Designed to be easy to use and intuitive. FAST execution: Very high performance thanks to Pydantic and a

django-ninja.rest-framework.com

 

 


 

Django 배포할 때 runserver로 해도 되나요?

 

https://uiandwe.tistory.com/1268

 

wsgi를 왜 쓰나요

"uwsgi를 왜 쓰나요?”라는 질문을 “파이썬에서 통신을 하기 위해 지정한 인터페이스예요”라고 대답을 했지만 … 개인적으로 충분한 대답이 되지 않은 것 같아 이 글을 작성합니다. 해당 글은

uiandwe.tistory.com

 

'Django' 카테고리의 다른 글

파이썬 장고 실무 심화 2주차 1_api view, response  (0) 2023.04.19
DRF 시작하기  (0) 2023.04.19
HTTP response status codes 상태 코드  (0) 2023.04.18
Django 이미지 파일 삭제 cleanup  (2) 2023.04.16
Django 한국 시간 설정  (0) 2023.04.16