웹개발 관련
- Renovate Web E2E tests with Playwright Runner : Mercari에서 기존 E2E 테스트에 Jest-Playwright를 사용하고 있었다. 실행은 CircleCI에서 했기 때문에 CircleCI에서는 코드 실행만 하고 Moon이라는 프로젝트를 이용해서 내부 네트워크의 브라우저와 연결해서 테스트를 실행했다. 하지만 Jest-Playwright가 이제 지원 속도가 느려지기 시작했고 Moon을 통해 브라우저를 원격으로 연결하면서 재시도도 어렵고 최종 보고서에도 누락되는 문제가 있었다. Jest-Playwright 대신 Playwright를 사용하기로 하고 내부에 CI를 위한 러너를 제공해서 원격 브라우저 연결을 없앤 형태로 개선했다. 마이그레이션을 끝내기까지 6개월 정도 걸렸고 기존 E2E 테스트는 그대로 두고 새 저장소를 만들어서 테스트 케이스를 업데이트하면서 마이그레이션 했다.(영어)
- Next.js: We're exploring moving to Lightning CSS : Next.js가 Lightning CSS로 갈아타는 것을 검토 중이라고 한다.(영어)
- 크롬에서 서드 파티 쿠키를 폐기하기 위한 다음 단계 : 웹사이트에서 서드파티 쿠키에 접근하는 것을 차단해서 사이트 간 추적을 제한하는 추적 보호 기능을 Chrome이 1월 4일부터 테스트한다. 전체 사용자 중 임의의 1%에만 먼저 적용되며 테스트 대상이 되는 사용자는 알림을 받게 될 예정이다.(한국어)
그 밖의 개발 관련
인프라 관련
- Platform Engineering at Mercari : Mercari에서 플랫폼 엔지니어링을 하면서 배운 내용을 정리한 발표 자료다. 내부 플랫폼 만들면서도 비즈니스가 최우선 가치이고 플랫폼을 지속해서 개선해야 하는 제품처럼 다뤄야 하며 개발팀과 협업해서 효과적으로 우선순위와 기능을 고를 수 있게 하면서도 적당한 거리를 두어 X-as-a-Service가 되도록 해야 한다. 그리고 플랫폼 엔지니어링은 마이그레이션을 항상 동반해야 제대로 효과를 볼 수 있다.(영어)
- Open source log monitoring: The concise guide to Grafana Loki Part 1, Part 2, Part 3 : Grafana의 로그 수집 도구인 Loki 5주년을 맞이하여 Loki의 개념과 함께 그동안 어떻게 발전해 왔는지 설명하는 3편의 글이다.(영어)
- Loki는 "로그 스트림을 정의하는 Prometheus 스타일의 레이블"을 작은 인덱스로 구축하도록 설계되어 이를 LogQL로 질의한다.
- Loki는 높은 카디널리티 레이블값을 지원하도록 설계되지 않았고 오히려 그 반대로 수명이 아주 길고 매우 낮은 카디널리티의 레이블을 위해 구축되었으므로 레이블 수가 적을수록 좋다.
- 레이블의 키-값 쌍을 통해 Ingester에 샤딩되는데 특정 Ingester에 몰리지 않도록 자동 스트림 샤딩을 도입했다.
- Pod 이름 등 카디널리티가 높은 값을 조회하는 문제를 해결하기 위해 그동안 카디널리티가 1시간의 10만 개 미만의 스트림이라면 색인화하고 이 이상이라면 Promtail의
pack 단계에서 로그 라인에 카디널리티를 포함했다. 3.0에 정식으로 포함될 structured metadata를 사용하면 키-값 쌍을 인덱스가 아닌 로그와 함께 저장할 수 있게 되었다.
- 고유 ID를 검색하는 일이 일반적인 사례라는 것을 깨닫고 Bloom filter를 도입했다.
- 쿼리를 실행할 때 먼저 쿼리를 더 작은 시간 세그먼트로 분할하고 이를 처리할 양에 따라 샤드로 분리해서 작업 큐에 배치한다.
- 성능 문제를 해결하기 위해
max_concurrent를 보통 8 정도를 권장하고 문제가 된다면 더 줄이길 권한다. 보통 수직 스케일링보다는 수평 스케일링을 더 권장한다.
tsdb_max_query_parallelism와 split_queries_by_interval로 병렬 처리를 조정할 수 있다. 테넌트가 수집하는 데이터가 많으면 더 많은 병렬처리를 할 수 있다.
- 모든 쿼리에
metrics.go라는 로그 행을 생성하고 여기에는 실행된 쿼리의 다양한 통계가 있으므로 metrics.go를 조회해서 슬로우 쿼리 등을 찾을 수 있다.
- How Meta built the infrastructure for Threads : 23년 7월에 런칭한 Threads가 5일 만에 1억 명의 사용자가 가입했는데 이때 이 인프라를 책임진 두 가지 요소를 설명한다. 기존에 앱 출시를 고려했지만, 실제 출시는 결정 후 2일 만에 출시해야 했고 기존에 인프라 성숙도에 대한 믿음이 있었기에 할 수 있었다.(영어)
- ZippyDB는 분산형 키-밸류 디비로 Meta에서 완전 관리형으로 운영되며 Meta의 인프라를 활용하도록 구축되었다. ZippyDB의 리샤딩 프로토콜을 사용하면 일관성/정확성을 보장하면서 다운타운 없이 수평적 샤딩를 늘릴 수 있고 기존 사용에서 100배가 증가하더라도 문제없도록 리샤딩을 계속 개선해 왔다.
- XFaaS라고도 부르는 Async는 서버리스 함수 플랫폼으로 엔지니어가 프로덕션 배포까지 걸리는 시간을 줄일 수 있도록 지원하며 HackLang, Python, Haskell, Erlang 등의 언어를 지원한다. Async는 Instagram에서 이미 팔로우 중인 사람을 Threads에서도 팔로우하도록 하는 기능에 중요한 역할을 했고 5일 만에 1억 명의 사용자에게 이 기능을 제공하려면 상당한 처리량이 필요했지만, Async가 이를 잘 처리했다.
- Ending Support for the Dagger CUE SDK : CI/CD 파이프라인인 Dagger의 초기 버전은 구성 언어인 CUE를 사용했지만 이후 GraphQL API를 도입하면서 다양한 프로그래밍 언어로 Dagger를 사용할 수 있도록 추가되었다. 이후 CUE용 SDK의 사용이 크게 줄어들었고 23년 12월 14일부터 CUE SDK 지원을 중단하기로 했다.(영어)
볼만한 링크
IT 업계 뉴스
프로젝트
- SSH3 : QUIC과 TLS 1.3을 이용해서 더 안정적으로 통신하도록 만든 SSH 프로토콜
- Suno.ai : 프롬프트를 입력하면 AI가 음악을 생성해 주는 서비스
- Stirling-PDF : PDF를 합치거나 나누는 등 PDF를 조작하는 다양한 기능을 할 수 있는 웹 애플리케이션으로 로컬에 직접 띄울 수 있다.
버전 업데이트
- Ruby v3.3.0 : 프로그래밍 언어, 릴리스 공지
- date-fns v3.0.0 : JavaScript Date 라이브러리, 릴리스 공지
- Vue.js v3.4 Slam Dunk : 자바스크립트 UI 라이브러리, 릴리스 공지
- Rust 1.75.0 : 프로그래밍 언어, 릴리스 공지
- FastAPI v0.108.0 : Python 웹 프레임워크, 릴리스 공지
- Nuxt.js v3.9.0 : 서버렌더링 Vue.js 애플리케이션 프레임워크, 릴리스 공지
- RedwoodJS v6.6.0 : 풀스택 웹프레임워크, 릴리스 공지
- Elixir v1.16 : 프로그래밍 언어, 릴리스 공지
- GitLab v16.7 : 오픈소스 설치형 Git 플랫폼, 릴리스 공지
- Open Policy Agent v0.60.0 : 클라우드 네이티브 환경의 정책 엔진, 릴리스 공지
- OrbStack v1.2.0 : mac용 Docker 애플리케이션, 릴리스 공지
- Meteor v2.13 : 웹앱 플랫폼, 릴리스 공지
- Homebrew v4.2.0 : OS X 패키지 매니저, 릴리스 공지
- Bazel v7.0 LTS : 빌드 플랫폼, 릴리스 공지
- fzf v0.45.0 : 커맨드라인 fuzzy 파인더, 릴리스 공지
- Scala.js v1.15.0 : Scala를 JavaScript로 변환하는 컴파일러, 릴리즈 공지
Comments