Outsider's Dev Story

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

기술 뉴스 #234 : 23-11-16

웹개발 관련

  • Building towards a new default rendering model for web applications : Vercel에서 CDN을 더 활용하기 위해 엣지에서 성능을 최대화할 수 있도록 Next.14에서 Partial Prerendering(PPR)를 사용하는 방법을 소개하는 글이다. PPR은 <Suspense>를 기준으로 정적 쉘을 생성하고 이 정적 쉘은 엣지에서 바로 사용자에게 제공되는데 이를 통해 Incremental Static Regeneration(ISR)의 안정성과 속도, Server-Side Rendering(SSR)의 동적 기능을 통합한 기능이라고 설명한다.(영어)
  • A Gentle Introduction to Islands : Deno의 웹 프레임워크인 Fresh은 Islands 아키텍처를 사용하는데 Fresh에서 Islands가 동작하는 방법을 설명한다. 웹사이트에는 JavaScript가 전혀 필요하지 않은 사이트도 있고 아주 일부만 JavaScript가 필요한 사이트도 있는데 많은 JavaScript 프레임워크는 페이지 자체를 컴포넌트로 다루기 때문에 다수의 하이드레이션 코드가 필요해지는데 아일랜드 아키텍처에서는 아일랜드에서는 아일랜드를 인식해서 필요한 부분의 JavaScript 코드만 생성해서 클라이언트에 내려주게 된다.(영어)
  • Saga Design System: shaping the future of user experiences at Grafana Labs : Grafana Labs에서 Grafana 내의 제품 간에 일관된 인터페이스를 제공하기 위해 디자인 시스템 Saga를 공개했다.(영어)
  • Expo Orbit v1: launcher app launched into orbit : Expo에서 Expo Application Services(EAS)로 빌드 후 스낵 프로젝트를 실행하는 과정을 개선하기 위해 지난 8월 Orbit을 공개했는데 반응이 좋아서 프로젝트를 진행하고 이번에 Orbit v1을 공개했다. Orbit을 이용하면 macOS 메뉴바에서 빠르게 빌드하고 실행할 수 있다.(영어)
  • Announcing Angular.dev : Augular가 새로운 사이트인 angular.dev를 공개했다.(영어)

그 밖의 개발 관련

  • Why we replaced Pinecone with PGVector : LLM 평가 인프라를 만드는 ConfidentAI에서 벡터 데이터베이스인 Pinecone을 쓰다가 PostgreSQL에서 벡터 검색을 지원하는 PGVector로 갈아탄 이유를 설명한 글이다. Pinecon은 PoC할 때는 편하지만 데이터 동기화 문제와 벡터랑 용량 제한으로 결국 확장성에 문제가 생기고 PGVector의 경우 HNWS 도입으로 성능이 좋아져서 Pinecone을 대체할 만하다고 한다.(영어)
  • Universe 2023: Copilot transforms GitHub into the AI-powered developer platform : GitHub 콘퍼런스인 Universe에서 AI 관련 기능을 출시했다.(영어)

    • GitHub Copilot Chat이 12월 정시 출시 예정.

      • 기존 Copilot 사용자는 사용할 수 있고 GPT-4 기반이며 에디터의 코드 기반으로 질문을 하거나 /fix, /test같은 명령어를 사용할 수 있다.
      • JetBrains IDE도 지원
    • GitHub Copilot Chat이 github.com에도 통합되어 웹에서 바로 대화를 나눌 수 있으며 GitHub 앱에도 통합될 예정
    • GitHub Copilot Enterprise 출시

      • 24년 2월 정식 출시 예정
      • GitHub Copilot Enterprise 최상위 요금재로 매월 사용자당 $39(Copilot Business는 $19, 개인은 $10)
      • 회사의 github 저장소와 연결해서 비공개 코드를 기반으로 제안 가능
      • Pull Request 요약 생성 기능 지원
    • GitHub Advanced Security에서 AI 기반 보안 기능 지원

      • GitHub Copilot Chat에서 IDE에서 취약점 수정 제안
      • Pull Request에서 JavaScript/TypeScript에 대해 코드 스캐닝을 통해 AI가 취약점 수정 사안을 제안
    • GitHub Copilot Workspace

      • GitHub 이슈에서 워크스페이스를 열면 변경에 대한 제안을 AI가 해주고 이를 바로 코드 수정 및 실행한 후 Pull Request까지 열 수 있게 된다.
      • 24년 출시 예정

인프라 관련

  • Post Mortem on Cloudflare Control Plane and Analytics Outage : 11월 2일 데이터센터의 전력이 나가면서 11월 2일 11:44(UTC)부터 11월 4일 04:25(UTC)까지 2일 정도 지속된 Cloudflare 장애의 포스트모템이다. 장애의 심각성 때문인지 Cloudflare의 CEO인 Matthew Prince가 복구되자마자 바로 포스트모템을 올렸다.(영어)

    • 컨트롤 플레인과 분석 서비스는 오리건주 힐즈버러 주변의 3개 데이터 센터에서 실행되고 있었으며 이 3개의 데이터 센터는 자연재해로 영향받지 않도록 충분히 떨어져 있으며 액티브-액티브로 클러스터를 이중화해서 운영할 수 있도록 충분히 가깝게 선택이 돼서 서로 데이터를 동기화하고 있었다.
    • 이 세 곳 중 하나는 PDX-DC04라고 불렀는데 가장 큰 분석 클러스터와 고가용성 클러스터의 1/3이 있었다.
    • 11월 2일 08시 50분(UTC) PDX-DC04의 유틸리티 회사인 포틀랜드 제너럴 일렉트릭(PGE)의 전력 공급 중 하나에 예기치 않은 유지보수가 발생했고 데이터센터를 운영하는 Flexential는 발전기를 돌려서 이를 보완했다.
    • Flexential는 이를 Cloudflare에 알리지 않았고 발전기와 유틸리티 라인을 같이 가동한 이유를 Flexential이 아직 알려주지 않았다.
    • 11:40(UTC) PGE의 변압기 중 하나에 그라운드 폴트가 발생했고 첫 유지보수 작업으로 인해 발생했을 것으로 추측한다.
    • 이 그라운드 폴트로 인한 보호 조치로 PDX-DC04의 모든 발전기가 중단되어 데이터센터의 전력 공급원이 모두 오프라인이 되었다.
    • 데이터센터에 UPS 장비가 있고 10분 동안 버틸 수 있었지만 4분 만에 UPS에 문제가 생기기 시작했고 데이터센터는 10분만에 발전기를 복구하지도 못했다.
    • 발전기를 복구하는데 3가지 문제가 있었는데 그라운드 폴트로 인한 문제였으므로 발전기에 물리적으로 접근해서 수동으로 재시작해야 했고, Flexential의 접근제어 시스템도 전원 공급이 되지 않아 오프라인 상태였으며, 현장 야간 근무자에 전문가가 포함되어 있지 않고 보안요원과 근무한 지 일주일 된 근무자 뿐이었다.
    • 11:44~12:01(UTC)에 UPS가 방전되어 데이터센터의 모든 전기가 끊겼지만 Flexential은 이를 Cloudflare에 알리지 않았고 전 세계를 연결하는 라우터 2대가 내려간 후 이를 알게 되었고 데이터센터에 팀을 파견했다.
    • Flexential은 12:28(UTC)에야 처음으로 전원 문제를 공지했다.
    • 고가용성으로 설계되어 다른 두 데이터센터에서 동작해야 했지만 Kafka와 Clickhouse 두 서비스는 고가용성 클러스터에 있지 않고 PDX-DC04에만 있었으면 고가용성 클러스터에 이 두 서비스에 의존성을 가진 서비스가 있었다. 고가용성 테스트도 했었지만 PDX-DC04를 모두 오프라인으로 하는 테스트는 진행하지 않았기에 이러한 의존성이 있다는 걸 놓쳤다.
    • 또한 새로운 제품이나 데이터베이스가 고가용성 클러스터에 통합되도록 요구하는 절차가 부족했다.
    • 12:48(UTC) Flexential은 발전기를 재 가동하고 과부하를 막기 위해 한 회로씩 점진적으로 켜다가 Cloudflare 회로에 문제가 있음을 발견하고 회로 차단기 교체를 시도했지만 보유 차단기보다 고장난 차단기가 많았기에 차단기를 조달해야 했다.
    • 13:40(UTC) 복구 시간을 예측할 수 없었기에 유럽에 있는 재해복구 사이트에 페일오버를 요청했다. 다행히 대부분의 서비스는 나머지 두 데이터센터에서 운영중이었으므로 컨트롤 플레인의 일부만 복구하면 되는 상황이었다.
    • 13:43(UTC) 재해복구 사이트에서 첫 서비스를 시작했다. 과부하가 걸려서 속도 제한을 구현해야 했지만 17:57(UTC) 안정적으로 서비스를 제공할 수 있게 되었다.
    • 신규 제품 등 재해복구 사이트에서 동작하지 않는 서비스가 있었고(대표적으로 동영상 스트림) 서비스 복구를 위해 1) 재해 복구 사이트에서 서비스를 다시 구현하고 2) 고가용성 클러스터로 마이그레이션하는 두 트랙을 동시에 동시에 진행했다.
    • 22:48(UTC) Flexential이 회로 차단기를 모두 교체하고 전력을 복구했음을 확인했지만 하루종일 비상상태로 일한 Cloudflare 팀은 바로 이동하기 보다는 휴식 후 아침에 데이터센터로 가기로 결정했다. 약간 복구가 늦어지지만 추가적인 실수를 줄였다고 생각한다.
    • 11월 3일 새벽부터 PDX-DC04에서 작업을 시작하고 서버를 재구축하는데 3시간이 걸렸다.
    • 11월 4일 04시 25분(UTC) 완전히 복구한다.
  • Gateway API v1.0: GA Release : Ingress API를 다음 버전인 Kubernetes의 Gateway API가 v1이 되었다.(영어)
  • How Grafana Labs switched to Karpenter to reduce costs and complexities in Amazon EKS : AWS EKS에서 Kubernetes를 사용하는데 처음에는 Cluster Autoscaler(CA)를 사용하고 있었지만 이후 Karpenter로 갈아탔다. CA는 인스턴스 유형을 여러개 선택하더라도 확장될 때 어느 인스턴스 유형이 선택될지는 제어할 수 없어서 제약이 되었고 스팟 인스턴스를 사용할 때 스팟 인스턴스가 부족하다고 온디맨드로 대신 띄우는 등의 작업을 없었다. 이러한 문제를 해결하기 위해 Karpenter 도입했는데 Karpenter는 Kubernetes 네이티브 리소스를 사용해서 더 유연하게 용량 관리를 할 수 있고 용량 유형도 선택할 수 있었습니다. 적용할 때는 Karpenter가 프로비저너가 없으면 아무일도 하지 않으므로 먼저 Karpenter를 배포하고 CA를 끄면서 Karpenter의 프로비저너와 노드 템플릿을 제공해서 Karpenter로 자연스럽게 교체했다. 적용 이후 유휴 비율이 50% 감소했다고 한다.(영어)
  • Manage log volumes, metrics cardinality, monthly bills: Explore Grafana Cloud cost management tools : Grfana Cloud에 비용 관리 허브가 추가되었다. 여기서는 누가 로그를 가장 많이 쌓았는지 카디널리티가 낮게 집계할 수 있는 권장 규칙도 제안하고 월별 비용을 볼 수 있다. 이 기능은 오픈소스는 아니고 그라파나 클라우드의 기능이다.(영어)
  • Platform Engineering Maturity Model : CNCF에서 플랫폼 엔지니어링 성숙도 모델을 공개했다. 이 성숙도 모델은 조직마다 다를 수 있으므로 Cloud Native Maturity Model와 같이 평가해 보는 것이 좋고 각 측면에서 성숙도가 높아질 때마다 자금과 인력에 대한 요구사항도 같이 증가하므로 최고 수준에 도달하는 게 목표라기보다는 투자 여력을 고려해서 각 단계의 자질을 고려해야 한다.(영어)
  • Preview Environments on Kubernetes with ArgoCD : ArgoCD와 Tekton을 이용해서 프리뷰 환경을 구성하는 방법을 설명한다. Argo CD를 이용해서 GitHub의 Pull Request를 모니터링하다가 새 브랜치나 커밋이 올라오면 Tekton으로 빌드하고 Argo CD의 앱을 생성해서 Kubernetes 클러스터에 프리뷰 환경을 배포하는 예시를 보여준다.(영어)
  • Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)
    RFC 9460
    : 새로운 DNS 레코드 타입인 SVCB와 HTTPS가 표준 명세가 되었다.(영어)

볼만한 링크

  • Developer Productivity Engineering at Netflix : Netflix의 생산성 엔지니어링 디렉터인 Kathryn Koehler가 Netflix의 개발자 생산성 엔지니어링에 관해서 설명한 글이다. Netflix의 생산성 엔지니어링 조직은 개발자의 흐름을 방해하는 모든 것을 추상화하려고 하고 있고 티어를 나누어서 지원하고 있다. DORA 등의 정량적 지표로 생산성을 추적하지만 The SPACE of Developer Productivity 활용해서 만족도와 효율성, 성능, 협업에 대한 정성적인 지표도 추적하고 있다. 하지만 설문조사는 어렵기 때문에 개발자들과 능동적인 커뮤니케이션을 하도록 유도하고 내부 플랫폼으로 포장된 길을 제공하려고 노력하고 있다고 한다.(영어)
  • Octoverse: The state of open source and rise of AI in 2023 : GitHub 데이터를 기준으로 오픈소스 생태계를 살펴보는 Octoverse 리포트가 공개되었다. 올해 보고서에서는 GenAI의 인기가 엄청나게 커져서 Top 10 프로젝트에 처음으로 AI 프로젝트가 들어왔고 Dockerfile과 IaC의 사용량이 많이 증가했으며 처음 오픈소스에 기여한 사람이 가장 많은 해가 되었다. 추가로 HCL 도입은 36% 성장했고 인기 언어는 JavaScript, Python, TypeScript, Java, C# 순이고 처음으로 TypeScript가 Java를 넘어섰다.(영어)
  • GitHub Transparency Center : GitHub에서 개인정보와 관련해서 정부의 요청이나 DCMA 검토 등의 데이터를 공개하는 투명성 보고서를 2년마다 공개하고 있는데 이전 데이터를 쉽게 볼 수 있도록 투명성 센터를 오픈했다.(영어)

IT 업계 뉴스

프로젝트

  • monaspace : GitHub에서 굵기, 기울기, 폭 3개 축이 가변인 코딩용 폰트 5종을 공개했다.
  • xk6-disruptor : Grafana k6의 확장으로 서비스에 오류를 주입해서 의존성 있는 서비스에 오류 비율이나 레이턴시에 대한 테스트를 할 수 있다. 공지 글 참고
  • sshx : 웹 기반으로 실시간 협업이 가능한 터미널.
  • Misty Programming Language : Douglas Crockford가 만든 범용 동적 액터 언어.

버전 업데이트

2023/11/16 09:45 2023/11/16 09:45