가장 많은 질문이 나온다는 웹 통신의 큰 흐름에 대해 알아보겠습니다.
어떤 개발자분께서는 이 부분을 100개로 이야기하실 수 있다고 하셨지만,
일단 우리는 8가지 과정을 압축해서 이해해보도록 하겠습니다.
여기서의 숲은 큰 맥락, 나무는 디테일한 내용으로 나누었습니다.
숲
1. 브라우저 창에 검색
2. 이에 대응하는 IP 주소 찾아냄
3. 만약 IP 주소 찾지 못했을 경우? 그래도 무조건 찾아냄
4. 브라우저 - 서버간 다리 연결
5. 브라우저, 웹 서버에 요청한 내용들을 전송함(?)
6. 서버, 요청 수락 ㅇㅋ 이후에 응답을 생성함
7. 서버, 다시 브라우저에게 응답을 보냄
8. 브라우저 응답된 내용 보여줌
나무
대략적인 맥락이 파악이 되었다면, 하나하나 자세하게 보겠습니다.
1번과 8번 과정을 간략하게 생각해보면 주소창에 구글 사이트를 요청한다, 구글 사이트가 보인다로 이해하면 될 것 같습니다.
그럼 2번 과정부터 알아보겠습니다.
2번 과정 : 이에 대응하는 IP 주소 찾아냄
브라우저 내에 캐싱된 DNS 기록들을 통해 대응하는 IP 주소를 찾아냄
(= 임시 저장소인 캐시에 담긴 DNS 기록에서 google.com의 IP 주소를 찾는다.)
다희라는 친구에게 전화를 걸어본다고 생각해볼게요,
이때, 다희 전화번호를 하나하나 입력하는 방법(010-2222-3333)과
"다희"라는 이름을 전화번호부에서 검색하는 방법이 있을 거예요.
즉, 위의 문장은 전화번호 부에 저장된 이름을 검색하는 방법이라고 이해하면 좋을 것 같습니다!
DNS가 뭔지 검색하려고 했다면?
더보기
3번 과정 : 만약 IP 주소 찾지 못했을 경우? 그래도 무조건 찾아냄
만약 IP 주소를 찾지 못했을 경우 ISP의 DNS 서버가 DNS query를 날려서 구글을 호스팅하고 있는 IP 주소를 알아내게 됩니다.
ISP는 Internet Server Provider의 약자로, 인터넷 서비스 공급자라는 뜻인데요 우리가 알고 있는 SK, LG, KT 등이라고 생각하면 됩니다.
내가 가지고 있는 전화번호부 (== 브라우저의 캐싱된 DSN 기록들)에도 찾지 못했을 경우 이걸 다른 사람들에게 물어 물어서라도 번호를 알아내는 느낌이라고 생각하면 좋을 것 같습니다.
왜 ISP일까?
더보기
모든 요청은 데이터 패킷을 통해 보내지게 됩니다.
패킷은 pack과 bucket의 합성어로 데이터 조각이라고 생각하시면 됩니다.
이케아에서 서랍장을 샀다는 가정 하에 설명해보겠습니다.
우리는 서랍장의 부품들과 설명서를 전달받아서 설명서에 적인 부품의 고유한 번호대로 조립을 하게 됩니다.
그래야 우리가 원하는 모양으로 확인할 수 있기 때문인데요,
패킷도 이와 비슷한 느낌입니다.
정보를 보낼 때 특정 형태를 맞추어 보내는 개념으로, 컴퓨터 간에 데이터를 주고받을 때 네트워크를 통해서 전송되는 데이터의 조각인 개념인 것입니다.
이러한 교환 방식을 패킷 교환 방식이라고 합니다.
패킷에 대한 더 자세한 내용은?
더보기
4번 과정 : 브라우저 - 서버 간 다리 연결
즉, 브라우저가 서버와 TCP connection을 하는 과정입니다.
TCP connection.. 이 뭐야..?라고 생각하실 텐데, 쉽게 말하면 인터넷들끼리 메시지를 상호 교환하는데 필요한 규! 칙!이라고 생각하면 좋을 것 같아요.
여기서부터 약간 지치기 시작하면서 그럼 왜! T 어쩌고를 해야 하냐!!라고 생각하실 거라는 거.. 아주 잘 알고 있습니다 ㅎ
아까 3번 과정에서 데이터 포켓들을 통해서 요청들이 보내진 다고 했잖아요.
클라이언트(==브라우저)와 서버 간 데이터 패킷들이 오가기 위해서 다리를 짓는다!라고 생각하면 됩니다.
즉, 웹사이트의 HTTP 요청의 경우에는 일반적으로 TCP를 사용한다.
결국, HTTP 요청을 하기 위해서 TCP Connection을 한다!로 정리할 수 있습니다.
HTTP란?
더보기
5번 과정 : 브라우저, 웹 서버로 요청한 내용들을 전송함
브라우저가 웹 서버에 HTTP 요청을 합니다. 즉 request를 보냅니다.
6번 과정 : 서버, 요청 수락 ㅇㅋ 이후에 응답을 생성함
즉, 서버가 요청 처리를 하고 response를 생성합니다.
request handler에게 요청을 전달해서 response를 생성하게 합니다.
response를 특정한 포맷(JSON, XML, HTML)으로 작성합니다.
7번 과정 : 서버, 다시 브라우저에게 응답을 보냄
브라우저가 요청한 내용들을 서버가 다 처리를 했습니다.
처리된 내용을 다시 브라우저에게 보내는 과정이 바로 이 과정입니다.
서버가 HTTP response를 보낸다고도 표현하는데,
이때 response에 담긴 내용들은
요청한 웹페이지, - 필요로 했던 것
status code, - 200(ok) 같은 것
어떻게 인코딩이 되어 있는지,
(인코딩은 뭔가? <meta charset=”UTF-8”> 같은 것, 대부분 이 방식을 사용하고 있다. 유니코드(전세계 모든 문자를 컴퓨터로 표현하고 다룰 수 있게 설계한 표준 규격) 문자열 인코딩 방식 중에 UTF-8, 16, 32 등이 있다. 이중 가장 호환성이 좋고 표준화된 방식이다.)
접기
어떻게 페이지를 캐싱할지,
설정할 쿠키가 있다면 쿠키, 개인정보
등을 포함하게 됩니다.