Localhost

There is no place like 127.0.0.1

— 컴퓨터 공학도 및 네트워커들 사이에서 전 세계적으로 가장 유명한 귀가 장려 가훈 겸 티셔츠 굿즈 문구

내 컴퓨터 안에서는 천하제일의 성능과 응답 속도를 자랑하며 완벽하게 작동하지만, 남의 컴퓨터나 실서버에 올리는 순간 온갖 에러를 내뿜으며 침몰하는 유리 온실. 분명 로컬호스트에서는 아무런 에러 없이 잘 되었는데, 부장님 컴퓨터에서 안 되는 건 왜인지 도무지 신령님께 물어봐도 알 수가 없다.(...)

1. 개요

로컬호스트(Localhost)는 컴퓨터 네트워크에서 '자기 자신(내 컴퓨터)'을 가리키도록 사전에 정의된 표준 가상 호스트 명칭(Loopback Address)이다. 우체부에게 내 집 주소 대신 '제 손바닥 위에 편지를 올려주세요'라고 편지 봉투에 적는 것과 비슷한 논리로 작동한다. 인터넷 망에 컴퓨터가 물리적으로 연결되어 있지 않아도, 가상의 네트워크 카드인 루프백 인터페이스를 통해 패킷을 외부로 보내지 않고 내 컴퓨터 커널 내부에서 완벽하게 회귀시켜 준다. 전 세계의 거의 모든 컴퓨터 운영체제는 이 명칭을 고정 IPv4 주소인 127.0.0.1 및 IPv6 주소인 ::1에 매핑해 두고 있다.

2. 루프백 주소와 컴퓨터 내부의 무한 뫼비우스

로컬호스트의 정체는 사실 운영체제 커널이 제공하는 완벽한 가상화 기술인 루프백(Loopback) 네트워크 인터페이스다. 일반적인 인터넷 통신은 웹 브라우저가 패킷을 생성해 실제 랜선과 게이트웨이, 라우터를 거쳐 먼 타국의 웹 서버로 보내지만, 127.0.0.1로 통신 요청을 보내는 순간 네트워크 드라이버는 이 패킷을 물리 랜카드로 전송하지 않고 커널 내부에서 즉시 가로채어 자기 컴퓨터에서 구동 중인 수신 서버로 바로 토스해 버린다. 덕분에 네트워크 대역폭 한계나 해외 회선 지연율(Ping)의 제약을 전혀 받지 않고, 무제한에 가까운 속도로 컴퓨터 내부의 클라이언트와 서버가 기가 막힌 티키타카를 할 수 있다. 이 사기적인 가상 드라이버 덕분에 개발자는 내 책상 위에서 수백 명의 동시 접속자가 몰려도 꺼지지 않는 천하무적의 서버를 완성하는 행복한 환각에 빠지게 된다.1

3. hosts 파일의 조작과 주니어의 눈물겨운 모바일 디버깅

모든 컴퓨터에는 DNS(Domain Name System) 서버에 물어보기 전에 로컬에서 도메인을 강제로 주입할 수 있는 hosts 파일이 존재한다. 이 파일의 최하단에 127.0.0.1 myfancyurl.com 이라고 적어두면, 브라우저에 가짜 주소를 쳤을 때 내 컴퓨터 서버로 강제 워프시킬 수 있어 로컬 테스트에 유용하게 쓰인다. 진짜 골치 아픈 참사는 스마트폰 실기기 디버깅을 할 때 터진다. 스마트폰 브라우저에 localhost:3000을 백날 입력해 봤자, 스마트폰 입장에서는 자기 자신을 가리키는 것이므로 내 컴퓨터에서 켜둔 멋진 웹 페이지를 절대 띄울 수 없다. 이때는 같은 공유기 와이파이에 물린 뒤, 컴퓨터의 내부 IP 주소(예: 192.168.0.5)를 찾아서 폰으로 직접 쳐야 겨우 접속된다는 간단한 네트워크 규칙을 몰라 매번 수많은 주니어들이 폰을 쥐고 벽을 향해 오열하곤 한다.(...)

4. 관련 밈 및 드립

4.1. There is no place like localhost

오즈의 마법사에 나오는 명대사 '우리 집만 한 곳이 없다(There is no place like home)'를 네트워크 주소에 빗대어 바꾼 짤방이다. 전 세계 컴퓨터 공학도들의 가훈으로 쓰이며, 고되고 가혹한 현업 실서버의 위협(디도스 공격, 트래픽 폭주, AWS 요금 폭탄 등)으로부터 벗어나, 오직 나만을 위해 완벽한 안락함과 무한한 권한을 제공하는 로컬호스트 환경에 안착했을 때 느끼는 평화로운 안도감을 시적으로 잘 대변해 준다.(...)

4.2. 내 컴퓨터에서는 되는데요

개발자가 버그 리포트를 받았을 때 반사적으로 튀어나오는 무책임하고 유서 깊은 면피용 대사. 로컬호스트 환경은 개발자의 운영체제 설정, 로컬 DB 환경, 미리 세팅해 둔 환경 변수가 완벽하게 갖추어져 오동작하지 않는 일종의 통제된 실험실(Clean Room)이다. 이를 인프라 세팅이 전혀 다른 배포 서버에 올리면 100% 확률로 에러를 뿜으며 침몰하는데, 초보 개발자일수록 '내 localhost에선 정상인데 대체 왜 실서버에서 에러를 뱉는가'라며 울먹이며 서버를 원망하는 전형적인 성장통을 거치게 된다.

5. 여담

  • IETF의 영구 보존 규격: localhost라는 영문 단어 도메인은 RFC 2606 표준 규격에 의해 전 세계 전산망에서 영구적으로 특별 보호를 받는 최상위 도메인(TLD)이다. 즉, 그 누구도 인터넷상에 진짜 localhost라는 이름의 유료 도메인을 등록하여 판매할 수 없도록 원천 차단되어 있다.
  • 127.0.0.1의 유래: 왜 하필 127로 시작하는가에 대해서는 유구한 전산 역사적 비하인드가 있다. 1981년 IP 주소 클래스(Class) 체계가 제정될 당시, 최상위 A클래스의 가장 마지막 주소 블록인 127번대 전체(127.0.0.0 ~ 127.255.255.255)가 루프백 테스트용으로 그냥 뭉텅이로 지정되었다. 덕분에 무려 1600만 개가 넘는 IP 주소가 오직 자기 자신을 가리키는 사치스러운 공간으로 영원히 낭비(?)되게 되었다.
  • ::1 이라는 심플함: IPv4 체계의 주소인 127.0.0.1이 너무 복잡하다는 불평을 반영이라도 하듯, 차세대 주소 체계인 IPv6에서는 로컬호스트 주소가 고작 콜론 두 개와 숫자 1이 결합된 ::1이라는 엄청나게 심플한 주소로 완전히 축약 지정되었다.

6. 관련 문서

각주

  1. 실제로 루프백 패킷 통신은 초당 기가바이트(GB) 단위의 트래픽을 거뜬히 소화해내기 때문에, 로컬에서 로드밸런싱이나 네트워크 대용량 처리 테스트를 완벽히 수행했다고 자랑하다가 실제 실서버 랜카드의 물리적 한계에 부딪혀 통신이 절단되는 낭패를 겪는 경우가 수두룩하다.