[IT] 기타 IT 지식들

루팅없이 안드로이드폰을 node.js서버(웹 서버)로 만들기

로얄거북 2019. 2. 15. 12:28
반응형

남는 스마트폰을 루팅없이 node.js 서버(웹 서버)로 이용할 수 있는 방법입니다. 참고로 안드로이드 버전이 5.0 이상만 가능한 방법입니다.


* 혹시 중간에 안되는 부분이 있으면 오래 붙잡으며 너무 스트레스 받지 마시고 댓글로 올려주시면 확인하겠습니다.

스마트폰에 Node.js 실행시키기

* 이 부분은 해외 웹사이트에서 요약 및 번역한 것입니다.

* 원활한 진행을 위해서 유선 또는 무선 키보드를 해당 스마트폰에 연결하거나 "Hacker's Keyboard" 어플을 설치합니다.


1. 해당 스마트폰에 "termux" 어플을 구글플레이에서 설치합니다 (5.0 버전 이상만 설치가능합니다.)


2. 이후 "termux" 어플을 실행하면 검은 화면에 흰 글씨가 나옵니다.


3. 그리고 다음과 같이 적고 엔터를 눌러 업데이트를 실시합니다. (설치시 나오는 질문에는 Y를 눌러 엔터를 치시면 됩니다.)


$ apt update && apt upgrade
cs

4. 그리고 coreutils를 설치합니다.


$ apt install coreutils
cs


5. 텍스트 편집기인 vim을 설치합니다.


$ apt install vim
cs


6. node.js를 설치합니다.


$ apt install nodejs
cs


7. 프로젝트를 담을 폴더를 만들고 들어가 줍니다.


$ mkdir test-node && cd test-node
cs


8. npm init를 통해 package.json 파일을 만들어 줍니다. (과정 중 나오는 모든 문구에 엔터를 치시면 됩니다.)


$ npm init
cs


9. node.js 서버를 위한 Express 모듈을 설치합니다. (--save는 해당 폴더의 프로젝트에만 모듈을 설치하는 구문입니다.)


$ npm install express --save


10. 코드를 적을 index.js 파일을 만들고 vim을 통하여 파일을 열어줍니다.


$ touch index.js
$ vim index.js
cs


11. 나오는 화면에서 'i'를 눌러서 편집기능을 실시하고 다음과 같이 타이핑 합니다.


var express = require('express');
var app = express();
 
app.get('/'function(req, res) {
   res.send('Hello World!');
});
 
app.listen(3000function() {
   console.log('Example app listening on port 3000!');
});
cs


12. ESC 키를 누르고 ":wq"를 쳐서 저장 후 나가기를 해줍니다.


13. 이제 해당 파일을 node.js로 실행해 줍니다. 그러면 'Example app listening on port 3000!' 글자가 뜹니다.


$ node index.js
cs


14. 이제 해당 스마트폰에서 인터넷 브라우져를 실행하여 "localhost:3000" 주소로 들어가면 "Hello World!"라고 적힌 웹사이트를 확인 가능합니다.


15. 서버를 중지시키고 싶으시면 서버용 스마트폰에다가 "Ctrl + C"를 누르면 됩니다.



외부 네트워크에서 스마트폰 서버에 접속하기 (iptime 공유기 기준)


 만약 node.js를 실행시키고 있는 스마트폰이 공유기에 연결되어있다면, 이를 외부 네트워크에서 접속하기 위해서는 여러 절차들이 필요합니다. 일단 제가 iptime 공유기 밖에 가지고 있지 않아서 그것을 기준으로 작성하겠습니다.

(참고로 제 모델은 IPTIME A1004NS입니다.)


   0. 사전 준비

1. 일단 해당 공유기에 연결되어있는 장치에서, 웹 브라우져를 통해 "192.168.0.1"로 들어옵니다.
(컴퓨터와 공유기를 LAN선으로 직접 연결시키거나 무선으로 연결된 장치를 이용합니다.)


2. 아이디와 비밀번호를 치고 로그인한 후 <관리도구>로 들어옵니다.


3. 일단 <펌웨어 업그레이드>에 들어가서 펌웨어를 업그레이드합니다.


   1. DDNS 설정하기

 공유기에 할당되는 IP 주소는 언제든지 변경될 가능성도 있고 외우기도 힘들기 때문에 "www.~~~.iptime.org"의 형식으로 해당 공유기에 접속할 수 있게 만드는 과정을 설명하겠습니다.


1. iptime 공유기의 <관리도구>에서 <고급 설정> - <특수기능> - <DDNS 설정>으로 들어옵니다. 그럼 다음화면이 보입니다.


2. 다음과 같이 기입하고 <DDNS 등록> 버튼을 클릭합니다.


호스트이름

 자신이 사용하고자 하는 주소명

사용자 ID

 관련 정보를 받을 Email 주소


3. 아래 쪽에 새로 생긴 호스트가 정상 등록되었으면 이제 해당 공유기, 그리고 그 공유기에 접속된 기기를 "(호스트이름).iptime.org"의 주소로 접속할 수 있게 된 것입니다.

 

4. 윈도우에 내장된 "명령 프롬프트" 프로그램으로 다음 구문을 실행하여 결과가 성공적이면 정상적으로 등록된 것입니다.


ping (호스트이름).iptime.org
cs


   2. 해당 스마트폰의 할당된 IP 고정

 공유기는 자신에게 연결된 기기들에게 IP 주소를 배정해줍니다. 그러나 연결시마다 그 주소가 바뀔 수 있는데, 그럴경우 외부에서 접속하기 까다로워질 수 있으므로 서버로 사용할 스마트폰의 IP를 고정해주는 작업이 필요합니다.


1. iptime 공유기의 <관리도구>에서 <고급 설정> - <네트워크 관리> - <DHCP 서버 설정>으로 들어옵니다.


2. 제일 아래쪽에 "사용중인 IP 주소 정보"가 보이는 데, 거기서 서버로 이용할 스마트폰을 체크해줍니다.


내부 IP 주소

 MAC 주소

 장치 이름

 (연결방식):(할당방식)

 체크 버튼


 * 장치 찾는 방법

  - 스마트폰의 설정 어플에서 <디바이스 정보> - <상태>에서 "W-Fi MAC주소"를 확인하여 똑같은 MAC 주소가 있는 행을 찾으면 됩니다.

  - 참고로 메뉴의 정확한 이름은 스마트폰마다 다를 수 있습니다.


3. 그리고 그 주위에 보이는 "등록" 버튼을 클릭하면 위에 "등록된 주소 관리" 쪽에 해당 IP가 올라와 있는 것을 볼 수 있습니다.


 * (옵션) 현재 설정된 내부 IP 주소를 변경하여 등록하는 방법

 이 방법은 현재 공유기가 부여한 내부 IP 주소를 그대로 유지 및 고정 하는 방법입니다. 임의의 숫자로 변경하고 싶어서 아래의 "수동 주소 입력"을 통해서 등록을 하고 싶으시면 또 절차가 있습니다. (귀찮으신 분들은 현재 내부 IP 주소로 그대로 고정시키고 다음 단계인 "포트포워드 설정"으로 가셔도 됩니다.)


 일단 이유를 설명하자면은 이미 각각의 스마트폰에는 어떤 공유기와 접속할 때, 어떤 내부 IP로 접속할 지 저장되어 있습니다. 그렇기 때문에 공유기에서 수동으로 등록을 시켜놔도 알아서 스마트폰에서 공유기에게 기존의 내부 IP를 요구합니다. 그래서 그 정보를 지우는 절차가 필요한 건데, 그나마 간단한 방법을 소개하겠습니다. (주의 : 잠시동안 해당 공유기에 연결된 장치들이 모두 해제됩니다.)


  - 아래에 있는 "수동 주소 입력"에서 { "원하는 내부 IP" / "Wi-Fi MAC 주소" / "장치 설명" }을 입력 후 "수동 등록" 버튼을 누릅니다.

  - 그러면 "등록된 주소 관리" 쪽에 해당 칸이 새로 뜬 것을 볼 수 있습니다.

  - 그리고 제일 위 쪽의 "DHCP 서버 설정"에서 다음과 같이 적용 후 "적용" 버튼을 누릅니다.


        DHCP 서버 동작 : 중지

        IP주소 대여 시간 : 1분


  - 이제 서버용 스마트폰의 와이파이를 해제하고 공유기 관리 페이지를 새로고침하여 "사용중인 IP 주소 정보"에 해당 장치가 없어질 때까지 확인합니다.

  - 확인 후 서버용 스마트폰의 와이파이를 다시 연결을 시도합니다. 그러나 IP 주소를 받지 못하여 실패할 것입니다.

  - 이후 IPTIME 공유기 설정에서 "DHCP 서버 동작"을 다시 실행으로, "IP 주소 대여시간"을 원상태로 복원 후 "적용" 버튼 누릅니다.

  - 스마트폰의 연결이 완료되면 내부 IP 주소가 바뀐 것을 볼 수 있습니다. 


   3. 포트포워드 설정하기

 이제 공유기까지는 접속가능하지만 공유기에서 연결된 기기와 통신하기 위해서는 포트포워드를 설정해주어야 합니다. 개념을 간단히 설명하자면 외부에서 어떤 포트를 통해 공유기에 접속하면, 자동으로 다른 연결된 기기의 다른 포트와 이어주는 기능입니다.


 * 포트는 마치 어떤 공간에서 들어오고 나가는 문에 각각 독립된 숫자가 적혀있는 형상으로 생각하시면 됩니다.


1. iptime 공유기의 <관리도구>에서 <고급 설정> - <NAT/라우터 관리> - <포트포워드 설정>으로 들어옵니다.


2. 여기서 설정해야 하는 것은 4개가 있습니다.


규칙이름

 해당 규칙의 이름을 정해줍니다. (예시 : 핸드폰 HTTP 서버)

 내부 IP 주소

 서버로 사용할 핸드폰의, 고정시켜 놓은 내부 IP 주소를 적으면 됩니다.

 외부 포트

 외부에서 접속할 포트 번호 (웹 서버임으로 첫번째 칸에만 80을 적으면 됩니다.)

 내부 포트

 내부로 연결시킬 포트 번호 (예시의 node.js 포트를 3000으로 해두었으니, 첫번째 칸에만 3000을 적으면 됩니다.)


3. 그리고 오른쪽 아래의 "적용" 버튼을 클릭하면 상단에 등록된 것을 확인할 수 있습니다.



   4. 연결 시험해보기

 스마트폰에서 node.js로 서버가 실행되고 있는지 확인하고 꺼져있으면 재실행시킵니다. 그리고 웹 브라우져에서 자신이 등록시켜 놓은 DDNS 주소를 입력해봅시다.("(호스트이름).iptime.org") 그리고 Hello World! 페이지가 잘 나온다면 이제 성공한 것입니다.



원활한 서버 제작을 위한 기타 작업들

 * 원격 접속(SSH)

 아무래도 스마트폰의 화면이 너무 작다보니까 직접 프로그래밍 하기에는 힘듭니다. 따라서 컴퓨터에서 원격으로 연결하여 이용할 수 있는 SSH 방법을 설명하겠습니다.


1. 서버용 스마트폰에서 "Termux"를 켭니다.


2. openssh를 설치합니다.


$ apt install openssh
cs


3. ssh용 공용 ID 키를 생성합니다.


$ ssh-keygen
cs

4. openssh를 실행합니다. (백그라운드에서 실행됩니다.)


$ sshd
cs

5. 계정 비밀번호를 설정합니다. (명령어를 입력하면 자동으로 입력줄이 뜹니다.)


$ passwd
cs


6. 공유기에서 새로운 서버용 스마트폰의 포트포워드 규칙을 적용시킵니다. (상단의 "3.포트포워드 설정하기" 참고)

규칙이름을 다르게 하고, 또한 외부포트와, 내부포트 모두 8022로 하여서 새로 만들면 됩니다.


7. 이제 SSH를 사용할 수 있는 프로그램으로 접속할 수 있습니다.

편한 예시를 들자면 윈도우 운영체제에 "Powershell"이라는 프로그램을 실행시키고 다음을 실행하면 됩니다.


ssh -8022 (호스트이름).iptime.org
cs


그리고 설정한 비밀번호를 치면 이제 원격조종이 가능합니다. 빠져나오는 건 "exit"를 치면 됩니다.




 










 


반응형