카테고리 없음

localhost의 동작 원리

LSH2118 2025. 5. 12. 12:31

개발환경에서 우리가 애플리케이션을 실행시킨다면 localhost를 사용하여 접속한다

 

나에게 익숙한 localhost는 react와 node.js의 기본 포트인 localhost:3000이나, 

Vite의 기본포트인 localhost:5173이다

 

여기서 공통적인 부분은 localhost부분이다

 

내가 바닐라 html을 처음 배울 때부터 localhost를 사용해 왔는데,

정작 이게 정확이 뭔지, 또 어떻게 작동하는 건지 몰랐다

 

나의 PC의 OS가 window이기 때문에 window를 중점으로 설명을 하겠다


Localhost

 

로컬호스트는 나의 PC에서 자기 자신을 가리키는 주소다

 

엄밀히 말하자면 localhost는 그저 호스트 명일뿐이고 실상은 그 ip주소인 127.0.0.1을 칭하는 말이고,

나의 PC에서 localhost로 요청을 보내면 그 요청은 밖으로 나가지 않고 다시 나의 PC로 돌아온다

작동방식

localhost의 작동방식을 설명하려면 등록, hosts파일, 그리고 loopback의 개념에 대해서 알아야 한다

등록

localhost라는 글자는 PC가 부팅될 때 라우팅 테이블127.0.0.1로 자동으로 등록이 된다

//window cmd
route print 

// mac 기본 터미널 & Linux 터미널 (1택)
netstat -rn
route -n
ip route

해당 명령어를 사용하면 현제 라우팅 테이블을 확인할 수 있다

// window cmd

IPv4 경로 테이블
===========================================================================
활성 경로:
네트워크 대상      네트워크 마스크     게이트웨이      인터페이스    메트릭
          0.0.0.0          0.0.0.0     x.x.x.254        x.x.x.71       35
         x.x.0.0       255.255.0.0       연결됨           x.x.0.2      261
         x.x.0.2   255.255.255.255       연결됨           x.x.0.2      261
     x.x.255.255   255.255.255.255       연결됨           x.x.0.2      261
        127.0.0.0        255.0.0.0       연결됨         127.0.0.1      331
        127.0.0.1  255.255.255.255       연결됨         127.0.0.1      331
  127.255.255.255  255.255.255.255       연결됨         127.0.0.1      331
       x.x.x.0     255.255.255.0       연결됨         x.x.x.71       291
      x.x.x.71     255.255.255.255       연결됨         x.x.x.71       291
     x.x.x.255     255.255.255.255       연결됨         x.x.x.71       291
        224.0.0.0        240.0.0.0       연결됨         127.0.0.1      331
        224.0.0.0        240.0.0.0       연결됨         x.x.x.71       291
        224.0.0.0        240.0.0.0       연결됨           x.x.0.2      261
  255.255.255.255  255.255.255.255       연결됨         127.0.0.1      331
  255.255.255.255  255.255.255.255       연결됨         x.x.x.71       291
  255.255.255.255  255.255.255.255       연결됨           x.x.0.2      261
===========================================================================
IPv6 경로 테이블
===========================================================================
활성 경로:
 IF  메트릭 네트워크 대상           게이트웨이
  1    331 ::1/128                  연결됨
 39    261 fe80::/64                연결됨
 39    261 fe80::xxxx:xxxx:xxxx:xxxx/128
                                    연결됨
  1    331 ff00::/8                 연결됨
 39    261 ff00::/8                 연결됨
===========================================================================
영구 경로:
  없음

이러한 메시지가 출력되는데 여기서 우리가 말한 localhost는 127.*.*.*쪽을 확인하면 된다

 

이제 localhost127.0.0.1을 가리키게 해야 한다

hosts 파일

hosts파일은 컴퓨터 시스템에서 도메인 이름을 IP주소로 변환하는 데에 사용되는 파일이다

// window 
C:\Windows\System32\drivers\etc\hosts

// Linux/Mac
/etc/hosts

 

원래였다면 DNS가 처리해야 할 일이지만,

hosts파일을 사용하면 로컬에서 해당 작업을 처리하는 방법을 제공한다

 

메모장에서 C:\Windows\System32\drivers\etc\hosts 해당 주소를 입력해 파일을 열게 된다면

 

매핑된 IP주소들과 도메인의 이름을 확인할 수 있다

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

이런 식으로 127.0.0.1 ::1은 localhost란 이름으로 매핑이 되어있는 것이 명시되어 있다

 

명시되었나고 표현을 했다면,

확인해보면 주소가 # 로 주석 처리가 되어있다

 

그이유는 localhost는 운영체제에서 일종의 예약어로 불린다

 

즉 localhost는 임의로 hosts파일을 수정해서 다른 IP주소랑 매핑하지 않는 이상 localhost는 무조건 127.0.0.1 ::1을 가리킨다는 말이다

 

우리가 localhost:3000을 브라우저 창에 입력하면

브라우저가 localhost라는 도메인 이름을 127.0.0.1로 해석하기 위해 hosts 파일을 참조한다

운영체제가 IP 주소가 127.0.0.1 임을 확인하고, 127.0.0.1은 루프백 주소이므로, 요청은 네트워크를 거치지 않고 곧바로 자신의 컴퓨터 내에서 처리된다

loopback

루프백이란 자기 자신에게 되돌아오는 통신을 말한다

 

loopback ip주소로 나 자신을 가리키는 IP주소

네트워크 요청을 보내면 실제 네트워크를 거치지 않고 운영체제 내부에서 다시 자신에게 되돌아온다. 그래서 이를 loopback이라고 부른다.

 

여기서 말하는 나를 가리키는 IP주소는 127.0.0.1, ::1등을 의미한다

 

우리의 PC에는 네트워크 통신에 사용되는 여려 장치들이 있다

이러한 장치들을 network interface(NI)라고 부른다

 

lan, wifi. 그리고 지금 설명하고 있는 loopback 역시 네트워크 통신에 사용되는 장치이다

 

네트워크 통신을 할 때 우리의 OS는 라우팅 테이블을 참조해 어떤  NI를 사용할지 결정한다

 

위에서 말했던 것처럼 loopback NI 역시 존재하는데, 

PC에 OS를 설치만 하면 자동으로 생기는 가장의 장치이다

 

witi나 lan이 없어도 사용할 수 있다

 

loopback NI는 127.*.*.* 영역과 ::1 요청을 처리한다

 

그중 우리가 localhost에서 사용하는 127.0.0.1는 첫 번째  IP로

당연히 127로 시작하기 대문에 나 자신을 가리킨다

 

내가 127.0.0.1로 보낸 요청은 외부 네트워크를 거치지 않고, 내 컴퓨터 안에서 돌아와 내가 직접 처리한다.

이 요청의 응답도 내 컴퓨터 안에서 바로 나에게 전달된다

node.js에서 작동원리

내가 가장 많이 사용하는 프레임위크인 node.js를 예시로 설명하겠다

// 개발환경 실행
npm run dev

 

개발환경을 실행하면 localhost를 사용해 127.0.0.1 또는 ::1와 연결된다

 

$ npm run dev

> shadcn-practice@0.1.0 dev
> next dev

   ▲ Next.js 15.3.2
   - Local:        http://localhost:3000 // <--- 개발환경 
   - Network:      http://10.5.0.2:3000

 ✓ Starting...
 ✓ Ready in 7.9s
 ○ Compiling / ...
 ✓ Compiled / in 22.2s (700 modules)
 GET / 200 in 25797ms

 

주소는 http://127.0.0.1:3000을 의미하기 때문에 

이를 브라우저 창에 입력하면 hosts파일을 참조해서 도메인을 확인하고

127로 시작하기 때문에 loopback을 사용해 외부로 나가지 않고 자기 자신으로 돌아온다

 

그러면 나의 PC에서 localhost:3000 서버가 실행 중이니 3000으로 요청을 보내면

localhost:3000이 응답을 나의 브라우저로 보낸다

 

그래서 localhost:3000으로 접속하면 나의 앱이 렌더링 된다

참고

ip주소 127.0.0.1의 의미

localhost의 동작원리

루프백 IP란?

 

확인 명령어

1. route print - window 라우팅 테이블 확인

2. ping localhost - localhost의 ip주소 확인