C.W.K.
Stream
Lesson 11 of 12 · published

Localhost & 0.0.0.0

~15 min · localhost, loopback, 0.0.0.0, binding

Level 0Pinger
0 XP0/101 lessons0/12 achievements
0/150 XP to next level150 XP to go0% complete

127.0.0.1 — box 떠나지 않는 loopback

127.0.0.1loopback 주소. 항상 "이 머신, 바로 여기" 를 의미. 이리로 보낸 패킷은 네트워크 안 닿아 — 커널 안에서 바로 되돌아와. 127.0.0.0/8 대역 전체 (1600 만 주소) 가 loopback 으로 예약돼 있지만 관습상 127.0.0.1 만 씀.

localhost 는 그냥 hostname 인데 /etc/hosts 통해 127.0.0.1 에 매핑. dev server 가 "running at http://localhost:5173" 찍을 때 그 loopback 에 bind — 같은 머신의 프로그램만 연결 가능.

0.0.0.0 — 모든 인터페이스에 bind

0.0.0.0연결하는 주소가 아니야. 특별한 binding 주소 — "이 머신의 모든 인터페이스에서 연결 받겠다" 는 뜻. 서버가 0.0.0.0:3000 에 listen 하면 다음 다 받아:

  • Loopback (127.0.0.1)
  • LAN IP (192.168.1.42)
  • Tailscale IP (100.64.x.x)
  • 그 외 어느 인터페이스든

vs 127.0.0.1:3000 은 loopback 만 받음 — 다른 장치한테 안 보여.

이게 끊임없이 중요한 이유

대부분의 dev server 가 안전하게 둘 중 하나를 기본값으로 가져가. Vite 는 localhost 만 기본. FastAPI 는 localhost 만 기본. 폰이나 LAN 의 다른 머신에서 테스트 하려면 binding 을 0.0.0.0 으로 뒤집어야 해 — 그리고 그 네트워크의 다른 사람도 네 dev server 칠 수 있다는 거 받아들여야 해.

Code

Loopback vs all-interface bind·bash
# Loopback only — only accessible from this Mac
python3 -m http.server 8000 --bind 127.0.0.1

# All interfaces — accessible from any device on the LAN/Tailnet
python3 -m http.server 8000 --bind 0.0.0.0

# Test from another device:
curl http://192.168.1.42:8000

# Vite: --host flips it to 0.0.0.0
npx vite --host

# FastAPI/uvicorn: --host 0.0.0.0
uvicorn main:app --host 0.0.0.0 --port 8000

External links

Exercise

Python 서버 두 번 띄워 — 처음엔 --bind 127.0.0.1, 그다음 --bind 0.0.0.0. 같은 Wi-Fi 의 다른 장치에서 curl http://<your-LAN-ip>:8000 시도. 첫 번째 실패 (connection refused), 두 번째 성공해야 해. 그게 실전 차이. 끝나면 둘 다 멈춰.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.