ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스레드(Threads) 자동 게시글 작성 프로그램 만들기
    자동화 프로그램 2026. 4. 10. 19:18

    어제 한 분 고객님께서 문의를 주셨다. 고객님은 매일 수십 개의 게시글을 Threads에 올리는 일을 하고 계셨다. 로그인하고, 글 쓰고, 사진 붙이고, 게시 버튼 누르고. 한두 개면 괜찮은데, 이게 20개, 30개가 넘어가면 이야기가 달라진다. 하루의 상당 시간을 복붙과 클릭에 쓰고 있었던 거다.

     

    매일 반복되는 수작업, 그 안에 숨은 진짜 문제

     

    고객이 처음 연락해왔을 때 상황은 이랬다. Threads 계정을 운영하면서 하루에 수십 건의 게시글을 올려야 했는데, 전부 수작업이었다. 매번 브라우저를 열고, 로그인하고, 글을 쓰고, 이미지를 첨부하고, 게시 버튼을 누른다. 한 건당 2~3분이면 빠른 편이지만, 20건이면 거의 한 시간이다. 거기에 중간중간 로그인이 풀리기라도 하면, 다시 아이디 비밀번호 입력부터 해야 했다.

    문제는 단순 반복만이 아니었다. 게시글마다 본문이 다르고, 첨부 이미지도 각각 다르고, 일부 게시글에는 댓글까지 달아야 했다. 그러다 보니 엑셀에 게시할 내용을 미리 정리해두고, 하나씩 복붙하는 방식으로 일하고 있었다. 엑셀은 이미 있었지만, 그걸 실제로 올리는 과정은 전부 손으로 하고 있던 셈이다.

    고객이 원한 건 명확했다. "엑셀에 정리한 내용을 그대로 Threads에 자동으로 올려주는 프로그램." 로그인도 자동으로 하고, 본문 입력도, 사진 첨부도, 게시도 전부 프로그램이 알아서 해주면 좋겠다는 거였다.

     

     

    단순 자동화가 아니라 '진짜 쓸 수 있는' 프로그램을 만들어야 했다

     

    요구사항을 듣고 나서 바로 개발에 들어가지 않았다. 이런 종류의 자동화에서 가장 까다로운 건 "실제 환경에서 안정적으로 돌아가느냐"이기 때문이다.

    우선, Threads는 Instagram 계정으로 로그인한다. 2단계 인증(2FA)이 걸려있는 경우가 대부분이라, 완전 무인 자동화는 처음부터 제외했다. 대신 첫 로그인만 사용자가 인증하면, 이후에는 세션이 유지되도록 설계하는 방향을 택했다. 계정별로 브라우저 프로필을 따로 저장해서, 한번 로그인하면 다음에는 자동으로 로그인 상태가 유지되는 구조다.

    그 다음으로 신경 쓴 건 브라우저 호환성 문제였다. 셀레니움 기반 자동화에서 가장 흔한 에러가 Chrome 버전과 ChromeDriver 버전이 안 맞아서 생기는 문제다. 고객이 개발자가 아닌 이상, "ChromeDriver를 수동으로 업데이트하세요"는 답이 될 수 없었다. 그래서 프로그램이 실행될 때 설치된 Chrome 버전을 자동으로 감지하고, 맞는 ChromeDriver를 알아서 다운로드하고 캐시하는 구조를 만들었다. 한번 받으면 같은 버전에서는 다시 안 받으니까 실행 속도도 빠르다.

    텍스트 입력 방식도 두 가지를 준비했다. 한 글자씩 치는 타이핑 모드와, 클립보드에 복사해서 붙여넣는 모드다. 타이핑 모드는 사람처럼 보이는 장점이 있고, 붙여넣기 모드는 이모지 같은 특수문자가 깨지지 않는 장점이 있다. 고객이 상황에 따라 선택할 수 있도록 GUI에서 라디오 버튼으로 제공했다.

     

     

    엑셀 한 장이면 끝나는 사용 흐름

     

    프로그램을 켜면 깔끔한 GUI 창이 뜬다. 사용법은 간단하다. 엑셀 파일을 선택하고, 게시글 간 대기 시간을 설정하고, 시작 버튼을 누르면 된다.

    엑셀 양식도 직관적으로 만들었다. A열에 계정 아이디, B열에 비밀번호, C열에 동영상 경로, D열에 사진 경로, E열에 본문 텍스트, F열에 댓글 텍스트. 한 행이 게시글 하나다. 고객이 이미 엑셀로 게시 내용을 관리하고 있었기 때문에, 기존 워크플로우를 거의 바꾸지 않아도 되는 구조였다.

    시작 버튼을 누르면 프로그램이 Chrome을 열고, Instagram 로그인 페이지로 이동한다. 처음이면 아이디와 비밀번호를 자동 입력하고, 2FA 인증을 위해 30초간 대기한다. 이 시간 동안 사용자가 휴대폰에서 인증을 완료하면 된다. 로그인이 끝나면 Threads 페이지로 이동해서, 엑셀에 있는 게시글을 하나씩 자동으로 올린다. 본문 입력, 미디어 첨부, 댓글 추가, 게시까지 전 과정이 자동이다.

    게시글 사이에는 랜덤한 간격으로 대기한다. 최소/최대 시간을 사용자가 직접 설정할 수 있어서, 너무 기계적으로 보이지 않게 조절이 가능하다. 실행 중 언제든 중지 버튼을 누르면 현재 작업을 마무리하고 안전하게 멈춘다.

     

     

    보이지 않는 곳에서 더 많은 문제를 잡았다

     

    겉보기에는 단순해 보이는 자동화지만, 실제로 안정적으로 동작하게 만들려면 챙겨야 할 게 많았다.

    Threads의 UI는 다국어로 동작한다. 같은 버튼이 한국어 환경에서는 "새로운 소식이 있나요"이고, 영어에서는 "What's new?"다. 게시 버튼, 로그인 버튼도 마찬가지다. 그래서 하나의 UI 요소를 찾을 때 여러 언어의 텍스트를 폴백으로 순회하는 구조를 적용했다. 고객의 브라우저 언어 설정이 바뀌더라도 프로그램이 깨지지 않는다.

    브라우저가 비정상 종료되면 프로필 폴더에 잠금 파일이 남아서 다음 실행이 안 되는 문제도 처리했다. 프로그램이 시작될 때 자동으로 잠금 파일을 정리하고, 혹시 이전 실행에서 남은 ChromeDriver 프로세스가 있으면 그것도 정리한다. 프로필 폴더 자체가 손상되었을 때는 자동으로 백업을 만들고 새 프로필로 재시도하는 로직까지 들어가 있다.

    ChromeDriver 실행에도 다단계 복구 전략을 적용했다. 1차로 기본 Selenium Manager를 시도하고, 실패하면 프로필을 초기화해서 다시 시도하고, 그래도 안 되면 Chrome 버전에 정확히 매칭되는 ChromeDriver를 직접 다운로드해서 시도한다. 이 과정 전체가 타임아웃과 에러 핸들링으로 보호되어 있어서, 어디서 문제가 생겨도 프로그램이 멈추거나 먹통이 되지 않는다.

     

     

    수작업 한 시간이 버튼 한 번으로

     

    결과적으로, 20~30개 게시글을 올리는 데 한 시간 가까이 걸리던 작업이 시작 버튼 한 번으로 끝나게 됐다. 사용자가 할 일은 엑셀에 내용을 정리하는 것, 그리고 첫 로그인 때 2FA 인증을 해주는 것뿐이다. 나머지는 프로그램이 전부 처리한다.

    이 프로젝트에서 제일 많이 느낀 건, SNS 자동화는 "되긴 되는" 수준과 "실제로 매일 돌려도 되는" 수준 사이의 간극이 크다는 거다. 로그인 세션 유지, 브라우저 버전 호환, UI 변경 대응, 비정상 종료 복구 — 이런 것들을 하나씩 잡아가는 게 전체 개발 시간의 절반 이상이었다. 하지만 이 부분을 제대로 잡아야 고객이 불편 없이 쓸 수 있는 프로그램이 되는 거다.

    혹시 SNS 운영하면서 매일 같은 작업을 반복하고 있다면, 한번쯤 자동화를 생각해볼 만하다. 생각보다 많은 반복 작업이 프로그램 하나로 해결되니까.

Designed by Tistory.