localhost와 127.0.0.1은 같은가? 루프백과 OSI 7계층으로 이해하기
결론부터: 보통은 같다, 하지만 항상 같지는 않다.
둘은 계층이 다른 개념이다.
1. 개념 층위가 다르다
localhost → 호스트명 (이름) → Layer 7 (응용 계층)에서 해석
127.0.0.1 → IP 주소 (숫자) → Layer 3 (네트워크 계층)에서 처리
localhost는 문자열 이름이고, 127.0.0.1은 그 이름이 보통 가리키는 주소다.
이름 → 주소로 변환하는 단계가 하나 더 있다는 게 핵심이다.
2. localhost 해석 경로
DNS 서버까지 가지 않는다. OS가 먼저 로컬 파일을 확인한다.
프로그램이 "localhost" 요청
│
▼
/etc/hosts (또는 C:\Windows\System32\drivers\etc\hosts)
┌─────────────────────────────────┐
│ 127.0.0.1 localhost │ ← 여기서 해석됨
│ ::1 localhost │ ← IPv6도 함께 등록된 경우
└─────────────────────────────────┘
│
▼
IP 주소 확정 → 소켓 연결
/etc/hosts를 수정하면localhost가 다른 IP를 가리키게 할 수 있다.
localhost → 192.168.1.100도 가능하다. (그러면 완전히 달라진다)
3. OSI 7계층에서 루프백의 위치
127.0.0.1로 패킷을 보내면 물리 네트워크 카드까지 내려가지 않는다.
네트워크 계층(L3)에서 자기 자신에게 돌려보낸다.
[ 송신 측 ] [ 수신 측 ]
7. 응용 → "localhost" 해석 7. 응용 ← 데이터 수신
6. 표현 → 데이터 인코딩 6. 표현
5. 세션 → 연결 관리 5. 세션
4. 전송 → TCP/UDP 포트 4. 전송
3. 네트워크 → 127.0.0.1 확인 3. 네트워크
↓ ↑
└──────── 루프백 (lo) ───────────┘
(여기서 반환, L2/L1 없음)
2. 데이터 링크 ← 도달하지 않음
1. 물리 ← 도달하지 않음
루프백 인터페이스(lo)는 가상 인터페이스로, 패킷이 OS 커널 안에서 순환한다.
실제 네트워크 카드(NIC)를 거치지 않으므로 외부로 절대 나가지 않는다.
4. 언제 localhost ≠ 127.0.0.1 이 되는가?
케이스 1: IPv6 환경
/etc/hosts
127.0.0.1 localhost ← IPv4
::1 localhost ← IPv6
OS가 IPv6를 우선하면:
localhost → ::1 (IPv6 루프백)
127.0.0.1 → IPv4 루프백
→ 서버가 IPv4로만 열려 있으면 localhost로 접속이 안 될 수 있다
케이스 2: /etc/hosts 수정
127.0.0.1 localhost ← 기본값
127.0.0.1 myapp.local ← 커스텀 추가
192.168.1.5 localhost ← 이렇게 바꾸면 localhost는 다른 IP
케이스 3: 서버 바인딩
서버가 127.0.0.1 에만 바인딩
→ localhost 접속: 가능 (127.0.0.1로 해석되면)
→ 외부 IP로 접속: 불가
서버가 0.0.0.0 에 바인딩
→ 모든 인터페이스 허용 (127.0.0.1도, 외부 IP도 가능)
5. 자주 쓰이는 특수 IP 주소
루프백 & 자기 자신
| 주소 | 의미 |
|---|---|
127.0.0.1 | IPv4 루프백 (자기 자신) |
127.x.x.x | 127.0.0.0/8 전체가 루프백 대역 |
::1 | IPv6 루프백 |
바인딩 & 라우팅 특수값
| 주소 | 의미 |
|---|---|
0.0.0.0 | 모든 인터페이스에 바인딩 (서버 리슨 시) |
255.255.255.255 | 브로드캐스트 (같은 네트워크 전체) |
사설 IP 대역 (외부 인터넷으로 나가지 않음)
| 대역 | 범위 | 주로 쓰이는 곳 |
|---|---|---|
10.0.0.0/8 | 10.x.x.x | 기업 내부망 |
172.16.0.0/12 | 172.16.x.x ~ 172.31.x.x | Docker 기본 네트워크 |
192.168.0.0/16 | 192.168.x.x | 가정용 공유기 |
링크-로컬 (자동 할당)
| 주소 | 의미 |
|---|---|
169.254.x.x | DHCP 실패 시 OS가 자동 할당 (APIPA) |
fe80::/10 | IPv6 링크-로컬 |
6. 실무 요약
개발할 때 자주 만나는 상황:
서버 시작 시
0.0.0.0:3000 → 모든 IP로 접근 가능 (외부 포함)
127.0.0.1:3000 → 이 머신에서만 접근 가능
localhost로 접속이 안 될 때 확인할 것
1. /etc/hosts 에서 localhost → 어떤 IP?
2. 서버가 IPv4 바인딩인데 OS가 ::1(IPv6)로 해석?
3. ping 127.0.0.1 vs ping localhost 결과 비교
정리
localhost = 이름 (hosts 파일에서 해석, L7)
127.0.0.1 = 주소 (루프백 인터페이스, L3)
둘이 같은 이유: 기본 /etc/hosts가 127.0.0.1 → localhost 로 매핑
둘이 달라지는 이유: IPv6 우선, hosts 파일 수정, 서버 바인딩 방식
루프백의 핵심은 L3에서 반환되어 L1/L2에 도달하지 않는다는 것이다.
패킷이 물리 카드 밖으로 나가지 않기 때문에 네트워크 없이도 소켓 통신이 가능하다.