회사에서 크롤링용 서버가 필요해 AWS EC2를 검토했지만, 비용 문제와 프록시 관련 오류로 인해 실행이 어려웠다. 대안을 고민하던 중, 사용되지 않고 쌓여 있던 구형 스마트폰이 눈에 띄었다. 스마트폰도 CPU와 메모리를 갖춘 기기이므로, 성능이 다소 떨어지더라도 크롤링 서버로 활용할 수 있지 않을까 하는 생각이 들었다.
스마트폰에서 크롤링 환경 구축하기
1️⃣ UserLand 앱을 이용해 리눅스(Ubuntu) 설치
- Play스토어에서 UserLand 앱을 설치한 후 Ubuntu 환경을 실행
- 최초 실행 시 기본 설정을 따라가면 자동으로 Ubuntu 환경이 설치됨
2️⃣ 원격 접속을 위한 포트 설정
기본적으로 시스템 포트(0~1023)는 사용 불가하므로, SSH를 위해 2022 포트를 사용한다.
echo "Port 2022" | sudo tee -a /etc/ssh/sshd_config
sudo systemctl restart ssh
3️⃣ 루트 권한의 사용자 생성
기본 사용자 계정 대신 새로운 유저를 생성하고 루트 권한을 부여한다.
sudo adduser myuser # 새 유저 생성
sudo usermod -aG sudo myuser # sudo 권한 부여
4️⃣ 생성한 사용자로 로그인 후 SSH 서버(sshd) 설치 및 패스워드 설정
sudo apt update && sudo apt install -y openssh-server
sudo passwd myuser # SSH 접속을 위한 패스워드 설정
- SSH 설정 파일을 수정
sudo vi /etc/ssh/sshd_config
Port 2022
PermitRootLogin yes
- UserLand 앱에서 실행된 Ubuntu는 기본적으로 SSH가 비활성화되어 있으므로 직접 실행해야 한다.
sudo service ssh start
5️⃣ 원격 접속 확인
다른 기기에서 SSH를 이용해 접속할 수 있도록 확인한다.
- PC에서 SSH 클라이언트를 사용하여 접속 (예: Windows에서는 PowerShell 사용)
ssh myuser@스마트폰_IP -p 2022
6️⃣ Git 설치 및 코드 이식
sudo apt install -y git
git clone <https://github.com/내_프로젝트.git>
cd 내_프로젝트
7️⃣ Selenium 실행을 위한 브라우저 설치
- UserLand에서 실행되는 Ubuntu는 aarch64 아키텍처로 잡히므로, 일반적인 크롬 설치가 불가능하다.
- 대신, chromium을 설치해야 한다.
sudo apt install -y chromium-browser
- Selenium을 위한 ChromeDriver도 맞는 버전으로 다운로드해야 한다.
wget <https://chromedriver.storage.googleapis.com/$>(curl -sS <https://chromedriver.storage.googleapis.com/LATEST_RELEASE>)/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/local/bin/
chmod +x /usr/local/bin/chromedriver
8️⃣ 환경 변수 설정
Python 가상환경을 설정하고 필요한 패키지를 설치한다.
sudo apt install -y python3-pip python3-venv
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
9️⃣ 정상 동작 확인
크롤링 코드가 정상적으로 실행되는지 테스트한다.
python main.py
🚀 실사용 후 첫인상
아직 구축한 지 오래되지 않아 장기적인 문제점은 파악되지 않았지만, 현재까지는 정상적으로 작동하고 있다. 당분간은 별다른 수정 없이 그대로 운영할 계획이다. 구형 스마트폰을 활용한 서버 구축은 실용적인 대안이 될 수 있으며, 향후 성능과 유지보수 측면에서 추가적인 실험을 진행해볼 예정이다.
'crawling' 카테고리의 다른 글
selenium Wait (0) | 2022.07.06 |
---|---|
동적 크롤링 (0) | 2022.07.06 |
정적 크롤링 (0) | 2022.07.06 |
HTTP status 코드 (0) | 2022.07.06 |
동적크롤링의 도구 (0) | 2022.07.06 |