How we sped up Notion in the browser with WASM SQLite : Notion은 자사의 앱에서 3년 전 SQLite로 클라이언트 캐싱을 해서 속도를 개선했는데 이를 WASM SQLite로 웹 브라우저에서 적용했다. 웹에서 SQLite를 적용할 때 WASM SQLite가 사이트가 사용자 기기의 파일을 읽고 쓸 수 있게 하는 API인 OPFS(Origin Private File System)를 웹 워커에서 사용하도록 구성되어 있다. 이를 적용하려고 하자 OPFS가 크로스 오리진이 격리를 요구했는데 노션의 특성상 이렇게 하면 서드파티 기능에 큰 문제가 생겼고 앱과 달리 브라우저에서는 여러 탭을 열기 때문에, 데이터베이스에 여러 탭이 동시에 접근하면서 데이터가 손상되는 문제가 발생했다. 이 문제를 해결하기 위해 Shared Worker를 만들어서 여러 탭에서 노션을 열어도 활성화된 탭에서만 데이터베이스에 접근할 수 있도록 구현했다.(영어)
A new path for Privacy Sandbox on the web : Google의 서드파티 쿠키 차단의 대안으로 만들어진 Privacy Sandbox API를 Google을 포함한 광고 기술 회사와 초기 테스트를 한 결과 개인정보를 보호하면서 퍼블리셔와 광고주에게 적합한 시장을 제공할 수 있다는 잠재성이 확인되었고 시간이 지나면 성과도 개선될 거라고 예상된다고 한다. 하지만 이러한 전환 작업에 상당한 작업이 필요하고 온라인 광고에 큰 영향을 미칠 것으로 판단해서 서드파티 쿠키를 차단하지 않고 사용자가 선택할 수 있도록 제공하고 시크릿 모드에서 IP 보호를 도입할 계획이다.(영어)
Google URL Shortener links will no longer be available : goo.gl를 사용하던 Google의 단축 URL 기능이 1년 뒤인 25년 8월 25일에 완전히 중단될 예정이다.(Google 앱에서 생성한 goo.gl 링크는 동작한다고 한다.) 2018년 새로운 단축 URL 생성은 중단하고 서비스를 유지해 왔지만, 트래픽이 점점 줄어들어 실제의 99% 이상이 활동이 없는 상태라고 한다.(영어)
그 밖의 개발 관련
The biggest-ever global outage: lessons for software engineers : 7월 19일에 있었던 Microsoft/CrowdStrike 장애를 소프트웨어 엔지니어링 관점으로 분석한 글이다. 이번 문제는 CSAgent.sys 프로세스에서 r8 주소의 바이트를 r9d 주소로 이동시키는 mov r9d, [r8] 어셈블리 명령어에서 r8 가 잘못된 주소였기에 발생했고 CrowdStrike가 모든 클라이언트에 푸시한 C-00000291-*.sys를 CSAgent.sys 프로세스가 읽다가 발생했다. CrowdStrike측 발표에 따르면 이번 업데이트는 악의적으로 명명된 파이프를 감지하기 위해 새로운 파이프 이름과 동작 규칙을 정의한 채널 파일(C-00000291-*.sys)을 배포했고 정확한 원인은 모르지만, 이 채널 파일을 파싱하면서 잘못된 메모리 주소를 옮기려다가 발생했다. 문제는 느린 복구에서도 발생했는데 윈도우 복구모드에서 해당 파일을 삭제해서 복구해야 했기에 IT 관리자는 각 윈도우에 직접 접근해서 하나씩 처리해야 했고 850만 대의 복구가 필요했기에 일부 독립 개발자와 Microsoft가 복구 도구를 출시했지만, 복구가 쉽지 않았기에 중단 4일 후까지도 대부분은 복구되지 않았다. 이 문제는 해당 소프트웨어가 커널에 접근할 수 있었기 때문에 가능한 일이었는데 Windows Vista를 만들 때 EU가 이 접근을 막지 못하게 하면서 발생했다. 그럼에도 소프트웨어 엔지니어가 이러한 문제를 막기 위해 어떤 대처를 할 수 있는지를 설명한다.(영어)
Unified Grid: How We Re-Architected Slack for Our Largest Customers : 2013년 슬랙은 간단한 모델로 각 워크스페이스는 단일 데이터베이스나 샤드에 저장되고 클라이언트가 사용자의 워크스페이스 ID로 데이터를 가져왔다. 이후 성장하면서 몇몇 회사가 여러 워크스페이스를 만들어서 사용하는 것을 보고 이를 한곳에서 관리할 수 있도록 Enterprise Grid를 만들었다. 이를 지원하기 위해 워크스페이스의 부모인 조직을 만들어서 각 샤드와 조직의 데이터를 연결했다. 하지만 조직 내에서 여러 워크스페이스를 사용하는 사람이 늘어났고 이러한 경험을 통합해서 제공하기 위해 Vitess 마이그레이션 했고 워크스페이스 ID나 조직 ID로 샤딩하는 게 더 이상 의미 없기 때문에 다른 축으로 샤딩하기 시작하면서 Unified Grid를 만들기 시작했다.(일부 회사는 수천 개의 워크스페이스를 사용한다) Slack에서 경로 프로토타이핑이라고 부르는 점진적으로 구축하면서 증명하고 아이디어를 다듬는 과정을 통해서 Unified Grid를 위한 API를 만들어서 충분히 효과가 있다는 걸 확인한 후에 점진적으로 전환했다.(영어)
How to review code effectively: A GitHub staff engineer’s philosophy : GitHub의 스태프 엔지니어가 업무 중 중요한 부분으로 코드 리뷰를 하고 있어서 그동안의 경험을 정리한 글이다. 슬랙에서 /github subscribe your/repo pulls +label:"your-team-label"같은 명령어로 리뷰할 PR만 알림이 오게 설정하거나 GitHub 검색해서 검토가 필요한 PR을 찾는 방법 및 너무 많은 알림으로 노이즈가 되지 않도록 관리하는 방법을 소개한다. 코드 리뷰를 할 때는 가능한 구체적으로 작성하고 개선이 필요한 리뷰의 예시를 보여주며 코드 리뷰를 할 때는 질문을 많이 하고 때로는 긍정적인 댓글을 남기는 것도 도움이 되며 병합을 막지 않도록 승인에 신경 쓰고 있고 Request changes는 강압적으로 보일 수 있어서 거의 사용하지 않는다고 한다.(영어)
State of code review 2024 : Graphite에서 3만 오천 명 이상의 엔지니어가 올린 500만 건 이상의 Pull Request를 분석한 리포트를 공개했다.(이메일을 넣어야 볼 수 있다.)
코드 리뷰로 인해서 작은 조직이 큰 조직보다 3배 빠르게 코드를 배포한다.
스타트업에서 TypeScript는 새로운 JavaScript다.
모노레포를 사용하는 회사는 Pull Request를 머지하는데 64% 더 오래 걸린다.
이상적인 Pull Request는 50라인 이하이다. 50라인 이하는 머지까지 100분 정도의 시간이 걸리고 라인 수가 늘어나면 시간이 크게 증가한다.
50명 이상 기업의 CI 실행시간이 50명 이하 기업보다 2배 더 오래 걸린다.
100명 이상의 기업은 Merge Queue를 사용할 가능성이 작은 기업보다 2배 이상 높다.
Commit Graph Drawing Algorithms : 글쓴이의 Design and implementation of a graphical user interface for git라는 석사 논문의 일부로, 프로토타입으로 만든 git 클라이언트에서 커밋 그래프를 그리는 알고리즘에 대한 설명인데 자주 보는 커밋그래프이지만 그 안에 있는 복잡함을 볼 수 있어서 좋다. Git의 특성에 따라 그래프를 그리기 전에 커밋을 정렬해야 하는데 이때 날짜도 작성자의 날짜인지 커미터의 날짜인지도 선택해야 하고 이를 바탕으로 커밋의 위상적 순서를 출력하는 알고리즘을 만들고 이를 곧은 가지로 표현해서 Git의 브랜치를 시각화할 수 있게 구현했다.(영어)
Amazon Q Developer, 사내 소스 기반 IDE용 코드 추천 기능 출시 : AWS에서 사용자의 프라이빗 코드를 기반으로 AI를 이용한 코드 자동완성과 채팅을 할 수 있는 Q Devloper 프리뷰를 출시했다. 현재 JetBrains, Visual Studio Code 및 Visual Studio용 확장을 사용할 수 있다.(한국어)
Maestro: Data/ML Workflow Orchestrator at Netflix : 2년 전 공개했던 Netflix가 내부에서 사용하는 데이터/ML 워크플로우 오케스트레이터인 Maestro를 오픈소스로 공개했다. 그동안 Maestro로 완전히 마이그레이션 했고 실행된 작업이 87.5% 증가했고 매일 평균 50만 개의 작업이 실행되고 많은 날에는 200만 개까지 실행되고 있다. Maestro는 JLS(Java Language Specifications)을 따르는 표현 언어인 SEL을 사용해서 워크플로우에 코드 주입할 수 있고 다양한 실행 전략과 파라미터 등의 기능을 지원한다.(영어)
How did Facebook intercept their competitor's encrypted mobile app traffic? : 현재 Meta에 대한 집단 소송의 법원 문서의 내용과 Android 앱을 리버스 엔지니어링 해서 Facebook이 경쟁사 앱이 어떻게 성장하고 있는지 보기 위해서 경쟁사 앱을 어떻게 가로챘는지를 설명한다. Facebook은 VPN 앱인 Onavo를 출시했는데 Android에서만 1,000만 건 이상 설치되었고 이 앱은 많은 권한 요청과 함께 CA 인증서를 설치하도록 했다. 트래픽을, VPN을 통해 Facebook 인프라로 보내고 Facebook이 ssl bump라고 부르는 기능으로 구성된 Squid 캐싱 프락시로 리 다이렉션 되어서 암호화된 TLS 트래픽을 열어볼 수 있게 되었다. 이는 OS의 업데이트로 인한 보안 강화와 각각 서비스의 인증서 고정(pinning)으로 성공률이 떨어지자, 접근성 API를 대안으로 사용하려고 한 사례도 공개되었다. Facebook은 2016~2019년까지 이를 통해 Snapchat, YouTube, Amazon 도메인을 엿본 것으로 보이고 오늘날 기술적으로 불가능하긴 하지만 당시 Snapchat은 인증서 고정을 분석 도메인에는 하지 않았던 것으로 보인다고 밝혔다.(영어)
Informer를 사용해 쿠버네티스 중계 API 서버의 성능 개선하기 : Kubernetes에서 팀별로 네임스페이스를 할당하고 RBAC로 담당 네임스페이스에만 권한을 가지도록 운영 중이었는데 노드의 여유 리소스를 알려주기 위한 기능을 지원하기 위해 중계 API 서버를 구축했다. 하지만 모든 파드를 조회해야 했기에 API 응답 속도가 너무 느렸고 클러스터에 큰 부하를 주는 문제가 있었다. 이를 해결하기 위해 Kubernetes의 오브젝트 타임 변경을 알려주는 Informer를 Go로 다시 구축해서 성능 문제를 해결했다.(한국어)
무너진 구영배의 꿈···‘정산 지연’에 커지는 큐텐 위기론 : 지마켓 창업자인 구영배 대표가 큐텐을 설립한 이후 티몬, 인터파크 커머스, 위메프 등을 인수하면서 티메파크로 몸짓을 키우고 AK몰, 위시 등도 인수했다. 최근 자금이 부족하다는 의혹이 많이 있었는데 최근 정산 지연이 발생하면서 위기가 커지고 있다.(한국)
Comments