Springboot를 공부하면서 느꼈던 점은 Web 공부도 게을리 하면 안된다는 점이다. 앞서 Rest API와 Websocket API를 공부하며 HTTP에 대한 이해가 필요하다고 생각하여 정리했다.
HTTP(Hypertext Transfer Protocol)
웹에서 브라우저와 서버가 데이터를 주고 받을 때 사용하는 프로토콜입니다. 프로토콜을 '통신 규약'인데, 간단하게 꼭 지켜야 할 규칙 정도로 이해하면 됩니다.
HTTP의 특징
1. 요청(Request), 응답(Response)로 이루어져있다.
- 요청은 클라이언트가 보내는 것이고 응답은 클라이언트의 요청에 따라 서버가 보내는 것입니다.
- 클라이언트가 서버에 Request를 보내면 서버가 Response를 합니다.
2. TCP/IP 통신에서 동작하며 80번 포트를 사용한다.
- TCP/IP는 컴퓨터 사이의 통신 표준 및 네트워크의 라우팅, 상호 연결에 대한 규칙을 지정하는 프로토콜 스위트
* 인터넷 프로토콜 스위트 : 프로토콜(통신규약) 모음
3. Hypertext뿐만 아니라 text, image, audio 등 다양한 데이터 전송이 가능하다.
4. Connectionless(비연결성)
- 연결 상태를 유지하지 않습니다. 하나의 요청이 들어오면 응답을 보내고 연결을 끊어버립니다.
- 위와 같은 특징은 리소스(자원)이 적게 든다는 장점이 있지만 통일한 클라이언트의 요청에도 반복적으로 연결/해제 과정을 반복 한다는 점, 연결이 끊긴 후 사용자의 추가적인 요청을 처리할 수 없다는 단점이 있습니다.
* 이러한 단점을 해결하기 위해서 Cookie와 Session, URL Rewriting 등이 사용됩니다.
5. Stateless(무상태)
- 서버는 클라이언트를 식별하지 못합니다. 그래서 같은 클라이언트가 지속적으로 요청을 보내도 해당 요청은 독립적으로 처리됩니다.
6. HTTP 통신을 위한 정보 문서
- HTML뿐만 아니라 JSON, XML의 형태로 정보를 주고 받을 수 있으며 클라이언트는 어떤 형태로 정보를 받고 싶은지 명시할 수 있습니다.
HTTP Method
클라이언트가 HTTP를 이용하여 서버로 요청을 보낼 때 어떤 목적으로 요청을 보내는 것인지 알리는 용도입니다. get, head, post, put, patch, delete, trace, options 정도가 있는데, 각각 역할이 다릅니다.
- GET : 서버에게 데이터 조회 요청
- HEAD : GET과 동일하지만 서버가 응답할 때 Body없이 Header만 리턴
- POST : 서버에게 데이터 전송을 요청(ex. 글 작성 등)
- PUT : URI 데이터를 수정하거나 새로 추가하도록 요청
- PATCH : 서버의 데이터를 일부만 수정하도록 요청
- DELETE : URI의 데이터를 삭제하도록 요청
- TRACE : 클라이언트로 부터 수신한 요청을 응답에 포함시키도록 요청
- OPTIONS : 서버에서 특정 데이터가 어떤 Method를 지원하는지 요청
* URI(Uniform Resorce Identifier) : URL와 URN을 포함하는 포괄적인 개념. URL이 URI에 포함되었다고 생각하기
HTTP Response Status Code
서버가 응답을 보낼 때 함께 전송하는 코드입니다. 3자리 숫자로 이루어져있고 서버의 상태를 나타냅니다. 숫자는 1~5로 시작할 수 있으며 4와 5로 시작하는 상태 코드는 오류를 나타냅니다. 예를 들어 4XX로 작성된 코드는 에러 상태를 나타내는 것입니다. 상태 코드는 굉장히 많기 때문에 아래 MDN 사이트에서 찾아보는 것이 좋습니다.