django로 crud 연습을 하다보니 get과 post의 대한 개념이 정확하지 않은 것 같아서.. http의 개념부터 확실히 잡고 가는게 좋을 것 같아 정리를 해보겠습니다.
HTTP(HyperText Transfer Protocol)의 약자이다
문자 그래도 hypetText로 만들어진 웹브라우저 위에서 동작하는 언어 들의 통신(transfer) 약속이다(protocol).
즉 컴퓨터들끼리 html파일을 주고받을 수 있도록 하는 소통방식 또는 약속이다.
(1)request, response
http 통신의 핵심 요청과 응답인데 전송시에 보내는 주체와 받는 주체가 있는 것처럼 통신시에도 보내는 주체는(요청)을 받는 주체는(응답)을 보낸다 request, response 즉 소통의 핵심은 요청과 응답이다.
(2)stateless
상태없음? 무슨 상태가 없다는 걸까??
http통신(요청/응답)은 독립적이다. 무슨 소리냐면 한 번 보낼때 필요한 정보를 보내고 보낸 내용을 저장하지 않는다 과거의 내용을 기록하지 않는다는 말이다.
필요한 정보가 있으면 매 번 요청해야 되는 것이다.
무상태는 항상 필요한 정보를 모두 보내야하기 떄문에 아무 서버나 호출해도 된다.
서버가 클라이언트 상태를 보존하지 않기떄문에
장점: 서버 확장성 높음(스케일 아웃)
단점: 클라이언트 추가 데이터 전송
그러면 좀더 상세히 http의 요청에 대해서 알아보도록 하자 request는 프런트(클라이언트)에서 백엔드(서버)에 데이터처리를 시작하기 위해서 보내는 메세지이다.
메세지 구조는 크게 세 부분으로 구성되어있다.
(1)start line: 요청의 첫번째 줄
Get /login HTTP/1.1
get 메소드로 login 이라는 요청 타겟에 http 1.1버전으로 요청을 보낸다
(2)Headers: 해당 요청에 대한 추가 정보(메타 데이터(목적을 가지고 있는 데이터))를 담고있는 부분이다.
key: value값으로 되어 있다
host: 요청을 보내는 타겟의 주소
user-agent: 요청을 보내는 클라이언트의 대한 정보(chrome,fire fox,safari)
content-type: 해당 요청이 보내는 메세지 body의 타입
content-length: body내용의 길이
authorization: 회원의 인증/인가를 처리하기 위해 로그인 토큰을 authroization에 담는다
Headers: {
Host:
User-Agent:
Content-Type:
Content-Length:
Authorization:
}
(3)body: 해당 요청의 실제 내용
로그인 시에 서버에 보낼 요청의 내용
Body: {
"user_email": "kicaptain16@gmail.com"
"user_password": "fc_seoul_8"
}
(1)start line: 응답의 상태 첫 줄
HTTP/1.1 200 SUCCESS
HTTP/1.1 404 not-found
프론트에서 보낸 요청에 대해서 성공했기 때문에 200 상태 메세지를 보낸다
유저의 정보를 찾을수 없기 때문에 (Not found) 404 상태 메세지를 보낸다.
(2)headers: 요청의 헤더와 동일하다. 응답의 추가 정보(메타 데이터)를 담고있는 부분이다.
(3)body: 요청의 body와 일반적으로 동일하다.
Body: {
"message": "SUCCESS"
"token": "kldiduajsadm@9df0asmzm" (암호화된 유저의 정보)
}
이제 오늘의 http을 작성한 이유인 통신 메서드에 대해서 알아보도록 하자
(1) GET
GET /shop/bag HTTP/1.1
Headers: {
"HOST": "https://www.apple.com/kr",
"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
}
(2)POST
// (축약된 요청 메세지)
POST /shop/bag HTTP/1.1
Headers: {
"HOST": "https://www.apple.com/kr"
"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
}
Body: {
product: {
"productId": 30
"name": "12.9형 iPad Pro Wi-Fi + Cellular 128GB"
"color": "스페이스 그레이"
"price": "₩1,499,000"
"quantity": 1
}
}
// (축약된 응답 메시지)
HTTP/1.1 201 SUCCESS
Body: {
"message": "SUCCESSFULLY CARTS UPDATED"
}
(3)DELETE
// (축약된 요청 메세지)
DELETE /shop/bag HTTP/1.1
Headers: {
"HOST": "https://www.apple.com/kr"
"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
}
Body: {
productId: 30
}
// (축약된 응답 메시지)
HTTP/1.1 201 SUCCESS
Body: {
"message": "productId 30 DELETED"
}