개발 slecs

인증 분리로 안전한 사이트맵 자동 제출 기능

목차

Google Search Console의 sitemap 자동 제출 기능을 새로운 도메인용으로 확장했다. 기존 시스템과 별도의 토큰으로 인증을 분리해서 구현한 작업인데, 이게 생각보다 중요한 아키텍처 결정이었다.

왜 사이트맵 자동 제출이 필요했나

검색 엔진 최적화 관점에서 보면, 새로운 컨텐츠나 사이트 구조 변경을 주기적으로 Google에 알려주는 게 중요하다. 수동으로 GSC 대시보드에 들어가서 버튼을 누르는 건 비효율적이고, 운영자 개입이 필요한 구간이 생긴다. 이런 반복 작업은 자동화의 첫 번째 후보다.

  • 검색엔진이 신규/변경 페이지를 더 빠르게 발견
  • 크롤 예산을 효율적으로 사용
  • 수동 개입 줄이기 → 휴먼 에러 감소
  • 정기적 자동화로 일관된 SEO 전략 유지

토큰 분리 설계의 배경

여기서 주목할 점은 dev.slecs token과 기존 시스템의 토큰을 따로 관리한다는 부분이다. 처음엔 "토큰 하나로 통합하면 간단하지 않을까?"라고 생각할 수 있지만, 실무에선 여러 이유로 분리하는 게 맞다.

항목 통합 토큰 분리된 토큰
권한 관리 모든 도메인에 동일 권한 도메인별 최소 권한
보안 노출 한 토큰 탈취 시 전체 영향 특정 도메인만 영향
운영 유연성 낮음 (변경 시 전체 검토) 높음 (도메인별 독립 관리)
로깅/감시 모든 접근이 섞임 도메인별 접근 추적 가능

토큰을 분리하면 만약 특정 도메인의 토큰이 노출되더라도 다른 서비스는 영향받지 않는다. 또한 새로운 팀원이 온보딩될 때 필요한 권한만 부여할 수 있어서 보안 관점에서 훨씬 낫다.

구현 접근

_lib/coway_gsc_submit.py 파일을 만들어서 GSC submit 로직을 라이브러리로 정리했다. 단순히 한 번쓰는 스크립트가 아니라, 여러 도메인에서 재사용할 수 있는 구조로 설계하는 게 포인트다.

# 개념적 구조 (실제 구현 제외)
class GSCSubmitter:
    def __init__(self, domain, token):
        self.domain = domain
        self.token = token  # 도메인별 독립 토큰

    def submit_sitemap(self, sitemap_url):
        # GSC API 호출
        # 에러 핸들링
        # 로깅
        pass

라이브러리화의 이점:
- 다른 도메인 추가 시 기존 코드 재사용
- 토큰, 에러 처리, 재시도 로직이 한곳에 집중
- 테스트 작성이 단순화됨
- 새로운 팀원이 GSC 연동할 때 참고할 수 있는 레퍼런스

팀 리딩 관점에서의 고민

이런 작업을 할 때 나는 항상 다음을 생각한다:

1. API 설계는 사용자(다른 개발자)를 기준으로
나중에 누군가 이 코드를 쓸 텐데, 복잡한 설정은 피하고 의도가 명확한 인터페이스를 만들어야 한다. GSC API는 변하기 쉬운 외부 의존성이니 그 변화를 라이브러리 내부에 캡슐화하는 게 중요하다.

2. 운영 자동화도 코드리뷰 대상
자동화 스크립트도 프로덕션 코드만큼 신경 써야 한다. 토큰 관리, 에러 처리, 로깅이 제대로 되지 않으면 장애가 발생할 때 원인 파악이 어려워진다.

3. 인증 분리는 "나중에"가 아니라 "지금"
처음부터 다중 도메인을 염두에 두고 설계하면 나중에 도메인을 추가할 때 매끄럽다. 반대로 "일단 하나로 만들고 나중에 분리하자"고 미루면, 코드 리팩토링으로 끝나지 않고 운영 중인 토큰 마이그레이션까지 고려해야 해서 복잡해진다.

배운 점

이 작업을 통해 느낀 건, 작은 자동화 기능도 "누가 어떻게 쓸 것인가"를 먼저 설계하고 보안·운영성을 함께 고려해야 한다는 것. GSC 자동 제출 같은 건 겉으로는 "그냥 API 호출 몇 줄"처럼 보이지만, 실제로는 토큰 관리, 도메인별 격리, 에러 처리, 모니터링까지 담겨 있다. 이런 세부사항들이 누적되면서 신뢰할 수 있는 자동화 시스템이 만들어진다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.