Compiler Explorer와 영원히 지속되는 URL의 약속

1 day ago 3

  • Compiler Explorer는 초기에는 모든 상태를 URL에 직접 저장하는 방식을 사용했음
  • URL이 너무 길어져 Google의 goo.gl 단축 URL 서비스를 도입했고, 이 구조는 여러 번의 리디렉션을 거치는 복잡함을 유발했음
  • 2018년부터 URL 길이 제한 문제와 유지보수의 어려움으로 자체 S3와 DynamoDB 기반 저장소를 활용하는 구조로 전환함
  • 하지만 Google이 goo.gl 서비스를 2025년 8월에 종료함에 따라 과거 단축 링크의 지속성을 스스로 관리해야 하는 상황이 됨
  • 현시점까지 12,000개가 넘는 레거시 링크를 구출했고, 이는 프로그래밍 지식 보존과 지속 가능한 서비스 운영의 중요성을 보여줌

Compiler Explorer 링크의 영구 보장과 역사

초기 설계 방식과 goo.gl 도입 배경

  • 2012년, Compiler Explorer는 모든 컴파일러 상태를 URL에 직접 인코딩하는 구조를 도입함
  • 상태 정보가 많아질수록 URL이 지나치게 길어지는 문제 발생
  • URL 짧게 만들기 위해 2014년 Google의 goo.gl 단축 서비스를 적용
    • goo.gl/abc123 형식의 단축 링크를 제공했고, 클릭 시 원래의 긴 URL로 리디렉션 후 상태 복원
  • Stack Overflow가 단축링크 사용 금지(2016년) 조치로 인해 기존 방식에 제약 발생
    • 악성 링크 감춤 위험 때문에 모든 goo.gl 기반 링크가 영향을 받음
  • 사용자 데이터 저장을 원치 않아 임시 방안으로 godbolt.org/g/abc123 형식의 자체 경로를 만듦
    • godbolt.org/g/abc123로 접근 시 goo.gl/abc123로 다시 리디렉션
    • 이 과정에서 최종적으로 godbolt.org 긴 URL로 복귀
    • 복수의 리디렉션 발생으로 구조가 복잡해지는 문제 발생
  • 이후 Google API 사용으로 리디렉션 절차 일부 단순화

자체 저장소 도입과 링크 관리

  • 2018년부터는 URL 길이 한계와 데이터 압축의 불편함이 자주 문제로 대두됨
  • S3 및 DynamoDB 활용한 자체 저장구조 구현
    • 입력값을 해시하여 JSON 문서 형태로 S3에 저장
    • 짧은 링크(godbolt.org/z/hashbit)로 접근 시 DynamoDB에서 매핑을 조회
    • 해시 값에 욕설 등 부적절한 단어 포함 시 랜덤 요소 추가로 우회하는 체크 기능 구현
    • 해시 기반 링크의 부적절성 문제 해결 및 관련 버그 경험(예: issue #1297)
  • 현재도 여전히 godbolt.org/g/abc123 주소 형식 지원
  • Google의 공식 안내에도 불구하고 goo.gl 서비스가 읽기 전용으로 전환되었고, 2025년 8월 완전 종료 예정
  • goo.gl 기반 단축 링크는 더 이상 해석 불가 예정
  • godbolt.org/g/abc123 형태는 직접 관리로 생명 연장 가능하므로 이들 링크 구조에 대해 구조화된 구제작업 진행

레거시 링크 대량 수집과 아카이빙 작업

  • 최근 모든 가능한 소스(검색, 데이터 덤프, 웹로그 등)에서 레거시 링크들을 크롤링 및 데이터베이스화 진행
    • Google 웹검색 API
    • GitHub API
    • 자체 서버 로그
    • archive.org의 Stack Overflow 데이터 덤프
    • Archive.org의 저장된 웹페이지 데이터
  • 12,298개의 단축 링크 복구 성공
  • 내부적으로 goo.gl 대신 자체 링크 데이터베이스 활용을 시작함 (관련 PR: #7724)
  • 앞으로도 발견되지 않은 godbolt.org/g/abc123 링크를 지속적으로 수집 및 확보 예정
  • 커뮤니티에 아직 미등록된 링크가 있다면 직접 접속하거나 관리자에게 알려 데이터베이스 보완 요청

프로젝트 철학과 인프라 소유의 중요성

  • 이번 사례를 통해 중요한 인프라를 외부 서비스(예: Google)의 지속성에만 의존하는 위험성 확인
  • 단축 링크 관리 및 백업 구조는 임시 방편이었고, 완전히 영구적 URL을 약속하려면 서비스 전체를 직접 관리할 필요가 있음
  • 디지털 고고학처럼 오래된 레거시 링크를 구조하는 과정에서 하나하나의 링크가 누군가의 지식 공유, 질문, 개념 설명의 흔적임을 인식
  • 이 저장 및 보존 행위는 프로그래밍 커뮤니티의 역사 아카이빙과도 직결
  • 옛날 Compiler Explorer 링크를 발견했다면 지금이라도 한 번씩 눌러 보는 것이 인터넷 지식 보존에 기여하는 길임
  • 이번에는 서드파티가 아닌, 직접 제어하는 인프라에 의존함으로써 지속 보장의 약속을 이행할 수 있게 됨

Disclaimer

  • 본 글은 사람이 작성하였으며, 링크 추천 및 문법 검사 과정에서 LLM을 활용함

Read Entire Article