Backend/spring boot

외부에서 spring boot 서버에 접속 해보기(접속 안 될 때 이슈, sk 브로드밴드 포트포워딩)

attlet 2023. 8. 11. 17:42

프로젝트를 진행하던 중, 프론트 팀원으로부터 한 번 열린 서버를 통해 테스트해보려 한다는 이야기를 듣고 외부에서 접속을 위한 준비를 했다. 포트포워딩을 하는 과정과, 그 과정에서 발생한 이슈들을 이야기 하려한다.

 

 

내 로컬 컴퓨터에서 실행되는 애플리케이션 서버에 접속하기 위해서는 당연히 내 컴퓨터의 주소를 알아야 할 것이고, 주소를 알고 pc로 찾아왔다면 그 다음에는 spring이 실행 중인 애플리케이션 포트 위치를 알아야 할 것이다. 

 

 

 

먼저 아이피 확인을 위해 cmd창을 켜 ipconfig/all을 입력했다. 

 

 

ipv4 부분을 내 컴퓨터가 할당받은 내부 ip로, 이를 이용해 포트포워딩을 진행하려 한다. 

 

 

우리집 공유기는 sk 브로드밴드를 사용하고 있다. 포트포워딩을 위해 기본 게이트 웨이 ip를 이용해 브라우저에서 접속하면 이런 창이 나온다. 

 

 

 

아이디 비밀번호는 디폴트로는 아이디는 admin, 비밀번호는 유선 mac address 마지막 6자리로 설정되어 있다. 

 

 

 

 

로그인하면 가운데 떡 하니 포트포워드 설정하는 곳이 있다. 

 

 

 

 

4 번째 줄이 내가 추가한 것이다. 다른 포트와 겹치지 않을 만한 9999로 했다. (80, 8080은 sk 브로드밴드에서 사용 못하게 막아놨다..)

 

외부 포트는 외부에서 접속할 때 들어오는 포트 번호이다.

 

내부 ip 주소는 위에 ipconfig로 알아낸 ipv4를 그대로 입력해주면 된다. 내 로컬 pc의 ip주소를 찾아내기 위함이다.

 

내부 포트는 내 spring boot 애플리케이션이 사용하는 포트번호이다. 

 

 

이제 우리 집에 할당된 인터넷 ip 주소를 알아내본다. 외부 ip라고 하며, 이는 보통 네이버에 내 아이피 라고 검색하면 알 수 있다.

 

 

 

 

외부 ip를 알아 냈으니 내 포트에 접속하는 것을 허용하는 작업도 했다. 

 

 

 

 

방화벽 설정에서 고급 설정에 들어간다.

 

 

 

 

 

 

고급 설정에서 인바운드 규칙 -> 새 규칙을 통해 새로운 규칙을 생성한다. 

 

 

 

우리가 원하는 건 특정 포트를 외부에서 접속할 수 있도록 개방하는 것이니 포트를 고른다.

 

 

 

 

 

 

특정 로컬의 포트만 개방하도록 설정한다. 나는 spring boot를 외부에서 접속하게 하려 할테니 8080포트를 지정한다.

 

 

그 다음 계속 다음을 눌러 넘어가면 새로운 규칙이 생성된다.

 

 

 

 

 

 

이러면 이제 외부ip + 포트포워딩 때 지정한 외부 포트번호  1.246.xxx.xxx:9999를 브라우저 검색창에 입력하면 내가 켜놓은 8080포트의 서버에 접속하게 되는데... 여기서 문제가 생겼었다. 방화벽을 해제하든, 그 외에 여러 수를 써봐도 접속이 안 되는 것이다.

 

 

찾아보니 우리 집 인터넷 구조의 문제였다. 

 

 

대충 내가 생각했던 우리 집 인터넷 구조는 이랬다. 공유기 하나를 통해 집에서 인터넷을 사용하는 줄 알았다. 이런 구조일 때 외부 ip에 9999 포트로 공유기로 접속하면 포트포워딩 설정을 통해 내 로컬 컴퓨터 ip의 8080포트로 접속이 되도록 하는게 위에 설정이다.

 

 

그런데 우리 집 구조는 이런 것이었다.

 

 

 

 

 

공유기를 한 번 더 거치는 구조로 되어있었다. 첫 번째 공유기로 먼저 들어온 다음, 내 방의 공유기로 오고 그 뒤에 내 컴퓨터로 오는 방식이다. 

 

 

이런 구조를 알게 된 건, 공유기 관리 페이지에서 본 외부 ip랑 브라우저에서 검색해서 알아낸 외부 ip가 달랐던 부분을 보고 이상함을 느꼈고, 그것을 검색을 통해 알게 되었다.

 

 

 

 

 

 

내 컴퓨터와 연결된 공유기 관리 페이지에서 네트워크 상세 정보 창에 들어간 모습이다. 1.xx로 시작하지 않고, 192.168.xx로 시작하는 것을 볼 수 있다. 외부 ip와 완전히 다른 구조로 되어 있는데, 이 부분에서 의구심을 가지게 되었다.

 

 

 

즉, 포트포워딩을 두 번 해야한다.  

 

 

이 사실을 몰랐던 나는 외부 ip로 받아도 그 다음 내 공유기를 찾지 못한다는 사실을 몰라 계속 거부가 떴던 것이다ㅜㅜ

 

 

 

외부 ip를 브라우저 url입력창에 입력해 들어가면 나오는 공유기 관리창에서, 포트포워딩을 한 번 더 한다. 외부포트는 8080을 열 것이고, 8080으로 들어오는 신호는 내부 공유기 ip의 9999번 포트에 보낸다는 걸 의미한다.

 

 

 

 

 

그러자 성공적으로 http response를 받는 것을 볼 수 있다. 오류 페이지는 내가 서버에 작성을 완전히 끝내지 않아 뜨는 것이다. 결국 외부에서 내 컴퓨터의 서버 애플리케이션에 접속하는데 성공했다.