본문 바로가기

IT

포트포워딩 설정 방법: localhost·로컬 서버 외부 접속 쉽게 하기

728x90
반응형

localhost:8080 주소를 친구에게 보냈는데 “안 열리는데?”라는 답이 돌아왔다면, 서버 고장부터 의심할 필요는 없습니다. 친구의 컴퓨터에서 그 주소는 친구 자신을 가리킵니다. 초대장에 목적지를 ‘각자 집’으로 적은 셈이죠.

 

외부에서 로컬 컴퓨터나 로컬 서버에 접속하려면 포트포워딩 또는 터널 서비스를 이용할 수 있습니다. 같은 내부망에서 접속할 때와 인터넷으로 접속할 때를 구분하면 쉽습니다.

localhost 외부 접속이 바로 안 되는 이유

먼저 주소마다 역할이 다릅니다. 아래 설명은 일반적인 가정용 공유기의 IPv4 환경을 기준으로 합니다.

주소 의미와 용도
localhost, 127.0.0.1 접속을 시도하는 컴퓨터 자신
192.168.0.10 내부 네트워크에서 사용하는 사설 IP 예시
공인 IP 인터넷에서 통신하는 데 사용하는 주소
0.0.0.0 서버 설정에서 모든 로컬 IPv4 인터페이스에 바인딩할 때 사용하는 값

같은 내부망에서는 서버 컴퓨터의 사설 IP로 접속할 수 있습니다. 다만 서버의 접속 허용 설정과 방화벽이 맞아야 하며, 게스트 와이파이처럼 기기 간 통신이 차단된 환경은 예외입니다.

 

다른 집이나 모바일 데이터망에서는 사설 IP만 입력해 해당 컴퓨터로 찾아갈 수 없습니다.

포트포워딩이란? 공유기가 요청을 전달하는 규칙

포트포워딩은 공유기의 특정 외부 포트로 들어온 연결을 내부 컴퓨터의 지정한 IP와 포트로 전달하는 기능입니다.

예를 들어 외부에서 공인 IP의 18080번 포트로 접속하면, 공유기가 내부 컴퓨터 192.168.0.10의 8080번 서버로 전달하도록 설정할 수 있습니다.

 

공인 IP가 건물 주소라면 포트포워딩은 손님을 특정 방으로 안내하는 규칙입니다. 외부 포트와 내부 포트 번호는 달라도 됩니다.

로컬 서버 외부 접속을 위한 포트포워딩 설정 순서

1. 서버 실행과 내부 IP 확인

먼저 서버 컴퓨터에서 http://localhost:8080이 정상적으로 열리는지 확인합니다. 여기서부터 안 된다면 공유기를 설정해도 해결되지 않습니다.

 

운영체제의 네트워크 설정에서 내부 IPv4 주소를 확인합니다. 재연결 후에도 같은 내부 IP를 쓰도록 공유기의 DHCP 주소 예약을 설정하면 편리합니다.

2. 서버가 내부망 연결을 받도록 설정

서버가 127.0.0.1에만 바인딩되어 있으면 다른 기기에서 직접 접속할 수 없습니다. 필요한 경우 내부 IP 또는 0.0.0.0을 수신 주소로 지정합니다.

 

Spring Boot의 application.properties 설정 예시는 다음과 같습니다.

server.address=0.0.0.0
server.port=8080

변경 후 서버를 재시작합니다. 이미 내부망 연결을 받고 있다면 추가 설정은 필요 없습니다. 운영체제 방화벽에서도 해당 서버 또는 내부 포트 8080의 접속을 허용하세요.

 

0.0.0.0은 방문자에게 알려줄 외부 접속 주소가 아닙니다. 같은 내부망의 다른 기기에서는 http://192.168.0.10:8080처럼 실제 내부 IP로 테스트합니다.

3. 공유기에 포트포워딩 규칙 등록

공유기 관리 화면에서 ‘포트포워딩’, ‘NAT 전달’, ‘가상 서버’ 등의 메뉴를 찾습니다. 메뉴명은 모델마다 다릅니다.

아래는 TCP로 통신하는 HTTP 서버의 설정 예시입니다. IP와 포트는 실제 환경에 맞게 바꿔야 합니다.

설정 항목 입력 예시
규칙 이름 local-web
프로토콜 TCP
외부 포트 18080
내부 IP 192.168.0.10
내부 포트 8080

규칙을 저장하고 활성화합니다.

4. 외부 네트워크에서 접속 확인

공유기 상태 화면에서 WAN IP가 공인 IP인지 확인합니다. 브라우저에 http://공인IP:18080을 입력하되 ‘공인IP’는 실제 공인 IPv4 주소로 바꾸세요.

 

휴대전화 와이파이를 끄고 LTE·5G로 테스트하면 외부 접속 여부를 확인하기 좋습니다. 같은 공유기 안에서 공인 IP로 접속하는 테스트는 공유기의 NAT Loopback 지원 여부에 영향을 받을 수 있습니다.

 

포트포워딩은 HTTPS를 자동으로 설정해 주지 않습니다. 위 예시는 HTTP 연결이며, 로그인 정보 등을 전송할 서비스에는 HTTPS 구성이 필요합니다.

공유기 설정 없이 접속하려면 Cloudflare Tunnel

개발 중인 웹사이트를 잠깐 보여주려면 Cloudflare Quick Tunnel이 간편합니다. 로컬 컴퓨터에서 Cloudflare로 연결을 만든 뒤 공개 HTTPS 주소를 통해 요청을 전달받는 방식입니다.

 

Homebrew가 설치된 macOS에서는 다음 명령으로 설치합니다.

brew install cloudflared

로컬 서버를 켜둔 상태에서 새 터미널에 입력합니다.

cloudflared tunnel --url http://localhost:8080

3000번 서버라면 명령의 8080을 3000으로 바꿉니다. Windows·Linux도 cloudflared 설치 후 같은 터널 실행 명령을 사용합니다.

터미널에 표시되는 https://임의문자열.trycloudflare.com 형태의 주소를 전달하면 상대방은 브라우저로 접속할 수 있습니다. 무료 임시 공유 기능이며 도메인 구매나 공유기 포트포워딩이 필요하지 않습니다.

 

같은 컴퓨터에서 터널을 실행한다면 서버를 localhost로만 열어두어도 연결할 수 있습니다. 서버와 터널은 계속 실행되어야 하며, 공유 종료는 터널 터미널에서 Ctrl+C로 처리합니다.

 

Quick Tunnel은 개발·테스트용이며 주소가 바뀔 수 있고 가동 시간도 보장하지 않습니다. SSE를 지원하지 않으므로 SSE를 사용하는 AI 채팅에는 일반 Cloudflare Tunnel 등 다른 구성이 필요합니다.

포트포워딩이 안 될 때 확인할 것

  • 공인 IP 조건: 공유기의 WAN 주소가 사설 IP이거나 통신사 CGNAT 환경이면 집 공유기의 포트포워딩만으로 외부 접속이 되지 않을 수 있습니다.
  • 이중 NAT: 공유기 위에 다른 공유기가 있다면 상위 장비의 설정도 확인해야 합니다.
  • IP 변경: 내부 IP가 바뀌면 전달 대상이 틀어지고, 공인 IP가 바뀌면 방문자가 사용할 주소도 달라집니다.
  • 절전 상태: 컴퓨터가 잠자기에 들어가거나 서버가 종료되면 접속이 중단됩니다.

고정 공인 IP가 반드시 필요한 것은 아닙니다. 유동 공인 IP는 DDNS로 변경된 주소를 도메인에 반영할 수 있습니다. 다만 DDNS가 CGNAT나 방화벽 문제까지 해결해 주지는 않습니다.

 

화면은 열리는데 API만 실패한다면 브라우저가 localhost를 호출하는지 확인하세요. 웹서버에서 /api를 백엔드로 전달하도록 프록시를 구성하거나, 공개 API 주소와 필요한 CORS 설정을 적용합니다. 서버 내부 통신에 쓰는 localhost까지 바꿀 필요는 없습니다.

어떤 외부 접속 방법을 선택하면 좋을까?

목적 선택할 방법
같은 내부망에서 테스트 내부 IP 직접 접속
공유기를 설정해 외부에 공개 포트포워딩
개발 화면을 잠깐 공유 Cloudflare Quick Tunnel
허용한 사람에게만 공유 Tailscale Serve 등 사설 접근 구성
컴퓨터를 꺼도 계속 운영 별도 서버·호스팅에 배포

Tailscale Serve는 Tailscale 네트워크 안에서 서비스를 공유하므로 참여자의 설치·로그인과 접근 권한 설정이 필요합니다.

공개 주소를 만든다고 접속 인증까지 생기지는 않습니다. 포트포워딩이나 공개 터널로 연결한 서버의 관리 화면과 API에는 필요한 인증·권한 검사를 적용해야 합니다. 임의로 생성된 주소도 비밀번호를 대신하지는 못합니다.

참고 자료

 

728x90
반응형