수경
웹 브라우저에 URL을 입력했을 때 과정
[0. 주소창에 입력한 텍스트 정보 확인]
이 텍스트가 검색어인지 URL인지 우선적으로 확인한다.
- 검색어 ⇒ 브라우저는 검색 엔진의 URL에 검색어를 포함한 주소로 페이지를 이동시킨다.
- URL ⇒ 브라우저 엔진에서 네트워크 호출을 수행한다.
- 네이버 서버의 주소를 알기 위해 네임 서버(Name Server)와 통신하기
- 알아낸 주소를 바탕으로 네이버 서버와 통신하여 필요한 데이터 응답받기
[1. 웹 브라우저에 URL을 입력하고 Enter 키 입력]
https://www.naver.com/blog

- 통신 규약(Protocol)
https://
는 통신 프로토콜이다.HTTPS(Hypertext Transfer Protocol Secure)는 TLS을 사용해 암호화된 연결을 하는 HTTP를 말한다. 브라우저에 전송 계층 보안(TLS)을 사용하여 서버에 연결하도록 지시한다. → (추후 링크)
ftp://
, file://
도 있는데 이는 브라우저가 처리하는 방법을 알고있는 다른 프로토콜이다.- 도메인(Domain)
www.naver.com
은 웹 사이트의 도메인 이름이다. 기억하기 쉬운 주소이며 특정 서버의 IP주소를 가리킨다.- 경로(path)
URL에 리소스에 대한 추가 경로가 있는 경우가 있다. 이는 컴퓨터에 있는 디렉터리 구조처럼 생각할 수 있다.
- fragment
프래그먼트는 리소스 자체의 다른 부분을 가리키는 앵커이다. 앵커는 리소스 내에서 북마크된 지점에 위치한 커넨츠를 보여주기 위한 방법을 나타낸다.
[2. 브라우저는 캐싱된 DNS 기록들을 통해 www.naver.com에 대응되는 IP 주소가 있는지 확인한다.]
- DNS(Domain Name System)
- URL 이름들과 IP주소를 저장하고 있는 데이터베이스이다.
아래 사진은 터미널에
nslookup www.naver.com
을 입력했을 때 나오는 결과이다.
해당 사이트의 IP 주소를 알 수 있고
www.naver.com
의 정식이름(CNAME)은 www.naver.com.nheos.com
이다. - 여기서 non-authoritative answer은 name 서버가 도메인에서 만든 원본 소스 파일을 갖고 있지 않다는 뜻이다. 이 서버에는 다른 DNS들에서 얻어진 도메인의 파일을 캐싱 형태로 가지고 있는 것이다.
- authoritative answer은 도메인의 네임 서버에서 직접 데이터를 얻어 응답을 해줄 경우이다.
DNS의 가장 큰 목적은 사람들에게 편리함을 주기 위해서이다.
웹 사이트의 이름을 브라우저에 검색하면 브라우저는 DNS 기록을 4가지의 캐시에서 확인을 한다.
- 브라우저 캐시 확인
- 브라우저는 일정 기간 동안의 DNS 기록들을 저장하고 있다. DNS query가 이 곳에서 가장 먼저 실행된다.
- OS 캐시 확인
- 브라우저 캐시에 웹 사이트 이름의 IP 주소가 발견되지 않는다면, 브라우저는 시스템 호출을 통해서 OS가 저장하고 있는 DNS 기록들의 캐시에 접근한다.
- 라우터 캐시 확인
- 컴퓨터에 DNS 기록을 찾지 못하면 DNS 기록을 캐싱하고 있는 라우터와 통신해서 찾으려 한다.
- ISP 캐시 확인
- 위 모든 단계가 실패하면 브라우저가 ISP(인터넷 서비스 제공업체-Internet Service Provider)로 이동한다.
- ISP는 DNS 서버를 구축하고 있고 브라우저가 마지막으로 DNS 기록이 있기를 바라며 접근하게 된다.
[3. 요청한 URL이 캐시에 없으면, ISP의 DNS 서버가
www.naver.com을
호스팅 하고 있는 서버의 IP 주소를 찾기 위해 DNS query를 날린다.]IP 주소를 찾을 때까지 DNS 서버에서 다른 DNS 서버를 오가면서 반복적으로 검색하던지 못 찾아서 에러가 발생할 때까지 검색을 진행한다.
DNS 쿼리의 목적
- 여러 다른 DNS 서버들을 검색해서 해당 사이트의 IP 주소를 찾는 것
- 이러한 검색을 Reqursive Search라고 부른다.
[도메인 이름들의 구조, DNS 구성 요소]
- 도메인 네임 스페이스는 최상위에 루트 DNS 서버가 존재하고 그 하위로 연결된 모든 노드가 연속해서 이어진 계층 구조로 되어있다.

- Root DNS 서버
- ICANN이 직접 관리하는 서버이다.
- TLD DNS 서버 IP 주소를 저장하고 안내하는 역할을 한다.
- Top-Level Domain(TLD) DNS 서버
- 도메인 등록 기관이 관리하는 서버이다.
- SDL DNS 서버의 주소를 저장하고 안내하는 역할을 한다.
- Second-Level Domain(SDL) DNS 서버 - Authoritative DNS 서버라고도 함
- 실제 개인 도메인과 IP 주소의 관계가 기록되는 서버이다.
- 일반적으로 도메인 업체의 네임 서버를 말한다.
- 권한 없는 DNS 서버(Recursive server || Resolver server || recursor 라고도 부름)
- 네임 스페이스를 위한 권한 있는 DNS 서버(1, 2, 3 경우)는 IP 주소와 도메인 이름을 매핑한다.
- 네임 스페이스를 위한 권한 없는 DNS 서버는 질의를 통해 IP 주소를 알아내거나 캐시한다.
DNS 동작과정 이미지

[4. Browser가 서버와 TCP connection을 한다.]
브라우저가 올바른 IP 주소를 받게 되면 서버와 connection을 빌드하게 된다. 브라우저는 인터넷 프로토콜을 사용해서 서버와 연결이 된다. 인터넷 프로토콜의 종류는 여러가지가 있지만, 웹 사이트의 HTTP 요청의 경우 일반적으로 TCP를 사용한다.
TCP/IP three-way handshake 라는 프로세스를 통해서 클라이언트와 서버간 connection이 이뤄진다. SYN과 ACK 메시지를 가지고 3번의 프로세스를 거친다.
- 클라이언트 머신이 SYN 패킷을 서버에 보내고 connection을 열어달라고 물어본다
- 서버가 새로운 connection을 시작할 수 있는 포트가 있다면 SYN/ACK 패킷으로 대답을 한다
- 클라이언트는 SYN/ACK 패킷을 서버로부터 받으면 서버에게 ACK 패킷을 보낸다.
Client > Server : TCP SYNServer > Client : TCP SYN ACKC lient > Server : TCP ACK
[5. Browser가 웹 서버에 HTTP 요청을 한다.]
클라이언트는 GET 요청을 통해 서버에게
www.naver.com
웹 페이지를 요구한다. - 만약 자격 증명(credentials)을 입력하거나 form을 제출하는 경우 POST 요청을 사용할 수 있다.
- 이 요청에는 브라우저 식별(User-Agent 헤더), 수락할 요청 유형(Accept 헤더) 및 추가 요청을 위해 TCP 연결을 유지하라는 연결 헤더와 같은 추가 정보도 포함된다. 또한 브라우저가 이 도메인에 대해 저장한 쿠키에서 가져온 정보도 전달한다.

[6. 서버가 요청을 처리하고 response를 생성한다]
서버는 웹서버를 가지고 있다(ex- Apache, IIS...). 이는 브라우저로부터 요청을 받고 request handler한테 요청을 전달해서 요청을 읽고 생성하는 역할을 한다. 그런 다음 응답을 특정 포맷(JSON, XML, HTML 등) 으로 작성한다.
request handler
- 요청, 요청의 헤더 및 쿠키를 읽고 필요한 경우 서버의 정보를 업데이트하는 프로그램이다(NET, PHP, Ruby, ASP 등으로 작성됨)
[7. 서버가 HTTP response를 보낸다]
서버 응답에는 웹 페이지와 함께 status code, content-encoding, 설정할 쿠키 등이 포함된다.

HTTP 응답 결과
- 2XX (Success):
- 200 (OK): 서버가 클라이언트 요청을 성공적으로 처리했다는 의미이다.
- 204 (No Content): 요청은 성공했는데, 돌려줄 resourse는 없을 때
- 3XX (redirect): 요청 완료를 위해 추가 작업 조치가 필요하다는 의미이다.
- 301: 검색엔진에 해당 컨텐츠의 URL이 영구적으로 변경되었음을 알림
- 302: 검색엔진에 해당 컨텐츠의 URL이 임시적으로 변경되었을을 알림
- 4XX (Client Error): 클라이언트의 요청이 유효하지 않아 서버가 해당 요청을 수행하지 않았다는 의미이다.
- 400 : 클라이언트 요청이 유효하지 않아 더 이상 작업을 진행하지 않는 경우
- 401 (Unauthorized): 클라이언트가 권한이 없기 때문에 작업을 진행할 수 없는 경우
- 403 (Forbidden): 접근이 거부됨을 알림
- 404 (Not Found): 해당 요청에 대한 resourse가 없음을 알림
- 500 (Server Error)
- 503 (Unavailavle): 현재 과부화 혹은 점검 중으로 사용불가함을 알림
[8. Browser가 HTML content를 보여준다]
- 브라우저 렌더링으로 고고