이 다국어 사이트에서는 발표자나 후원사가 표시되는 페이지를 열어 해당 데이터를 제공하는 API의 언어를 확인할 수 있다. 사이트에는 실시간 트래픽 시각화 기능도 있으며, 제작진은 아키텍처와 벤치마크에 영향을 주는 조건을 소개했다.

2024년 재미를 위해 구상한 다국어 콘퍼런스 사이트가 실제로 구현됐다. 발표자 페이지나 후원사 페이지를 방문하면 데이터 제공에 쓰인 API 언어가 화면 오른쪽 위에 표시된다. 페이지의 ‘Live Traffic Visualizer’에서 ‘START’를 눌러 시각화를 시작할 수 있다.

작동 방식과 벤치마크 조건

사이트 프런트엔드는 Elixir와 Phoenix, LiveView, Ash로 구성되며, 직접 만든 CMS와 PostgreSQL 데이터베이스를 사용한다. 발표자와 후원사 데이터 요청은 여러 언어로 작성된 API 중 하나가 처리한다. 각 API는 pgbouncer를 거쳐 읽기 전용 데이터베이스에 연결하고, 버전이 지정된 데이터베이스 뷰를 이용한다. API 간 데이터 제공 방식을 바꿀 때 각 API를 수정하지 않고 뷰를 갱신할 수 있도록 한 구조다.

API 응답 시간은 BEAM VM의 메모리 저장소인 ETS에 기록된다. 새 배포가 이 통계를 초기화한다. 사이트는 Fly.io에 호스팅되며, 몇 분 동안 활동이 없으면 비용 절감을 위해 각 VM을 일시 중지한다. 새 요청 때 VM이 시작되는 시간은 비교적 짧지만 벤치마크에 영향을 줄 수 있다. 응답을 빠르게 하기 위해 현재 페이지 로드가 끝난 뒤 목록상 다음 언어에 비동기 요청을 보내 API를 미리 활성화해 둔다.

응답이 지나치게 늦으면 Elixir가 타임아웃을 적용한다. 이 경우 다른 언어의 API로 전환하거나 SQL로 요청을 처리한다. 요청은 데이터와 언어를 기준으로 하는 Dynamic GenServer와 Cachex를 거치며, 캐시 유효 시간(TTL)은 1초다. 같은 데이터에 같은 언어로 1초 안에 다시 요청하면 캐시 결과를 받거나 진행 중인 요청의 결과를 공유한다. 화면 오른쪽 위에는 최초 요청의 언어와 시간이 표시되지만, 이 재요청으로 텔레메트리 통계가 바뀌지는 않는다.

API 구현과 확인 방법

초기 API는 Ruby(Sinatra)와 Go(net/http)로 만들었다. 이후 공통 AGENTS.md를 작성하고, 언어별 테스트와 린터, 정적 보안 검사, 의존성 보안 검사, gitleaks 검사, 필요한 경우 컴파일러 검사를 사전 커밋 훅에 포함해 다른 언어의 API를 추가했다. API 소스는 페이지에 표시되는 각 언어를 눌러 GitHub에서 확인할 수 있다.

후속 변경에는 herdr를 이용해 언어별 세션을 시작하는 로컬 스크립트를 사용했다. 특정 언어에 문제가 보이면 추가 조정도 했다. 예를 들어 이 환경에서 JVM의 콜드 스타트 문제가 관찰돼 AI를 이용해 CRaC를 설정하려고 했다. 새 언어 제출은 아직 받지 않지만, 참고할 수 있는 API 스타터 프로젝트는 공개돼 있다.