※ 주의: 이 글을 따라 하시고 핸드폰으로 실사용자를 받는 서버를 띄우셔서 생기는 문제는 제가 책임 못 집니다.
재미로만 하세요
사실 이번 글은 개발적으로 도움이 크게 되는 글은 아닙니다. 딱히 여태 쓴 글들이 개발적으로 도움 되는 글이었는지는 몰루?
낮에는 회사일을하고 퇴근후 남는 시간에 저는 보통 개발을 (라고 하지만 사실 뻘짓) 하거나 개발 관련된 글을 읽습니다. (책, 블로그, 커뮤니티, 등등..)
그런데 어쩌다 오랜만에 레딧에 Termux서브레딧이 추천으로 뜨더라구요.
사실 제가 Termux를 많이 사용합니다. 요즘 MZ 세대에서 흔하지 않은 안드로이드 폰 유저로서 태블릿이나 핸드폰에 Termux를 사용해 우분투를 띄어보기도 하고, 그 우분투로 코딩도 해보고.. 하여튼 별짓을 다 해봅니다. 요즘도 가끔 태블릿 들고 다니면서 코딩 합니다.
그러다가 번뜩 생각난겁니다... 생각해보니 저걸 잘 사용하면 핸드폰으로 서버를 띄울수 있잖아?
그래서 직접...! 안드로이드 핸드폰에 고랭으로 만든 기본적인 백엔드서버를 올리는 과정(튜토리얼)에 대해서 글을 써보려고 합니다!
Termux는 안드로이드 운영체제에서 사용가능한 리눅스 유사환경 터미널 에뮬레이터 입니다.
완벽한 리눅스 터미널은 아니고 유사 환경인 이유는 기본적으로 안드로이드에서는 루트 권한이 없을 경우 리눅스 FHS를 따르지 못하기 때문에 그렇습니다. (FHS가 뭔지는 이 링크를 참고 하세요!) 하지만 핸드폰 루팅을 한다면?
일단 유사 환경이지만 필요한건 대부분 지원이 됩니다. 파이썬 설치, 자바 설치, 고언어, 등등.. 대부분 저희가 개발할때 필요한 언어나 컴파일러들 설치가 가능합니다. 심지어 우분투, 데비안, 등등 리눅스 distro들 설치도 가능합니다! (물론 Termux에 맞게 대부분 조정이 되어있습니다)
아실분들은 알겠지만 안드로이드 OS는 리눅스 커널기반 OS입니다. 즉 잘만 사용하면 리눅스 운영체제를 안드로이드 위에서 같이 구동 시키는건 아주 어려운건 아닐겁니다. (물론 저는 어떻게 했는지 모릅니다)
준비물은 생각보다 간단합니다.
안드로이드 핸드폰 하나만 있으면 됩니다.
제가 추천 하는 스펙은 그래도 램이 좀 넉넉한게 좋습니다 (최소 4~6기가 램)
저는 고인이 된 LG에서 2018년도에 출시한 플래그십 핸드폰 LG G7 ThinQ를 사용했습니다.
대충 스펙은...
1. SoC (CPU+GPU+....) QualComm Snapdragon 845 (대략 10년전 노트북 성능쯤 됩니다)
2. Ram 4GB (안드로이드 운영체제가 램 3기가를 먹어치워서 사용가능한 램은 사실상 1기가..)
3. Rom 64GB
4. Android OS 10
입니다만..... 저거보단 좋은거 사용하시는걸 추천합니다.
그래도 방탄이 광고 했었다고!
일단 이 튜토리얼의 핵심적인 Termux를 설치를 하겠습니다.
Termux는 F-Droid라는곳에서 받으면 됩니다.
핸드폰으로 웹사이트 접속을 하셔서 이 링크를 들어가시면
이런 페이지가 나오는데.. 좀 아래로 내리시면
version 0.118.1 (1000)이 있습니다.
Download APK를 눌러서 핸드폰에 받으시면 됩니다.
받으셨으면 설치를 해서 열어주시고 이런 화면이 뜨면 성공입니다!
자 이제 패키지들을 설치하고 저장공간을 사용하려면 허용을 해줘야합니다.
터미널에 termux-setup-storage
해주시면 됩니다.
그러면 아래와 비슷한 알림이 뜨는데 허용 눌러주시면 됩니다.
이제 다른 작업을 하기 전에 패키지 업그레이드를 진행 하겠습니다.
터미널에 pkg update
를 해주시면 됩니다. (시간이 좀 걸립니다)
위와 같이 진행이 끝나면 pkg upgrade
를 해주시면 다 업그레이드 됩니다. (참고로 [Y/n] 나오면 다 Y해주시면 됩니다) 이거도 시간이 좀 걸릴수 있습니다.
끝났습니다.
이제 ssh접속에 필요한 패키지들을 설치 해봅시다.
터미널에 pkg install openssh nmap
을 해주시면 됩니다.
참고로 설치를 하면 eds25519key와 sha256 key fingerprint가 터미널에 출력이 되서 스크린샷은 첨부를 못했습니다.
다 되면 터미널에 clear
커맨드로 한번 정리 해줍시다.
위에 잘 설치가 되었으면 이제 ssh서버 유저와 비밀번호를 정해봅시다.
터미널에 whoami
를 치시면 유저네임을 알아낼수있습니다. 보통 u0_a뭐뭐뭐 이런 형태입니다.
그럼 이제 비밀번호를 설정 해봅시다.
터미널에 passwd
을 치시고 비밀번호를 정해줍시다. 까먹으면 안됩니다!
ssh 설정이 끝났습니다.
이제 ssh실행을 해서 컴퓨터에서 접속을 해봅시다.
터미널에 sshd
로 실행을 해줍니다.
그 이후 nmap localhost
로 확인을 해줍니다.
위 사진같이 8022/tcp open oa-system
이 보이시면 성공입니다.
자 이제 서버로 접속을 컴퓨터에서 해봅시다. 그러려면 기기의 ip주소를 알아야 합니다.
참고로 튜토리얼에서는 외부로 노출을 하지 않을거기 때문에 핸드폰과 컴퓨터가 같은 와이파이에 연결이 되어있어야합니다.
ip 주소를 알기 위해 터미널에 ifconfig
를 입력 해봅시다
그럼 위 같이 뜨는데 wlan0: 에 속해있는 inet옆 ip주소를 어디에 적으면 됩니다.
이제 컴퓨터로 ssh접속에 필요한 모든걸 알아냈습니다. 컴퓨터에서 Terminal을 실행하셔서 (윈도우 분들은 비슷한거 키셔서) ssh 유저네임(u0_a뭐시기)@ip주소 -p 8022
를 입력 하시면 처음 접속이니 fingerprint뭐시기가 뜨는데 당연히 yes 입력 해주시고.
엔터를 누르시면 비밀번호를 요구하는데 아까 설정해둔 비밀번호 입력 하시면 됩니다.
접속을 성공했습니다!
핸드폰 스펙을 확인 해보고싶으시면 lscpu
로 확인 해보시면 됩니다.
잘 보이는군요.
Vendor ID: Qualcomm
자 이제 ssh 접속을 했으니 더이상 작은 핸드폰 화면으로 커맨드를 날리지 않아도 됩니다! 으악 내눈
일단 git을 설치하고 추가적으로 golang을 설치할겁니다. 왜냐고요? 저는 고랭을 자주 쓰는 개발자라 고랭으로 서버를 띄우고 싶거덩요... (고퍼 커여운데 다들 고랭 하세요. 너무 댕청하고 귀엽게 생기지 않았나요?)
는 장난이고 사실 파이썬이나 노드 아니면 자바도 하고는 싶은데 핸드폰 스펙이 너무 부족해서 리소스를 많이 사용하는 언어를 올리면 어떻게 될지...
(근데 c/c++, rust는 제가 잘 못합니다)
터미널에 pkg install git
으로 설치를 해봅시다.
git version
으로 확인해보면
잘 설치 되었군요.
이제 Golang을 설치 해봅시다. (좀 시간이 걸립니다)
pkg install golang
go version
으로 확인 해보면..
잘 설치 되었군요.
그 이후 pkg install binutils rust
로 binutils와 rust를 설치하는걸 권장합니다. 컴파일 할때 시간이 많이 단축 됩니다. (에초에 저 두개를 설치 안하면 컴파일이 끝나지 않아요) 사실 이 부분은 아직 잘 모르겠습니다. 아시는분 있으면 댓글로...
제가 테스트를 위해 임시로 만들어둔 고 서버 레포가 있습니다. (엔드포인트 3개만 있는 테스트용입니다) 레포 링크
/
은 "Hello World"
/test
은 "테스트 엔드포인트입니다."
/item?name=
은 name쿼리에 아무거나 넣어주면 "아이템 이름은 {name}입니다."로 출력 해줍니다
일단 git clone을 해줍니다.
디렉토리로 들어가서 빌드를 main.go를 빌드 해줍시다.
이제 실행을 해주면...
나이스!
이제 한번 엔드포인트들을 curl
로 테스트 해봅시다.
curl -X GET http://<ip주소>:8080/
curl -X GET http://<ip주소>:8080/test
curl -X GET http://<ip주소>:8080/item?name=개미핥기
나이스!
제 컴퓨터에서 핸드폰에 올라간 고 백엔드 서버에 요청이 잘 들어갑니다.
안드로이드 핸드폰을 온프레미스 서버로 사용하는건 생각보다 쉽게 되었습니다.
하지만 이 방법이 완벽하면 모두가 컴퓨터 대신 남아도는 핸드폰을 가지고 서비스 운영을 했겠죠...
먼 미래 모습?
이 방법에 치명적인 단점들이 몇개 있습니다.
즉 sudo를 사용 못합니다.
수정: termux위에 proot-distro 로 우분투를 설치 하시면 가능합니다. (물론 안드로이드 자체를 좌지우지 할수있는 sudo는 아님)
그리고
안드로이드는 리눅스 커널 "기반"이지 똑같지 않습니다.
그래서... 도커가 실행이 안됩니다! 에?
물론 방법은 있긴 합니다. 바로 termux위에 vm을 올려서 그 위에 도커를 설치해서 돌릴수는 있는데.. 엄청 느립니다. 당연하겠지
참고로 설치는 됩니다. 실행이 안될뿐...
실서비스를 돌릴만큼 좋은 핸드폰을 사용한다는 가정하에 중고로 30~40만원을 사용한다고 합시다. 1~2년전 플래그쉽 (갤럭시 s23정도) 핸드폰 기준 대략 4~5년전 노트북 성능을 낼수있습니다.
그 돈이면 괜찮은 미니피씨를 16-512구성으로 구매해서 온프레미스 서버를 구축하고도 남습니다. 즉 장점이 1도 없습니다.
왜냐구요? 신기하고 재미있잖아요.
그냥 집에 남아도는 핸드폰이나 태블릿에 이런거 한번씩 해보면 재미있지 않나요? 아니면 죄송합니다.
그냥 이런거도 가능하다~ 정도로 이해를 해주시면 됩니다!
이런 신기한 기술들을 경험해보면 언젠가는 세상을 바꾼 괴짜 개발자가 될수있지 않을까요?
그리고 이런건 그냥 하는 사람이 행복하면 된겁니다. 헤헷
읽어주셔서 감사합니다
재미있게 읽었습니다