HTTP 프로토콜 API를 하나 만들었다고 가정합니다. 보통 이런 API 응답 형식은 JSON이죠. 그럼 네트워크에 JSON 객체가 그대로 포함된채로 전달될까요?
HTTP 요청과 응답 구조
HTTP 프로토콜을 사용해 데이터를 주고 받을 때 요청와 응답 구조를 확인해봅시다.
🔎 참고자료
HTTP 프로토콜 | 토스페이먼츠 개발자센터
HTTP(Hypertext Transfer Protocol)는 웹에서 데이터를 주고받는 서버-클라이언트 모델의 프로토콜입니다. 쉽게 설명하자면 웹 브라우저가 서버와 통신하는 규칙이에요.
docs.tosspayments.com
요청(Request)
요청은 다음과 같은 구성으로 이루어집니다.
- 요청 라인 (Request Line)
- 요청 헤더들 (Request Headers)
- 빈 줄
- 요청 바디 (Request Body)
POST /login HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer token123
{
"email": "test@example.com",
"password": "1234"
}
이때 해당값은 직렬화되어 전송될 때는 다음과 같은 형식으로 바뀔 것입니다. 다음은 한 줄의 문자열입니다.
'POST /login HTTP/1.1\r\nHost: example.com\r\nContent-Type: application/json\r\nAuthorization: Bearer token123\r\n\r\n{"email":"test@example.com","password":"1234"}'
응답(Response)
응답은 다음과 같은 구성으로 이루어집니다.
- 상태 라인 (Status Line)
- 응답 헤더들 (Response Headers)
- 빈 줄
- 응답 바디 (Response Body)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 52
{
"message": "Login successful",
"token": "abc123"
}
이때 해당값은 직렬화되어 전송될 때는 다음과 같은 형식으로 바뀔 것입니다. 다음은 한 줄의 문자열입니다.
'HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: 52\r\n\r\n{"message": "Login successful","token": "abc123"}'
클라이언트에서 JSON 파싱하기
그럼 클라이언트에서 해당 문자열을 JSON으로 다시 파싱해야 원래 의도대로 사용할 수 있겠죠? 이때 어떻게 문자열을 JSON으로 변환시킬까요? 이때 사용되는 것이 바로 JSON.parse() 입니다. JSON.parse()는 자동으로 문자열을 JSON 객체로 파싱해주고 이 과정에서 타입은 자바스크립트가 자동으로 추론합니다.
예시)
{
"name": "Alice",
"age": 25,
"isAdmin": true
}
이런 JSON 데이터를 서버에서 클라이언트에 전송하기 위해 다음과 같이 JSON.stringfy()을 통해 문자열로 직렬화합니다.
// 문자열로 직렬화된 상태
'{"name": "Alice","age": 25,"isAdmin": true}'
그리고 클라이언트는 직렬화된 응답을 받고서, 이를 JSON.parse()를 통해 다시 JSON으로 역직렬화합니다.
{
"name": "Alice",
"age": 25,
"isAdmin": true
}
이때 해당 응답 JSON의 isAdmin 타입을 출력하면 어떤 값이 출력될까요? 바로 boolean이 출력됩니다. 즉, 따로 해당 값이 boolean인지 아닌지에 대한 정보를 넣지 않아줘도 자바스크립트가 자동으로 해당 값의 타입을 추론하는 것입니다.
'CS 상식 > 네트워크' 카테고리의 다른 글
MQTT 프로토콜이란? (0) | 2024.11.04 |
---|---|
웹 캐시(HTTP 캐시, 브라우저 캐시)를 이용해 성능 개선하기 (0) | 2024.11.01 |
REST API 정확하게 이해하고 개발하자 (0) | 2024.10.30 |