웹 컨텐츠를 이용할 때 어떤 일이 벌어질까.
웹 브라우저를 통해 웹 컨텐츠를 볼 때 다음과 같은 일이 일어난다.
웹 브라우저 (클라이언트)가 웹 서버에 컨텐츠를 요청하고,
요청을 받은 서버는 해당 컨텐츠를 클라이언트로 전송해준다.
- 인터넷 상에 존재하는 수 많은 컨텐츠들은 이런 방식으로 전송되며, 먼 길을 오가는 와중에 꼬이거나 손상되지 않도록 서로간에 ‘이렇게 주고 받읍시다!’ 라는 통신 규약, 프로토콜을 활용한다.
- 전 세계의 모든 웹 브라우저, 서버, 애플리케이션은 HTTP 라는 프로토콜을 통해서 서로 대화한다. 인터넷 세상의 공용어인 셈이다.
- 클라이언트 - 서버로 이루어진 통신 구조를 클라이언트 - 서버 아키텍쳐, 2티어 아키텍쳐라고 부르며, 여기에 데이터를 저장할 수 있는 DB를 포함해 3티어 아키텍쳐라고 하기도 한다.
HTTP 통신
- 클라이언트 - 서버 통신 과정에 대해서 좀 더 자세히 알아보자.
- https://friedegg556.tistory.com/184 라는 주소로 접속을 할 때, 클라이언트는 www.friedegg556.tistory.com 주소를 가진 서버로 HTTP 요청을 보낸다.
- HTTP 요청에는 다양한 정보가 들어있고, 이 경우 /184 라는 경로에 위치한 데이터를 찾아서 보내달라는 요청이 될 것이다. 서버는 이를 받아서 찾은 뒤, 성공적으로 찾았다면 해당 데이터와 정보를 담은 HTTP 응답을 보낸다.
- HTTP 요청의 대상을 ‘리소스’ (자원) 이라고 부르며, HTTP 서버는 이 리소스를 관리하고 제공하는 역할, HTTP 클라이언트는 리소스를 사용하는 역할을 한다고 볼 수 있다.
URI 와 URL
- URI 는 Uniform Resource Identifier, URL 은 Uniform Resource Location 을 의미한다. 각 이름처럼 URI 는 리소스를 식별하는 역할을 하고, URL은 리소스의 구체적인 위치를 표현한다.
- URI가 URL을 포함하는 상위 개념이다.
- 먼저 URL 은 이런 구조로 리소스의 위치를 표현한다. (scheme, hosts, url-path)
- scheme 은 통신 프로토콜의 종류를 의미한다. http 혹은 https 등… 어떤 프로토콜을 사용하라는 의미.
- host 는 요청 리소스가 위치하는 서버 주소 (ip 주소 혹은 도메인 주소) 를 의미한다. 이 주소로 이동하라!
- url-path 는 웹서버의 루트 디렉토리로부터 리소스까지의 경로를 의미한다.
- 여기까지가 URL 이고, 추가적으로 query 와 fragment 가 덧붙으면 URI가 된다.
- query는 웹 서버에 추가적으로 전달하는 파라미터이고, fragment는 메인 리소스 내의 서브 리소스에 접근할 때 이를 식별하기 위한 정보이다. query는 물음표를 덧붙여 전달하고, fragment는 # 기호와 HTML 요소의 ID를 전달해 해당 요소가 있는 곳으로 페이지 내에서 이동할 수 있는 북마크 개념이다.
IP 주소와 도메인, DNS
- 네트워크에 연결된 모든 컴퓨터는 127.0.0.1 이렇게 생긴 IP 주소를 갖는다. (참고로 이 주소는 로컬 호스트를 의미한다.) IP 주소가 위도와 경도를 나타내는 주소라면, 도메인이름은 그에 상응하는 건물 이름이나 상호명이라고 생각하면 된다. 위도와 경도로 나타난 주소는 알아보기가 힘들지만, 건물 이름은 훨씬 쉽게 이해할 수 있는것처럼 말이다.
- 서버에 요청을 보낼 때 이런 도메인 이름을 실제 서버 주소인 IP 주소로 변경해야하는데, 이런 역할을 하는 특별한 서버가 바로 DNS 이다. Domain Name System 으로 인터넷 세상의 전화번호부 같은 역할을 하고, 서버에 요청을 보내기 전 클라이언트는 이 DNS 로 도메인 이름을 IP 주소로 변환한 뒤 이것을 토대로 요청을 보내게 된다.
HTTP Request 요청 과 HTTP Response 응답
- URI 를 가지고 서버의 주소와 거기에 위치한 리소스를 특정할 수 있다는 것을 알게 되었다. 그렇다면 어떤 방법으로 요청을 하고 응답을 받을까?
- HTTP 메시지라는 것을 활용해 요청과 응답을 주고받는다. 이런 메시지를 개발자가 직접 작성하는 것은 아니고, API 등이 대신 작성해준다.
- HTTP 메시지는 요청과 응답이 유사하게 생겼는데, 크게 다음과 같이 구분한다.
- start line / staus line - 무엇을 어떻게 하라고 요청 / 요청을 받아 어떻게 되었다는 응답 : 요청의 경우 HTTP 메서드와 요청 대상, HTTP 버전 정보를 포함한다. : 응답의 경우 프로토콜 버전과 응답 상태코드, 상태 메시지등을 포함한다.
- 헤더 - 이름과 값으로 구성된 여러 줄의 정보이며, 구체적인 요청 내용과 body 에 리소스가 있다면 그 리소스에 대한 정보를 포함한다. 본문과 구별하기 위해서 빈 줄로 끝난다.
- body - 본문 : 요청의 경우 웹 서버로 전송할 데이터가 여기에 포함되며, 응답의 경우 클라이언트로 보내줄 데이터를 포함한다. 모든 요청과 응답에 body 가 필요한 것은 아니다.
HTTP 메서드
- HTTP 에서는 HTTP 메서드라고 불리는 여러 종류의 요청 명령을 지원한다. 모든 HTTP 요청이 하나의 메서드를 가지는데, 이 메서드를 통해서 서버에게 어떤 동작을 취하라고 요청을 할 수 있다. 주요 HTTP 메서드로는 아래 5가지가 있다. (아래 5가지 메서드가 CRUD 에 해당한다.)
- GET : 조회
- PUT / PATCH : 업데이트
- DELETE : 삭제
- POST : 추가
SUMMARY
- 클라이언트 - 서버간 통신은 HTTP 프로토콜을 이용해 안전하게 이루어진다.
- HTTP 프로토콜에서 요청과 응답은 HTTP 메시지로 이루어진다.
- HTTP 메시지는 TCP 커넥션을 통해서 전송되는데, 이 내용에 대해서는 다음에 알아보도록 하자!
'WEB' 카테고리의 다른 글
[UI/ UX] 사용자 인터페이스(UI) , 사용자 경험(UX) 를 이해해보자 (0) | 2022.08.23 |
---|---|
[WEB] Postman - Weather API 사용해보기 (0) | 2022.08.08 |
[WEB] REST API를 알아보자! (0) | 2022.08.05 |
[Python] 파이썬으로 웹 스크래핑하기 (0) | 2022.06.30 |
[jQuery] 제이쿼리를 활용한 Ajax get 요청 (0) | 2022.06.24 |