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

웹 클라이언트가 웹 요청을 웹 컨테이너에 보내면 웹 컨테이너는 이 요청을 처리할 웹 컴포넌트를 찾아서 요청을 위임하고 웹 컴포넌트는 요청을 분석한 다음에 뭔가 작업을 수행하고 결과를 만들어낸다. 그 만들어낸 결과가 다시 웹 응답으로 웹 클라이언트에게 리턴되는 것.
이때 중요한 건 웹 클라이언트와 웹 컨테이너 사이에서 요청과 응답 이게 항상 쌍을 맺어서 수행이 된다는 것이다. 요청이 없는 응답은 없다. 그렇다면 웹 요청은 어떤 식으로 보내야 되고 응답은 어떤 식으로 받아야 되는가 이것을 정의해놓은 표준 기술이 있는데 그게 HTTP라 부르고 프로토콜이다. 둘 사이에 어떤 대화를 해야 되는데 이런 식으로 이야기하면 이렇게 해석을 해, 너가 이렇게 응답을 해주면 이렇게 받아들이게 등과 같은 이야기가 정의되어있다.
이제 뒤에서 웹 애플리케이션을 개발할 때 요청과 응답의 각 요소들을 어떻게 가져올 수 있고 어떻게 생성할 수 있는가를 생각하면서 개발해야 한다. 그리고 내가 개발한 웹 프로그램이 동작할 때 어떤 기능을 수행하는 동안에 어떤 요청이 들어왔고 어떤 응답이 만들어졌는가 이거를 HTTP 를 모니터링하는 도구 같은 걸 사용해 실제 주고받는 요청과 응답 내용을 보며 기대했던 대로 바르게 요청과 응답이 잘 만들어졌고 사용하고 있구나를 확인할 수 있어야 한다.
요청과 응답은 구조가 굉장히 비슷하다.
Request
첫줄에 중요한 정보가 담겨있고 그 다음에 이어서 헤더들이 나오고 마지막에 메세지 바디 부분이 나온다.
Request Line : Method, Path, HTTP Version
요청의 첫 줄에는 어떤 메소드를 이용하겠다라는 메소드가 제일 먼저 등장한다. Get, Post, Delete 와 같이 HTTP 메소드가 제일 앞에 나오고 그 뒤를 이어서 URL 에서 호스트 네임과 포트를 제외한 나머지 경로 부분이 나온다. 여기 Query String 으로 파라미터 값이 전달될 수 있다. 그리고 마지막으로 HTTP 버전이 붙어 나오게 되어있다.
Headers
요청의 헤더 정보에는 여러가지 중요한 정보들이 들어간다. 이 헤더에 들어가있는 정보에 따라서 요청을 처리하는 방식이 달라지거나 아니면 응답을 생성할 때 타입같은 것들이 바뀌기도 한다. 그래서 헤더 정보들을 필요한 경우에 꺼내서 사용하거나 확인할 수 있어야 한다.
Message Body
마지막으로 POST, PUT 같은 메세지 바디가 동반되어 있는 요청들이 있다. 그 경우 헤더에 설정된 컨텐츠 타입에 맞는 메세지 바디 부분이 제일 마지막 부분에 등장한다.
Response
응답은 거의 구조는 비슷한데 첫 줄만 다르다.
Status Line: HTTP Version, Status Code, Status Text
첫 줄에 이번에는 HTTP 버전이 제일 앞에 나오고 그 다음에 제일 중요한 상태 코드 값이 있다. 그리고 이를 설명하는 텍스트가 뒤에 붙기도 한다.
Headers
서버에서 만들어지는 응답에도 헤더들이 붙는다. 헤더에서 제일 중요한 건 메세지 바디가 어떤 컨텐츠 타입으로 작성되어 있는가, 이 정보는 반드시 들어가야 하고 그 외에 클라이언트 서버에서 보내주고 싶은 정보들이 헤더에 추가될 수 있다.
Message Body
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