(Spring) HTTP요청과 응답

 

 

1. 프로토콜이란(Pprotocol)이란?

서로 간의 통신을 위한 약속, 규칙

주고받을 데이터에 대한 형식을 정의한 것

어떤 형식으로 주고받을지 미리 약속을 해놔야 데이터를 주고받고 그 데이터를 해석할 수 있다.


2. HTTP(Hyper Text Transfer Protocol)란?

HTTP는 텍스트 기반의 프로토콜이다.

단순하고 읽기 쉽다.

요청과 응답 사이에 텍스트 들이 왔다 갔다 하는 것이다.

상태를 유지하지 않는다는 특징이 있다.(stateless) - 클라이언트 정보를 저장 x

즉 같은 클라이언트가 요청을 여러번 보내도 서버는 같은 클라이언트라는 것을 구별하지 못한다.

상태를 저장하지 않기 때문에…. 앞의 요청과 뒤의 요청을 구별할 수 없다.

이것을 보안하기 위해서 하용하는 것이 쿠키와 세션이다.

쿠키와 세션을 이용하면 클라이언트를 구별할 수 있게 된다.

확장 가능하다는 특징이 있다.(커스텀 헤더 추가 가능) (표준에 정해놓지 않은 헤더를 추가할 수 있다.)


3. HTTP 메시지

- 편지와 비슷하다. 둘 다 텍스트이다.

- HTTP 응답 메시지는 헤더와 바디로 구성되어 있다.

- 헤더는 본문에 대한 설명이 있고 바디에는 실제 내용이 들어 있다.

- 즉 HTTP 프로토콜은 서로에게 요청 편지를 보내고 상대방은 응답 편지를 보내는 것과 같다.

 

 

- 브라우저에 URL을 입력하면 위와 같이 요청 메시지를 만들어 준다.


 

4. HTTP 메시지 - 응답 메시지

 

- 위의 그림은 HTTP 응답 메시지 형식이다.

- 헤더와 바디 사이에는 빈 줄 하나가 있다.

- 헤더가 몇 줄인지는 정해지지 않았다.(n 줄)

- 헤더의 개수가 가변적이라 중간에 빈 줄이 삽입되어 헤더와 바디를 구분한다.

- 즉 빈줄이 나오면 헤더가 끝난 것이다.

- 바디에는 응답 내용이 담긴다.


 

5. HTTP 메시지 - 요청 메시지

 

- 요청 메시지에는 크게 GET, POST 요청이 있다( 요청 메서드)

 

GET 요청

 

- 첫 줄은 요청 라인이고 그다음에 헤더, 중간 빈 줄 다음 바디가 나온다.

- GET은 리소를 받아 가져오기 위한 것이다. 서버에게 리소스를 요청해서 얻어오려는 것!!

- 즉 읽기 위한 것으로 바디가 없고 헤더만 존재한다.

- 대신 데이터를 보낼 게 있으면 첫 줄에 추가할 수 있다 ( 쿼리스트링)

- 단순히 요청하면 리소스를 가져오는 읽기 작업은 GET을 사용한다. (리소스 URL만 작성하면 됨)

 

POST 요청

 

- POST는 바디가 있어서 서버에 전송할 데이터를 바디에 담고 있다.

- POST는 쓰기 위한 것이다.

- EX) 로그인, 회원가입, 파일 첨부 → 이런 것은 다 POST를 활용한다.


 

6. HTTP메서드 - GET, POST

 

GET POST
서버의 리소스를 가져오기 위해 설계 서버에 데이터를 올리기 위해 설계
QUERY STRING을 통해 데이터를 전달(소용량) 전송 데이터 크기의 제한이 없음(대용량)
URL에 데이터 노출되므로 보안에 취약 데이터를 요청 메시지의 body에 담아 전송
데이터 공유에 유리 / ex) 링크 공유 보안에 유리(HTTP + TLS), 데이터 공유에는 불리
ex) 검색엔진에서 검색단어 전송에 이용 ex) 검색엔진에서 검색단어 전송에 이용

 

- post요청을 하기 위해서는 일반 URL을 입력하여서는 볼 수 없다.

- <form> 태그를 써야지만 확인 가능 → 테스트 시 post man 프로그램을 활용하여 단위 테스트 진행

- post man 활용 시 post 뿐 아니라 다른 메서드로도 요청을 할 수 있고, 요청 기록을 저장하기 때문에 반복 요청을 할 때 유용하다.

 

 

 

 

Reference

'스프링의 정석 : 남궁성과 끝까지 간다' 수강 후 복습한 내용입니다.