티스토리 자동화 봇 로그인 유지 해결법! 쿠키 전송 서버와 확장 프로그램 만들기

티스토리 자동화 봇 로그인 유지 해결법! 쿠키 전송 서버와 확장 프로그램 만들기

티스토리 자동화 봇을 운영할 때 가장 큰 벽은 바로 로그인 유지입니다. 매번 수동으로 쿠키를 복사해서 서버에 올리는 번거로운 작업 때문입니다. 이제 보안은 확실히 지키면서 편의성을 높이는 두 가지 티스토리 자동 로그인 방법을 소개해 드립니다. 티스토리 자동화 봇을 운영하다 보면 가장 귀찮은 게 바로 로그인 세션 만료쿠키 갱신인데요. 이제 매번 서버에 접속해서 복잡한 권한 설정을 할 필요 없이, 브라우저에서 버튼 하나로 서버에 쿠키를 던져주는 시스템을 함께 적용해 보겠습니다.

왜 이 방식을 사용해야 할까요? 보통 많이 쓰시는 SCP 파일 전송 방식은 윈도우 환경에서 SSH 키 권한 문제한글 경로 인식 오류 등 해결하기 까다로운 기술적 장벽이 많습니다. 그래서 저는 브라우저 확장 프로그램이 로그인 쿠키 데이터를 직접 배달하는 방식을 선택했습니다. 이 방식이 훨씬 빠르고 에러도 거의 없어서 서버 동기화에 최적입니다.

방법 1. [완전 자동] 나만의 크롬 확장 프로그램 제작

직접 만든 미니 앱을 브라우저에 설치해서, 버튼 클릭 한 번으로 서버에 쿠키를 쏘는 자동 쿠키 전송 방식입니다. 우분투 서버에는 기본적으로 파이썬이 설치되어 있지만, 패키지 관리 도구인 pip를 최신 상태로 유지해야 설치 에러를 방지할 수 있습니다.

티스토리 자동화 방법 로그인 하기

1. 서버 환경 구축하기

1-1. 시스템 업데이트 및 파이썬 설치

# 패키지 목록 최신화
sudo apt update && sudo apt upgrade -y

# 파이썬 패키지 관리자 및 가상환경 설정 도구 설치
sudo apt install python3-pip python3-venv -y

1-2. Flask 및 CORS 라이브러리 설치

우리의 쿠키 수신 서버가 정상적으로 작동하기 위해 꼭 필요한 핵심 라이브러리들입니다.

# 외부 브라우저로부터의 접속 허용을 위한 Flask-CORS 설치
# 최신 우분투 환경에서는 시스템 패키지 보호를 위해 아래 옵션이 필요할 수 있습니다.
pip3 install flask flask-cors --break-system-packages

1-3. 네트워크 및 방화벽 관리 도구 설치

서버 포트 개방이 꼬였을 때 강제로 프로세스를 정리하거나, 방화벽 설정을 재부팅 후에도 유지하기 위해 사용합니다.

# 특정 포트를 사용하는 프로세스 확인 및 종료 도구
sudo apt install psmisc -y

# 방화벽 규칙을 저장하여 재시작 후에도 적용해주는 도구
sudo apt install iptables-persistent -y

1-4. Flask 서버 수신 대기 스크립트 작성

서버는 항상 데이터 동기화 요청을 기다리다가 쿠키가 도착하면 즉시 파일로 저장합니다. 보안을 위해 임의 포트를 할당하여 사용하는 것이 좋습니다.

# 파일명: server_receiver.py
from flask import Flask, request, jsonify
from flask_cors import CORS
import pickle

app = Flask(__name__)
CORS(app) # 외부 접속 허용

@app.route('/sync_data', methods=['POST'])
def sync():
 try:
 received_data = request.json
 # 티스토리 봇이 참조할 쿠키 저장 파일 경로
 with open('./tistory_session.pkl', 'wb') as f:
 pickle.dump(received_data, f)
 print("[*] 데이터 동기화가 성공적으로 완료되었습니다.")
 return jsonify({"result": "success"}), 200
 except Exception as e:
 return jsonify({"result": "error", "msg": str(e)}), 500

if __name__ == '__main__':
 # 보안 강화를 위해 50000번대 이상의 포트 사용을 권장합니다.
 app.run(host='0.0.0.0', port=12345)

2. 크롬 확장 프로그램 제작하기

2-1. 동작 로직 구성 (popup.js)

아래 코드의 IP 주소는 예시용입니다. 본인이 운영 중인 실제 서버 주소로 변경하여 사용하세요.

document.getElementById('syncBtn').addEventListener('click', async () => {
 const status = document.getElementById('status');
 status.innerText = "서버로 전송 중...";

 try {
 // 현재 브라우저에서 티스토리 쿠키 추출
 const cookies = await chrome.cookies.getAll({ domain: "tistory.com" });

 // 구축한 API 서버로 안전하게 데이터 배달
 const res = await fetch('http://본인_서버_IP:12345/sync_data', {
 method: 'POST',
 headers: { 'Content-Type': 'application/json' },
 body: JSON.stringify(cookies)
 });

 if (res.ok) status.innerText = "동기화에 성공했습니다!";
 else status.innerText = "서버 응답 오류 발생";
 } catch (e) {
 status.innerText = "연결 실패: " + e.message;
 }
});

2-2. 사용자 인터페이스 (popup.html)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <style>
        body {
            width: 220px;
            padding: 15px;
            font-family: 'Malgun Gothic', sans-serif;
        }
        button {
            width: 100%;
            padding: 12px;
            cursor: pointer;
            background: #ff5a5f;
            color: white;
            border: none;
            border-radius: 6px;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <h3>Tistory Sync</h3>
    <button id="syncBtn">쿠키 서버로 전송</button>
    <p id="status" style="font-size: 13px; margin-top: 12px; color: #666;"></p>
    <script src="popup.js"></script>
</body>
</html>

2-3. 확장 프로그램 설정 (manifest.json)

{
 "manifest_version": 3,
 "name": "Tistory Cookie Sync",
 "version": "1.0",
 "description": "티스토리 쿠키 데이터를 서버로 자동 전송하는 도구입니다.",
 "permissions": ["cookies", "storage", "tabs"],
 "host_permissions": [
 "https://*.tistory.com/*",
 "http://본인_서버_IP/*"
 ],
 "action": {
 "default_popup": "popup.html"
 }
}

2-4. 서버 재부팅 시 자동 실행 설정 (Crontab)

서버가 갑자기 꺼졌다 켜져도 수신 서버 스크립트가 자동으로 실행되도록 설정해야 관리 포인트가 줄어듭니다. 크론탭을 활용해 보세요.

# 크론탭 설정 편집기 열기
crontab -e

# 파일의 가장 아랫부분에 아래 내용을 추가하세요 (경로는 실제 위치에 맞게 수정)
@reboot nohup python3 /home/ubuntu/server_receiver.py /home/ubuntu/server.log 2&1 &

방법 2. [반자동] 쿠키 추출 도구와 파일 전송 활용하기

직접 확장 프로그램을 만드는 과정이 복잡하게 느껴진다면, 이미 검증된 쿠키 추출 도구인 ‘EditThisCookie‘를 사용해 보세요. JSON 파일 형태로 쿠키를 내려받은 뒤 서버에 업로드하는 수동 쿠키 갱신 방식입니다. EditThisCookie를 사용하는 방식은 별도의 수신 전용 파이썬 서버(Flask)가 필요 없습니다.

티스토리 자동화 로그인 하기

1) 브라우저에서 쿠키 추출하기

  1. 크롬 웹스토어에서 EditThisCookie 또는 Cookie-Editor를 검색하여 설치합니다.
  2. 티스토리 블로그 관리 페이지에 접속한 상태에서 설치한 확장 프로그램 아이콘을 누릅니다.
  3. 내보내기(Export) 기능을 이용해 쿠키 정보를 클립보드에 복사하거나 텍스트 파일(cookies.txt)로 저장합니다.

2) 파이썬 스크립트로 서버에 전송하기

추출된 데이터를 자동화 봇이 읽을 수 있는 Pickle 파일로 변환한 뒤, SCP 명령어를 통해 서버로 안전하게 배달하는 파이썬 코드입니다.

import pickle
import subprocess
import os
import json

# --- 사용자 환경 설정 구역 ---
# 실제 운영 중인 서버 주소와 포트를 정확히 입력하세요.
SERVER_IP = "123.123.123.123"
SERVER_PORT = "54321" # SSH 포트 번호
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

# 윈도우 환경에서는 경로에 역슬래시(\) 두 개를 쓰거나 따옴표로 감싸야 합니다.
KEY_PATH = os.path.join(BASE_DIR, "c:/path/to/your/ssh-key.key") 
COOKIE_TXT_PATH = os.path.join(BASE_DIR, "cookies.txt") 
PKL_OUTPUT = os.path.join(BASE_DIR, "tistory_cookies.pkl")

def sync():
 try:
 # 1. SSH 키 파일 유효성 검사
 if not os.path.exists(KEY_PATH):
 print(f"[에러] 인증 키 파일을 찾을 수 없습니다: {KEY_PATH}")
 return

 # 2. 저장한 쿠키 파일 읽기
 if not os.path.exists(COOKIE_TXT_PATH):
 print(f"[에러] {COOKIE_TXT_PATH} 파일이 없습니다. 쿠키를 먼저 저장해 주세요.")
 return

 print(f"[*] {COOKIE_TXT_PATH}에서 데이터를 읽어오는 중입니다...")
 with open(COOKIE_TXT_PATH, "r", encoding="utf-8") as f:
 raw_json = f.read().strip()

 if not raw_json:
 print("[에러] 파일 내용이 비어 있습니다.")
 return

 # 3. 데이터 정제 및 형식 변환
 raw_cookies = json.loads(raw_json)
 formatted_cookies = []
 
 for c in raw_cookies:
 formatted_cookies.append({
 'domain': c.get('domain'),
 'name': c.get('name'),
 'value': c.get('value'),
 'path': c.get('path', '/'),
 'secure': c.get('secure', False)
 })

 # 4. 서버 봇 전용 Pickle 파일로 변환 저장
 with open(PKL_OUTPUT, "wb") as f:
 pickle.dump(formatted_cookies, f)
 print(f"[*] 변환 완료: {len(formatted_cookies)}개의 쿠키 항목을 추출했습니다.")

 # 5. SCP를 이용한 안전한 파일 전송
 print(f"[*] 서버({SERVER_IP})로 안전하게 전송을 시작합니다...")
 
 # 윈도우용 SCP 명령어 구성
 cmd = f'scp -i "{KEY_PATH}" -P {SERVER_PORT} "{PKL_OUTPUT}" ubuntu@{SERVER_IP}:/home/ubuntu/'
 
 result = subprocess.run(cmd, shell=True)
 
 if result.returncode == 0:
 print("\n[성공] 서버에 로그인 쿠키 전송을 모두 마쳤습니다!")
 else:
 print("\n[실패] 전송 중 오류가 발생했습니다. 네트워크 설정을 확인하세요.")

 except json.JSONDecodeError:
 print("\n[에러] JSON 형식이 올바르지 않습니다.")
 except Exception as e:
 print(f"\n[에러] 예외 발생: {e}")

if __name__ == "__main__":
 sync()

드디어 티스토리 자동화 수익형 블로그를 운영하기 위한 완벽한 밑작업이 끝났습니다! 이제 클릭 한 번으로 번거로운 로그인 관리에서 해방되어 보세요. 훨씬 쾌적한 포스팅 자동화 환경을 경험하실 수 있을 겁니다.

댓글 남기기