- Django Rest Framework
HTTP와 웹의 동작 방식
- 프론트엔드와 백엔드의 역할을 이해한다.
- HTTP 메시지의 구조를 이해한다.
- Request와 Response 메시지의 역할을 이해한다.
- HTTP의 상태코드의 역할을 이해한다.
- HTTP의 헤더의 역할을 이해한다.
- 웹의 요청 흐름을 이해한다.
- State와 Stateless의 뜻을 이해한다.
- Restful한 API 설계를 할 수 있다.
[웹 브라우저의 흐름]
- 도메인 주소 조회
- HTTP 요청 메세지 작성
- socket 라이브러리를 통해 전달
- TCP/IP 작성 (← 이 안에 HTTP 메세지 포함)
[URI]
특정 리소스를 식별하는 통합 자원 식별자(Uniform Resource Identifier)를 의미한다 (정확한 주소는 URL이 가지고 있음)
- URI 포트 생략시
- http = 80
- https = 443
[HTTP]
HyperText Transfer Protocol
HTML 전송 뿐만 아니라 다른 모든 형태를 전송 할 수 있다.
- 특징
- 클라이언트 - 서버 구조
- 클라이언트 : Request
- 서버 : Response
👉 이렇게 분리되어 있으면 독립적 진화 가능 ( 예) 사용자 폭주시 서버만 독립적 진화 가능 )
- Stateless : 무상태 프로토콜
- 어떠한 이전 요청과도 무관한 각각의 요청을 독립적인 트랜잭션으로 취급하는 통신 프로토콜이다 + 통신이 독립적인 쌍의 요청과 응답을 이룰 수 있게 하는 방식이다.
- 서버가 클라이언트 상태를 보존하지 않음
- 무상태는 응답서버를 쉽게 바꿀 수 있음
👉 비연결성 즉, 요청마다 응답 후 연결을 유지하고 있지 않는다. 최소한의 자원 사용.
- HTTP 메세지
- (a) Request : Method
- (b) Response : 네트워크 http의 버전 + http 상태 코드 번호 + protocol header(info)/body(html)
- ex) HTTP/1.0 200 OK
- URL 설계
기초 장고는 각각의 페이지 마다 url을 설정해 줬지만 DRF에서는 리소스식 별로 url을 정의해준다.
- 리소스? - 예) 회원
- 행위? - Method
- GET : 데이터는 쿼리스트링(쿼리문)으로 전달
- POST : 메세지 바디를 통해 서버로 요청 데이터 전달 + 데이터를 처리
- Put : 대체 or 생성 (덮어쓰기 or 붙여넣기)
- Patch : 부분 변경(수정)
- Head : GET과 비슷 but 상태줄과 헤더만 변경 (body부분은 그대로)
👉 리소스와 행위를 분리하는 것이 Restful API
- 데이터 전송
- DRF에선 Form을 통한 데이터 전달 대신 API를 통해 데이터를 전송한다.
- API 설계 예시


- HTTP 상태 코드
- 100 - 199 : 요청 수신중 (거의 사용 ❎)
- 200 - 299
- 200 : OK
- 201 Created : 헤더에 로케이션 추가 후 새로운 리소스의 URI 알려줌
- 300 - 399 : 추가 행위 필요
- 400 - 499 : 주로 잘못된 문법 (클라이언트 에러)
- 401 : 인증이 안됨
- 404 : 리소스 없음 or 숨김
- 500 - 599 : 최근 일어난 카카오 데이터 센터 화재사건시 일어났던 에러 즉, 서버에러
- 복구 후 재시도시 성공 가능
- HTTP Header
Method 요청에 대한 Response 메세지의 Header

👉 Header가 가지고 있는 정보
- 메세지 바디 내용
- 메세지 바디 크기
- 압축
- 인증
- 요청 클라이언트
- 캐시 관리
'woncoding > TIL' 카테고리의 다른 글
| TIL | 10.26.수 [Django : DRF] (0) | 2022.10.27 |
|---|---|
| TIL | 10.25.화 [Django : DRF] (0) | 2022.10.25 |
| TIL | 10.21.금 [머신러닝 / Django] (0) | 2022.10.24 |
| TIL | 10.20.목 [머신러닝 / Django] (0) | 2022.10.20 |
| TIL | 10.19.수 [머신러닝 / Django] (0) | 2022.10.20 |