HTTP(Hypertext Transfer Protocol)
http는 우리가 원하는 홈페이지를 찾아가기 위해 주소창에 http://~ 이런식으로 시작하게 된다. 웹에서는 서로 통신하기 위해 HTTP를 사용하기 때문이며 이는 서버와 클라이언트에서 데이터를 주고받기 위한 프로토콜이기도 하다. 또한 HTTP는 어떤 종류의 데이터도 전송할 수 있도록 설계되어 있다.
우리가 클라이언트에서 요청을 보내고, 이를 응답하면 데이터가 전달된다. 전달된 데이터는 모두 브라우저에 표현하기 위한 것이다. 즉 들어온 데이터들이 html안에서 형식을 지켜서 쓰이는데, 이는 전부 텍스트로 이루어져 있다. 그래서 원래는 Servlet에서 request.getParameter하면 문자를 보내든 숫자를 보내든 전부 String으로 들어오고 이를 형변환 해줘야만 숫자나 다른 표현이 가능한데 Spring framework에서는 알아서 타입을 찾아주기 때문에 우리는 그 틀 안에서 자유롭게 데이터를 주고받을 수 있다.
HTTP의 특징
- HTTP 메시지는 HTTP 서버와 클라이언트에 의해서 해석이 된다. 여기서 HTTP 메시지는 전부 텍스트이다.
- TCP/ IP를 이용하는 응용 프로토콜이다. 컴퓨터와 컴퓨터간의 데이터를 전송할 수 있도록 하는 장치이며 인터넷 통신망을 통해 원하는 데이터를 주고받는 기능을 이용하는 응용 프로토콜이다.
- 또한 HTTP는 연결 상태를 유지하지 않는 비연결성(stateless) 프로토콜이다. 서버에 요청을 하지 않으면 그대로 화면이 남아있다는 것이다. 보통 프로젝트를 진행할 때도 우리가 서버에 요청을 보내지 않는 한 인터넷이 끊겨도 화면은 그대로 남아있다. 이는 한번 요청을 받으면 새로고침 하기 전까지 그 상태로 머물러있기 때문이다. 요즘 크롬의 경우는 주기적으로 refresh하기 때문에 이런 현상이 없어보인다.
- HTTP는 연결을 유지하는 프로토콜이 아니기 때문에 요청과 응답 방식으로 동작한다.
HTTP의 장단점
장점
불특정 다수를 대상으로 하는 서비스에 적합하다. 서버와 클라이언트의 연결상태를 계속해서 유지하는 것이 아니기 때문에 클라이언트와 서버간의 최대 연결 수보다 훨씬 많은 요청과 응답을 처리할 수 있다.
단점
stateless(무상태성) 연결을 끊어버리기 때문에 클라이언트의 이전 상황을 알 수 없다. 그래서 이러한 단점을 보완하기위해 Token Cookie와 같은 기술이 나타난다.
HTTP 동작 방식
1. connect: 클라이언트가 원하는 서버에 접속한다.
2. request: 클라이언트가 서버에 요청을 한다. 클라이언트가 서버에 데이터를 담아서 전달하는 과정을 요청(request)라고 한다.
3. response: 서버가 요청에 대한 결과물을 클라이언트에 전달하는 것을 응답(response)라고 한다. 이후 응답이 끝나면 서버와 클라이언트는 요청이 끊긴다 (stateless)
여기서 주목해야할 부분이 몇가지있는데, HTTP 요청 메시지와 HTTP 응답 메시지이다.
HTTP 요청 메시지
클라이언트에서 서버로 요청할 때 요청 헤더에 데이터를 담아 전달하는 방식인데, 여기서 내가 원하는 요청이 어떤 요청인지 서버가 알아들을 수 있게끔 method를 정해서 전달한다. 위에서는 GET요청을 보내는데 필요에 따라서는 POST PUT DELETE를 정해 서버에 전달하면 된다.
HTTP 응답 메시지
응답에서 신경써줘야 할 부분은 Statuts code 부분이다. status는 영문 그대로 상태를 의미하며, 위 사진의 200ok는 성공적으로 잘 전달받았다는 뜻이며, 필요에 따라서는 400 요청오류라던지 500 서버 오류라던지 서버에서 Status code를 알려줘야 한다. 상태를 잘 알려줘야 오류가 났을 때에도 어떤 오류를 범했는지 알아차릴 수 있으며 이를 통해 쉽게 해결할 수도 있기 때문이다.
요청바디
요청바디는 요청헤더에서 한 줄 띄어져있다.
본문은 요청을 할 때 함께 보낼 데이터를 담는 부분이다.
요청메소드가 POST나 PUT을 사용하게 됐을 떄 들어오게 된다.
GET 방식은 요청할 때 가지고 가야 되는 자원도 URL에다 붙여서 가져간다. 그래서 GET방식은 요청바디가 없다.
응답 바디
빈줄 다음에 나오는 것이 실제 응답 리소스 데이터가 나오는 부분이다.
응답에는 대부분의 경우 본문이 있다. 보통 데이터를 요청하고 응답 메시지에는 요청한 데이터를 담아서 보내주기 때문이다. 응답 메시지에 HTML이 담겨 있는데 이 HTML을 받아 브라우저가 화면에 렌더링한다.
'Spring Boot' 카테고리의 다른 글
SpringBoot Security 설정(application.yml 및 mustache) (0) | 2023.05.31 |
---|---|
REST API 와 API 의 뜻 (0) | 2023.02.21 |
@RequestMapping과 객체 전달 (0) | 2023.02.14 |
Spring Boot의 @Controller와 @RestController 의 차이 (0) | 2023.02.14 |
Spring Presentation Layer (0) | 2023.02.08 |