클라이언트와 서버가 요청과 응답을 주고 받는것을 당연하듯이 받아들이고 있었지만,
그 속에서 어떤 데이터가 오고 가는지에 대해서는 그저 감이나 대략적으로만
알고 있었다는 생각이 들었습니다.본 글에서는 요청/응답 안에서 어떤 정보가 어떻게 구성되어 있는지에 대해서를
중점으로 다루어 보겠습니다.
사용자의 행동에 따라 요청을 생성 (ex: 로그인 버튼 클릭)
HTTP 프로토콜을 사용하여 해당 요청을 서버로 전송됨
요청을 처리하고 필요한 데이터를 응답에 담아 반환
클라이언트가 요청에 대한 응답을 받음 (성공/실패, 데이터 등)
클라이언트와 서버의 기본 응답을 요약하자면 위와 같이 동작합니다.
그렇다면 클라이언트에서 보내는 요청은 어떻게 구성되어 있을까요?
| 요소 | 설명 |
|---|---|
| 메소드 | GET, POST, PUT, DELETE 등 해당 요청의 종류를 명시 |
| URL | 요청 대상 자원의 주소 (/login, /users/1) |
| 헤더 | 요청 정보 (인증 토큰, 타입 등) |
| 바디 | 전송할 데이터 (POST/PUT 등에서 사용) |
ex)
POST /login HTTP/1.1
Content-Type: application/json
{
"username": "gunwoo",
"password": "1234"
}
POST (메소드)
서버에 리소스를 생성하거나 데이터를 전송할 때 사용하는 HTTP 메소드입니다.
현재는 POST 방식입니다.
/login (URL)
요청 대상의 경로입니다.
현재는 로그인 처리를 담당하는 엔드포인트입니다.
HTTP/1.1
사용 중인 HTTP 프로토콜 버전입니다.
Content-Type: application/json (헤더)
요청 본문의 타입을 지정하는 헤더로, 바디에서 보내는 요청에 대한 정보이며,
현재는 JSON 형식의 데이터를 보낸다는 의미입니다.
{ "username": "gunwoo", "password": "1234" } (바디)
클라이언트가 서버에 보내는 데이터입니다.
현재 로그인에 필요한 사용자 이름과 비밀번호가 포함되어 있습니다.
| 요소 | 설명 |
|---|---|
| 상태코드 | 요청 결과 코드로(200, 400, 500 등) |
| 헤더 | 응답 정보 (타입, 쿠키 등) |
| 바디 | 클라이언트가 받을 데이터 |
ex)
HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "Login success",
"token": "abcdefg..."
}
HTTP/1.1
사용 중인 HTTP 프로토콜 버전입니다.
200 OK (상태코드)
요청 결과 코드로 200 OK 즉, 요청 성공을 뜻합니다.
Content-Type: application/json (헤더)
응답 본문의 타입을 지정하는 헤더로, 바디에서 보내는 요청에 대한 정보이며,
현재는 JSON 형식의 데이터를 보낸다는 의미입니다.
{"message": "Login success","token": "abcdefg..."} (바디)
서버가 클라이언트에게 보내는 데이터 입니다.
현재는 로그인이 성공하였다는 메세지와, 인증/인가를 위한 토큰이 담겨 있습니다.
클라이언트 > 서버
사용자 요청을 만들어 서버에 전달, 메서드 + URL + 헤더 + 바디로 구성
서버 > 클라이언트
요청을 처리하고 적절한 응답을 클라이언트에게 반환, 상태코드 + 헤더 + 바디로 구성
요청과 응답을 각 서버와 클라이언트 부분에서 어떻게 구성하고 어떻게 받을 것인지를
먼저 생각해 보고 기록하며 구성하여 통신에 문제가 최소화 되도록 구성하는 것을
목표로 합시다!