웹개발 관련
그 밖의 개발 관련
- 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배 이상 높다.
- 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 업계 뉴스
프로젝트
- Freesentation : 파워포인트 용으로 본고딕과 Roboto를 리디자인한 무료 폰트.
- Automerge : 협업 애플리케이션을 위한 CRDT(Conflict-Free Replicated Data Type 라이브러리
- eza : 모던 ls
버전 업데이트
- Meteor v3.0 : 웹앱 플랫폼, 릴리스 공지
- pnpm v9.6.0 : Node.js 패키지 매니저, 릴리스 공지
- astro v4.12 : JavaScript 웹 프레임워크, 릴리스 공지
- Mikro ORM v6.3.0 : TypeScript ORM, 릴리스 공지
- GitLab v17.2 : 오픈소스 설치형 Git 플랫폼, 릴리스 공지
- panda v0.43.0 : CSS-in-JS, 릴리스 공지
- Hono v4.5.0 : 엣지용 웹 프레임워크, 릴리스 공지
- Prisma v5.17.0 : TypeScript/Node.js 데이터베이스 툴킷, 릴리스 공지
- Traefik Proxy v3.1 : HTTP 리버스 프락시/로드 밸런서, 릴리스 공지
- SWC v1.7.0 : 웹 컴파일러, 릴리스 공지
- Node.js v20.16.0 (LTS) : 자바스크립트 런타임, 릴리스 공지
- Node.js v22.5.0 (Current) : 자바스크립트 런타임, 릴리스 공지
- Kubeflow v1.9 : Kubernetes 머신러닝 툴킷, 릴리스 공지
- Storybook v8.2.0 : React, Vue3, Angular UI 컴포넌트 개발 도구, 릴리스 공지
- Rust 1.80.0 : 프로그래밍 언어, 릴리스 공지
- Spring Tools v4.24.0 : Spring 코딩 환경을 위한 도구, 릴리스 공지
- Docker Desktop v4.33 : 데스크톱용 Docker 애플리케이션, 릴리스 공지
- Git v2.46.0 : 분산 형상관리 도구, 변경사항
- PyTorch v2.4.0 : Python 딥러닝 프레임워크, 릴리스 공지
- TensorFlow v2.17.0 : 기계학습, 딥러닝 라이브러리, 릴리스 공지
- Kargo v0.8.0 : Kubernetes용 배포 도구, 릴리스 공지
- OpenTofu v1.8.0 : Infrastructure as Code 도구, 릴리스 공지
- Kafka v3.8.0 : 분산 이벤트 스트리밍 플랫폼, 릴리스 공지
- pgAdmin 4 v8.10 : PostgreSQL 클라이언트 도구, 릴리스 공지
- Open Policy Agent v0.67.0 : 클라우드 네이티브 환경의 정책 엔진, 릴리스 공지
Comments