USB 안드로이드 Termux DB 게시판
목록, 보기, 글쓰기, 수정, 삭제가 분리되어 있고 데이터는 DB에 저장됩니다.
DBMariaDB
termux_server_board테이블termux_posts게시글 저장소
게시글7현재 등록 수
관리자대기글쓰기/수정/삭제 권한

1페이지. 안드로이드폰에 Termux를 설치하고 서버 뼈대를 세우는 과정
이 구성의 핵심은 안드로이드폰을 단순한 저장 장치처럼 쓰는 것이 아니라, 작은 리눅스 실행 환경을 가진 서버 노드로 쓰는 데 있다. 현재 연결된 장비는 Galaxy Wide3(SM-J737S), Android 10이며, USB로 192.168.0.197 우분투 22.04 중계서버-PC에 붙어 있다. 외부 도메인은 바로 폰으로 들어가는 것이 아니라 mobile.netcity.co.kr에서 중계서버의 Nginx를 먼저 지나고, 중계서버가 USB ADB 포워딩으로 안드로이드폰의 포트에 요청을 넘긴다. 그래서 폰은 공인 IP를 직접 갖지 않아도 웹 응답을 맡을 수 있고, 중계서버는 도메인, TLS, 라우팅, 상태 확인을 담당한다.
Termux 설치는 먼저 안드로이드폰에서 APK 기반으로 진행한다. 설치 후 처음 할 일은 저장소 권한과 패키지 갱신이다. 기본 흐름은 다음과 같다.
termux-setup-storage
pkg update
pkg upgrade
pkg install openssh nginx php mariadb
저장소 권한을 열어두면 Download, shared 폴더와 서버 파일을 주고받기 편해진다. openssh는 폰 내부로 관리 접속을 하기 위해 쓰고, nginx는 실제 웹 요청을 정리해서 받는 앞단, php는 동적 페이지 실행, mariadb는 게시판처럼 데이터가 필요한 기능을 맡는다. 여기서 중요한 점은 Termux가 안드로이드 위에 올라간 사용자 공간이라는 것이다. 일반 우분투 서버처럼 완전한 시스템 데몬 체계를 전제로 하면 안 되고, 앱 절전 정책, 화면 잠금, 배터리 최적화, 앱 강제 종료 같은 안드로이드 특성을 같이 관리해야 한다.
현재 포트 구조는 다음처럼 확인된다.
폰 내부 8080: 안드로이드 기본 기능을 이용한 초경량 HTTP 응답
폰 내부 8082: Termux PHP 응답
폰 내부 8083: Termux Nginx 응답
폰 내부 8022: Termux SSH
폰 내부 3306: Termux MariaDB
중계서버 쪽에서는 이 포트를 localhost 포트로 받아 둔다.
127.0.0.1:18080 -> Android 8080
127.0.0.1:18082 -> Termux PHP 8082
127.0.0.1:18083 -> Termux Nginx 8083
127.0.0.1:18022 -> Termux SSH 8022
127.0.0.1:18086 -> Termux MariaDB 3306
이렇게 포워딩하면 중계서버의 Nginx는 요청을 상황에 따라 나눌 수 있다. 정적이고 빠른 상태 페이지는 18080으로 넘기고, PHP가 필요한 Termux 웹페이지는 18082 또는 18083으로 넘기는 방식이다. 즉, 하나의 안드로이드폰 안에서도 경량 HTTP 응답 서버와 Termux 기반 웹서버를 분리해서 둘 수 있다. 경량 HTTP는 아주 단순한 응답, 상태판, 안내 페이지에 강하고, Termux는 게시판, PHP 처리, DB 저장 같은 확장 기능에 강하다.
서버 파일은 보통 Termux 홈 아래에 둔다. 예를 들어 ~/www를 만들고 index.php 또는 index.html을 넣은 뒤 PHP 내장 서버를 띄울 수 있다.
mkdir -p ~/www
php -S 0.0.0.0:8082 -t ~/www
Nginx를 사용할 때는 Termux의 nginx 설정에서 listen 포트를 8083처럼 안드로이드에서 충돌이 적은 포트로 잡고, 필요하면 PHP 내장 서버나 php-fpm으로 프록시한다. MariaDB는 데이터 디렉터리 초기화 후 로컬에서만 듣게 두는 것이 안전하다. 외부 공개가 필요한 것은 DB가 아니라 웹 페이지이고, DB는 웹 애플리케이션 뒤쪽에서만 접근하게 두는 것이 운영상 더 낫다.
2페이지. 중계서버를 통한 경량 HTTP와 Termux 웹서버 병행 운영
이 구조의 장점은 역할 분리가 분명하다는 데 있다. 안드로이드 전용 경량 HTTP는 앱 또는 간단한 응답 루틴만으로도 빠르게 페이지를 내보낼 수 있다. 부팅 후 바로 살아나는 상태 페이지, USB 연결 확인, 단순 소개 페이지, 장애 시 대체 안내 페이지처럼 가벼운 일을 맡기기에 좋다. 반대로 Termux 서버는 리눅스 사용자 공간을 활용하므로 Nginx, PHP, MariaDB, SSH 같은 서버 도구를 한꺼번에 묶을 수 있다. 게시판처럼 글을 저장하고 수정하고 삭제해야 하는 기능은 Termux 쪽 구성이 더 잘 맞는다.
중계서버는 두 세계를 묶는 입구다. 192.168.0.197 우분투 22.04 중계서버-PC는 도메인 요청을 받고, 내부에서 127.0.0.1:18080, 18082, 18083 같은 포워딩 포트로 넘긴다. 사용자는 mobile.netcity.co.kr만 접속하지만, 실제 운영자는 뒤쪽에서 어떤 요청을 초경량 HTTP로 보낼지, 어떤 요청을 Termux Nginx로 보낼지 선택할 수 있다. 그래서 스마트폰 한 대로도 서버처럼 보이게 만들 수 있고, 스마트폰 두 대를 USB 허브에 붙이면 한 대는 경량 응답 전용, 한 대는 Termux 웹서버 전용으로 나눌 수도 있다.
실제 운영에서는 다음 기준으로 나누는 것이 좋다.
첫째, 변경이 거의 없는 안내 페이지와 상태 페이지는 경량 HTTP로 둔다. 파일 수가 적고 DB가 필요 없으면 이쪽이 단순하다. 장애가 났을 때도 원인을 찾기 쉽고, 페이지가 작으면 구형 스마트폰에서도 부담이 적다.
둘째, 글쓰기, 로그인, 첨부 이미지, 게시판, 관리 기능은 Termux 웹서버로 둔다. PHP와 MariaDB를 붙이면 일반 웹호스팅처럼 기능을 만들 수 있다. 지금 만든 usb-android-termux-server/board/ 게시판도 이런 방향이다. 목록, 보기, 글쓰기, 수정, 삭제를 분리하고 DB에 저장하면 정적 페이지보다 운영 기록을 남기기 쉽다.
셋째, 외부 공개는 중계서버에서 제어한다. 폰 포트를 그대로 인터넷에 열지 않고, 우분투 중계서버의 Nginx에서 도메인과 경로를 통제한다. 이 방식은 보안과 관리 측면에서 유리하다. 폰이 교체되거나 포트가 바뀌어도 중계서버의 프록시 설정만 바꾸면 외부 주소는 유지할 수 있다.
넷째, 재부팅과 절전 정책을 운영 항목으로 둔다. 안드로이드폰은 서버 전용 장비가 아니므로 배터리 최적화 예외, 충전 상태, 화면 잠금, 앱 자동 종료 정책을 확인해야 한다. Termux에서 실행한 프로세스도 폰이 절전 모드로 깊게 들어가면 끊길 수 있으므로, 장시간 운영 전에는 `ss -ltn`, `curl`, 중계서버 로그로 주기적으로 확인하는 절차가 필요하다.
현재 확인된 상태에서는 8080 경량 HTTP, 8082 PHP, 8083 Nginx가 HTTP 200 응답을 내고 있다. 8022 SSH와 3306 MariaDB 리스너도 열려 있다. 즉, 안드로이드폰은 단순히 페이지를 보여주는 장치가 아니라, USB를 통해 중계서버와 묶인 초소형 웹서버 노드로 동작할 수 있다. 여기에 게시판 같은 DB 기능을 올리면 Termux 기반 웹서버의 의미가 분명해진다.
정리하면, 이 운영 방식은 "중계서버가 외부 입구를 맡고, 안드로이드폰이 실제 응답 노드를 맡는 구조"다. 경량 HTTP는 빠르고 단순한 응답을 담당하고, Termux는 Nginx/PHP/MariaDB를 이용해 확장 기능을 담당한다. 구형 스마트폰이라도 USB 전원과 ADB 포워딩을 안정적으로 유지할 수 있다면, 실험용 서버, 안내 페이지, 소규모 게시판, 내부 상태판까지 충분히 운영할 수 있다. 다만 공개 서비스로 키울 때는 백업, 접속 제한, 로그 관리, DB 보안, 재시작 자동화까지 함께 설계해야 안정적인 스마트폰 서버가 된다.