Localhost
기술노트
localhost
localhost는 현재 사용 중인 자신의 컴퓨터(로컬 호스트)를 가리키는 예약 호스트명이다. 보통 IPv4 주소 127.0.0.1, IPv6 주소 ::1에 매핑되며, 네트워크를 실제로 나가지 않고 운영체제 내부의 루프백(loopback) 인터페이스로 연결된다. 이 이름은 표준에서 특별히 예약되어, 일반적인 DNS 조회나 hosts 파일 설정이 없어도 항상 로컬 머신을 가리키도록 동작한다.
- 핵심 요약
- 의미 : 내 컴퓨터 자체를 가리키는 특별한 호스트명
- 주소 : IPv4 → 127.0.0.1 / IPv6 → ::1
- 용도 : 개발·테스트, 자기 자신과의 통신, 보안상 외부 노출 없이 서비스 점검
- 특징 : 대부분의 OS에서 hosts 설정과 무관하게 항상 루프백으로 해석
동작 원리
루프백과 이름 해석
- 운영체제는 localhost를 루프백 인터페이스로 직접 매핑한다.
- 많은 시스템에서 DNS/hosts 조회보다 앞서 localhost를 내부 규칙으로 처리한다.
- Windows의 기본 hosts 파일에는 다음과 같은 주석이 포함되어 있으며, 이는 localhost 해석이 시스템(DNS 클라이언트)에서 자체 처리됨을 뜻한다.
# localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost
주석 처리되어 있어도 localhost가 정상 동작하는 이유가 여기에 있다.
주소 매핑
- IPv4: 127.0.0.0/8 대역은 루프백 용도로 예약되며, 통상 127.0.0.1을 사용한다.
- IPv6: ::1이 루프백 주소로 예약되어 있다.
웹사이트와 웹 서버 동작 방식(맥락 설명)
아래 내용은 localhost를 이해하는 데 도움이 되는 일반적인 웹 접속 흐름이다.
- 브라우저 실행과 주소 입력 — 사용자는 브라우저 주소창에 URL을 입력한다.
- 네트워크 통신과 프로토콜 — 브라우저는 HTTP/HTTPS 등의 프로토콜로 서버에 요청을 보낸다.
- 서버 응답과 HTML — 서버는 요청을 처리해 HTML 등 리소스를 응답한다.
- 클라이언트 렌더링 — 브라우저는 받은 HTML/CSS/JS를 렌더링해 화면에 표시한다.
localhost를 서버 주소로 쓰면, 이 전체 과정이 외부 네트워크가 아닌 내 컴퓨터 안에서만 이루어진다(예: `http://localhost:8080`).
사용 예
- 개발 중인 웹 애플리케이션을 외부에 공개하지 않고 로컬에서 테스트
- 데이터베이스, 캐시, 메시지 브로커 등에 ‘‘자기 자신’’으로 접속
- 로컬 프록시·에이전트(예: `http://localhost:3128`) 확인
동작 확인
=== 공통 ===
ping localhost
# IPv6 우선 환경: ::1 응답
# IPv4만 강제 확인:
ping -4 localhost # Windows
ping -c 4 127.0.0.1 # macOS/Linux
=== Windows ===
[System.Net.Dns]::GetHostAddresses("localhost")
ipconfig /flushdns # hosts 변경 시 캐시 초기화
=== macOS / Linux ===
getent hosts localhost # (glibc 기반 Linux)
scutil --dns | grep -i localhost # (macOS, 선택적)
hosts 파일과의 관계
- 일반 도메인을 특정 IP로 강제로 보내려면 hosts 파일에 직접 추가해야 한다.
- 그러나 localhost는 운영체제가 예약 처리하므로, hosts에 주석이거나 항목이 없어도 동작한다.
- localhost를 다른 주소로 바꿔 매핑하는 것은 권장되지 않는다. 많은 프로그램이 루프백을 전제로 한다.
보안 및 주의 사항
- localhost 서비스는 원칙적으로 외부에서 접근할 수 없다. 다만 잘못된 바인딩(예: `0.0.0.0` 바인딩)이나 프록시 설정, 컨테이너/가상화 네트워킹으로 인해 의도치 않게 외부 노출이 발생할 수 있으니 주의한다.
- 개발용 쿠키/리다이렉트/콜백 URL에서 localhost와 실제 도메인 간 혼용 시 CORS·OAuth 리디렉션 불일치 문제가 생길 수 있다.
관련 항목
같이 보기
- 로컬 서버 예시: `http://localhost`, `http://localhost:8080`, `https://localhost`
- 브라우저 개발자 도구, 로컬 프록시/터널링 도구(예: SSH 포워딩, 개발용 터널)