브라우저의 작동 원리(보이지 않는 영역)
* URL과 URI
* IP와 포트
* 도메인과 DNS
* 크롬 브라우저 에러
'내가 꿈꾸는 세상은 전 세계가 네트워크로 연결된 상태에서 서로의 자료를 공개하고
이렇게 공개된 자료를 하이퍼텍스트를 이용해 공유할 수 있는 세상이다.'
Sir Timothy John Berners-Lee : WWW의 아버지
- 하이퍼텍스트 문서를 작성할 수 있는 마크업 언어 HTML
- 하이퍼텍스트를 전송하는 프로토콜 HTTP
- 웹 상의 자원을 모두가 접근할 수 있도록 만든 식별자 URL
https://www.lgcns.com/blog/it-trend/17563/
URL과 URI
URL
- 브라우저의 주소창에 입력한 URL은 서버가 제공되는 환경에 존재하는 파일의 위치이다.
- 예를 들어 https://codestates.com:443/ 는 codestates.com 주소가 가리키는 서버의 기본 폴더를 뜻한다.
- CLI 환경에서 폴더와 파일의 위치를 찾아 이동하듯이, 슬래시(/)를 이용해 서버의 폴더에 진입하거나 파일을 요청할 수 있다.
- 그러나 기본적인 보안의 일환으로 외부에서 직접 접근이 가능한 경우는 거의 없다.
크롬 브라우저에 다음 url을 입력해 보면 브라우저로 PC의 폴더와 파일을 탐색할 수 있다. (크롬 브라우저를 파일 탐색기로 쓸 수 있음)
# username에는 사용자 이름을 입력한다.
# Ubuntu:
file://127.0.0.1/home/username/Desktop/
# macOS:
file://127.0.0.1/Users/username/Desktop/
URL의 의미와 구성 요소 설명
- URL은 Uniform Resource Locator의 줄임말이다.
- URL은 네트워크 상에서 웹 페이지, 이미지, 동영상 등의 파일이 위치한 정보를 나타낸다.
- URL은 scheme, hosts, url-path로 구분할 수 있다.
- scheme은 통신 방식(프로토콜)을 결정한다. (일반적인 웹 브라우저에서는 http(s)를 사용)
- hosts는 웹 서버의 이름이나 도메인, IP를 사용하며 주소를 나타낸다.
- url-path는 웹 서버에서 지정한 루트 디렉토리부터 시작하여 웹 페이지, 이미지, 동영상 등이 위치한 경로와 파일명을 나타낸다.
URI의 의미와 구성 요소 설명
- URI는 Uniform Resource Identifier의 줄임말이다.
- URI는 URL의 기본 요소인 scheme, hosts, url-path에 더해 query, fragment를 포함한다.
- query는 웹 서버에 보내는 추가적인 질문이다.
-> http://www.google.com:80/search?q=JavaScript 를 브라우저의 검색창에 입력하면, 구글에서 JavaScript를 검색한 결과가 나타난다. - fragment는 일종의 북마크 기능을 수행한다.
-> URL에 fragment(#)와 특정 HTML 요소의 id를 전달하면 해당 요소가 있는 곳으로 스크롤을 이동할 수 있다.
-> (ex. #section1)
- query는 웹 서버에 보내는 추가적인 질문이다.
[정리]
브라우저의 검색창을 클릭하면 나타나는 주소가 URI이다.
- URI는 URL을 포함하는 상위개념이다.
- 따라서, 'URL은 URI다.' 는 참이고, 'URI는 URL이다.' 는 거짓이다.
부분 | 명칭 | 설명 |
file://, http://, https:// | scheme | 통신 프로토콜 |
127.0.0.1, www.google.com | hosts | 웹 페이지, 이미지, 동영상 등의 파일이 위치한 웹 서버, 도메인 또는 IP |
:80, :443, :3000 | port | 웹 서버에 접속하기 위한 통로 |
/search, /Users/username/Desktop | url-path | 웹 서버의 루트 디렉토리로부터 웹 페이지, 이미지, 동영상 등의 파일이 위치까지의 경로 |
q=JavaScript | query | 웹 서버에 전달하는 추가 질문 |
- 127.0.0.1 은 로컬 PC를 나타낸다.
- port는 서버로 진입할 수 있는 통로이다.
IP와 포트
IP address
- 공유기를 설치하고 비밀번호를 설정하려면, 공유기 관리 페이지에 접속해야 한다.
- 웹 브라우저에 닷(.)으로 구분된 네 덩이의 숫자를 입력하면, 공유기의 관리 페이지로 접속할 수 있다.
- 이때 사용되는 네 덩이의 숫자를 IP 주소라고 한다.
IP 의 뜻
- IP는 Internet Protocol의 줄임말로, 인터넷상에서 사용하는 주소체계를 의미한다.
- 인터넷에 연결된 모든 PC는 IP 주소체계를 따라 네 덩이의 숫자로 구분된다.
- 이렇게 네 덩이의 숫자로 구분된 IP 주소체계를 IPv4라고 한다.
-> IPv4는 Internet Protocol version 4의 줄임말로, IP 주소체계의 네 번째 버전을 뜻한다. - 터미널에서 간단한 명령어로, 자주 이용하는 코드스테이츠의 IPv4 주소를 확인할 수 있다.
-> 터미널을 열고, nslookup codestates.com 을 입력하면, 다음과 같은 화면을 만날 수 있다.
특정 도메인을 nslookup을 해서 IPv4 주소를 확인해보니 주소가 여러 개인 경우가 있다.
이는 트래픽 분산을 위함과 서버 과부하 문제가 있을 수 있어서 여러 IP주소를 갖기 때문이다.
IPv4
- IPv4는 각 덩어리마다 0부터 255(즉, 2의 8승인 256개)까지 나타낼 수 있다.
- 따라서 2^(32)인 약 43억 개의 IP 주소를 표현할 수 있다.
- 그중에서 몇 가지는 이미 용도가 정해져 있고, 특히 다음과 같은 IP 주소는 반드시 기억해야한다.
- localhost, 127.0.0.1 : 현재 사용 중인 로컬 PC를 지칭한다.
- 0.0.0.0, 255.255.255.255 : broadcast address, 로컬 네트워크에 접속된 모든 장치와 소통하는 주소이다. 서버에서 접근 가능 IP 주소를 broadcast address 로 지정하면, 모든 기기에서 서버에 접근할 수 있다.
255.255.255.255와 같은 broadcast address는 단어 그대로 방송처럼 연결된 모든 장치에 데이터를 전송할 수 있는 주소를 뜻한다. 따라서 일일이 메시지를 보낼 필요없이 한번의 메세지로 연결된 장치에 정보를 전송할 수 있다. 네트워크 관리자나 시스템 개발자 등의 전문가들이 사용하는 개념이라 일반 개발자가 사용할 일은 없다고 한다.
특정 IP 주소의 MAC 주소를 찾는다던지, IP 할당 서버에 대한 정보를 전송하는 것처럼 연결된 모든 장치들에 메시지를 보내야하는 경우 쓰이고 있다.
IPv6의 등장
- 인터넷 보급률이 낮았던 초기에는 이 버전(IPv4, IP version 4)으로 네트워크에 연결된 PC에 주소를 할당하는 일이 가능했다.
- 그러나 개인 PC의 보급으로 전 세계의 누구나 PC를 이용해 인터넷에 접속하고, 각종 서비스를 위해 서버를 생산하면서 IPv4로 할당할 수 있는 PC가 한계를 넘어서게 되었다.
- 이를 위해 세상에 나오게 된 것이 IPv6(IP version 6) 이다.
- IPv6는 표기법을 달리 책정하여 2^(128)개의 IP 주소를 표현할 수 있다.
PORT
터미널에서 리액트를 실행하면 나타나는 화면에는, 로컬 PC의 IP 주소인 127.0.0.1 뒤에 :3000과 같은 숫자가 표현된다.
- 이 숫자는 IP 주소가 가리키는 PC에 접속할 수 있는 통로(채널)를 의미한다.
- 리액트를 실행했을 때에는 로컬 PC의 IP 주소로 접근하여, 3000번의 통로를 통해 실행 중인 리액트를 확인할 수 있다.
- 이미 사용 중인 포트는 중복해서 사용할 수 없다. 만약 다른 프로그램에서 3000번 포트를 사용 중이라면, 다음과 같이 다른 포트 번호(3001)로 리액트가 실행된다.
- 포트 번호는 0~ 65535 까지 사용할 수 있다.
- 그중에서 0 ~ 1024번(2의 10승) 까지의 포트 번호는 주요 통신을 위한 규약에 따라 이미 정해져 있다. 반드시 알아야 할 잘 알려진 포트 번호는 다음과 같다.
- 22 : SSH
- 80 : HTTP
- 443: HTTPS
- 더 많은 포트 번호 확인하기
- 이미 정해진 포트 번호라도, 필요에 따라 자유롭게 사용할 수 있다.
- HTTP(:80), HTTPS(:443)과 같이 잘 알려진 포트의 경우, https://codestates.com:443이 아닌 https://codestates.com처럼 포트 번호를 URI에 생략할 수 있지만, 그 외의 잘 알려지지 않은 포트(3000과 같은 임시 포트)는 반드시 포트 번호를 포함해야 한다.
[정리]
- IP address(Internet Protocol address, IP 주소) : 네트워크에 연결된 특정 PC의 주소를 나타내는 체계
- PORT(포트) : 네트워크 상에서 특정 PC를 나타내는 IP 주소와 그 주소에 진입할 수 있는 정해진 통로
도메인과 DNS
Domain name
- 웹 브라우저를 통해 특정 사이트에 진입을 할 때, IP 주소를 대신하여 사용하는 주소가 있다.
- 만약 IP 주소가 지번 또는 도로명 주소라면, 도메인 이름은 해당 주소에 위치한 상호로 볼 수 있다.
- 도메인 이름을 이용하면, 한눈에 파악하기 힘든 IP 주소를 보다 간단하게 나타낼 수 있다.
다음과 같이, 터미널에서 도메인 이름을 통해 IP 주소를 확인하는 명령어 nslookup으로 codestates.com 의 IP 주소를 확인할 수 있다.
- 위 그림에서 IP 주소는 3.34.153.168 이고, 도메인 이름은 codestates.com 이다.
- 주소창에 IP 주소(3.34.153.168)를 입력하면, codestates.com으로 이동할 수 있다.
DNS
- 네트워크 상에 존재하는 모든 PC는 IP 주소가 있다. 그러나 모든 IP 주소가 도메인 이름을 가지는 것은 아니다.
- 로컬 PC를 나타내는 127.0.0.1 은 localhost 로 사용할 수 있지만, 그 외의 모든 도메인 이름은 일정 기간 동안 대여하여 사용한다.
- 브라우저의 검색창에 도메인 이름을 입력하여 해당 사이트로 이동하기 위해서는 해당 도메인 이름과 매칭된 IP 주소를 확인하는 작업이 반드시 필요하다.
- 네트워크에는 이것을 위한 서버가 별도로 있는데 이를 DNS(Domain Name System)이라고 한다.
- DNS는 호스트의 도메인 이름을 IP 주소로 변환하거나 반대의 경우를 수행할 수 있도록 개발된 데이터베이스 시스템이다.
- 만약 브라우저의 검색창에 naver.com을 입력한다면, 이 요청은 DNS에서 IP 주소(ex.125.209.222.142)를 찾는다. 그리고 이 IP 주소에 해당하는 웹 서버로 요청을 전달하여 클라이언트와 서버가 통신할 수 있도록 한다.
- 만약 브라우저의 검색창에 naver.com을 입력한다면, 이 요청은 DNS에서 IP 주소(ex.125.209.222.142)를 찾는다. 그리고 이 IP 주소에 해당하는 웹 서버로 요청을 전달하여 클라이언트와 서버가 통신할 수 있도록 한다.
크롬 브라우저 에러 읽기
Chrome 브라우저를 사용하다 보면 누구나 한 번쯤 에러 메시지를 만날 수 있다.
- 이 에러 메시지는 웹페이지를 제공하는 서버와 Chrome 브라우저가 소통하는 단계, 또는 기기와 네트워크의 연결, Chrome 브라우저가 해석할 수 없는 데이터를 전송받은 경우 발생한다.
- 아래에서 설명하는 에러 메시지는 Chrome 브라우저를 사용하면 만날 수 있는 잘 알려진 에러 메시지이다.
- Chrome 브라우저를 제공하는 구글은 이런 에러 메시지를 어떻게 핸들링해야 하는지 잘 설명해두었다. Chrome 브라우저에서 에러 메시지를 만났을 때 어떤 에러인지 알아야 해결할 수 있을 것이다.
Aw, Snap! (앗, 이런!)
웹페이지 대신 '앗, 이런!' 에러 페이지 또는 다른 에러 메시지가 표시된다면, Chrome 브라우저가 웹 페이지를 로드하는 데에 문제가 발생한 경우이다.
- 이 경우 페이지가 느리게 로드되거나, 열리지 않을 수도 있다.
- 다음 에러 메시지가 나타난다면, 페이지를 여는 중에 문제가 발생했다는 뜻이다.
- 전체 에러 메시지 목록은 크롬 브라우저의 검색창에 chrome://network-errors/를 입력하여 확인할 수 있다.
- 에러 메시지를 만나면, 다음과 같은 문제가 발생할 수 있다.
- 웹페이지에 연결할 수 없다.
- 웹페이지가 열리지 않는다.
- HTTPS가 적용된 웹페이지가 열리지 않는다.
- 사진이 로드되지 않는다.
- 새 탭이 로드되지 않는다.
Error | MessageDescription |
"Aw, Snap!" ("앗, 이런!") | Chrome 브라우저에서 페이지를 로드하는 데 문제가 발생 |
ERR_NAME_NOT_RESOLVED | 호스트 이름(웹 주소)이 존재하지 않음 |
ERR_INTERNET_DISCONNECTED | 사용 중인 기기가 인터넷에 연결되지 않았음 |
ERR_CONNECTION_TIMED_OUT ERR_TIMED_OUT |
페이지에 연결하는 데 시간이 너무 오래 걸림 인터넷 연결이 너무 느리거나, 웹페이지에 접속한 사용자가 많아서 발생할 수 있음 |
ERR_CONNECTION_RESET | 웹페이지 연결을 방해하는 요소가 어딘가에 발생 |
ERR_NETWORK_CHANGED | 웹페이지를 로드하는 중에 기기의 네트워크 연결이 해제되었거나, 새로운 네트워크에 연결됨 |
ERR_CONNECTION_REFUSED | 웹페이지에서 Chrome 브라우저의 연결을 허용하지 않았음 |
ERR_CACHE_MISS | 웹페이지로부터 이전에 입력한 정보를 다시 한번 제출하도록 요청받았음 |
ERR_EMPTY_RESPONSE | 웹페이지에서 데이터를 전혀 전송하지 않았으며, 데이터를 전송할 서버가 다운되었을 수 있음 |
ERR_SSL_PROTOCOL_ERROR | 페이지에서 전송된 데이터를 Chrome 브라우저가 해석하지 못했음 |
ERR_BAD_SSL_CLIENT_AUTH_CERT | 클라이언트 인증서(은행 또는 회사 내부 웹사이트 등)에 오류가 발생하여 웹페이지에 로그인할 수 없음 |
728x90
'FE > Network' 카테고리의 다른 글
[Network] Open API란? (0) | 2023.03.30 |
---|---|
[Network] REST API (0) | 2023.03.29 |
[Network] AJAX, SSR, CSR (0) | 2023.03.28 |
[Network] HTTP (0) | 2023.03.28 |
[Network] 웹 애플리케이션 아키텍처 (클라이언트, 서버, HTTP, API) (0) | 2023.03.28 |