12. localhost와 127.0.0.1은 무엇일까? 초보자가 알아야 할 차이
웹 서버나 개발 환경을 공부하다 보면 localhost와 127.0.0.1이라는 주소를 자주 볼 수 있습니다.
저도 홈 서버와 웹서비스 구조를 살펴보면서 처음에는 localhost가 192.168.x.x 같은 내부 IP와 같은 것이라고 생각했습니다. 하지만 역할은 전혀 다릅니다.
localhost란 무엇인가?
localhost는 현재 사용하고 있는 자기 자신의 컴퓨터를 가리키는 이름입니다.
예를 들어 내 PC에서 테스트용 웹 서버가 3000번 포트로 실행되고 있다면 다음처럼 접속할 수 있습니다.
http://localhost:3000
인터넷의 다른 서버가 아니라 현재 PC에서 실행 중인 프로그램을 찾습니다.
127.0.0.1은 무엇인가?
IPv4 환경에서 127.0.0.1은 대표적인 루프백 주소입니다.
일반적으로 localhost가 127.0.0.1로 해석되기 때문에 다음 두 주소가 같은 프로그램으로 연결되는 경우가 많습니다.
localhost:3000
127.0.0.1:3000
IPv6에서는 ::1이 대표적인 루프백 주소입니다.
127.0.0.1과 192.168.x.x 차이
127.0.0.1은 현재 컴퓨터 자기 자신만 가리킵니다.
반면 192.168.0.10 같은 주소는 같은 공유기 내부에서 특정 장치를 구분하는 사설 IP입니다.
홈 서버 본체에서 127.0.0.1을 입력하면 홈 서버 자신에게 연결됩니다.
노트북에서 127.0.0.1을 입력하면 홈 서버가 아니라 노트북 자신에게 연결됩니다.
노트북에서 홈 서버에 접속하려면 홈 서버의 192.168.x.x 주소를 사용해야 합니다.
인터넷이 없어도 localhost를 사용할 수 있을까?
같은 컴퓨터 내부에서 실행되는 서비스라면 인터넷 연결이 없어도 localhost를 사용할 수 있습니다.
개발자가 실제 사이트에 공개하기 전에 자신의 PC에서 웹 애플리케이션을 테스트하는 데 많이 사용하는 이유입니다.
localhost에서만 열리는 이유
서버 프로그램이 127.0.0.1에서만 연결을 받도록 설정되어 있다면 같은 컴퓨터에서는 접속되지만 다른 PC에서는 접속할 수 없습니다.
홈 서버 본체에서는 프로그램이 잘 열리는데 다른 컴퓨터에서 안 된다면 프로그램이 어느 네트워크 주소에서 요청을 받고 있는지 확인할 필요가 있습니다.
0.0.0.0은 무엇인가?
서버 설정에서 0.0.0.0도 자주 볼 수 있습니다.
프로그램이 0.0.0.0에서 수신하도록 설정되면 해당 컴퓨터의 여러 IPv4 네트워크 인터페이스에서 들어오는 연결을 받도록 사용하는 경우가 많습니다.
하지만 0.0.0.0에 바인딩했다고 인터넷에서 자동으로 접속 가능한 것은 아닙니다.
공유기와 방화벽, 포트포워딩도 함께 고려해야 합니다.
localhost와 보안
관리 도구나 데이터베이스를 localhost에서만 접근하도록 설정하면 외부 네트워크에 직접 노출되는 범위를 줄일 수 있습니다.
사용할 수 있다는 이유로 모든 서비스를 인터넷에 공개할 필요는 없습니다.
웹 개발에서 localhost를 사용하는 이유
실제 운영 서버를 수정하면 오류가 방문자에게 그대로 노출될 수 있습니다.
따라서 로컬 환경에서 먼저 테스트하고 정상 작동을 확인한 뒤 운영 서버에 적용하는 방식이 유용합니다.
워드프레스 역시 로컬 테스트 환경이나 별도의 스테이징 환경을 활용하면 테마와 플러그인 변경을 안전하게 확인할 수 있습니다.
localhost가 안 열릴 때
먼저 서버 프로그램이 실행 중인지 확인합니다.
다음으로 포트 번호가 정확한지 확인합니다.
같은 포트를 다른 프로그램이 이미 사용 중인지와 프로그램 로그도 살펴봅니다.
localhost는 현재 PC를 가리키는 이름이고 127.0.0.1은 자기 자신을 가리키는 대표적인 IPv4 루프백 주소입니다.
이 개념을 정확히 이해하면 웹 서버 테스트와 Docker 포트, 데이터베이스 연결 같은 다음 단계의 기술도 훨씬 쉽게 이해할 수 있습니다.