거의 매일 사용하시지만, 동작되는 이유를 모른채 사용하는 IP주소가 있습니다.
127.0.0.1
즉, localhost
말 입니다.
내 PC에서 다른 서버가 아닌, 바로 나 자신을 가리키는 주소 입니다.
엄밀하게는 localhost
라는 글자 자체가
OS
의 기본 로컬 라우팅 테이블에 부팅과 동시에 등재되는데요.
localhost
는 호스트명일 뿐이고, 실제로는 IP주소
를 사용합니다.
고정적으로 127.0.0.1
의 주소를 갖습니다. (맥/윈도/리눅스
모두 동일)
내 PC에서 localhost
로 데이터를 보내면,
외부로 나가지 않고 내 PC로 요청이 다시 들어오는 주소죠.
실제로 네트워크 계층까지 내려가지 않고, 지연시간이 거의 없어 엄청 빠른 장점이 있습니다.
엔지니어라면 당연히 사용해 보셨을 것입니다.
그냥 브라우저나, 터미널에서 localhost 라고 지정 하기만 하면 나한테 요청이 들어오니까요.
내가 내 PC에서 서버를 띄우고, 다시 브라우저로 내 PC에 띄운 서버로 접속하고..
이런 거 개발 도중에 수도 없이 하시는거죠.
그런데 어떻게 이게 가능할까요?
그냥 되는 걸까요?
무언가 조치가 되어 있겠죠.
오늘 그걸 알아볼거예요.
localhost
가 나로 다시 돌아온다는 것을 이해하려면,
먼저 Network Interface
를 알아야 합니다.
PC에서 인터넷 혹은 통신을 하려면 뭐가 필요하죠?
네, Wifi
나 Lan Card
가 필요합니다.
이런 장치를 네트워크 인터페이스라고 합니다. 줄여서 NI
라고 하고요.
장치를 OS에서 인식하면, 시스템에 장치마다 대응하는 NI
를 각각 만듭니다.
NI1
번 NI2
번.. 이런식으로요.
터미널이나 커맨드창에서 ifconfig
, ipconfig /all
등의 명령어를 사용해 보셨을 거에요.
뭐가 주르륵 나오실 겁니다.
네, 이런걸 네트워크 인터페이스라고 합니다.
NI
는 왜 있는건가요?OS에서 네트워크를 사용하기 위해 장치를 구분하기 위해서 존재합니다.
원래는 뭔가를 네트워크로 보내려면, 어떤 NI
로 데이터를 보낼지 딱 정해야 해요.
그런데 IP주소만 딱 보면 어떤 NI
를 사용하면 될지 PC가 알고 있어요.
그래서, 여러분은 그동안 딱히 신경쓰지 않아도 알아서 통신이 된 것이죠.
예를 들면
192.168.0.0/16
대역으로 나가려면 NI2
번127.0.0.0/8
대역으로 나가려면 NI0
번0.0.0.0/0
그외 모든 대역은 NI1
번위처럼 나가고자 하는 목적지 IP주소에 따라 어떤 NI
를 사용해야 하는지 OS에서 관리하며, 이것을 네트워크 라우팅 테이블
이라고 합니다.
이처럼 하나의 PC에 여러개의 통신 장비가 있더라도,
대역을 통해 망을 구분 할 수 있죠.
그래서 로컬 네트워크와 인터넷을 구분 할수도 있고, 여러가지 조합이 가능해 집니다.
그런데, 여러 NI 중에서도 Loopback NI
라는게 있습니다.
위에서 NI0
번 이죠.
이것은 모든 PC에 OS만 설치하면 기본으로 제공 하는 가상의 장치
입니다.
실제로 WIFI
나 LAN
이 없어도 존재 합니다.
이 장치는 IP주소 중 127.0.0.0/8
범위의 요청을 담당하죠.
127.0.0.0/8
대역은 IP주소를 정할때부터 애초에 로컬용으로 예약된 대역 입니다.
127.0.0.1
은 그 중 첫번째 IP로, 나 자신을 가리킵니다.
그러니까 이 장치는 결국 내가 보내는 내 요청을 받고, 다시 나에게 응답을 돌려주는 통신 장비가 되는 것이고,
내 입이자 내 귀 입니다. 혼잣말
처럼요.
그리고, 가상의 장치이므로, 물리적인 통신 과정이 생략되어 매우 빠르게 동작 하게 됩니다.
결국, 이 Loopback NI
가 있기 때문에 우리가 localhost
를 사용할수 있는 것입니다.
이제 Loopback NI
를 아셨으니 패킷의 흐름을 한번 따라가 보아요.
TCP/IP
스택을 통해 패킷으로 나가려고 하겠죠?TCP/IP
스택에서 IP주소
를 보고 루프백 NI
로 갑니다.127.0.0.1
을 확인했으니,이제 패킷을 외부로 보내지 않고 로컬로 다시 보냅니다.TCP/IP
스택 계층으로 전달되고, 올바른 포트
로 전달됩니다.node.js
앱이나 기타 앱들이 되겠죠?매일 같이 사용하지만, 자세히 원리는 몰라도 되는 기술이 많습니다.
그러나, 원리를 알면 트러블슈팅이 쉬운 케이스 있는데, 오늘 말씀드린 Loopback NI
가 바로 그것 입니다.
사실 Loopback
에 127.0.0.1
뿐만 아니라 다른 IP도 할당할수 있는데요.
그러면 지금은 거의 쓰지 않지만 Software
로 구현한 L4 Router
를 만들때 사용되곤 했습니다.
오늘 글로 해결하셨기를 바랍니다.
다음에도 좋은글로 찾아뵙겠습니다.
아임웹 CTO 매튜 드림.
폭발적인 반응에 감사합니다.
이 글이, 이번주 velog 트렌딩 1위를 기록 했네요.
좋은 반응에 감사하며, 후속편을 준비했습니다.
localhost 를 외부에서 접속하게 할 방법이 있습니다.
https://velog.io/@480/localhost-%EB%A5%BC-%EC%99%B8%EB%B6%80%EC%97%90%EC%84%9C-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0
감사합니다!
웹을 개발하는 개발자는 어느 정도의 네트워크 지식이 필요한 법이죠!