아들의 단어 암기에 도움이 될지도(?) 모르는 온라인 영어 단어장을 만들어 보기로 결심했다. 클래스카드라는 이미 훌륭한 단어 암기사이트가 존재함에도 나만의 특색 있는 단어장을 만들고 싶다.
1. 서버 선택
다양한 서버운영 형태가 존재하겠지만, 비용이 가장 적게 드는 방식의 서버를 운영하고 싶었다. 대부분의 클라우드를 서버를 보면 매월 비용이 지급되는 형태로 적어도 1만원 이상의 비용이 지출됨을 알수 있다.
선택한 방식은 자체 서버 운영을 하기로 했다. 처음에는 데스크탑PC에서 서버를 구축하고자 했으나 24시간 365일 서버를 운영하기 위해서는 전기료가 클라우드 서버를 이용하는 것 만큼 소요됨을 알 수 있었다.
집에서 굴러다니던 안드로이드 폰(A32)을 웹서버로 사용하기로 했다. 충전은 24시간 타이머에 연결하여 매일 새벽1시에 1시간 정도만 충전을 하게 해두었더니, 아침에 82%정도의 배터리 용량이 꾸준하게 유지되었다. 하루에 1시간 정도만 충전하는 안드로이드 폰을 서버로 운영하는게 가장 비용이 적게 소요될 거 같다.( 좀 더 저렴한 방법이 있으신 분들은 댓글로 좀 알려주세요 ^^ )
2. 안드로이드폰을 리눅스 웹서버로 셋팅
루팅을 이용하여 리눅스를 사용할 수도 있지만 너무 복잡하였고, termux 를 활용하여 리눅스 서버를 셋팅할 수 있었다. code-server를 활용하여 온라인으로 바로 접속하여 코딩하고 웹서비스를 할 수 있는 시스템을 구축하였다. nodejs, pm2, mongo, code-server 등을 설치하여 웹서비스를 운영하고 개발할 수 있는 환경을 완성하였다.
3. 알림 시스템 설정
배터리의 상태를 주기적으로 확인하고 시스템의 상태를 확인하기 위해 telegram api를 셋팅하였다. 매일 아침 9시에 안드로이드 폰(A32)의 배터리 상태를 telegram 메시지로 확인 할 수 있다. 아래코드에서 token과 chatId만 변경하면 node {파일명} 으로 실행하여 메시지를 보낼 수 있다. 스케줄은 crontab에 걸었다.
0 9 * * * node /data/data/com.termux/files/home/telegram_bot/check_battery.js
const TelegramBot = require('node-telegram-bot-api');
const { exec } = require("child_process");
// replace the value below with the Telegram token you receive from @BotFather
const token = '0000000:0000000-00000000000-000000000-0000000';
// Create a bot that uses 'polling' to fetch new updates
const bot = new TelegramBot(token, {polling: false});
const chatId = "00000000";
exec("termux-battery-status", (error, stdout, stderr) => {
if (error) {
console.log(`error: ${error.message}`);
return;
}
if (stderr) {
console.log(`stderr: ${stderr}`);
return;
}
var result = JSON.parse(stdout)
console.log(result)
var tem = Math.round(result.temperature*100) / 100
bot.sendMessage(chatId, `배터리: ${result.percentage} % , 온도: ${tem} ℃` );
})
4. 개발 환경 설명
pm2 로 node 서버로 띄웠다. pm2 의 경우 watch 옵션을 켜두면, 소스가 바뀔때마다 자동으로 재시작을 해주어 편리하게 개발이 가능하였다. 아래 명령으로 app.js의 static 폴더를 제외하고는 변경시에 서버가 자동으로 재기동 된다.
# start app
pm2 start app.js --watch --ignore-watch "static"
# monitoring app log
pm2 log app
# stop app
pm2 stop app
5. 네트워크 환경설정
집에서는 iptime 무선 공유기를 사용하고 있다. iptime공유기의 관리페이지 접속을 해보면 DDNS 를 설정할 수 있는 아래와 같은 화면이 나온다. 호스트이름과 사용자 ID를 집어 넣으면, 이 공유기까지 ~~~.iptime.org 라는 형태로 접속이 가능해진다.
이후에 (NAT/라우터 관리) 포트포워드 설정 화면에서 내가 서비스할 포트를 설정해 주면 된다. 내부 IP는 안드로이드폰의 내부IP를 확인해서 넣고, 외부포트는 실제 인터넷 외부에서 접속할 포트이고, 내부포트는 node app.js 코드에 셋팅되어 있는 서비스 포트를 입력하면 된다.
To Be Continue ~
'Programming > 온라인 영어암기 단어장 개발' 카테고리의 다른 글
온라인 영어 암기 단어장 만들기(6) - Google Translate API를 활용한 단어 뜻 찾아오기 (0) | 2025.01.11 |
---|---|
온라인 영어 암기 단어장 만들기(5) - 단어입력화면 만들기 (1) | 2025.01.04 |
온라인 영어 암기 단어장 만들기(4) - 데이터베이스 설계하기 (0) | 2024.12.03 |
온라인 영어 암기 단어장 만들기(3) - 로그인, 회원가입 로직추가 (2) | 2024.11.22 |
온라인 영어 암기 단어장 만들기(2) - 로그인 화면구성 (2) | 2024.11.20 |