![[프로젝트] 스마트폰을 이용한 파이썬 Flask 웹 서버 구동](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fk8Zbt%2FbtsOnYsMQBx%2FAAAAAAAAAAAAAAAAAAAAAPb7KmyenQvRz3YPidT6MgjKanYUriLP2rj-IQGPXAqG%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DuRm87sgfkvtk8kZxDL8%252FS2JB9CI%253D)
안쓰는 스마트폰에 리눅스를 설치하고 파이썬 Flask 기반의 웹 서버를 구동시켜보고자 한다. 물론 여기서 말하는 리눅스 설치는 안드로이드를 완전히 밀어버리는 것이 아니라 안드로이드 위에서 리눅스가 구동된다고 생각하면 된다. 루팅이 필요 없기 때문에 아무리 안쓰는 스마트폰이라고 할지라도 벽돌이 될 걱정은 없을 것 같다(?).
여튼 시작해보자.
(그냥 웹 서버를 가지고 싶다라는 매우 기초적인 생각에 진행한 매우 간단한 사이드 프로젝트입니다.)
목표
- 스마트폰에 리눅스 구동하기 (루팅 X)
- 윈도우에서 ssh로 접속하기
- 파이썬 Flask 서버 구동하기
준비물
- (안쓰는) 스마트폰 혹은 (안쓰는) 태블릿
- (인터넷 연결을 위한) 와이파이
사용하고 있는 스마트폰이나 태블릿도 상관 없겠지만, 웹 서버라는 특성 상 안쓰는 기기로 진행하는 것이 좋다고 생각한다. 또한, 이것 저것 진행하다가 파일에 어떤 위험성이 생길지 모르기 때문에 안쓰는 스마트기기로 진행하자. 이전에 사용했던 갤럭시 S20+가 있었기 때문에 이걸로 진행했다.
리눅스 설치
이제 스마트폰에 리눅스를 설치할 차례이다. 거창하게 리눅스를 설치한다고 했지만, 안드로이드에서 실행되는 앱 위에서 리눅스 배포판이 돌아간다고 생각하면 된다. (아마 이게 맞을 것이다... 따로 파티션을 나누거나 안드로이드 부트로더를 만지는 것은 아니기에)
플레이스토어에서 UserLAnd를 검색하고 설치한다. ( UserLAnd - Linux on Android - Google Play 앱 )
UserLAnd - Linux on Android - Google Play 앱
Android에서 Linux를 실행합니다. 루트가 필요하지 않습니다.
play.google.com
UserLAnd를 통해 설치할 수 있는 리눅스 배포판은 Alpine, Arch, Debian, Kali, Ubuntu가 있다. 리눅스 배포판 중 가장 익숙한 Ubuntu를 설치한다. 본인이 다른 배포판이 익숙하다면 다른 배포판을 설치해도 무방하다. (다만 아래 과정이 안될 수도 있다. 다른 배포판은 시도해보지 않았다.)
권한을 요구하는데, 모든 권한을 허용해주자. (알림만 요구한다..?)
데스크탑 환경을 선택해야 하는데, 여기서는 Minimal를 선택하고,
연결 타입은 Terminal로 설정했다. Graphic도 상관없지만, 어차피 스마트폰에서 UI 보면서 진행할 것이 아니라 ssh로 연결해서 데스크탑으로 진행할 예정이기 때문이다.
여기까지 선택하면, 우분투 설치가 진행된다. 설치까지는 그래도 시간이 꽤 걸리니 (3~4분? 정도) 차분하게 기다리자.
설치가 완료되면, 터미널 방식으로 설치했기 때문에 우분투 터미널이 뜨는 것을 확인할 수 있다.
2025.06.03 기준으로 설치되는 우분투는 22.04 LTS 버전이다.
ssh 연결
우분투 설치가 완료되었으니, 보다 편리하게 데스크탑에서 사용할 수 있도록 ssh 연결을 먼저 진행하였다.
먼저 sudo apt update
를 실행하여 패키지 업데이트를 진행하고, sudo apt install openssh-server
로 ssh를 설치한다.
sudo apt update
sudo apt install openssh-server -y
설치가 완료되면, sshd_config 파일 편집이 필요하다. 편집을 보다 수월하게 하기 위해서 Vim을 설치했다.
sudo apt update
sudo apt install vim -y
설치가 완료되면, sshd_config 파일을 Vim으로 열어 편집한다.
sudo vi /etc/ssh/sshd_config
찾다보면 Port 22
라는 부분이 있는데, 이 부분을 주석 해제하고 22번 대신에 다른 번호로 설정한다. 필자는 Port 2022
로 설정했다. (22번 포트가 일반적으로 ssh에서 사용하는 포트인데, 0~1023번까지는 시스템포트로 사용이 불가능하다고 한다. 따라서 각자 편한 포트 번호로 설정해주면 된다.) 그리고 ListenAddress 0.0.0.0
부분도 주석 해제 한다.
그리고 내리다보면 PasswordAuthentication
이 있는데, 이 부분도 주석 해제한다.
여기까지 했으면, 저장하고 나와서 ssh 서비스를 재시작한다. sudo
를 붙이지 않으면 오류가 뜨니, 만약 fail
이 뜬다면 sudo
를 붙였는지 확인하고 다시 실행하자.
sudo service ssh start
ssh 서비스까지 정상적으로 실행되었으니, 이제 윈도우에서 ssh 연결을 시도해야 한다. 그러기 위해서는 스마트폰의 ip 주소를 알아야 한다. ifconfig
명령어를 실행하기 위해 net-tools
를 설치한다.
sudo apt install net-tools
설치가 완료되면 ifconfig
명령어를 통해 스마트폰의 ip 주소를 확인한다. inet 부분의 ip 주소를 확인하면 되며, 127.0.0.1
은 localhost
이니 가볍게 무시해주면 된다.
그리고 비밀번호 변경도 진행해야 한다. 초기 Username은 모두 동일하게 userland로 설정되지만, 비밀번호는 랜덤이다. 따라서 아래 명령어로 본인이 원하는 비밀번호로 변경하면 된다. (sudo
를 붙이는 이유는 제한 조건 없이 비밀번호를 설정하기 위함이다.)
sudo passwd userland
변경이 완료되면, 윈도우에서 ssh 연결을 시도하면 된다. PowerShell에서도 가능하지만, 보다 쉽고 편하게 터미널을 이용할 수 있는 MobaXterm이라는 프로그램을 이용해서 진행하였다. MobaXterm은 아래 링크에서 설치가 가능하다. (설치는 간단하니 생략)
MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Home Edition
MobaXterm free Xserver and tabbed SSH client for Windows
The ultimate toolbox for remote computing - includes X server, enhanced SSH client and much more!
mobaxterm.mobatek.net
설치가 완료되면, MobaXterm을 실행하고 Session을 눌러 추가한다. ssh 연결을 진행하기 때문에 SSH를 선택하고, Remote host 부분에는 아까 확인한 ip 주소를 입력하고, Specify username에 체크한 후 userland를 입력한다. (만약 본인이 다른 사용자를 추가했다면, 해당 사용자 이름을 입력하면 된다.) 그리고 Port 번호는 아까 sshd_config
파일을 수정하면서 입력했던 포트 번호를 입력하고 완료한다.
방금 만든 Session을 실행하면 아래와 같이 연결이 되며, 아까 설정한 비밀번호를 입력하면 접속된다.
ssh 연결 완료!
Flask 서버 구동
파이썬 및 Flask 설치
Flask 서버가 동작하는지 확인할 것이다. 웹 사이트를 열어서 확인하긴 하지만, hello world가 출력되는 가장 기본적인 형태로 서버가 정상적으로 구동되는지 테스트하는 것이라고 생각하면 된다.
(여기서부터는 ssh로 연결한 상태에서 진행한다.)
먼저 파이썬이 설치되어 있는지 확인한다. (아마 3.10.12
버전이 설치되어 있을 것이다. 설치가 되어있지 않다면 sudo apt install python3 python3-pip
로 설치하면 된다.)
python3 --version
pip3 --version
파이썬이 설치되었다면, 가상 환경을 만들어야 한다. 가상 환경을 만들기 위한 python3-venv
가 설치되어있지 않다. python3-venv
를 먼저 설치한다.
sudo apt install python3-venv
설치가 완료되면 가상 환경을 생성한다. 가상 환경은 어느 위치에 생성하든 상관없지만, 이번 프로젝트에서는 flask_app
디렉토리 아래에 만들었다. (flask_app
디렉토리는 Flask 서버 코드가 올라갈 디렉토리이다.)
mkdir flask_app
cd flask_app
python3 -m venv venv
가상 환경이 생성되면 가상 환경을 활성화한다. (가상환경을 종료할 때에는 deactivate
명령어를 실행하면 된다.)
source venv/bin/activate
가상 환경이 활성화된 상태에서 Flask 를 설치한다. 먼저 가상 환경 내에서 pip 업데이트를 진행한다.
pip install --upgrade pip
업데이트가 완료되면, Flask를 설치한다. 그리고 정상적으로 설치되었는지 확인한다.
pip install flask
pip show flask
Flask 코드 작성
설치가 완료되었으니 간단한 서버 코드를 작성해야 한다. flask_app
디렉토리 안에서 app.py
를 생성한다.
vi app.py
생성한 app.py
파일에 아래 코드를 입력한다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello World! This is Flask server.'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Flask 서버 실행
가상 환경이 실행된 상태에서 Flask 서버를 실행한다. (앞에서 생성한 app.py
를 실행하면 된다.)
python app.py
그럼 정상적으로 서버가 실행되는 것을 확인할 수 있다!
간단하게나마 안쓰는 안드로이드 스마트폰을 사용해서 웹 서버를 구동시켜봤다. 실제로 운영하는 서버를 구동시키는 것은 어려움이 있겠지만, 간단한 학습용이나 개인 포트폴리오를 보여주는 용도로는 유용하게 사용할 수 있지 않을까 싶다. 그럼 이만 끝!
'🤖 프로젝트' 카테고리의 다른 글
[프로젝트] 안드로이드 기기에서 리눅스 GUI 구동하기 (with. Galaxy S20+) (0) | 2025.06.23 |
---|---|
[프로젝트] 스마트폰을 이용한 디스코드 봇 24시간 가동하기 (1) | 2025.06.12 |
[프로젝트] PintOS 프로젝트 - PintOS 세팅 (5) | 2025.04.06 |
since 2025.01.27. ~ 개발자를 향해....🔥