도메인 네임과 IP 주소

맛없는콩두유·2023년 2월 14일
0
post-thumbnail

1. 도메인 네임(Domain Name)

이전 영상에서는

http://example.com/business/mart/item?category=14&id=2965

이 URL을 예시로 사용해서, URL의 구조에 대해 설명했는데요.

여기서 example.com 이 부분이 호스트(host), 그러니까 특정 서버를 나타내는 부분이라고 했습니다.

이 '호스트' 부분에는 example.com과 같은 문자열들이 들어가도 되고, 이전 영상에서 한 것처럼

127.0.0.1 같은 IP 주소를 넣어도 됩니다. 127.0.0.1은 내 컴퓨터를 나타내기 때문에, 다른 서버에 접속하려면 그 서버의 IP 주소를 넣어주면 됩니다. 예를 들어, 브라우저에서 우리가 흔히 접속하는 https://www.google.com 대신 https://172.217.175.100 라고 쓰고 접속해보세요.(보안 경고 창이 뜨면 '고급' 버튼을 누르고 접속을 강제 시도해주세요)

그래도 여전히 구글 메인 페이지에 잘 접속할 수 있을 겁니다. 왜냐하면 www.google.com이라고 치고 접속하면 결국 172.217.175.100라는 IP 주소를 가진 서버에 접속하는 것이기 때문입니다.(상황에 따라 IP 주소는 달라집니다)

그런데 여기서 한 가지 궁금한 점이 생기지 않나요? 어떻게 example.com 같은 문자열 주소만으로 하나의 서버를 특정할 수 있는 걸까요? 사실 example.com 같은 것을 도메인 네임(Domain Name)이라고 하는데요. 우리가 흔히 보는 www.google.com, www.daum.net, www.naver.com 등이 모두 도메인 네임입니다. 도메인(Domain)이란 우리 말로 '영역, 범위' 이런 뜻인데요. 도메인 네임은 Domain Name System이라고 하는 체계를 바탕으로 생성되는 문자열 이름으로, 인터넷 세계에 존재하는 수많은 영역을 추상적으로 나타내기 위해 사용되는 개념입니다.

하나의 도메인 네임은 여러 개의 도메인으로 구성됩니다. 그리고 더 상위의 도메인일수록 도메인 네임 중에서 오른쪽에 있습니다. 코드잇 사이트의 주소인 codeit.kr 도메인 네임을 예로 들어볼게요.

도메인에는 최상단에 루트 도메인(root domain)이라는 것이 있습니다. 이 루트 도메인은 그냥 인터넷 전체를 나타내는 단위라고 생각하면 되는데요. 루트 도메인은 사실 그냥 '빈 문자열'로 나타내고 우리가 도메인 네임을 입력할 때도 표시하지 않는 경우가 많습니다. 만약 도메인 네임에서 루트 도메인까지 나타내려면 도메인 네임의 오른쪽 끝에 점을 하나 더 찍어주면 됩니다. 그러니까 codeit.kr도 codeit.kr.로 바꾸어 쓰면 루트 도메인까지 나타낸 이론적으로 더욱 완벽한 도메인 네임이 됩니다. 실제로 브라우저에서 어떤 도메인 네임이든 이렇게 맨 끝에 점을 하나 더 쓰고 엔터를 쳐도 잘 접속이 되는데요. 여러분이 자주 쓰는 도메인 네임으로 한번 직접 실험해보세요.

루트 도메인 바로 하위에는 Top-Level Domain(TLD)이라는 것이 있습니다. 도메인 네임 끝에서 일반적으로 볼 수 있는 .kr, .jp, .net, .gov 등이 Top-level Domain에 해당하는데요. 이런 Top-Level Domain은 사이트가 속한 국가 또는 사이트가 제공하는 서비스의 카테고리를 나타냅니다.

그리고 각각의 Top-level Domain 하위에는 Second-Level Domain이 있는데요. codeit.kr에서는 codeit이 Second-Level Domain입니다. 인터넷에서는 무수히 많은 Second-level Domain들이 있겠죠? codeit, naver, daum, google 등 서비스를 대표하는 이름이 바로 Second-Level Domain이 되는 것입니다.

그리고 여기서 한 단계씩 더 내려가서 www.codeit.kr의 www(Third-Level 도메인), test.www.codeit.kr의 test(Fourth-Level 도메인)까지 쭉 도메인이 생겨날 수 있는데요. 하지만 실제 서비스에서는 보통 Third-Level 도메인 정도까지만 사용하는 경우가 많습니다.

자, 우리가 매번 검색창에 입력했던 것이 도메인 네임이라는 사실과 도메인 네임을 쓰는 것이 사실은 계층적인 구조를 이루고 있는 각 도메인의 이름을 오른쪽부터(상위 도메인부터), 왼쪽으로(점점 하위 도메인으로), 점(dot)으로 구분하면서 써나가는 작업이었다는 사실을 이제 아시겠죠? 도메인 네임은 사람이 IP 주소보다는 의미 있는 문자열을 외우기가 더 쉽기 때문에 사용됩니다. 아까 살펴본 예처럼 구글 메인 페이지를 보여주는 서버의 주소로, IP 주소인 172.217.25.100은 기억하기 어렵지만, 도메인 네임인 www.google.com은 기억하기 쉽잖아요?

2. Domain Name Resolution의 원리

도메인 네임이 뭔지 배웠으니, 이제 codeit.kr 같은 도메인 네임만으로 어떻게 특정 서버와 통신할 수 있는지 알아보겠습니다. 우리가 브라우저에서 도메인 네임만으로도 특정 컴퓨터와 통신할 수 있는 것은 본격적인 통신을 시작하기 전에 도메인 네임을 IP 주소로 변환해주는 절차가 존재하기 때문입니다.

우리가 브라우저에 codeit.kr 이라고 쓰고 엔터를 치면, 가장 먼저 어떤 일이 발생하는지, 이미지와 함께 순서대로 설명해드리겠습니다.

1단계 : 일단 내 컴퓨터는 기본적으로 설정된 네임 서버(Name Server)에 codeit.kr 의 IP 주소를 알려달라는 요청을 보냅니다. 네임 서버라는 건 도메인 네임을 IP 주소로 변환하는 과정에 참여하는 서버들입니다. 내 컴퓨터에서 맨 처음 어떤 네임 서버에 요청할 것인지는 미리 설정되어 있고, 기존의 설정에서 다른 네임 서버로 바꾸는 것도 가능합니다. 내 컴퓨터가 사용하는 네임 서버에 관한 설정은 OS마다 다른데요. 이 부분은 여러분이 별도로 검색해보기를 추천합니다.

2, 3단계 : 제 컴퓨터의 요청을 받은 네임 서버는 이제 루트 네임 서버(Root Name Server)에 이런 요청을 보냅니다. '.kr'로 끝나는 도메인 네임들을 관리하는 네임 서버의 주소를 알려달라는 요청을요. 그럼 루트 네임 서버는 '.kr' 네임 서버의 IP 주소를 알려줍니다.

4, 5단계 : 그럼 네임 서버는 '.kr' 네임 서버에게 'codeit.kr'의 IP 주소를 알려줄 수 있는, 'codeit.kr' 네임 서버의 IP 주소를 알려달라고 요청합니다. 그럼 '.kr' 네임 서버는 'codeit.kr' 네임 서버의 IP 주소를 알려주죠.

6, 7단계 : 그럼 네임 서버는 'codeit.kr' 네임 서버에게 'codeit.kr'의 IP 주소를 알려달라고 요청합니다. 마침내, 네임 서버는 'codeit.kr'의 실제 IP 주소를 응답으로 얻게 되죠.

8단계 : 네임 서버는 제 컴퓨터에게 codeit.kr의 IP 주소를 알려주고, 제 컴퓨터는 이 IP 주소를 갖고 코드잇 서버와 본격적인 통신을 시작합니다.

자, 어떻게 도메인 네임만을 가지고 특정 서버와 통신할 수 있는 건지 이제 아시겠죠? 방금 살펴본 이런 과정을 조금 어려운 말로, Domain Name Resolution 이라고 합니다. 참고로, 제가 codeit.kr에 접속할 때마다 매번 1부터 8까지의 단계가 항상 발생하는 것은 아닙니다. 왜냐하면 제가 이미 한번 codeit.kr의 IP 주소를 받은 후에는 제 컴퓨터의 OS가 그 IP 주소를 보통 별도로 저장해두고 계속 사용하기 때문입니다. 이뿐만 아니라 제 컴퓨터가 사용하는 가장 근처의 네임 서버 또한 자주 요청받는 도메인 네임에 대해서는 별도로 외부에 요청할 필요가 없도록 캐시(cache)로 관리하는 경우가 많습니다. 즉, 1~8 까지의 과정이 일어나는 경우는 일반적으로 처음 접속하는 도메인 주소인 경우에만 그렇습니다.

Domain Name Resolution은 웹 개발자의 단골 면접 질문 소재입니다. 혹시 관심이 있는 분은 더 깊은 내용을 인터넷에서 검색해보세요.

출처: 코드잇

profile
하루하루 기록하기!

0개의 댓글