우연히 유튜브에서 해외 개발자가 이런 면접 질문을 받았을 때 당신은 대답할 수 있냐는 영상을 보게 되었다.
'google.com'을 검색하면 일어나는 과정을 설명해봐라
google.com을 검색하면...google창이 나옵니다...
라고 말한다면 면접 광탈하겠지..^_^
대충 DNS가 컴퓨터가 읽을 수 있는 IP주소로 변환해줘서 그걸 서버로 요청해서 응답받는 과정이라고만 알고있어서 이 기회에 확실히 대답할 수 있도록 공부해야겠다는 생각이 들었다.
정말 단순한 질문인 것 같은데 '너 네트워크의 기초를 알고 있니?'에 대한 대답을 들을 수 있는 질문인 것 같아서 네트워크 개념을 말할 수 있는 좋은 질문 같다.
그래서 이번 포스팅에서는 네트워크 기본 원리에 대해 설명할 수 있도록 정리해보았다.
브라우저는 제일 먼저 어떤 일을 할까?
제일 먼저 웹 브라우저는 우리가 보낸 URL이 무엇인지 파악한다.
웹 브라우저에서 어떤 Protocol, domain, port, path로 요청할 것인지 입력한 정보를 바탕으로 해석 및 분석하는 과정이다.
보통 URI를 입력하면 위와 같은 그림이 된다.
브라우저는
사용자가 단순 검색을 한 것인지 아니면 URL을 입력한 것인지 등등 어떤 URI를 썼는지 분석한다.
이때, port를 쓰지 않았다면 HTTP는 80, HTTPS는 443이 디폴트값으로 요청된다.
당연하지만, 우리가 입력한 www.google.com은 컴퓨터가 읽을 수 없다.
그래서 우리는 서버가 이해할 수 있는 IP주소로 변환해주어야 통신이 가능하다.
바로 변환해주나? 아니!
이미 내가 google.com
요청한 적이 있다면
브라우저는 어딘가에 google.com
에 대한 IP주소를 가지고 있을 것이다.
도메인 주소(googel.com)에 해당하는 IP주소를 찾기 위해 4가지의 캐쉬 기록을 순차적으로 체크한다.
사람이 읽을 수 있는 도메인 이름(예: www.amazon.com)을 머신이 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환해주는 시스템 서버
ISP의 DNS 서버가 DNS query로 서버의 IP주소를 요청한다.
DNS QUERY를 통해 여러 다른 DNS 서버들을 검색해서 해당 URL의 IP주소를 찾는 것인데
아래와 같이 Root DNS 서버에서 마지막 Third-level DNS 서버까지 IP주소를 반환받거나 또는, Error를 발생시킬 때까지 계속해서 탐색한다(recursive search)
이제 IP주소를 받았으니, 해당 주소와 서버를 연결해야한다.
TCP연결을 맺는데,
이 과정에서 HTTP 요청일 경우, TCP(Transmisiion Control Protocol) 소켓을 열고 3-way-handshake 연결
HTTPS 요청일 경우 TLS 과정을 통해 세션키를 생성
3-way-handshake가 뭐야?
본 요청을 보내기 전에 클라이언트와 서버가 통신을 해서 서로 연결을 확인하는 절차!
리허설 느낌이라고 생각하면 된다.
위에서 말했던 리허설, 즉 3-WAY-handshake로 연결이 확인되었다면, 클라이언트에게 본 요청을 전송한다.
이 때, 필요한 경우 브라우저 식별정보(user-Agent), 수락 요청 유형 등 헤더에 다양한 정보가 포함이 되고, 일반적으로는 쿠키 정보도 함께 포함된다.
우리가 흔히 아는 status 코드 응답 상태와 요청에 대한 쿠키 정보, encoding type, cache control 등 다양한 정보를 함께 반환한다.
웹브라우저는 응답 받은 HTML을 단계별로 보여준다.
1차적으로, HTML 기본틀을 랜더링하고, 추가적으로 필요한 부분들을 보여준다(CSS, 이미지, javascript)
2차적으로, 정적 파일들은 브라우저에서 자동 캐싱
덕분에 이해가 쏙쏙~ 됐습니다 ^_^ 좋은 글 감사합니다