Monday, October 6, 2014

인터넷의 주소록 DNS 서비스 ─ 기반기술에 대해서...

Leave a Comment
의 일부가 되어 버린 인터넷에서 가장 중요한 것이 무엇인가? 어떤 사람들은 당장 자신이 자주 사용하는 서비스를 생각할 수 있고 누군가는 메신저 서비스 등 자신이 친숙한 것을 먼저 떠올리게 될 것이다. 그러나 전기가 이 세상에서 사라진다고 상상하면 상황은 달라진다. 인터넷이 삶의 일부일 수 있는 이유는 가장 먼저 전기를 사용할 수 있다는 기본적 조건을 충족시키기 때문이다. 그리고 작은 소형 스마트폰부터 시작해서 대형 컴퓨터까지 모든 것들은 인터넷에 서비스를 하고 사용자들이 사용할 수 있도록 다양한 표준을 따라서 이에 맞춰 활용하기 때문에 가능하다는 사실은 조금만 생각하면 알게 된다. 그렇다면 전기라는 가장 기본적인 조건을 충족시킨 다음은 중요한 것은 무엇이 있을까?

미국드라마 Revolution 은 전세계의 전기가 사라지면서 생기는 이야기들을 전한다. 너무도 당연한 요소가 사라져야 그 소중함을 느끼게 된다.

누구나 인터넷 웹브라우저에서 검색을 위해서 'google.com' 이라고 주소를 입력하면 구글의 홈페이지가 나올 것을 기대한다. 그런데 아주 간단한 궁금증이 생긴다. 내가 google.com 이라고 입력했을 때 구글의 서비스를 사용할 수 있도록 구글의 홈페이지를 제공하는 서버가 전세계 어디에 있는지 알 수 있는가? 즉, 내가 실제 접속해서 필요한 페이지를 다운 받아서 내 컴퓨터에 보여주기 위해서 어떤 서버 컴퓨터에 접속해야 하는지 어떻게 알 수 있는지에 대해서 물어본다.

DNS 서비스에 대해서...

DNS Domain Name Service 의 약자이다. 도메인이란 우리가 인터넷 주소로 사용하는 모든 이름을 이야기한다. 블로그에 들어오기 위해서 검색엔진에서 원하는 검색어를 통해 검색된 결과에서 클릭해서 들어올 수 있지만 주소를 직접 알기 때문에 june.meson.kr 이란 주소를 직접 입력하고 들어올 수 있다. 검색 엔진에서 검색된 결과의 경우에도 해당 페이지가 가지는 주소는 도메인을 가진다. 도메인이란 인터넷 상의 주소이다. 도메인은 인간이 쉽게 인지할 수 있는 의미를 가지는 주소를 사용하기 위해 필요하다. 일반적으로 지인에게 편지를 보낼 때 주소 + 수취인 의 정보를 적어야 상대방에게 전달될 수 있는 것과 소포를 보낼 때 일반 등기 우편 및 택배와 같이 보내는 방법 (protocol) 이 다른 것처럼 인터넷에도 이와 같이 정보를 주고 받는 방법 (protocol) 과 주소 (domain) 그리고 대상 (object) 가 주어져야 인터넷의 정보를 획득할 수 있게 되는 것이다.

http://blog.meson.kr

이란 주소를 살펴보면 http:// 이란 프로토콜 (주고 받는 약속) 을 표현하고 뒤의 blog.meson.kr 는 주소를 뜻하는 도메인을 뜻한다. 다른 예로...

mailto:[email protected]

과 같이 되어 있으면  mailto: 라는 전자메일 (email) 을 사용하고 그 해당 수취인은 meson.kr 이란 메일 서버에 있는 아이디 myid 를 가진 사람에게 전달하란 약속체계이다.


아주 간단하다. 그런데 여전히 의문은 인간은 이처럼 아주 간단하게 확인하고 인지할 수 있지만 이를 처리하는 컴퓨터도 이처럼 간단하게 처리할 수 있는가란 질문에는 그리 쉽게 대답할 수 없다. 우선 http (hypertext transfer protocol) 이란 웹의 표준을 이용해서 페이지를 보여준다고 정하고 이를 해석할 수 있는 웹브라우저가 있어도 blog.meson.kr 이란 주소를 가진 서버 (컴퓨터) 가 어디에 있는지 어떻게 알 수 있는지 컴퓨터 시스템은 그리 쉽게 알아내지 못한다. 왜냐하면 컴퓨터는 기본적으로 멍청하기 때문이다. 따라서 컴퓨터가 도메인의 주소와 실제로 접속해야 하는 서버의 실체적인 (physical) 대상에 접속하기 위해서는 이를 해석해주는 또하나의 서비스가 필요하다. 이를 DNS 라고 부른다. 간단하게 DNS 란 인터넷의 익숙한 주소 (도메인) 이 제대로 작동하게 하기 위한 전화번호부 (yellow pages) 라 부를 수 있다. 만약 DNS 서버가 제대로 작동하지 않는다면 아무리 도메인이 정확해도 제대로 된 목적지를 알 수 없기 때문에 목적지 페이지가 열리지 않거나 메일이 전달되지 않을 것이다.

DNS 서비스의 해석 방법에 대해서...

컴퓨터는 기본적으로 멍청하다. 다만 속도가 빠르기 때문에 빠르게 처리하는 것처럼 보이는 것 뿐이다. 인간의 경우 주소를 듣고 '서울시 서초구 잠원동 ...' 이라고 말하면 서울시 서초구... 까지 듣지 않고 잠원동 이라는 정보 하나만으로 상당히 세부적인 지역의 위치를 파악할 수 있다. 이는 인간이 좀 똑똑하기 때문이다. 그러나 컴퓨터는 이처럼 직접적인 인지를 통해서 바로 파악하지 못한다. 메일주소를 통해서 생각해보면...

mailto:[email protected]

라는 주소를 생각 해보면 우선 컴퓨터는 사용자가 입력한 주소 중 가장 뒷편의 kr 이란 주소를 찾게 된다. 그럼 kr 을 관리하는 DNS 서비스가 존재할 것이다. 해당 DNS 서비스에 접속한다. 즉, 이 간단한 주소체계를 해석하기 위해서 그것도 가장 기본적인 .kr 이란 주소에서 .ac 이란 주소가 도대체 어디를 봐야 하는지 물어본다. .kr 을 담당하는 서버에게 물어본다. '.ac.kr' 이란 주소를 찾고 있는데 여기는 어디를 가야하나요?' 그럼 .kr 을 담당하는 서버는 또다른 전화번호부를 알려준다. 그럼 다시 찾아가서 .ac.kr 를 관리하는 서버에 들어가서 univ.ac.kr 란 주소를 가진 서버는 아이피가 165.125.267.xyz 이다 라고 알려준다. 이렇게 알아낸 최종 목적지 서버의 IP 주소를 알아낸다. 여기에서 IP 주소란 컴퓨터가 인터넷을 사용하기 위해서 부여받는 인터넷 상의 주소이다. 인간에게는 univ.ac.kr 이란 주소이지만 실제로 컴퓨터는 도메인이 아니라 IP 주소를 통해서 통신을 이루게 되는 것이다. 그럼 이 IP 주소에 메일을 보내게 된다. 그리고 그 메일을 받은 univ.ac.kr 이란 서버는 그 중 해당 아이디가 myid 란 계정에게 전달하여 메일을 보낼 수 있게 된다.

인터넷 주소의 해석; 구매하는 도메인은 domain name. top-level domain 이 조합된 주소를 구매한다. 

이처럼 도메인 주소를 최종적으로 보내야 하는 목표 서버가 어디에 있는지 알려주는 서비스가 DNS 서비스이다. 아주 간단한 이야기를 너무 장황하게 설명한 것 같다. 결론적으로 DNS 란 우리가 접속하려는 서버의 실체적인 위치를 알려주는 서비스라고 생각하면 된다.

인 인터넷 서비스를 위해서...

예전에는 자신의 홈페이지를 가진다는 것이 참 어려운 일이었다. 우선 자신의 홈페이지를 올려 놓을 수 있는 서버를 구하는 것이 쉽지 않았다. 이제는 역사의 한 구석으로 사라지는 것 같은 생각마저 드는 개인 홈페이지 주소인 server.univ.ac.kr/~myid 와 같은 ~ 으로 개인 홈페이지 주소를 표시하는 유닉스 서버를 기억하는 사람들도 이제 점점 사라질 것이다. 거의 대부분 개인 계정이 사라진 도메인만으로 구성된 홈페이지 주소를 가지는 것도 어렵지 않다. 대부분의 블로그 서비스도 myid.blogservice.com 과 같은 주소를 제공하기 때문이다.

Search Engine Optimization (SEO) 친화적인 주소체계; 블로그 글의 주소체계에 대한 내용

앞으로 적어 내려갈 내용의 목표는 '최소의 비용으로 운영할 수 있는 개인 인터넷 서비스'이다. 개인 인터넷 서비스란 자신만의 도메인 주소를 가지고 블로그를 운영하거나, 간단한 홈페이지를 보여주거나, 자신만의 메일 주소를 가지는 것과 같은 활동을 인터넷에 대한 전문적 지식이 없어도 쉽게 할 수 있는 방법을 설명할 것이다.

[참고: 본 블로그 내용은 2011년 12월 03일에 작성된 - 개인 도메인을 사용하자 ─ 구글앱스 & DNSEver 서비스 에서 변경된 내용을 반영하고 글의 구성을 변경하여 추가 작성한 내용이다. ] 

[ 기본적인 용어 정리 ]

─ 도메인: 우리가 일상에서 웹브라우저에 입력하는 주소 중, 우리가 알기 쉽도록 지정된 모든 주소를 이야기한다.

─ IP주소: 실제로 우리가 도메인 주소를 웹주소에 입력을 해도 컴퓨터는 우리처럼 똑똑해서 도메인으로 인식하는 것이 아니라 IP주소라고 부르는 숫자로 구성된 주소로 인식하게 된다. 우리가 쉽게 주소창에 google.com 을 입력하면 컴퓨터는 이에 해당하는 IP주소 209.85.148.147 를 인식하고 이에 해당하는 서버(호스트 컴퓨터)에 접속하게 되는 것이다.

─ DNS 서버: 앞서 이야기한대로 우리가 쉽게 기억하고 있는 도메인 주소가 어떤 IP주소를 가지는가의 정보를 가지고 있는 서비스이다. 웹브라우저에서 우리가 google.com 이라고 입력하면 해당 google.com 이라는 도메인이 어떤 IP주소를 가지는지 DNS서버에서 가지고 와서 해당 IP주소의 버서에 접속하게 되는 것이다. 따라서 DNS 서버는 인터넷을 사용하는데 있어 공기와 같은 존재이다. 만약 DNS 서버가 작동을 안하면 우리는 모든 인터넷 주소를 도메인이 아닌 IP주소로 외우거나 입력해놔야할 것이다.

─ 웹호스팅: 자신의 홈페이지를 보여줄 수 있는 물리적인 서버 및 그 기반 시설, 예를 들어 www.yahoo.com 이라고 주소창에 주소를 넣으면 그 주소에 해당하는 물리적인 서버에 연결이 되어서 필요한 자원(텍스트, 이미지 등)을 가지고 와서 웹 브라우저에 보여준다. 이런 역할을 해주는 물리적 서버와 그에 따른 기반 서비스를 웹호스팅이라고 부른다. 

개인 도메인 서비스를 사용하기 위해서는 위의 개념은 가지는 것이 필요하다. 그리 어렵지 않은 내용이기 때문에 간단하게 홈페이지 = 웹호스팅 = 물리적인 서버, 도메인 = 인터넷 주소 =〔DNS서버〕= IP주소 이런 구조를 가진다고 생각하면 된다.

메인 구매 혹은 획득

가장 먼저 해야 하는 것은 자신이 원하는 도메인을 구매하는 것이다. 앞서 '최소의 비용' 이란 표현을 쓴 유일한 이유는 바로 도메인 구매에 비용이 발생하기 때문이다. 실질적으로 도메인 구매와 유지 (1년 단위) 를 위한 비용은 거의 들지 않는다고 볼 수 있다. 이유는 무료로 제공하는 서비스들이 적당히(?) 존재하기 때문이다. 도메인 구매는 도메인 구매 업체를 통해서 가능하다. 비용이 발생하는 것이고 시기에 따라서도 비용이 변동되기 때문에 특정 업체를 언급하는 것은 부적절할 것이다. 따라서 인터넷 검색을 통해서 가장 저렴한 구매 업체 + 업체의 안정성을 고려하여 선택하면 된다.

참고로 국내 업체뿐만 아니라 해외 업체의 경우 종종 도메인 하나에 1달러 (1$) 에 판매하기도 한다. 도메인 종류에는 다양하게 존재한다. 국가별 도메인으로 한국의 경우 .kr , 일본의 경우 .jp , 독일의 경우 .de 와 같이 국가를 나타내는 도메인 체계가 있고 잘 알려진 .com , .net , .org , .edu 와 같은 실질적으로 미국 주도의 도메인도 있고 때로는 국가 도메인이 엉뚱한 쓰임으로 인기있는 경우도 있다. 가장 대표적인 예가 .me 는 몬테네그로 국가 도메인인데 자신을 나타내는 me 의 의미로 거의 국가의 의미는 사라진 체 광범위하게 사용되고 bit.ly 와 같이 .ly 는 리비아의 국가 도메인인데 ...ly 와 같이 형용사형 접미사 ly 의 의미가 되어 인기가 있는 경우이다. 도메인 종류에 따라서 가격은 다양하다. 자신이 원하는 도메인 주소를 구매하면 해당 도메인에 대한 소유권 (ownership) 을 가지게 된다.

국가별 도메인 주소 (top-level) 지도

그런데 꼭 도메인은 구매해야 하는 것만은 아니다. 예를 들어 자신이 소속된 기관이나 학교에서 도메인을 획득할 수도 있다. 물론 해당 기관의 자격이 끝나면 이도 정리할 수 있지만 예를 들어 univ.ac.kr 이란 학교에서 자신만의 도메인으로 mydomain.univ.ac.kr 와 같이 univ.ac.kr 을 관리하는 학교 전산관리자에게 mydomain 이란 도메인을 부여받고 싶다고 신청하여 획득할 수 있다. 이 경우 자신의 도메인이 실제로 어떤 컴퓨터 (서버) 인지를 알려주어야 한다. 즉, 자신이 서버로 사용할 IP 주소를 알려주어야 mydomain.univ.ac.kr 에 접속할 때 해당 서버에 접속할 수 있게 될 것이다. 앞서 말한 것처럼 univ.ac.kr 까지 컴퓨터가 찾아와서 해당 학교의 DNS 서버에서 mydomain 이란 이름을 가진 컴퓨터가 어떤 IP 를 가지는지 최종적으로 찾아내는 과정이기 때문이다.

따라서 도메인을 획득할 수 있는 방법은 다양하게 존재한다. 중요한 것은 해당 도메인을 제대로 사용할 수 있는 적절한 권한과 소유권 (permission & ownership) 을 가지고 있어야 한다. 구매한 경우에는 도메인 구매 업체에 자신의 도메인 정보에 대한 내용을 관리할 수있게 된다. 많은 경우 도메인 구매대행 업체에서 이메일, DNS 혹은 간단한 경우 홈페이지를 올릴 수 있는 웹호스팅 서비스까지 제공해주는 경우가 있다. 만족할 수준이라면 도메인 구매 업체에서 제공하는 서비스를 이용하는 것도 하나의 방법이다.

DNS 서비스 사용하기

자신이 쓸 수 있는 도메인의 소유권을 획득하면 이후 이를 이용할 수 있는 DNS 서비스를 사용하는 것이다. 앞서 이야기한 것처럼 DNS 서비스는 인터넷의 주소록이다. 즉, 자신의 도메인에 맞는 적절한 주소를 알려주는 설정을 하는 것이다. 처음 DNS 서비스에 대한 내용을 쓸 때는 DNSEver 란 업체를 중심으로 해서 설명했다. 이유는 당시 무료로 제공했었고 일반 사용자들도 쉽게 접근할 수 있었기 때문이었다. 기업의 입장에서 무료로 제공해주는 것에 한계가 있을 수 있고 안정된 서비스를 위해 유료 서비스를 사용할 필요가 있다. 그러나 개인의 경우 규모가 큰 것이 아니기 때문에 작은 비용이지만 부담이 되는 것도 사실이다. 그렇기 때문에 DNS 의 기본적인 내용을 설명하는 것이 필요하다 본다. DNS 서비스를 무료 (거의 무료) 에 가까운 웹서비스 제공자들을 먼저 소개한다. [ DNS 서비스를 웹상에서 일반 사용자들도 관리할 수 있는 곳만 해당한다. ]

1) DNSEver [ 홈페이지 ]: 초기에는 파격적으로 웹으로 DNS 서비스를 쉽게 관리할 수 있는 서비스를 제공했다. 현재는 정책의 변화로 기본적으로 유료화 되었고 비영리 목적의 개인 및 비영리 단체를 위하여 홈페이지에 DNSEver 배너를 달면 DNS서비스를 무료로 제공하는 “서포터즈 프로그램”을 제공하고 있다. 무료는 아니지만 그래도 많은 사용자들이 쉽게 DNS 를 접할 수 있고 개인 도메인 시대를 열었던 국내 업체 중 가장 큰 역할을 했다고 평가해서 가장 먼저 소개하게 되었다.

2) DNSZi [ 홈페이지 ]: 무료이며 기본적인 DNS 서비스를 제공한다. 웹포워딩 서비스가 인상적이다.

3) FreeDNS ; Afraid DNS [ 홈페이지 ]: 기본적 서비스는 무료이지만 제한적이다. 독특하게 자신이 가진 도메인을 다른 사람들이 사용할 수 있도록 도메인 공유 (public subdomains) 기능을 제공한다.

4) CloudFlare [ 홈페이지 ]: 무료 서비스에서 사용할 수 있는 기능의 갯수 등 제한적 부분이 있지만 기본적 서비스는 무료로 제공된다. 무료 SSL 연결을 제공한다. 

네 곳 이외 아직 찾지 못한 서비스들도 있지만 개인적으로 사용한[하고 있는] 서비스만 소개했다. 그렇다면 이제 DNS 서비스에서 사용자가 무엇을 할 수 있는지 살펴본다.

DNS 서비스의 내용

a. DNS 서버 주소 등록

도메인 구매 업체는 일차적으로 구매한 도메인에 대한 정보를 제공한다. 내가 구매한 도메인이 meson.kr 이고 myblog.meson.kr 이란 주소를 가진 서버 IP 가 무엇인지 알기 위해서 .kr 을 찾아보고 그중 meson.kr 이란 주소를 찾고 myblog.meson.kr 이란 도메인이 어떤 IP 를 가지는지 확인하기 위해서 어떤 주소록을 찾아야 하는지 물어본다. 즉, meson.kr 이란 도메인에 연결된 DNS 서버가 무엇인지 물어본다. 그렇기 때문에 DNS 서비스에 가입하고 자신의 도메인이 획득한 도메인 (meson.kr) 을 등록하면 해당 DNS 서비스에서 자신의 DNS 서버 주소를 알려준다. 이 DNS 서버 주소를 도매인 구매 업체의 설정 화면에 입력해야 meson.kr 이 어떤 DNS 서버를 사용하는지 인터넷 상에서 알려주는 것이다.

인터넷 접속 순간 어떤 일들이 일어나는가?서버의 성능은 실제 인터넷 속도에 영향을 준다. 출처: 인텔

DNS 서버도 동일하게 도메인 이름 (Domain Name) 을 가지고 이에 해당하는 IP 주소를 가진다. 이를 알려주는대로 도매인 구매 업체 설정화면에 들어가서 설정해주면 된다.

b. A 레코드 (A Record)

A 레코드란 앞서 설명한 모든 DNS 의 기본적 내용이다. 즉, 해당 도메인 주소가 가지는 IP 가 무엇인지 알려주는 것이다. 예를 들어 blog.meson.kr 이란 주소는 110.45.229.135 이란 IP 를 가진다. 웹브라우저에서 blog.meson.kr 이란 주소를 입력하면 결국 DNS 는 해당 블로그를 들어가기 위해서는 110.45.229.135 이란 IP 주소를 가지는 서버에 접속하록 알려주는 것이다.


만약 ftp 서비스를 제공하고 싶다면 ftp 를 제공하는 서버를 구성하고 이 서버의 IP 주소를 알아서 해당 IP 주소를 ftp 와 함께 등록하면 간단하게 끝이다. 그 다음에 복잡하게 IP 주소를 입력해서 접속하지 않고 ftp.meson.kr 이란 입력하기 편한 주소로 접속하면 된다. 예를 들어 연구실 동료의 컴퓨터에 접속할 때도 응용할 수 있다. myfriend 란 도메인을 등록하고 상대 컴퓨터의 IP 를 입력하면 매번 상대방 아이피를 확인하지 않고 myfriend.meson.kr 이라 입력해서 들어갈 수 있다. 웹뿐만 아니라 이 원도우즈 공유 / 리눅스 삼바 공유에도 사용할 수 있다. 예를 들어 파일 탐색기에서 \\myfriend.meson.kr 이라 접속할 수 있다. 개인적으로는 printer.meson.kr 와 같이 네트워크 프린터 접속을 위해서도 등록하고 사용한다.

c. CNAME 별명 (CNAME Alias)

A 레코드의 경우 특정 IP 를 지정해야 하지만 모든 웹 서비스가 1:1 로 IP 주소가 지정되기 어렵다. 또한 다양한 주소가 접근하는 서비스가 동일한 경우라면 각 도메인마다 하나씩 IP 주소를 할당해주는 것도 비효율적이다. 이경우 해당 도메인 주소가 가지는 별명을 부여하여 해당 도메인이 어떤 주소로 접속하면 되는지 확인해주는 것이다. CNAME 이란 Canonical Name Record 의 약자이다. 예를 들어 웹서비스, FTP 서비스 등을 해주어서 www.mydomain.com 과 ftp.mydomain.com 의 주소를 가진다고 할 때 두개의 다른 도메인을 가지지만 실제로 접속하는 물리적인 서버는 동일하다고 할 때 두개의 A 레코드를 동일한 IP 주소로 부여할 수 있을 것이다. 그러나 관리적 차원에서 IP 를 변경하게 된다면 그때마다 두개의 IP 주소를 변경해주면 상당히 번거롭기 때문에 server.domain.com 이란 서버의 이름을 가진 서버에 별칭을 모두 주면 server.domain.com 의 IP 주소만 변경하면 www 와 ftp 도메인 주소 모두 별도의 DNS 변경을 해주지 않아도 그대로 서비스를 사용할 수 있게 된다.


d. MX 레코드 (MX Reocrd)

MX 란 Mail eXchange 레코드로 기본적으로 메일을 주고 받을 수 있도록 가능하게 해주는 서비스이다. 예를 들어 [email protected] 이란 이메일 주소로 메일을 주고 받을 수 있는 이유는 meson.kr 이란 도메인이 메일을 주고 받을 수 있는 실체적 서버가 누구인지 밝혀주고 있기 때문이다. 개인이 서버를 두고 서비스를 할 수 있지만 쉽게 구성하기 어렵고 (사실 그렇게까지 어렵지는 않지만...) 무엇보다 보안과 관리에 신경쓰이기 때문에 자신의 도메인을 가지고 메일 서비스를 사용할 수 있는 서비스를 이용하는 것이 가장 현명한 방법이 될 것이다.

Google Apps (구글앱스) 메일 설정을 위한 MX 레코드 값

대표적으로 제공하는 업체는 구글, 네이버, 다음, 마이크로소프트 등이 있다. 이 밖에도 앞서 말한 도메인 구매 업체에서도 메일 서비스를 제공하는 경우가 있다. 그러나 구글과 마이크로소프트는 초기의 무료 제공 정책을 변경하여 유료로 정책이 변경되었다. 구글은 Google Apps for Work 으로 유료 제공하고 교육기관의 경우 Google Apps for Education 으로 무료이지만 개인은 해당사항이 제한적이다. 마이크로소프트의 경우 Office 365 란 이름으로 유료 사용이 가능하다. 무료로 [ 네이버 웍스 ] , [ 다음 스마트 워크 ] 사용가능하다. 예를 들어 구글을 통해 서비스를 등록하면 해당 MX 정보를 DNS 정보에 입력하면 된다. 이후 메일을 사용하기 위한 설정, 사용법은 일반적 구글메일 (쥐메일) 사용법과 동일하다. 마찬가지로 네이버나 다음의 경우에도 자신의 도메인 주소로 메일을 주고 받을 수 있으면서 해당 서비스에서 제공하는 클라우드 등 부가적인 서비스도 일반 가입자와 동일하게 사용할 수 있게 된다. 한가지 다르다면 동일한 도메인을 사용하는 사용자들을 하나의 업무 그룹으로 취급해서 설정할 수 있다는 점을 추가할 수 있다.

e. TXT 레코드 (TXT Record)

일반적인 텍스트 내용을 기록한다. 예를 들어 아무리 컴퓨터만 알아들을 수 있도록 한다고 해도 인간이 이 서버가 어떤 것인지 알리고 싶을 때 서버의 성격, 이름, 가능한 자원 등이 무엇인지도 알릴 수 있고 실제 해당 도메인의 소유자인지 확인하기 위해서 특정 문장열 (string) 을 입력해서 해당 도메인의 소유권을 확인하는 방법으로도 사용된다. 또한 메일의 보안 관련 설정인 SPF ( Sender Policy Framework) 이나 DKIM ( DomainKeys Identified Mail ) 설정에도 사용된다. 거의 대부분 설정하라는 대로 설정해주면 별 문제 없는 레코드 항목이지만 상당히 유용하게 자주 사용되는 부분이다.

SPF 설정을 위해 사용된 TXT 레코드 값들

이밖에도 다양한 레코드 형태가 존재한다. 그러나 기본적으로 이 정도만 익숙해도 자신이 원하는 목적을 이룰 수 있을 정도로 충분한 내용이다.

DNS 는 왜 중요한가

DNS 가 인터넷에 필수적인 요소라는 것은 알겠지만 왜 DNS 가 중요한지 생각해볼 필요가 있다. DNS 서비스를 웹에서 무료 (에 가깝게) 제공한다는 것이 얼마나 고마운 일인지 DNS 서버를 구성해보거나 관리해본 경험이 있다면 알 수 있다. 인터넷이란 공간이 얼마나 공개된 공간인지 아주 개인적으로 만든 서버도 조금만 보안에 소홀히 하면 몇일 안되어서 스팸 메일을 보내는 서버로 바뀌거나 특정 서버를 공격하기 위한 릴레이 서버 (relay server) 로 약용되기 쉽다. 즉, 일반적 사용자이 사용과 악의적 공격자의 공격을 구별해서 이를 적절하게 걸러내지 않으면 특정 서버는 동시에 엄청난 접속을 만들어 내서 서버의 성능 이상의 요청을 지속적으로 해서 서비스를 중지하게 만드는 디도스 (DDoS ; Distributed Denial of Services) 공격을 만들어 낼 수 있다. 즉, 어떤 서버가 한번에 1억명 동시 접속자를 받을 수 있을 때 5억명 정도의 접속을 특정 서버에 들어가게 만들 수 있다.

DNS Hijacking: 사용자에게 악의적인 DNS 정보를 사용하도록 하여 해킹에 이용될 서버에 접속하도록 유도한다.

따라서 보안이 잘 되어 있는 서버는 이를 막기 위해서 특정 IP 가 고정되지 않고 변동되면서 잘 관리해주고 여러개의 물리적인 서버들이 자원을 골고루 사용하여 분산되도록 노력한다. 만약 IP 가 고정되어 특정 IP 에 공격하게 된다면 DNS 서버를 거치지 않고 바로 IP 로 공격할 수 있다. ( yourdomain.com 의 IP 주소가 예를 들어 182.22.32.45 이라면 사용자는 yourdomain.com 을 입력하지 않고 IP 주소를 직접 넣어도 접속이 된다. 사실 조금은 더 빠를 수 있다.) 따라서 IP 로 직접 공격하는 정도는 가볍게 막을 수 있지만 그렇기 때문에 DNS 서버가 수많은 요청을 처리해야 한다. 문제는 이때 적절하게 악의적인 공격임을 파악하게 된다면 이를 거절하여 접속하지 못하게 하여 차단하고 일반적 사용자들도 불편없이 접속할 수 있도록 만들어 준다. DNS 서버도 결국 서버이다. 즉, 물리적인 컴퓨터란 말이다. 이 말은 서버에 연결된 네트워크 환경 (접속 환경, 백본망 속도 등) 뿐만 아니라 처리 성능 등에 따라서 인터넷의 실질적 (practical) 속도가 정해질 수 있다는 것이다.

인터넷 상에서 특정 사이트에 들어갈 때 걸리는 소요 시간을 보여주는 [ 서비스 ] 이다. 예를 들어 본 블로그를 들어갈 때 어떤 이미지를 내려받고 어떤 자바스크립트를 실행하며 어떤 자료들을 내려 받아서 블로그 초기 화면을 보여주는데 얼마나 시간이 걸리는지 보여준다. 이 서비스를 통해서 자신이 원하는 홈페이지에서 가장 많이 시간이 걸리는 요소가 무엇인지 알려준다. 그런데 이미지 하나를 받는 것만 해도 DNS / Connect / Send / ... / Receive 와 같이 구성되어 있는 것을 볼 수 있다. 즉, 아주 간단해 보이는 이미지 내려 받는 것만 해도 해당 이미지의 주소에 따라서 DNS 에서 해당 서버를 찾고 이에 연결 요청하고 연결해서 이미지를 내려받는 시간이 걸리는 것이다. 다만 화려한 (?) 인터넷 속도에 그 소요시간이 정말 눈깜짝할 사이도 안될 정도로 빠르다는 것일 뿐이다.

웹의 한페이지를 구성하기 위해 필요한 이미지, 스크립트 등을 내려받는 동안 걸리는 시간을 표시해준다. 분석을 통해 어떤 요소가 속도를 느리게 하는지, DNS 반응속도는 얼마나 빠른지 확인할 수 있다. 

그런데 만약 DNS 서버의 조회 후 결과 (IP 주소) 를 알려주는데 처리하는 시간이 오래 걸리는 성능이 안좋은 DNS 서버라면 이 시간은 늘어나게 된다. 이에 대한 실험은 아주 간단하게 해볼 수 있다. DNS 서비스를 변경해서 확인해보는 것이다.  따라서 DNS 서버가 얼마나 빠르게 반응하냐에 따라서 웹페이지가 표시되는 시간도 빠르게 될 수 있다. 얼마나 차이가 있을까 싶지만 개인적으로 동일한 블로그 페이지가 9초 가까이 걸리던 시간이 DNS 서비스 하나만 변경하여 5초 미만으로 지속적으로 나오는 것을 확인하게 되었다. 당연하지만 정확한 결과를 위해서 브라우저에서 이미 저장된 캐시 (cache) 내용은 지워주고 확인하는 것이 필요할 것이다.

만의 홈페이지를 만들어 보기...

홈페이지에는 블로그부터 아주 간단한 페이지로만 구성된 다양한 공간이 존재한다. 중요한 것은 인터넷 상에 내 홈페이지를 제공해줄 수 있는 (serving) 서버가 존재하고 여기에 마치 내 하드 디스크 처럼 올리거나 원하는 페이지를 구성할 수 있도록 한다는 것이다.

a. 블로그 : 워낙 많은 블로그 서비스가 있기 때문에 별로도 설명하지 않아도 어렵지 않게 구성할 수 있다. 대부분 블로그 (워드프레스는 유료) 가 자신의 도메인 주소를 지정할 수 있도록 해준다. 블로그 서비스에서 자신의 도메인 주소를 지정하고 (e.g.: myblog.meson.kr) 을 입력하고 DNS 서비스에 들어가서 블로그 서비스가 알려준 설정 방법 (A 레코드 아니면 CNAME) 에 맞춰 설정해주면 된다.

티스토리 블로그 서비스에서 2차주소를 설정하고 DNS 서비스에서 A 레코드 값을 등록해준다.

b. 웹호스팅 : 웹호스팅이란 인터넷에 자신의 저장 공간을 가진다고 생각하면 된다. 호스팅 업체에서 필요한 스크립트를 지원해주거나 간단하게 설치형 게시판, 블로그 등도 만들어 주기도 하고 다양한 서비스를 제공해주는 경우가 많다. 아주 기본적 원리이지만 돈이 많다면 유료 호스팅은 조금 더 쾌적한 환경을 제공해준다. 그러나 개인의 경우 무료도 문제없다. 대부분 무료/유료의 제한은 저장공간, 대역폭, 광고 배너 등이 추가되는지 아닌지 정도이다. 대역폭이 턱없이 부족한 무료 서비스들도 있지만 개인이 사용하기 별 문제없는 호스팅 업체를 몇군데 소개하면...

  • 000webhost.com [ 홈페이지 ]: 1.5G 저장공간 / 100G 대역폭 (월) / PHP 지원 
  • freehostia.com [ 홈페이지 ]: 250M 저장공간 / 6G 대역폭 (월) / PHP & MySQL 지원 
  • serversFree.com [ 홈페이지 ]:  10G 저장공간 / 100G 대역폭 (월) / addon Domains 무제한 
  • hostinger.kr [ 홈페이지 ]: 2.0G 저장공간 / 100G 대역폭 (월) 

간단하게 페이지를 만들 때 사용했던 웹호스팅 서비스들이다. 물론 이 밖에도 수없이 많은 업체들이 있지만 모두 소개하는 것은 어렵고 우선 삽입되는 광고가 없는 서비스들을 중심으로 소개했다.

웹호스팅은 자신의 홈페이지 뿐만 아니라 다양한 서비스를 제공해준다. 예를 들어 메일서비스도 그 중 하나이다. 만약 해당 호스팅 업체의 메일서비스를 사용하고 싶다면 해당 서비스에서 알려주는 MX 레코드를 DNS 서비스에 입력 설정하면 된다.

c. 조금은 특이한 서비스 : 드랍박스 [ dropbox ] 는 많은 인기를 얻는 클라우드 서비스이다. 기본적으로 자신의 작업 컴퓨터에도 동기화가 되어서 자신이 작업한 파일을 드랍박스의 폴더에 넣으면 자동으로 클라우드에 올라가게 된다. 또한 웹상에서 공개적으로 (public) 공유할 수 있는 기능도 있기 때문에 이를 이용해서 아주 간단한 형태의 웹페이지를 만들 수 있는 서비스가 있다.

드랍박스 서비스와 연결되는 Pancake 서비스는 작업 컴퓨터에서 편집하면 드랍박스로 바로 동기화되고 바로 웹페이지에 반영이 된다. 

Pancake.io [ 홈페이지 ]: 가입하면 자신이 사용하는 드랍박스 계정을 인증하게 된다. 그럼 드랍박스에 Apps/Pancake.io 란 폴더가 만들어진다. 클라우드 뿐만 아니라 동기화 설정한 컴퓨터에도 만들어진다. 그럼 해당 프로젝트 폴더에 웹페이지 구성 파일을 넣으면 된다. 이후 설정 (settings) 에서 자신의 URL 을 입력하고 이를 DNS 서비스의 CNAME 으로 반영하면 자신이 설정한 주소로 아주 간단한 홈페이지를 만들 수 있다.

이와 비슷한 형태로 [ DropPages ][ Scriptogr.am ] 등 다양하게 있다.

d. 직접 서버를 운영하기: 직접 서버를 운영하는 것도 나쁘지 않다. 보안 및 관리에 자신이 있거나 시스템 관리자를 꿈꾸는 사람이라면 꼭 해볼 필요가 있을 것이다. 최근에 나온 리눅스 및 서버 계열은 대부분 보안에도 일반적인 내용에 대해서 잘 되어 있기 때문에 겁먹을 필요는 없을 것 같다. [ 오래된 컴퓨터 활용기 ] 을 통해서 구형 컴퓨터에 리눅스 서버 배포판을 설치하는 방법을 소개했으니 참조하면 좋을 것 같다. 다만 DNS 관련해서 한가지 사소한 문제점은 집이나 개인 인터넷의 경우 공유기가 고정된 IP 를 받지 못한다는 점이 있다. 이를 해결하기 위해 많은 DNS 서비스가 유동 IP (Dynamic IP) 란 기능을 제공하고 있다 이 부분은 바로 이어 소개한다.

DNS 서비스의 추가적 기능에 대해서...

DNS 서비스의 기본적인 기능 뿐만 아니라 부가적인 기능들이 존재한다. 많은 기능들이 서비스 업체에 따라서 다르지만 기본적으로 사용하면 편리한 두가지 기능은 1. 웹포워딩 기능과 2. 유동 IP (Dynamic IP) 이다.

1. 웹포워딩 기능 : 말 그대로 원하는 주소를 입력하면 원하는 주소로 이동시켜주는 것이다. 예를 들어 너무 길거나 클라우드 서비스의 공유 주소가 지나치게 복잡하거나 도저히 암기할 수 없을 때 이용하면 편리하다. 예를 들어 자신의 드랍박스 공개 공유 주소 (public link) 를 보면

https://www.dropbox.com/sh/r8ou6rbmd6x3kje/AADVUg-tqOnF8yhLUhhAjKGEa

과 같이 기억하기 불가능하다. 이 경우 해당 주소를 dropbox.meson.kr 이란 주소를 위의 주소로 지정을 하면 위의 주소를 입력할 필요없이 간단히 기억하기 편한 dropbox.meson.kr 으로 들어갈 수 있다.

DNS 서비스에 따라서 유료로 제공하거나 혹은 갯수에 제한을 두는 경우가 있다. 100개로 제한두지만 100개를 다 쓴다는 것은 특별한 상황이 아니라면 충분한 갯수이다. CloudFlare 의 경우 무료는 3개로 제한을 두는데 웹포워딩에서 와일드카드 (*) 를 지원한다. 개인적으로 부딪친 문제 중 하나는 Google Apps 설정에서 mail.mydomain.com 은 실제로 mail.google.com/a/mydomain.com 으로 이동된다. 구글 앱스에서 이를 위해서 대표 도메인 (가입할 때 입력한 최초 도메인) 의 경우에는 CNAME 으로 깔끔하게 처리해주지만 추가로 입력한 도메인이 2nddomain.net 이라면 mail.2nddomain.net 은 지원해주지 않는다. 이런 경우 웹포워딩으로 해결할 수 있다. mail.2dndomain.net 을 mail.google.com/a/2nddomain.net 으로 웹포워딩하면 되기 때문이다. 그런데 구글앱스의 경우 mail 뿐만 아니라 drive, sites, calendar 등이 존재한다. 이 모든 서비스들을 각각 포워딩해줄려면 이 경우 4개의 포워딩이 필요하다. 그러나 CloudFlare 는 3개만 지원한다. 이 경우 와일드카드를 이용해 해결할 수 있었다. 포워딩은 Page Rules 에서 설정하는데 여기에서 포워딩을 설정하고,

웹포워딩 규칙을 통해서 규칙성을 가지는 URL 에 대한 포워딩을 한번에 설정할 수 있다. - CloudFlare

*.2nddomain.net/  을  https://$1.google.com/a/2nddomain.net 으로 포워딩해주는 규칙을 만든다. 이 뜻은 * 에 해당하는 문자열을 그대로 $1 에 반영해서 포워딩하란 뜻이다. 결과적으로

mail.2nddomain.net → https://mail.google.com/a/2nddomain.net ,
calendar.2nddomain.net → https://calendar.google.com/a/2nddomain.net ,
drive.2nddomain.net → https://drive.google.com/a/2nddomain.net ,
sites.2nddomain.net → https://sites.google.com/a/2nddomain.net ,

으로 한꺼번에 웹포워딩을 설정할 수 있다. (CloudFlare 와 Google Apps 사용시 유용한 팁)

2. 유동 IP (Dynamic IP): 개인이 구축한 서버의 경우, 혹은 어떤 이유에서 IP 가 변경되는 서버의 경우 서버의 IP 가 변경되면 DNS 에서 알려준 IP 주소가 옛날 주소가 되어서 접근할 수 없게 된다. 이 경우 서버에서 DNS 서비스에 자신의 현재 IP 가 무엇이다 알려주어서 이를 업데이트 하여 IP 가 변경되어도 사용할 수 있도록 도와주는 서비스이다. 기본적으로 많은 서비스의 경우 어떻게 설정하는지 친절하게 설명을 해 놓았다.

DNSEver , DNSZi (도메인의 고급관리) 의 경우에는 사용 운영체제에 따라서 필요한 내용을 잘 정리해 주었다. CloudFlare 의 경우 조금 복잡할 수 있지만 제공되는클라이언트 API 를 통해서 기본 A 레코드를 업데이트하는 방식으로 해결할 수 있다. [ 참고: Dynamically update DNS with CloudFlare Client API ; in case link is broken 

간단한 요약하면 해당 DNS 의 고유 record id 를 찾아내서 이 정보와 API Key 와 자신의 IP 주소를 업데이트 하는 명령어를 만들고 이를 주기적으로 업데이트 해주는 것이다.

무리하며...

블로그를 새롭게 단장하면서 가장 느끼게 된 것은 너무도 기본적이기 때문에 그 중요함을 생각하지 못하는 기본적인 요소가 많다는 점이다. 그 중 가장 첫번째가 바로 DNS 서비스가 아닐까 싶다. 공기같이 당연한 서비스들이라 그 안에서 최적화를 생각할 필요가 없다는 고정관념에서 DNS 하나만으로도 서비스의 속도가 빨라질 수 있는 충분한 가능성이 존재한다는 것을 느끼게 된다.

DNS 서비스와 같이 기간 서비스를 제공하는 것은 이제 더이상 수익이 나지 않을 것이라는 어떤 소프트웨어 전문가의 글을 본적이 있었다. DNS 와 같이 너무도 오랜동안 서비스되어서 장단점 및 다양한 환경, 상황에서의 문제점들에 대한 오랜 정보들이 축적되어 더이상 발전될 가능성이 없다고 했을 때마다 뭔가 새로운 도약같은 변화가 일어나는 것이 기술의 도약이라는 생각이 든다. 개인적으로 CloudFlare 에 다니는 지인이 계신데 자신의 역할을 '인터넷의 낭비되는 자원을 절약하는 코디네이터' - Coordinator who lessen wasted resources throughout the internet' 이라 소개한 적이 있었다. 이미 존재하는 기술들을 적절하게 모을 수 있는 창의적 아이디어 몇개로 사용자들이 바로 느낄 수 있는 서비스의 변화를 만들어 낼 수 있다는 점을 주목할 필요가 있다.

CloudFlare 를 통해 향상된 수치를 분석 (Analytics) 화면에서 보여준다. 

CloudFlare 의 경우가 그런 예가 될 것 같다. DNS 반응 속도를 높이기 위해서 여러 위치에 놓인 서버를 두고 가장 빠르게 반응할 수 있는 방법을 제시한다. 또한 DNS 서버 자체가 요청한 웹페이지의 이미지 등 내려받아야 할 요소들을 미리 저장 (caching) 해서 목적지 서버에 요청하지 않고 바로 DNS 에서 처리해준다. 아주 사소해 보이지만 자바스크립트 (javascript) 와 같이 공백이나 탭을 줄여 파일 자체의 용량을 줄인 _min.js 방법을 자동으로 적용하고 있다.

항상 기본을 다루는 내용은 글이 길어지고 어느 범위까지 다루어야 할지 고민될 때가 많지만 앞으로 개인도메인을 이용한 개인 메일 주소 / 구글앱스 서비스 등과 같은 개인화 웹서비스 및 다양한 응용에 활용될 수 있는 부분이기에 우선 글을 올리게 되었다. 광범위하게 좀 더 많은 사람들이 DNS 의 개념을 쉽게 이해하고 활용하기를 바라며 글을 마무리한다.

0 comments:

Post a Comment