막힌 길을 우회한 기록 — 네이버 치지직 알림 봇 회고

공식 통로가 없던 시절, 치지직 방송이 켜지면 네이버 카페에 “방송 시작!” 글을 자동으로 올리는 알림 봇을 만들었다. 지금 와서 보면 만들 이유가 사라진 프로젝트지만, 막힌 길을 끝까지 우회해 본 경험만큼은 또렷이 남았다.

무엇을 만들었나

구조 자체는 단순했다.

치지직 방송 켜짐 감지   →   네이버 카페에 "방송 시작!" 글 자동 작성
   (입력)                      (출력)

문제는 입력도 출력도 공식 통로가 막혀 있었다는 점이다. 당시 치지직에는 공식 API가 없었고, 네이버 카페 글쓰기는 봇 접근이 차단돼 있었다. 그래서 양쪽을 모두 우회해야 했다.

구간당시 상황택한 우회
치지직(입력)공식 API 없음비공식 내부 엔드포인트 폴링으로 방송 상태 확인
카페 글쓰기(출력)봇 접근 차단Playwright 브라우저 자동화로 로그인해 직접 글 작성

가장 큰 벽 — 네이버 2단계 인증

카페에 글을 쓰려면 로그인 세션이 반드시 있어야 했다. 그런데 네이버는 자동화 로그인을 가장 공격적으로 막는 서비스 중 하나였다.

  • 캡차 + 신규기기 차단이 겹쳐서, Playwright로 로그인을 시도하는 순간 벽에 부딪혔다.
  • 결국 “로그인” 한 단계에 가장 많은 시간을 쏟았다.

여기서 얻은 교훈 하나. 이건 내 실력 문제가 아니라 네이버가 의도적으로 막아둔 영역을 억지로 뚫으려니 생긴 당연한 마찰이었다. 원래 막아둔 문을 비집고 들어가는 일이니 힘든 게 정상이다.

곁다리 정리 — Playwright vs 내 브라우저

회고하면서 브라우저 자동화의 두 갈래를 정리해 봤다.

Playwright (격리 브라우저)내 브라우저 빌려쓰기
대상스크립트가 새로 띄우는 빈 브라우저이미 로그인해 둔 실제 브라우저
로그인매번 빈 상태 → 로그인부터내 세션 그대로 사용
장점재현성·서버 무인 실행·격리로그인 마찰 없음
단점로그인 고통(2FA 등)브라우저를 켜둬야 함, 서버 자동화 불가

처음엔 Playwright의 “로그인 고통”이 단점처럼 보였다. 하지만 이건 재현성이라는 장점의 부작용에 가깝다. 매번 깨끗한 상태에서 시작하니 누가·언제 돌려도 결과가 같고, 사람 없는 서버에서도 자동 실행된다. 봇은 결국 무인 서버에서 돌아야 하므로 Playwright 방향 자체는 옳았다.

그때 옳았던 길 — 네이버 로그인 OAuth

브라우저로 로그인을 우회하는 대신, 네이버 로그인 OAuth 2.0을 쓰는 게 정공법이었다.

  • 네이버 로그인은 Authorization Code Grant 방식만 지원한다. 즉 최초 1회는 사람이 브라우저에서 직접 로그인 + 동의를 해야 code → 토큰을 받을 수 있다. 사람 개입 없는 발급(client_credentials)은 아예 지원하지 않는다.
  • 지원하는 grant_typeauthorization_code(최초 발급) · refresh_token(재발급) · delete(연동 해제) 셋뿐이다.

그래서 봇 자동화의 정답 구조는 이렇게 된다.

[1회, 사람] 브라우저 로그인·동의 → code → access_token + refresh_token 획득 → 저장
[이후, 봇]  refresh_token으로 access_token 무인 재발급 (사람 개입 없음)

이것이 OAuth가 보장하는 **정당한 “세션 재사용”**이다. 막아둔 무인 인증 진입점을 억지로 뚫는 쿠키 우회와 달리, 이쪽은 공식 토큰 메커니즘이다.

다만 access token은 보통 1시간(3600초) 만에 만료되고 refresh token도 무한하지 않다. refresh token이 만료되면 다시 사람이 1회 로그인해야 한다. (정확한 유효기간·재발급 규칙은 네이버 개발자 문서 기준 확인이 필요하다.)

마무리 — 지금은 만들 이유가 없어졌다

지금은 치지직에도 공식 API가 생겼고, 무엇보다 치지직 자체 알림 서비스가 충분히 훌륭해서 직접 만들 실익이 없다.

[그때]  비공식 폴링 + 브라우저 자동화 + 2FA 우회 (깨지기 쉬움)
[지금]  치지직 자체 알림으로 충분 — 직접 만들 이유 없음

그래도 이 삽질이 의미 없던 건 아니다. 공식 통로가 막힌 걸 우회해 끝까지 굴러가게 만든 경험 — 비공식 엔드포인트 분석, 2FA 마찰 돌파 — 은 API가 곱게 깔린 길만 다녀서는 얻기 어려운 감각으로 남았다.

막힌 문을 두드려 본 사람만이, 다음엔 어느 문이 진짜 정문인지 안다.