집에서 Server를 구축하고 외부에서 Server에 접속하는 방법은 여러가지가 있는데 개인적인 생각으로는 제일 간단한 방법이 포트 포워딩(port forwarding) 다른말로 포트 매핑(port mapping)이라고 생각 합니다.  오늘은 가상이 아닌 실제 스마트폰으로 Server 접속 테스트를 해야 하는 상황이 발생 했는데 당연히 localhost(127.0.0.1)로는 핸드폰에서 인터넷에 접속을 할 수 없는 상황이 되어 테스트 환경을 만들게 되었습니다.

일단 컴퓨터에서 웹서버를 만들어야 해서 Spring Boot로 API 서버를 만들었습니다. Web Server에서 사용하는 Port는 프로퍼티에

 

server.port=9999

이렇게 설정 하고 먼저 local에서 접속이 되는지 확인을 해 봅니다.

 

잘 되는군요.  그렇지만 스마트폰에서 안드로이드로 Retsrofit을 이용하여 접속을 시도하면 localhost(127.0.0.1)은 공인 IP가 아니기 때문에 접속을 할 수가 없습니다.  이때 필요한 것이 포트 포워딩을 사용하면 localhost도 공인IP처럼 외부에서 사용할 수 있습니다.

포트 포워딩은 공인IP에 Port를 결합 하여(공인IP + Port) 설정한 포트로 요청이 들어오면 매핑테이블에 있는 내부의 컴퓨터에 포워딩 해주는 방식으로 서비스를 진행 합니다.
그럼 공용IP가 있어야 하는데 집에 인터넷을 사용한다면 공용IP는 최소 하나가 존재하는 것으로 생각하면 됩니다.  공유기의 설정 화면에 들어가면 공유기가 인터넷에 연결하기 위한 외부IP를 가지고 있는데 이것이 바로 공인IP 입니다.

 

 

공유기는 이 외부IP를 이용하여 내부에서 사용할 수 있는 사설IP를 외부와 중개하는 기능을 하고 있습니다. 집에 있는 컴퓨터나 핸드폰의 IP를 확인하면 192.168.0.2 부터 192.168.0.254 까지 중복이 안되는 번호를 하나씩 가지고 있는데 이것이 사설IP 입니다.  공유기는 외부 IP와 내부 IP를 매핑하여 인터넷에 연결해 주는데 이러한 기능을 이용하여 외부IP에 Port를 결합하여 내부IP와 1:1 매핑을 하게 되면 설정한 내부IP는 계속해서 외부와 연결 할 수 있는 통로를 얻게 되는 방법 입니다.


일단 설정을 해보도록 합니다.  집에 ipTime을 사용해서 이걸 기준으로 설명 합니다.  관리자 페이지에 로그인을 하고(초기 아이디와 비번은 admin/admin) 

 

고급설정 > NAT/라우터 관리 > 포트포워드 설정
메뉴를 선택 합니다.

 

 

위에 사진은 생성을 한 모습이고 하단에 입력 해야 하는 항목들 입니다.

 

 

 

 

규칙이름 : 그냥 구분을 위한 텍스트입니다. 아무거나 적어도 됩니다.
외부 포트 : 공인IP 뒤에 붙일 Port 번호 입니다. 임의의 번호를 적습니다.
내부 포트 : 내부에서 구축한 서버에서 서비스할 Port 입니다. 이건 정확히 기입합니다.
내부 IP주소 : 서버를 구축한 컴퓨터의 IP 주소.(이건 뒤쪽에서 설명)

 

입력 값들 중 내부 IP와 포트가 중요합니다.  내부 포트는 Web Server의 서비스 port 를 9999로 했으니 9999를 입력 하면 되고 외부 포트는 임의의 번호를 입력하면 됩니다.  여기서는 나중에 혼란을 주기 싫어 동일하게 9999를 입력하였습니다.
내용들을 채우고 [적용] 버튼을 클릭하면 됩니다.  설정은 이게 끝입니다.


한번 외부에서 브라우저를 통해 접속해 볼까요?  외부 IP에 위에서 설정한 Port 9999를 사용합니다.  localhost:9999/getTest에서 localhost를 외부 IP로 변경해주면 됩니다.

 

 

 

접속이 잘 되는 군요.
이번엔 원래 목적인 스마트폰에서도 똑같이 외부 IP를 사용해 http://210.106.XXX.XXX:9999/getTest 주소로 접속해 봅니다.

 

 

 

이것도 잘 되는 군요. 
설정 방법 중 한가지 아직 설명을 안한게 있습니다.  ipTime 입력 창에서 Web Server로 사용하는 컴퓨터의 [내부 IP 주소] 인 로컬IP를 알아야 합니다.

명령 프롬프트에서


C:\>ipconfig/all


하면 아래와 비슷한(유선을 사용한다면 Ethernet adapter...로 시작) 내용을 찾을 수 있습니다.  저는 Wi-Fi를 사용하고 있어서 무선 LAN 어댑터 Wi-Fi 항목을 보면 됩니다.

 

 

 

여기서 IPv4 주소가 컴퓨터 IP입니다.  이걸 itTime에 입력 하면 됩니다.  컴퓨터를 재부팅 해도 왠만하면 잘 변경이 되지 않지만 확실히 하려면 인터넷 디바이스에 설정을 해놓는게 안전 합니다. 재부팅 되었는데 내부 IP가 변경되면 공유기를 또다시 설정 해야 하는데 모르는 사람만 집에 있으면 참 답답 합니다. 

[네트워크 연결]을 열고

 

 

사용하고 있는 무선 또는 유선의 속성을 선택 하여(저는 Wi-Fi, 유선은 이더넷을 사용) 마우스 우클릭 해서 설정을 선택 합니다.

 

 

 

TCP/IPv4를 선택하고 [속성] 버튼을 클릭 하여

 

 

 

IP 설정 창에서 [다음 IP 주소 사용]을 선택하여 아까 보았던 명령 프롬프트에 있는 서브넷, 게이트웨이, DNS등을 보고 내용들을 채워 넣으면 다음에 컴퓨터가 재부팅 되어도 동일한 IP를 사용하게 됩니다. 
실제 설정은 5분도 안걸리는데 글을 써서 올리는 건 퇴근 후 하다보니 몇일이 넘게 걸리는군요. 집에서 서버를 운용하려는 사람들에게 도움이 되었길 바랍니다.

 

- copy coding -


+ Recent posts