Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

기술 뉴스 #251 : 24-08-01

웹개발 관련

  • 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 보호를 도입할 계획이다.(영어)
  • Why, after 8 years, I still like GraphQL sometimes in the right context : Why, after 6 years, I’m over GraphQL에 대한 반박 글로, 기본적으로 Persisted Query를 사용하고 GraphQL을 공개 API로 사용하는 것은 위험하다고 얘기하고 있다. 해당 글은 어느 정도 공개 API로 사용해서 발생한 문제라는데 동의하고 이 부분은 실제로 어려운 일이지만 Persisted Query를 사용하는 것이 아주 중요하고 권한 문제와 성능 문제, API 호환성 문제 등은 GraphQL의 문제라기 보다 모든 API가 가진 문제라고 얘기하며 자신은 8년 동안 사용했는데 구축이 쉽지는 않지만 만족하고 있다고 얘기한다.(영어)
  • 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-*.sysCSAgent.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를 분석한 리포트를 공개했다.(이메일을 넣어야 볼 수 있다.)

    1. 코드 리뷰로 인해서 작은 조직이 큰 조직보다 3배 빠르게 코드를 배포한다.
    2. 스타트업에서 TypeScript는 새로운 JavaScript다.
    3. 모노레포를 사용하는 회사는 Pull Request를 머지하는데 64% 더 오래 걸린다.
    4. 이상적인 Pull Request는 50라인 이하이다. 50라인 이하는 머지까지 100분 정도의 시간이 걸리고 라인 수가 늘어나면 시간이 크게 증가한다.
    5. 50명 이상 기업의 CI 실행시간이 50명 이하 기업보다 2배 더 오래 걸린다.
    6. 100명 이상의 기업은 Merge Queue를 사용할 가능성이 작은 기업보다 2배 이상 높다.
  • In Praise of Small Pull Requests : Pull Request가 작을 때의 장점을 소개하는 글이다.(영어)
  • Commit Graph Drawing Algorithms : 글쓴이의 Design and implementation of a graphical user interface for git라는 석사 논문의 일부로, 프로토타입으로 만든 git 클라이언트에서 커밋 그래프를 그리는 알고리즘에 대한 설명인데 자주 보는 커밋그래프이지만 그 안에 있는 복잡함을 볼 수 있어서 좋다. Git의 특성에 따라 그래프를 그리기 전에 커밋을 정렬해야 하는데 이때 날짜도 작성자의 날짜인지 커미터의 날짜인지도 선택해야 하고 이를 바탕으로 커밋의 위상적 순서를 출력하는 알고리즘을 만들고 이를 곧은 가지로 표현해서 Git의 브랜치를 시각화할 수 있게 구현했다.(영어)
  • Unlocking Git: Using Cherry for Commit Insights : git cherry 명령어로 두 브랜치간의 차이가 있는 커밋을 빠르게 살펴볼 방법을 소개한다.(영어)
  • Google Blocks is now Open Source : Google이 2017년 VR 헤드셋으로 3D 객체와 장면을 만들 수 있도록 발표한 Google Blocks를 Apache 라이센스를 달고 오픈소스로 아카이브를 공개했다.(영어)
  • Amazon Q Developer, 사내 소스 기반 IDE용 코드 추천 기능 출시 : AWS에서 사용자의 프라이빗 코드를 기반으로 AI를 이용한 코드 자동완성과 채팅을 할 수 있는 Q Devloper 프리뷰를 출시했다. 현재 JetBrains, Visual Studio Code 및 Visual Studio용 확장을 사용할 수 있다.(한국어)
  • Valkey 및 Redis 오픈 소스용 오픈 소스 클라이언트 라이브러리, Valkey GLIDE 소개 : Redis의 오픈소스 포크인 Valkey의 공식 클라이언트 라이브러리인 Valkey GLIDE를 소개하는 글이다. Rust로 핵심 엔진이 작성되어 있고 언어별 바인딩으로 여러 언어를 지원하는 형태이고 현재는 Java와 Python을 지원한다.(한국어)

인프라 관련

  • 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로 다시 구축해서 성능 문제를 해결했다.(한국어)

볼만한 링크

  • Stackoverflow 2024 Developer Survey : Stackoverflow에서 매년 진행하는 개발자 설문조사로 올해는 185개국에서 6만 5천여 명이 참여했다.(영어)

    • JavaScript가 올해도 가장 많이 사용된 언어로 뽑혔지만, Python이 사용하고 싶은 언어의 1위로 올라왔다.
    • 사용한 경험이 있고 다시 사용하고 싶은 언어로는 83%가 Rust를 뽑았다.
    • IDE로는 VS Code와 Visual Studio를 가장 많이 선택했고 상황을 바꿀 기회가 있다면 Neovim/Vim을 시도할 것으로 보인다.
    • 응답자의 연결대는 계속 높아지고 있지만 1/3은 경력을 시작한 지 4년 미만이다.
    • 84%는 기술문서로 학습하고 82%는 온라인 리소스로 코딩을 배우지만 49%는 학교에서 코딩을 배우고 있다.
    • 대부분의 개발자가 연간 최소 10,000달러의 연봉 감소가 있었다고 보고했다.
    • 전문가의 70%는 AI가 자신의 직업을 위협하지 않는다고 대답했다.
    • 코딩을 배우는 코더는 숙련된 코더에 비해 AI가 위협될지 확신하지 못했다.(학습자는 27%지만 숙련자는 18%)
    • 응답자의 76%는 AI 도구를 사용하거나 사용할 계획이고 72%는 직장에서 AI 도구를 사용하는데 긍정적이다.
    • 31%는 AI 도구가 정확한 솔루션을 제공한다는데 회의적이고 45%는 복잡한 작업에는 나쁘다고 대답했다.
    • 응답자의 62%는 가장 큰 문제로 기술 부채로 꼽았고, 이는 2위인 빌드/배포의 복잡한 기술 스택보다 2배 높은 수치다.
  • 어느새 어르신들 놀이터 된 인스타…'힙' 되찾은 뜻밖의 SNS : 6월 MAU 기준으로 Instagram, Facebook, X, 네이버 블로그의 연령별 비중을 분석한 기사이다.(한국어)

    • 인스타그램의 MAU는 2,100만~2,200만 명대에서 멈췄다.
    • 인스타그램은 10대 19.6%, 20대 29.8%로 절반이 되지 못하고 30대가 22.8%, 40대가 18.4%, 50대 이상이 9.4%이다.
    • 가장 사용자가 젊은 SNS는 X인데 10대는 43.7%, 20대 36.4%이고 30대는 9.1%이다.
  • Reverse Engineering For Everyone! : x86, x64, ARM, 64bits 아키텍처에서 리버스 엔지니어링을 쉽게 설명하는 튜토리얼로 PDF와 Mobi 형식으로도 제공하고 있다.(영어)

IT 업계 뉴스

  • Microsoft IT outage: The key moments on day of global chaos : 한국 시각 기준으로 7월 19일(금요일) 오후 4시경 전 세계 기업과 기관의 서비스 중단 사태가 발생하면서 큰 혼란이 발생했다. 이 문제는 글로벌 사이버 보안회사인 Crowdstrike Falcon의 업데이트 버그로 Windows와 충돌이 나면서 BSOD(Blue Screen of Death)이 표시되는 상황이 되었다. 토요일부터 일부 시스템은 돌아오기 시작했지만 많은 서비스가 복구되는 데는 며칠의 시간이 걸렸다. 이번 장애는 전체 Windows 기기 중 1% 미만인 850만 대가 영향을 받았다.(영어)
  • Introducing Llama 3.1: Our most capable models to date : Meta가 Llama 3.1 405B를 오픈소스 공개 모델로 발표했고 이번 릴리스와 함께 8B, 70B 모델의 업그레이드 버전도 공개하고 컨텍스트 길이도 128K로 늘어났다. Meta의 CEO인 Mark Zuckerberg는 Open Source AI Is the Path Forward라는 글을 올리면서 역사적으로 오픈형인 Linux가 폐쇄형을 이겼듯이 경쟁적인 AI 시장에서도 똑같은 일이 일어난 것이라며 오픈형 AI 모델에 집중할 것임을 밝혔다.(영어)
  • SearchGPT Prototype : OpenAI에서 웹에서 최신 정보를 기반으로 출처와 함께 원하는 검색 결과를 제공하는 SearchGPT 프로토타입을 공개했다.(영어)
  • GPT-4o mini: advancing cost-efficient intelligence : OpenAI에서 비용효율적인 소형 모델 GPT-4o mini를 발표했다. GPT-4o mini는 개발자는 1M 입력 토큰당 15센트, 1M 출력 토큰당 60센트를 받는다.(영어)
  • 무너진 구영배의 꿈···‘정산 지연’에 커지는 큐텐 위기론 : 지마켓 창업자인 구영배 대표가 큐텐을 설립한 이후 티몬, 인터파크 커머스, 위메프 등을 인수하면서 티메파크로 몸짓을 키우고 AK몰, 위시 등도 인수했다. 최근 자금이 부족하다는 의혹이 많이 있었는데 최근 정산 지연이 발생하면서 위기가 커지고 있다.(한국)
  • 끝내 구속된 창업주‥'최대 위기' 카카오 : SM엔터 인수 시 시세조종 혐의를 받는 카카오 창업자 김범수의 구속영장이 발부되고 구속되었다.(한국어)

프로젝트

  • Freesentation : 파워포인트 용으로 본고딕과 Roboto를 리디자인한 무료 폰트.
  • Automerge : 협업 애플리케이션을 위한 CRDT(Conflict-Free Replicated Data Type 라이브러리
  • eza : 모던 ls

버전 업데이트

2024/08/01 02:00 2024/08/01 02:00