이번 시간에는 웹 애플리케이션이 어떻게 동작하는지에 대해서 간단히 살펴보고 API를 테스트할 때 우리가 살펴봤던 HTTP 요청과 응답 내용이 어떻게 구성되는지에 대해서도 이야기를 해보도록 할 것.

HTTP란?

스크린샷 2024-12-29 오후 3.03.38.png

웹 클라이언트가 웹 요청을 웹 컨테이너에 보내면 웹 컨테이너는 이 요청을 처리할 웹 컴포넌트를 찾아서 요청을 위임하고 웹 컴포넌트는 요청을 분석한 다음에 뭔가 작업을 수행하고 결과를 만들어낸다. 그 만들어낸 결과가 다시 웹 응답으로 웹 클라이언트에게 리턴되는 것.

이때 중요한 건 웹 클라이언트와 웹 컨테이너 사이에서 요청과 응답 이게 항상 쌍을 맺어서 수행이 된다는 것이다. 요청이 없는 응답은 없다. 그렇다면 웹 요청은 어떤 식으로 보내야 되고 응답은 어떤 식으로 받아야 되는가 이것을 정의해놓은 표준 기술이 있는데 그게 HTTP라 부르고 프로토콜이다. 둘 사이에 어떤 대화를 해야 되는데 이런 식으로 이야기하면 이렇게 해석을 해, 너가 이렇게 응답을 해주면 이렇게 받아들이게 등과 같은 이야기가 정의되어있다.

이제 뒤에서 웹 애플리케이션을 개발할 때 요청과 응답의 각 요소들을 어떻게 가져올 수 있고 어떻게 생성할 수 있는가를 생각하면서 개발해야 한다. 그리고 내가 개발한 웹 프로그램이 동작할 때 어떤 기능을 수행하는 동안에 어떤 요청이 들어왔고 어떤 응답이 만들어졌는가 이거를 HTTP 를 모니터링하는 도구 같은 걸 사용해 실제 주고받는 요청과 응답 내용을 보며 기대했던 대로 바르게 요청과 응답이 잘 만들어졌고 사용하고 있구나를 확인할 수 있어야 한다.

HTTP 요청과 응답의 구조

요청과 응답은 구조가 굉장히 비슷하다.

Request

첫줄에 중요한 정보가 담겨있고 그 다음에 이어서 헤더들이 나오고 마지막에 메세지 바디 부분이 나온다.

Response

응답은 거의 구조는 비슷한데 첫 줄만 다르다.

HTTP 요청과 응답의 구조 예시

HelloControllerMethod 호출 테스트 시에 살펴본 HTTP 요청과 응답을 다시 살펴볼 예정.

Request

GET /hello?name=Spring HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: localhost:8080
User-Agent:Httpie/3.2.1 

Response

HTTP/1.1 200
Connection: keep-alice
Content-Length: 12
Content-Type: text/plain;charset=UTF-8
Date: Thu, 01 Dec 2022 11:11:26 GMT
Keep-Alice: timeout=60

Hello Spring