WSL2 localhost 접속 오류 원인과 완벽 해결 방법 가이드
코딩을 막 시작했거나 윈도우에서 리눅스 개발 환경을 구축해 보려는 분들이라면 십중팔구 WSL2 (Windows Subsystem for Linux)를 사용하고 계실 텐데요. 우분투(Ubuntu) 터미널을 열고 기분 좋게 `npm start`나 `python manage.py runserver`를 입력해서 서버를 띄웠습니다. 터미널에는 분명 "Server running at http://localhost:3000" 이라고 예쁘게 뜨는데...
막상 윈도우의 크롬 브라우저를 열고 `localhost:3000`을 치면? '사이트에 연결할 수 없음'이라는 차가운 에러 화면만 마주하게 됩니다. 진짜 완전 짜증 나죠. 분명 서버는 돌아가고 있는데 왜 내 윈도우 브라우저에서는 못 찾는 걸까요? 저도 처음 WSL2를 세팅할 때 이 문제 때문에 반나절을 허비했던 기억이 생생합니다. 오늘은 더 이상 여러분이 구글링으로 시간을 낭비하지 않도록, 이 현상의 원인과 가장 확실한 해결책 2가지를 아주 쉽게 알려드릴게요! 😊
1. 도대체 왜 localhost가 안 먹히는 걸까? 🤔
문제를 해결하려면 이유부터 알아야겠죠? 결론부터 말씀드리면 WSL2는 윈도우와 네트워크(IP)를 완전히 따로 쓰기 때문입니다.
과거 버전인 WSL1은 윈도우와 네트워크를 공유했기 때문에 `localhost`를 치면 바로 연결됐어요. 하지만 성능이 대폭 업그레이드된 WSL2는 완전히 독립된 가상 머신(Hyper-V 아키텍처) 위에서 돌아갑니다. 즉, 윈도우가 사는 집과 WSL2가 사는 집이 서로 달라진 거예요. 그래서 윈도우 브라우저에서 '우리 집(localhost)' 문을 두드려봤자, 정작 서버가 돌아가는 'WSL2 집'에는 아무 신호도 가지 않는 거랍니다.
윈도우의 IP가 `192.168.0.10`이라면, WSL2 내부는 독자적인 가상 네트워크망을 만들어 `172.25.x.x` 같은 완전히 다른 IP 주소를 할당받아 사용합니다. 서로 다른 세상에 살고 있는 셈이죠.
2. 해결 방법 ① : 포트 포워딩 (Port Forwarding) 🛠️
가장 고전적이면서도 확실한 첫 번째 방법은 윈도우로 들어오는 요청을 강제로 WSL2 쪽으로 넘겨주는 '포트 포워딩'입니다. "이 포트 번호로 누가 찾아오면, 저기 안쪽에 있는 WSL2 한테 연결해 줘!" 하고 윈도우에게 명령을 내리는 것이죠.
Step 1. WSL2의 진짜 IP 주소 찾기
먼저 WSL2(우분투 터미널)를 열고 아래 명령어를 입력하여 현재 할당된 가상 IP를 확인합니다.
172.25.132.61
Step 2. 윈도우에 포트 포워딩 명령 내리기
이제 윈도우의 '명령 프롬프트(cmd)'를 반드시 '관리자 권한'으로 실행한 뒤, 아래 명령어를 입력해야 합니다. 매번 타이핑하기 귀찮으시죠? 제가 여러분을 위해 명령어 자동 생성기를 만들어 두었습니다!
🔢 포트 포워딩 명령어 생성기
명령어를 입력했는데도 여전히 접속이 안 된다면 윈도우 방화벽이 막고 있을 확률이 높습니다. '고급 보안이 포함된 Windows Defender 방화벽'에 들어가서 해당 포트에 대한 '인바운드 규칙'을 허용으로 추가해 주셔야 합니다.
3. 해결 방법 ② : 윈도우 11 최신 기능! 미러링 모드 ✨
솔직히 컴퓨터를 재부팅할 때마다 WSL2의 가상 IP가 계속 바뀌어서, 매번 포트 포워딩 명령어를 새로 쳐줘야 하는 건 너무 귀찮은 일입니다. 마이크로소프트도 이 불만을 알았는지, WSL 버전 2.0.0 이상 (주로 윈도우 11 환경)부터는 아주 기가 막힌 해결책을 내놓았습니다. 바로 네트워크 미러링(Mirrored) 모드입니다!
이 모드를 켜면 WSL2가 윈도우의 네트워크 인터페이스를 거울처럼 똑같이 공유하게 됩니다. 즉, 예전처럼 `localhost`만 쳐도 한 방에 접속이 되는 마법이 펼쳐지죠. 설정 방법도 아주 간단합니다.
- 윈도우의 파일 탐색기를 열고 사용자 폴더(
C:\Users\내이름)로 이동합니다. - 해당 위치에 `.wslconfig` 라는 이름의 텍스트 파일을 새로 만듭니다. (이미 있다면 메모장으로 엽니다)
- 파일 내용에 아래의 코드를 붙여넣고 저장합니다.
networkingMode=mirrored
저장 후 파워쉘(PowerShell)을 열어 wsl --shutdown 명령어를 입력해 WSL을 완전히 껐다가 다시 실행해 보세요. 이제 속 썩이던 네트워크 문제가 깔끔하게 해결되었을 겁니다!
핵심 요약 📝
WSL2 Localhost 접속 오류 완벽 해결
hostname -I를 입력해 확인한 IP 주소를 브라우저에 직접 입력하세요..wslconfig 파일에 networkingMode=mirrored를 추가하여 localhost를 다시 활성화하세요!
자주 묻는 질문 ❓
netsh interface portproxy delete v4tov4 listenport=삭제할포트번호 listenaddress=0.0.0.0 을 입력하시면 깔끔하게 삭제됩니다.제 생각엔 WSL2를 다룰 때 가장 큰 허들이 바로 이 네트워크 연동 문제인 것 같아요. 하지만 오늘 배운 내용만 숙지하신다면 앞으로 로컬 개발 환경 세팅할 때 두려울 게 없으실 겁니다! 코딩하시다가 또 다른 난관에 부딪히면 언제든 편하게 댓글 남겨주세요~ 즐거운 코딩 되시길 바랍니다! 😊