자동화 slecs

SNS 영상 감지와 OAuth 리다이렉트 오류 동시에 수정

목차

구글 로그인이 또 깨졌다

오랜만에 사이드 프로젝트 손봤더니 OAuth가 안 됐음. 콘솔에는 redirect_uri_mismatch. 도메인 옮긴 걸 까먹은 게 원인이었음. 등록된 redirect와 실제 요청 URL이 슬래시 한 글자 차이로 어긋나 있었음.

  • 콘솔 → 인증 정보 → 승인된 리디렉션 URI 갱신
  • 로컬/스테이징/프로덕션 3개 환경 따로 등록
  • 토큰 만료 후 재로그인까지 흐름 한 번 더 검증

여기서 시간 더 쓴 건 last-tool-error.json 때문임. 자동화 스크립트가 실패할 때마다 이 파일에 마지막 에러를 덮어쓰는데, OAuth 단계에서 받은 에러와 그 다음 단계 에러가 섞여 보였음. 결국 이 파일은 "마지막"만 보존하지 단계별 trace가 아니라는 걸 다시 체감함. 디버깅할 땐 단계별 로그를 따로 찍어야 함.

영상 감지가 엉성했던 이유

진짜 시간 잡아먹은 건 비디오 감지 쪽임. 외부 SNS 3사에서 URL을 끌어와 미리보기 띄우는 기능인데, 작년에 짠 videoDetector가 셋 다 다른 방식으로 깨지고 있었음.

플랫폼 기존 문제 수정
영상 플랫폼 A shorts URL 패턴 미지원 shorts/live/embed 모두 ID 추출
사진 SNS reels와 일반 post 구분 실패 path segment 기반 분기
단문 SNS 도메인 변경 후 전부 누락 신구 도메인 모두 매칭

특히 단문 SNS는 도메인이 바뀌면서 기존 정규식이 통째로 무용지물이 된 케이스. 외부 의존을 정규식 한 줄에 묶어두면 안 된다는 교훈을 또 받음.

// 호스트 목록과 ID 추출을 분리
const HOSTS = [/* 신/구 도메인 */];
function extractId(url) { /* ... */ }

호스트 목록과 추출 로직을 분리하니까 새 도메인 추가가 한 줄짜리 작업으로 줄었음. 그래도 videoDetector 자체가 책임이 너무 많아서 다음엔 플랫폼별 어댑터로 쪼갤 예정.

회고

  • OAuth redirect는 환경별 체크리스트로 박아둘 것
  • "마지막 에러" 파일을 디버깅 단일 소스로 쓰지 말 것
  • 외부 플랫폼 URL 파싱은 호스트/ID 추출/검증을 분리

도메인이 바뀌는 외부 서비스에 기대는 코드는 결국 깨진다는 걸 또 확인함. 내년에 또 수정할 것 같으니 다음엔 테스트부터 깔아둘 생각.

다음

댓글 0

첫 댓글 달아줘.