localhost를 자주 사용하는데 자세히 알아본 적은 없는 것 같아 알아봤습니다.
localhost는 컴퓨터 네트워크에서 자기 자신을 가리키는 주소입니다.
개발을 할 때 웹서버를 띄우고 localhost를 접속하여 디버깅을 합니다.
127.0.0.1
localhost는 도메인입니다.
내 컴퓨터를 의미하는 도메인 이름으로 DNS나 hosts 파일을 통해 IP로 변환됩니다.
127.0.0.1은 IP주소입니다.
내 컴퓨터를 의미하는 루프백 IP이고, 직접 IP로 접근할 수 있습니다.
왜 127.0.0.1이 localhost가 된 것인가?
- 루프백(Loopback) 주소초창기 인터넷 프로토콜 설계 당시, 자기 자신에게 네트워크 요청을 보내는 기능이 필요했습니다.
- 실제 외부 네트워크를 거치지 않고, 내부적으로 네트워크 처리를 흉내 내야 했습니다.
- 이를 위해 루프백 인터페이스라는 개념이 등장했고, 이 인터페이스에 할당된 특별한 IP 주소가 127.0.0.1입니다.
왜 127.0.0.1?
- 127.0.0.0/8 대역(127.0.0.0 ~ 127.255.255.255)은 IP ClassA 대역의 마지막 블록입니다.
- 일반 네트워크 할당보다 특수 목적에 할당하기 적합하다고 여겨졌습니다.
- 당시 운영체제와 라우팅 소프트웨어는 비교적 단순했기 때문에 127로 시작하는 IP를 모두 루프백 처리하도록 하면 구현이 쉬웠습니다.
- 즉 127.0.0.0/8 대역은 모두 루프백으로 사용이 가능한데 그중 대표되는 IP가 127.0.0.1입니다.
RFC 문서 정의
- RFC 3300 문서에서 이렇게 정의되어 있습니다.
- "This is ordinarily implemented using only 127.0.0.1/32 for loopback"
- 이 이후로 127.0.0.1은 표준 루프백 주소로 사용되었고, 전 세계 운영체제와 네트워크 스택에 적용되었습니다.
localhost 통신 과정
개발자가 톰캣을 보통 8080 포트에 띄운다고 가정을 하고, http://localhost:8080에 접속을 한다고 가정을 하겠습니다.
- http://localhost:8080로 http 요청 송신
- localhost를 운영체제는 hosts 파일을 확인하고 127.0.0.1로 변환
- 브라우저에서 요청이 들어오면 운영체제는 네트워크 스택을 통해 처리
- 이때 물리적인 네트워크 인터페이스를 사용하지 않고 루프백 인터페이스를 사용
- 루프백 인터페이스는 127.0.0.1에 바인딩된 가상의 네트워크 인터페이스
- 운영체제의 네트워크 스택이 패킷을 자기 자신에게 보내는 것처럼 작동
- 실행시킨 웹서버가 요청을 받고 응답을 생성해서 자신에게 다시 보내는 방식으로 응답을 전송 (이때 통신은 외부 네트워크를 전혀 거치지 않음, 운영체제 내부에서만 동작함)
'공부' 카테고리의 다른 글
recoil 소개 (0) | 2022.06.22 |
---|---|
쿠버네티스 학습 (0) | 2022.03.24 |
RabbitMQ vs Kafka vs Redis (0) | 2022.03.11 |
Log4j 학습 (0) | 2022.01.28 |
Apache vs NGINX, 그리고 NGINX 설정 (0) | 2022.01.26 |