웹의 동작 방식에 대해 이해하기 위해 먼저 기본적인 개념들을 정리했다.
웹에 연결된 컴퓨터는 클라이언트와 서버라고 한다.
웹브라우저 동작 과정에서 사용되는 개념들로, 보다 쉽게 이해하기 위해 예를 들었다.
● 클라이언트 : 쉽게 말해 요청자. 서버의 서비스를 받아 사용하는 장치, 프로그램이다.
(⚡ 긴 도로 한 쪽 끝에 위치한 집에서 반대 끝에 있는 무인마트로부터 물을 사려는 나)
● 서버 : 응답자. 네트워크를 통해 클라이너트에게 서비스를 제공하는 시스템이다.
(⚡ 물을 요청하니 물에 대해 종류별로 제공해주는 마트)
● TCP / IP : 인터넷이 컴퓨터 네트워크 사이에서 정보를 주고 받는데 이용되는 프로토콜 통신 규약.
(⚡ 주문을 하고, 물을 살 수 있게 해주는 운송 장치)
● WAS : 서버에게 동적 컨텐츠 제공을 요청 받고 DB와 연동하여 데이터를 처리한 뒤 생성한 파일을 서버에게 반환해 동적 페이지를 처리한다.
(⚡ 물에 대한 DB 요청 시 WAS에서 서버에 물 목록 반환)
● DNS (Domain Name System Servers) : 웹사이트를 위한 주소록과 같다. 사용자가 브라우저에 웹 주소를 입력할 때, 브라우저는 그 웹사이트를 검색하기 전에 DNS를 살펴본다. 해당 웹사이트가 있는 서버가 어떤 것인지 찾기 위함이다.
(⚡ 마트의 위치가 어디 인지 확인하기 위한 과정)
● HTTP : 클라이언트와 서버가 서로 통신할 수 있게 하기 위한 언어를 정의하는 어플리케이션 규약.
(⚡ 물을 주문하기 위해 사용하는 언어 )
우리가 컴퓨터나 핸드폰을 통해 웹 브라우저를 통해 웹페이지에 접속했을 때 어떤식으로 동작하는 지 알아보았다.
사용자가 웹브라우저를 통해 접속 하고 싶은 웹 페이지의 URL 주소를 입력한다.
웹 브라우저는 DNS 서버로 가서 웹사이트가 있는 서버의 진짜 주소 (IP주소) 물어본다.
DNS 서버가 IP 주소를 알려주면, 브라우저는 해당 IP 주소에 있는 서버를 찾아간다. ( 랜덤한 숫자를 적은 종이를 가지고 함께!! )
웹브라우저는 서버와 숫자가 적힌 종이를 주고 받으며 3WAY - HANDSHAKE 과정을 마친다.
URI와 URL을 혼용해서 사용하는 경우가 있다. 두 차이를 정확히 몰랐는데, 이번 기회를 통해 비교할 수 있었다.
결론부터 보면, URI는 URL의 의미를 품고 있다.
▶ URI (Uniform Resource Identifier) : 자원의 위치 뿐만 아니라 자원에 대한 고유 식별자로서 URL 의미를 포함한다.
▶ URL (Uniform Resource Locator) : 자원이 실제로 존재하는 위치를 가리킨다.
즉, URI는 식별하고, URL은 위치를 가리킨다.
예를 들어보자.
1) https://withmoonlab.tistory.com/index
위의 예시에서 withmoonlab.tistory.com에서 index라는 경로를 타나내고 있다.
서버에서 해당 라우팅에 대한 자원을 전송해줄 것이며 이는 자원이 실제로 존재하는 위치이므로 URL이다.
2) https://withmoonlab.tistory.com/162
위의 예시의 경우, withmoonlab.tistory.com 에서 162의 ID 값을 가지고 있는 자원을 식별하고 있다.
따라서, 해당 예시는 URL이자 , URI라고 할 수 있다.
▶ HOST : 해당 위치에는 도메인 네임 혹은 IP 주소가 들어간다. 컴퓨터의 주소를 표시하는 영역이다.
▶ PORT : 컴퓨터에서 실행되고 있는 수많은 프로세스들의 주소이다. 기본적으로 포트번호를 입력하지 않았을 때는, 프로토콜이 가지고 있는 기본 포트번호가 적용된다. ( HTTP : 80, HTTPS : 443)
▶ 쿠키 : 웹사이트에 접속할 때 클라이언트 로컬에 저장되는 Key-Value쌍의 작은 데이터 파일
[쿠키 동작 방식]
클라이언트가 서버에 TEST 요청을 한다..
서버는 클라이언트 요청의 유효성을 확인하고 응답 헤더에 set-cookie : ~ 를 추가혀 응답한다.
클라이언트는 이후 서버에 요청할 때 전달 받은 쿠키를 자동으로 요청 헤더에 추가하여 요청한다.
▶ 세션 : 브라우저가 종료되기 전까지 클라이언트 요청 유지해주는 기술
각 클라이언트에게 고유 ID를 부여한다. (해당 ID로 클라이언트를 구분하여 요구에 맞는 서비스 제공 가능)
세션은 서버에 저장하기 때문에 저장공간이 필요하며, 부하가 발생할 수 있다.
보안이 취약한 쿠키의 한계점 극복을 위해 세션을 사용하며, 쿠키를 기반으로 동작하지만 사용자 정보를 클라이언트 측이 아닌 서버 측에서 관리한다는 점이 다르다.
<세션 동작 방식>
클라이언트가 서버에 로그인 요청을 한다.
서버는 클라이언트 로그인 요청에 대한 유효성 확인 후, 고유 ID와 SESSION ID이름으로 저정한다.
서버가 응답할 때, 응답헤더에 set-cookie : ~ sessionid:~를 추가하여 응답한다.
4.클라이언트는 이후 서버에 요청할 때, 전달 받은 sessionid 값을 자동으로 요청헤더에 추가한다.
▶ HTTP (Hypertest Transfer Protocol)
클라이언트와 서버 사이에 이루어지는 request/response를 위한 프로토콜
웹브라우저와 서버간의 웹페이지와 같은 자원을 주고 받을 때 쓰는 통신 규약
일반 텍스트로 이루어진 HTML 문서를 주고 받는데 사용된다.
데이터가 평문으로 전송된다.
▶ HTTPS (HyperText Transfer Protocol over Secure Socket Layer)
HTTP의 보안이 강화된 버전
소켓 통신에서 일반 텍스트를 이용하며, SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다.