
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
'스프링의 정석 : 남궁성과 끝까지 간다' 수강 후 복습한 내용입니다.
'Spring' 카테고리의 다른 글
| (Spring)관심사의 분리 및 MVC패턴 (0) | 2022.08.31 |
|---|---|
| (Spring)텍스트와 바이너리 (0) | 2022.08.31 |
| (Spring) 톰캣 설정 파일 (0) | 2022.08.31 |
| (Spring)클라이언트와 서버<Tomcat 내부구조> (0) | 2022.08.31 |
| (Spring)요청과 응답(HttpServletRequest) (0) | 2022.08.31 |