Teldrive 사용에 관한 몇 가지 팁
1. 오라클 무료 VPS 리눅스 선택
Teldrive용 DB 서버 운영을 위한 최적의 리눅스 선택을 위해 Oracle Linux, Ubuntu, AlmaLinux, CentOS를 테스트해 봤다. 선택 기준은 리눅스의 ‘리’자도 모르는 사용자가 PostgreSQL 설치와 PGroonga 패치(‘한글’ 같은 다국어 검색을 위해 필수)를 쉽게 할 수 있는지.
결론은 Canonical Ubuntu 22.04 Minimal.
「평생 무료 서버 호스팅 만들기 – VPS 서비스 비교」 글을 참고하여 구글 클라우드에서 제공하는 무료 가상 서버도 테스트해 봤는데, 네트워크 대역폭 때문인지 반응 속도가 오라클보다 많이 떨어졌다.
2. 오라클 VPS를 DB 서버로 사용 시
오라클 무료 VPS로 PostgreSQL 서버 운영 시 메모리 부족으로 서버가 먹통이 되는 현상을 방지하기 위해 「[Linux] 리눅스 스왑 파티션 생성 및 삭제하기」 설명을 보고 꼭 스왑 파티션을 설정해야 한다.
이건 리눅스 사용자라면 (윈도우 설치 후 페이징 파일 설정하는 것처럼) 굳이 언급하지 않아도 되는 필수 설정이겠지만, 본인은 리눅스를 사용해 본 일이 거의 없으므로 스왑 없이 그냥 사용했는데, 그 결과 ‘rclone + teldrive’ 조합으로 수천 파일 이상 파일 전송 시 서버가 먹통이 되는 현상이 발생했다.
이후 스왑 파티션 2GB 설정해서 사용 중인데, 1만 개 이상 파일 전송에도 서버가 멈추지 않고 잘 버텼다는 것.
3. 텔레그램 다중 채널 운영
현재 텔레그램 채널 하나당 파일 수 제한이 얼마인지 정확히 알려진 바가 없는 것 같다. 그러나 채널의 파일 수가 5만 개 이상 시 그 이하로 자동 삭제된다는 ‘카더라’는 있는 것 같다. 그래서 채널당 5만 개 이하로 저장할 생각이다.
만약 현재 Teldrive [Select Channel]로 설정한 채널의 파일 수가 5만 개에 근접한다면, 새 채널을 생성해서 [Select Channel]로 설정해 주면 된다. [Select Channel]이 변경된다고 해서 이전 채널에 저장된 자료를 사용할 수 없는 것은 아니다. 채널을 변경하면 이후 업로드되는 자료는 새 채널에 저장된다. 기본에 사용하던 봇도 새 채널에 추가해야 한다.
4. PostgreSQL 데이터 자동 백업
Teldrive 사용 시 가장 중요한 것은 데이터베이스다. 이걸 잃어버리거나 손상되면 텔레그램에 저장된 자료도 찾기 어렵다. 고로 주기적인 데이터베이스 백업은 필수인데, (PostgreSQL 윈도우 버전을 설치하면 같이 설치되는) pgAdmin 도구를 사용하면, 오라클 VPS PostgreSQL 서버(원격 서버)의 DB를 로컬로 백업하는 것이 가능하다. 다만, 매번 수동으로 작업하기 번거로우므로 이 백업 작업을 배치 파일로 작성해서 윈도우 작업 스케줄러에 등록(예를 들면 한 시간마다 백업)하면 윈도우 PC가 켜져 있을 때 알아서 백업을 수행할 것이다.
@set YEAR=%date:~0,4%
@set MONTH=%date:~5,2%
@set DAY=%date:~8,2%
@set HOUR=%time:~0,2%
@set MINUTE=%time:~3,2%
@set SECOND=%time:~6,2%
@set POSTFIX=%YEAR%-%MONTH%-%DAY%_%HOUR%-%MINUTE%-%SECOND%
set pgpassword=xxxx
"(PostgreSQL 설치 경로)\pgAdmin 4\runtime\pg_dump.exe" --file "(백업 폴더)\DB_%POSTFIX%.SQL" --host "원격 서버 IP" --port "포트" --username "DB 소유자 이름" --format=c --large-objects --section=pre-data --section=data --section=post-data --no-owner --no-privileges —verbose "백업할 DB 이름“이렇게 작성한 bat 파일을 실행하면, DB_백업 시간.sql 파일로 DB가 백업된다. 이 배치 파일을 작업 스케줄러에 등록하면 되는데, 이때 다음 문서의 설명대로 설정하면 배치 파일이 실행될 때 명령 프롬프트 창이 나타나지 않는다. 「How to prevent command window from appearing on scheduled tasks on Windows 11, 10」
5. 백업한 지 오래된 DB 자동 삭제
60분 간격으로 자동 백업하도록 작업 스케줄러에 등록하고 PC가 하루 종일 켜져 있다면 하루에 24개의 백업 파일이 생성된다. 일주일 한 달 이상 지속되면 많은 양의 DB 파일이 쌓일 것이다. 이때 수동으로 DB 파일을 정리하는 것이 싫다면 최근 파일 몇 개만 남기고 나머지 파일은 삭제하는 배치 파일을 작업 스케줄러에 등록해서 일주일에 한 번 정도 수행하도록 설정하면 알아서 정리가 될 것이다.
@echo off
REM 백업 파일이 있는 폴더 경로
set FOLDER_PATH=D:\PostgreSQL_DB
REM 최근 파일 24개만 남기기
for /f "skip=5 delims=" %%f in ('dir /b /o-d "%FOLDER_PATH%"') do del "%FOLDER_PATH%\%%f"
echo You are done이 배치 파일은 내가 작성한 것은 아니고 ChatGPT의 도움을 받은 것이다. 참고로 위 배치 파일 작성에 대해 구글 제미니에도 물어봤는데, 제미니가 작성한 배치 파일을 실행했더니 파일 한 개만 남기고 나머진 다 삭제해 버리는 참사가 일어났었다.
6. 데이터베이스에서 파일 검색 및 다운로드
dbeaver(무료 범용 데이터베이스 도구 및 SQL 클라이언트)로 PostgreSQL 서버에 접속해서 [View Table](마우스 우클릭)을 실행하면, Teldrive로 업로드한 파일 목록을 확인할 수 있다.
여기서 특정 파일을 검색하고 싶다면, 「PostgreSQL에서 NLP 자연어 기반 구문 검색하기(Full Text 검색 기능)」 문서를 참고하면 된다. 간단하게 말해 dbeaver의 [SQL Consol] 창에서 아래 구문으로 단어 단위로 자료를 검색할 수 있다. 또는 dbeaver [데이터 내보내기] 명령으로 CSV 파일로 저장하는 것도 가능하다.
SELECT * FROM files WHERE name @@ to_tsquery('epub');
files 테이블의 name 컬럼에서 epub을 포함하는 모든 데이터 검색검색된 자료 중 받고 싶은 파일은 id를 확인한 다음 (Teldrive 실행 중인 상태에서) 웹브라우저 창에,
http://localhost:8999/api/files/(id)/download/1.epub
을 입력하면 받을 수 있다. 이때 ‘1.epub’ 파일이름 대신 아무거나 넣어도 원래 이름으로 받아진다. 이 방법은 데이터베이스가 손상되었을 때, 혹은 삭제된 자료를 복구할 때 써먹을 수 있다. 참고로 ‘parent_Id’는 폴더명이다. 아래처럼 사용할 수 있다.
http://localhost:8999/browse?parentId=‘parent_Id’
7. 삭제한 파일 검색 및 복구
Teldrive에서 삭제한 자료는 보이지 않는 휴지통에 보관되고 한 시간 후에 삭제된다. 삭제된 자료는 files 테이블의 status 칼럼(column)값이 active에서 pending_deletion 값으로 변경된다. 아래 구문으로 삭제 대기 중인 자료의 id를 확인할 수 있다.
select * from files where status @@ to_tsquery('pending_deletion');
id를 확인했으니, 앞의 6에서 소개한 방법으로 파일을 받아도 되고, UPDATE 구문으로 pending_deletion 값을 active로 변경해 Teldrive에 표시되도록 복구할 수도 있다(자세한 것은 복구 과정을 담은 동영상 참고).
UPDATE teldrive.files SET status='active' WHERE id='id 값';
7. PostgreSQL 서버 복제
남는 오라클 VPS 인스턴스를 DB 복제 서버로 사용할 수도 있다. 「PostgreSQL Replication을 이용한 다중화 구성」, 아직 시도해 보지는 않았지만, Replication(복제)를 구성하면 좀 더 안정적으로 Teldrive를 사용할 수 있을 것이다.
비록 보잘 것 없지만 광고 수익(Ad revenue)은 블로거의 콘텐츠 창작 의욕을 북돋우는 강장제이자 때론 하루하루를 이어주는 즐거움입니다
0 comments:
댓글 쓰기
댓글은 검토 후 게재됩니다.
본문이나 댓글을 정독하신 후 신중히 작성해주세요