개발노트

내 PC에서는 열리는데 밖에서는 접속이 안 됩니다

노트북에서 열린 홈페이지와 휴대전화의 연결 실패를 비교하는 상황을 표현한 이미지

노트북에서는 잘 열리던 홈페이지가 휴대전화에서는 안 열린다면 어디부터 봐야 할까요? 접속하는 범위를 하나씩 넓혀가며 원인을 찾아봅니다.

홈페이지를 만들고 내 컴퓨터에서 열어봤습니다. 화면도 잘 나오고 버튼도 작동합니다. 이제 다른 사람에게 보여주려고 주소를 보냈는데, 돌아오는 답은 ‘접속이 안 되는데요?’입니다. 처음 웹서버를 띄우면 여기서 막히기 쉽습니다.

이럴 때는 무엇부터 바꿔야 할지 난감합니다. 서버를 다시 켜보기도 하고, 포트를 바꾸기도 하고, 도메인 설정을 건드리기도 합니다. 하지만 여러 설정을 한꺼번에 바꾸면 무엇이 문제였는지 더 알기 어려워집니다. 내 PC에서 시작해 접속 범위를 한 단계씩 넓히면 막힌 위치를 찾기 쉽습니다.

이 글에서는 웹서버가 3001번 포트에서 실행되는 상황을 예로 들겠습니다. 명령어는 Ubuntu/Linux 기준입니다. 이 홈페이지의 서버도 작성 시점에 3001번 포트에서 요청을 받는 것을 확인했습니다. 여러분의 서버가 8000번이나 3000번을 사용한다면 예시의 포트 번호를 바꿔서 확인하면 됩니다.

1. 다른 기기에서 localhost를 열고 있지는 않나요?

먼저 주소창을 확인합니다. 내 PC에서 사용한 주소가 http://localhost:3001이었다면 그 주소를 휴대전화에 그대로 입력하면 안 됩니다. localhost는 ‘지금 이 주소를 열고 있는 기기 자신’을 뜻합니다. 휴대전화에서 localhost를 열면 서버 PC가 아니라 휴대전화 안에서 웹서버를 찾게 됩니다.

같은 와이파이에서 접속하려면 서버 PC의 내부 IP 주소가 필요합니다. 예를 들어 서버 PC 주소가 192.168.0.20이라면 휴대전화에서는 http://192.168.0.20:3001로 접속합니다. 이 IP는 설명용 예시이므로 그대로 쓰지 말고, 서버 PC의 네트워크 설정에서 실제 주소를 확인합니다.

주소사용하는 곳
http://127.0.0.1:3001서버 PC 자신에서 확인할 때
http://192.168.0.20:3001같은 내부망에서 서버 PC로 접속할 때의 예시
https://내도메인외부 공개 연결을 구성한 뒤 방문자가 사용할 주소

2. 서버 PC에서부터 다시 확인합니다

서버 PC의 터미널에서 curl -i --max-time 10 http://127.0.0.1:3001/을 실행합니다. 정상 페이지라면 보통 200 OK와 HTML이 보입니다. 로그인 페이지로 보내는 서비스라면 리다이렉트 응답이 나올 수도 있습니다. 중요한 것은 이 주소에서 서버가 응답하는지입니다.

여기서 연결 자체가 실패하면 외부 네트워크를 볼 단계가 아닙니다. 서버가 종료됐거나 다른 포트에서 실행 중일 수 있습니다. 실행 터미널의 오류와 시작 메시지부터 확인합니다. 반대로 404나 500이 나왔다면 HTTP 서버에는 도착한 것입니다. 요청 경로나 앱 오류를 먼저 살펴봅니다.

3. 서버가 어느 주소에서 기다리는지 봅니다

내 PC에서는 열리지만 다른 기기에서 안 열릴 때는 서버가 내 PC 안의 요청만 받고 있을 수 있습니다. 서버 PC에서 ss -ltn 'sport = :3001'을 실행해 Local Address:Port 항목을 봅니다. 이 명령은 TCP 연결을 기다리는 주소와 포트를 보여줍니다. 옵션의 자세한 뜻은 ss 매뉴얼에서 확인할 수 있습니다.

표시된 주소
127.0.0.1:3001이 PC 안에서 들어오는 연결을 받습니다
0.0.0.0:3001이 PC의 모든 IPv4 인터페이스에서 연결을 받습니다
아무 결과도 없음현재 환경에서 해당 포트를 기다리는 TCP 소켓을 찾지 못했습니다

다른 기기가 서버 PC에 직접 접속해야 한다면 실행 주소를 0.0.0.0 또는 해당 내부 IP로 설정합니다. 이 프로젝트처럼 HOST와 PORT 환경변수를 읽는 서버라면 HOST=0.0.0.0, PORT=3001로 바꾼 뒤 재시작합니다. 프로젝트마다 설정 방법은 다르므로 실행 옵션을 확인해야 합니다.

0.0.0.0은 방문자에게 알려줄 주소가 아닙니다. 서버가 어디서 요청을 받을지 정하는 설정입니다. 방문자는 서버의 실제 IP나 도메인으로 접속합니다. 또 같은 PC의 프록시나 터널 프로그램이 대신 연결해주는 구성이라면 127.0.0.1로 실행해도 됩니다.

4. 같은 와이파이에서 열어봅니다

이제 휴대전화를 서버 PC와 같은 와이파이에 연결하고 서버의 내부 IP와 포트로 접속합니다. 서버가 HTTP로 실행 중이라면 주소 앞에 http://도 직접 적습니다. HTTPS를 지원하지 않는 포트에 https로 연결하면 인증서나 연결 오류가 날 수 있습니다.

여전히 안 열린다면 PC 방화벽에서 해당 포트의 연결이 허용되는지 확인합니다. Ubuntu에서 UFW를 사용한다면 sudo ufw status verbose로 상태를 볼 수 있습니다. 필요한 포트와 접속 범위를 확인해 허용 규칙을 추가합니다. 방화벽 전체를 끄는 방식으로 해결하려고 하지는 않습니다.

주소와 서버 설정이 맞는데도 실패한다면 게스트 와이파이에 연결한 것은 아닌지도 봅니다. 공유기가 기기 사이 통신을 막는 경우가 있습니다. Docker나 WSL 안에서 실행했다면 포트가 호스트 PC로 연결되어 있는지도 확인해야 합니다. 컨테이너 안에서 열린 포트가 곧바로 PC 외부에 공개되는 것은 아닙니다.

5. 집 밖에서 접속하려면 연결 방법이 더 필요합니다

같은 와이파이에서 열렸다면 서버와 내부망 연결은 확인한 셈입니다. 하지만 192.168로 시작하는 내부 IP는 보통 인터넷에서 직접 접근할 수 없습니다. 이제 외부 요청을 서버 PC까지 전달할 방법을 정해야 합니다.

공유기를 통해 직접 공개한다면 포트 포워딩을 설정합니다. 외부에서 들어온 특정 포트의 요청을 서버 PC의 내부 IP와 포트로 보내는 기능입니다. 공유기 설정 외에도 공인 IP 사용 여부와 통신사의 연결 환경을 확인해야 합니다. 이중 공유기나 통신사 NAT 환경에서는 포트 포워딩 한 번으로 연결되지 않을 수 있습니다.

다른 방법으로는 Cloudflare Tunnel 같은 터널을 사용할 수 있습니다. 서버 쪽 프로그램이 외부 서비스로 연결을 만들고, 방문자 요청을 그 연결을 통해 웹서버에 전달합니다. Cloudflare는 이 방식에서 들어오는 포트를 직접 개방할 필요가 없다고 안내합니다. 구성 방식은 Cloudflare Tunnel 공식 문서에서 확인할 수 있습니다.

터널 프로그램과 웹서버가 같은 PC에서 실행된다면 연결 대상은 http://127.0.0.1:3001처럼 지정할 수 있습니다. 서로 다른 컨테이너에서 실행된다면 127.0.0.1이 가리키는 대상도 달라집니다. 이 경우 터널 프로그램에서 실제로 접근할 수 있는 서버 주소를 사용해야 합니다.

6. 도메인으로만 안 열리면 연결 설정을 봅니다

서버 주소로는 열리는데 도메인으로만 실패한다면 도메인과 공개 경로를 확인합니다. 도메인 철자, www 유무, DNS 설정, HTTPS 설정을 차례로 봅니다. 프록시나 터널을 쓴다면 그 서비스가 3001번 포트의 웹서버를 바라보고 있는지도 확인합니다.

도메인을 등록했다고 내부의 3001번 포트까지 자동으로 연결되지는 않습니다. 방문자가 사용하는 HTTPS 주소와 내부 웹서버 주소를 이어주는 설정이 필요합니다. 예전에 3000번으로 실행하다가 3001번으로 바꿨다면 프록시나 터널의 연결 대상도 함께 바꿔야 합니다.

보이는 증상먼저 볼 곳
이름을 찾을 수 없다는 오류도메인 철자와 DNS
연결 거부 또는 시간 초과서버 실행 상태와 주소, 방화벽, 전달 경로
HTTPS 인증서 오류도메인과 인증서, HTTPS 연결 설정
502 Bad Gateway프록시나 터널에서 웹서버까지의 연결
페이지는 열리는데 데이터만 안 나옴브라우저 개발자 도구의 API 요청 주소와 오류

이 표는 원인을 확정하는 표가 아니라 시작점을 찾는 용도입니다. 특히 화면은 나오는데 데이터만 비어 있다면 브라우저에서 요청하는 API 주소에 localhost가 남아 있지 않은지 확인해보세요. 다른 사람의 브라우저에서도 localhost는 그 사람의 기기를 뜻합니다.

마지막 확인은 휴대전화 데이터로 합니다

외부 공개 주소를 설정했다면 휴대전화의 와이파이를 끄고 모바일 데이터로 열어봅니다. 같은 공유기 안에서 확인한 결과와 실제 외부 인터넷에서 확인한 결과는 다를 수 있습니다. 메인 페이지만 보지 말고 게시글, 이미지, 필요한 기능도 함께 확인합니다.

다음에 같은 문제가 생기면 설정을 바꾸기 전에 어디까지 열리는지 먼저 적어보세요. ‘서버 PC에서는 열림, 같은 와이파이에서는 열림, 외부에서는 실패’처럼 세 줄만 남겨도 확인할 범위가 줄어듭니다. 그다음 한 가지 설정만 바꾸고 같은 주소를 다시 확인하면 됩니다.

실전노트 목록 문의하기

댓글

0개

아직 표시된 댓글이 없습니다.

Google 계정으로 댓글 작성

이메일은 일부를 가린 아이디로 표시됩니다.