티스토리에서 2개의 블로그를 운영하고 있었는데, 하나는 지금 있는 블로그고 다른 하나는 일상의 잡다한 이야기를 올리는 블로그였는데 2개를 합치고 싶어 알아보았는데 아쉽게도 글쓰기를 할 수 있는 API가 종료되었다.
백업까지는 티스토리에서 HTML 형태로 받을 수 있었는데 이것을 새로운 블로그에 올리는 작업은 수동으로 하거나 프로그램의 도움을 받아 자동으로 하거나 둘 중의 하나였는데, 일단은 한번 만들어보기로 했다.
우선 티스토리에서 하루 글 발행을 15개까지로 제한하고 있는 것 같았다.
또 한번에 여러 개의 글을 발행하는 것도 방지하는 것 같았고, 최근 자주 글을 올리다보니 발행 시 이미지 캡챠까지 떠버리는 상황이 되었다.
그래서 이런 제한사항들을 고려해서 계획을 짜도록 했고, 일일 발행횟수는 안전하게 10개로 제한하고 프로그램을 만들도록 시켜봤다.
티스토리에서 백업을 받으면 글들은 각각의 폴더 내에 html와 이미지가 저장된다.
프로그램에서는 각 폴더들을 읽어들이고 시간지연을 두어 하나씩 포스팅을 해야한다.

본 문서는 공식 API가 제공되지 않는 환경에서 로컬 HTML 파일과 이미지 자산을 활용하여 사람이 직접 작성하는 것처럼 안전하게 글을 업로드하는 자동화 프로그램의 기술적 타당성을 검토하고 구현 방향을 제안합니다.
1. 핵심 기술 스택 제안 (Tech Stack)
공식 API가 없는 상황에서 브라우저를 제어하고 사람의 행동 패턴을 모방(Human-like Automation)하기 위해 다음과 같은 기술 스택을 추천합니다.
- Playwright (강력 추천): 최신 브라우저 자동화 프레임워크로, 웹 요청 차단, 계정 세션 유지, 파일 업로드 처리가 Selenium보다 빠르고 직관적입니다. Headless/Headful 모드를 자유롭게 전환할 수 있어 디버깅에 유리합니다.
- BeautifulSoup4 (Python): 로컬 폴더에 저장된 HTML 파일에서 제목, 본문, 이미지 태그(
<img src="...">)를 파싱하고 경로를 추출하는 에디터 파서 역할을 수행합니다. - SQLite / JSON 파일: 일일 발행 동기화 및 업로드 성공 카운트를 기록하고 관리하기 위한 경량 데이터 저장소입니다.
2. 기술적 핵심 검토 및 해결 방안
① 로그인 및 세션 유지 (카카오 로그인 보안 대응)
카카오 계정 로그인은 2차 인증(인증요청, OTP) 또는 캡차(CAPTCHA) 시스템이 수시로 작동하므로 ID/PW를 직접 입력하는 자동화는 실패 확률이 매우 높습니다.
- 해결 방안: 브라우저 컨텍스트 프로필(UserDataDir) 저장 방식을 사용합니다. 사용자가 최초 1회 브라우저를 열어 수동으로 로그인을 완료하면, 프로그램은 생성된 쿠키와 세션 토큰 정보를 보존합니다. 이후 실행 시에는 로그인 절차를 생략하고 곧바로 티스토리 글쓰기 페이지(
tistory.com/manage/post)로 진입합니다.
② HTML 모드 전환 및 본문 입력
티스토리 에디터는 기본적으로 비주얼(WYSIWYG) 에디터이므로, HTML 소스를 그대로 적용하려면 에디터를 'HTML 모드'로 전환해야 합니다.
- 해결 방안:
- 글쓰기 페이지 진입 후 상단 툴바의 '기본모드' 드롭다운을 클릭합니다.
- 레이어 팝업에서 'HTML' 항목을 나타내는 DOM 요소를 찾아 클릭 이벤트를 발생시킵니다.
- HTML 모드로 변환되면 본문 영역이 일반 텍스트 박스(
<textarea>또는 CodeMirror 에디터)로 전환되므로, 파싱해 둔 HTML 본문 소스코드를 해당 영역에 직접 주입(Insert/Fill)합니다.
③ 로컬 이미지 파일 업로드 처리
로컬 HTML 내의 <img> 태그가 로컬 경로(file:///... 또는 상대경로)를 가리키고 있을 경우, 본문에 그대로 주입하면 다른 사용자에게 이미지가 엑스박스(Broken Image)로 표시됩니다.
- 해결 방안:
- 이미지가 없는 경우: 예외 처리를 통해 즉시 본문 HTML 주입 및 발행 단계로 넘어갑니다.
- 이미지가 있는 경우:
- HTML 모드 진입 전(기본 모드 상태)에서 Playwright의
setInputFiles함수를 사용해 파일 업로드 DOM 요소에 로컬 이미지 경로를 주입하여 티스토리 서버로 업로드합니다. - 업로드가 완료되면 에디터 내에 자동으로 삽입되는 티스토리 서버 기준의 이미지 구조를 확인하거나, HTML 모드 전환 후 기존 로컬 소스의 이미지 태그를 티스토리 업로드 주소로 치환하는 로직을 적용합니다.
- HTML 모드 진입 전(기본 모드 상태)에서 Playwright의
④ 일일 발행 제한(10개) 및 매크로 탐지 시스템 우회
티스토리의 일일 글 작성 제한(10개)을 철저히 준수하고, 기계적 무작위 패턴을 지워 블로그 저품질 및 블라인드 리스크를 최소화해야 합니다.
- 해결 방안:
- 발행 카운터 운영: 프로그램 실행 시 SQLite 데이터베이스를 조회하여
오늘의 발행 성공 횟수를 체크합니다. 카운트가 10에 도달하면 프로세스를 안전하게 자동 종료합니다. - 인간적인 랜덤 딜레이 (Human-like Delay): 페이지 이동, 글자 입력, 저장 버튼 클릭 등 모든 행위 사이에 고정 대기 시간 대신
기본 3초 + 랜덤(1~5초)형태의 가변 딜레이를 부여합니다. - 타이핑 시뮬레이션: 제목이나 태그를 입력할 때 전체 텍스트를 한 번에 주입하지 않고, 실제 사람이 타이핑하듯 글자마다 수십 밀리초(ms)의 시간차를 두고 입력되도록 처리합니다.
- 발행 카운터 운영: 프로그램 실행 시 SQLite 데이터베이스를 조회하여
3. 프로그램 워크플로우 (Architecture)
[프로그램 시작]
↓
[오늘 발행 카운트 체크] ── (10개 이상이면) ──> [프로그램 안전 종료]
↓ (10개 미만인 경우)
[로컬 폴더 내 대상 HTML / 이미지 파싱 및 데이터화]
↓
[Playwright 세션 오픈 (기존 로그인 프로필 로드)]
↓
[티스토리 글쓰기 페이지 이동]
↓
[이미지 유무 판별] ── (이미지 존재 시) ──> [에디터 내 이미지 업로드 진행]
↓
[에디터 HTML 모드로 전환]
↓
[파싱된 HTML 본문 소스코드 주입]
↓
[제목 입력 및 카테고리/태그 설정 (타이핑 시뮬레이션)]
↓
[발행 버튼 클릭 및 완료 대기]
↓
[데이터베이스 내 오늘 업로드 카운트 +1 기록]
↓
[긴 가변 대기 시간 부여 (예: 5분 ~ 15분 랜덤 대기)]
↓
[다음 파일 처리를 위해 반복 또는 종료]
4. 잠재적 위험 요인 및 유지보수 고려 사항
- 에디터 DOM 구조 변경 리스크: 티스토리가 정기 업데이트를 통해 글쓰기 버튼 ID, 클래스명, 또는 HTML 모드 진입 메뉴의 구조를 변경하면 셀렉터가 깨질 수 있습니다. 이를 대비해 웹 요소 셀렉터(Selector)는 별도의 설정 파일이나 모듈로 분리하여 유지보수성을 높여야 합니다.
- 블로그 저품질(스팸 필터링) 대응: 매일 정확히 같은 시각에 10개씩 연속으로 올라오는 글은 스팸 봇으로 오인받기 쉽습니다. 프로그램을 특정 시간에 스케줄러로 돌리기보다는 실행 시간대를 무작위로 분산하고 글과 글 사이의 간격을 충분히 띄우는 것이 안전합니다.
'바이브코딩' 카테고리의 다른 글
| 야생마 같은 AI를 내 완벽한 비서로 만드는 비결: '하네스 엔지니어링'과 'AI 에이전트 팀' (0) | 2026.07.07 |
|---|---|
| 프론트엔드 호스팅 2026 (Vercel vs Netlify vs Cloudflare) (0) | 2026.07.07 |
| 2026년 풀스택 개발자의 정의와 AI '바이브 코딩'으로 1인 앱 개발 정복하기 (0) | 2026.07.06 |
| 바이브 코딩 PRD와 TRD (0) | 2026.07.06 |
| #2 PHP를 통한 REST API 구현 예제 (0) | 2026.07.06 |