Outsider's Dev Story

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

기술 뉴스 #217 : 23-03-01

웹개발 관련

  • Web Push for Web Apps on iOS and iPadOS : iOS/iPadOS 16.4 베타 1에서 홈 화면 Web Push 지원이 추가되었다. 웹 개발자가 매니페스트 파일을 제공해서 웹사이트를 홈 화면 웹앱으로 홈 화면에 설치할 수 있게 되는데 이 웹앱에서 Push API, Notifications API, Service Workers를 사용해서 사용자에게 푸시를 보낼 수 있게 되었다. Badging API도 지원해서 웹앱 아이콘에 뱃지를 표시할 수 있다.(영어)
  • New headless Chrome has been released and has a near-perfect browser fingerprint : 새로운 헤드리스 크롬이 2022년 나왔지만, 여전히 --headless=new 플래그 밑에 숨겨져 있었으나 곧 크롬의 표준 헤드리스 모드가 될 예정이라고 한다. 헤드리스를 탐지할 수 없는 것은 아니지만 새 헤드리스 모드는 실제 크롬과 핑거프린트의 차이가 거의 없기 때문에 navigator.plugins.length = 0window.chrome를 검사하는 정도로는 구별할 수가 없어졌고 탐지하기가 훨씬 어려워졌다고 한다.(영어)

그 밖의 개발 관련

  • 프로젝트 발할라, 야심찬 자바 리팩터의 내부 들여다보기 : Java에서 int, byte, short, long, float, double, boolean, char의 프리미티브와 객체로 나뉘어져 있는데 이 균열을 해소하는 것이 프로젝트 발할라의 목적이다. 객체 참조로 성능 최적화에 어려움이 있고 참조 버킷으로 인해서 부풀려진 메모리가 저장되는 문제가 있는데 이를 해결하기 위해 값 클래스와 프리미티브 클래스를 도입한다고 한다.(한국어)
  • 파이썬 프로그래머를 위한 러스트 입문 : indosaram님이 작성한 Python 프로그래머를 위한 Rust 입문서로 책의 내용이 모두 온라인에 공개되어 있다.(한국어)
  • Secret scanning alerts are now available (and free) for all public repositories : 작년 12월에 퍼블릭 베타로 공개된 시크릿 알림 기능이 모든 공개 저장소에서 사용할 수 있게 되었다. 저장소의 설정에서 활성화하면 코드나 이슈 등등에서 시크릿을 유출했을 때 알림을 받을 수 있게 되고 GitHub이 100여 개 서비스 프로바이더와 파트너 프로그램을 운영하고 있다.(영어)
  • Hakana: Taking Hack Seriously : Slack에서 Hack 언어 정적분석 도구인 Hakana를 오픈소스로 공개했다. 2014년 PHP로 구축된 Slack은 2016년 Facebook이 만든 Hack으로 마이그레이션 하기 시작했고 보안 분석, 잠재적 버그 탐지, 죽은 코드 정리 등을 위해 Rust로 정적 분석 도구를 작성했다.(영어)

인프라 관련

  • How does Kubernetes assign QoS class to pods through OOM score? : Kubernetes에서 메모리가 부족한 경우 OOMKilled로 죽게 되는데 이는 리눅스 커널에서 OOM Killer가 시스템에 영향이 적도록 가장 적은 수의 프로세스를 죽여서 최대한의 메모리를 가져오도록 죽일 프로세스를 선택합니다. 이를 위해 oom_score를 사용하는데 oom_score_adj로 이 값을 조정할 수 있으므로 Kubernetes도 oom_score_adj를 사용합니다. QoS 클래스마다 점수가 있는데 Guaranteed는 -998, BestEffort는 1000, Burstable은 min(max(2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999)로 부여해서 가장 높은 oom_score의 프로세스를 죽이게 된다. 이를 확인해 볼 수 있는 과정을 설명하고 있다.(영어)
  • Docker on Apple Silicon Mac: How to Run x86 Containers with Rosetta 2 : macOS용 Docker Desktop 4.16 버전부터 Rosetta 지원이 추가되어 해당 기능을 활성화하면 애플 실리콘 맥에서도 쉽게 x86 기반 Docker 컨테이너를 빌드하거나 실행할 수 있게 되었다.(영어)
  • Writing Terraform for unsupported resources : Terraform으로 인프라는 코드화할 때 프로바이더가 필요하기 때문에 원하는 리소스 관리에 프로바이더가 없으면 프로바이더를 기다리거나 원하는 기능이 추가되기를 기다려야 한다. 하지만 해당 서비스가 API를 제공하고 있다면 TerraCurl를 이용해서 API를 호출해서 프로바이더를 기다리지 않고 코드화할 수 있다.(영어)
  • Sync 10,000 Argo CD Applications in One Shot : Argo CD에서 수천 개의 앱을 Kubernetes 클러스터에 동기화할 때 병목 지점을 확인하기 위해 2천 개에서 만개까지의 애플리케이션을 동기화하는 실험을 한 과정이다. Kustomization을 쓰고 있다면 CPU 병목이 생길 수 있고 수천 개의 앱을 사용한다면 기본 재동기화 시간을 늘려야 할 수 있고 최악의 상황에는 동기화 지연이 발생할 수도 있다.(영어)
  • Introducing the XYZ chart: A three-dimensional way to visualize your data in Grafana : Grafana에 데이터를 3차원으로 표시할 수 있는 XYZ 차트가 도입된다. 아직은 알파버전이라 enable_alpha=true를 설정해야 사용할 수 있다.(영어)

볼만한 링크

  • How should AI systems behave, and who should decide? : OpenAI에서 ChatGPT의 동작과 어떻게 개선할 예정인지를 정리했다. ChatGPT는 사전 훈련 단계에서 데이터로 다음 단어를 예측하는 방법을 학습하고 시스템의 동작을 좁히기 위해 미세 조정하는 단계를 거쳐서 모델이 완성된다. AI 시스템이 즉시 유용하도록 편견을 줄이도록 노력하고 각 사용자가 커스터마이징할 수 있도록 업그레이드 중이지만 문제를 일으키지 않도록 한계를 정의하고 사용자에게 시스템 규칙에 영향을 미칠 수 있는 권한을 주려고 준비 중이라고 한다.(영어)
  • ChatGPT에 대한 교육자 고려 사항 : OpenAI에서 교육자들이 ChatGPT와 관련해서 고려해야 할 가이드라인으로 작성한 Educator considerations for ChatGPT의 번역문이다. 학생들이 자료를 만들 때 ChatGTP를 사용했음을 명시하기를 권장하고 있고 잘못된 답변을 할 수 있으므로 학생들이 정보의 신뢰성을 평가하는 방법을 알아야 하고 결과물을 사용할 때 주의해야 한다고 하고 있다. ChatGPT의 등장으로 교육 업계에도 고민이 많을 텐데 이 문서를 참고하면 좋을 것 같다.(한국어)

IT 업계 뉴스

프로젝트

  • Caretta : eBPF로 Kubernetes 클러스터 내에서 서비스 간의 네트워크 의존성을 Grafana에서 시각화해서 보여주는 도구
  • Adrenaline : OpenAI Codex를 이용한 디버거로 문제 있는 코드와 오류 메시지를 올리면 설명과 함께 수정 코드를 제시한다.
  • Score : 플랫폼 중립적이면서 컨테이너 기반의 워크로드 명세.
  • EnhanceAI : OpenAI를 이용해서 웹의 Textarea에서 AI 자동완성을 추가할 수 있는 React 컴포넌트

버전 업데이트

  • Homebrew v4.0.0 : OS X 패키지 매니저, 릴리스 공지

    • homebrew/core와 homebrew/cask 탭 대신 formulae.brew.sh에서 받은 JSON 파일로 패키지 설치
    • 분석 데이터를 Google Analytics와 EU에 있는 InfluxDB 양쪽에 보내고 100 이내에 마이그레이션 한 뒤 Google Analytics는 제거 예정
  • Vitess 16.0 : MySQL 클러스터링 시스템, 릴리스 공지

    • 워크플로우에서 소스와 타켓을 비교하는 VDiff v2가 GA가 되어 v1은 이후 릴리스에서 삭제될 수 있음
    • Vitess 네이티브 오케스트레이터인 VTOrc가 필수가 됨
  • FFmpeg 6.0 "Von Neumann" : 오디도/비디오 변환 프레임워크, 릴리스 공지
  • Next.js 13.2 : 서버렌더링 React 애플리케이션 프레임워크, 릴리스 공지

    • 새로운 메타데이터 API로 SEO 지원
    • App 라우터에서 Route 핸들러로 커스텀 요청 핸들러 지원
    • 서버 컴포넌트에서 MDX 사용 가능
    • Rust로 새로 작성한 MDX 파서
    • 정적 타입 링크 지원
  • Nx v15.7.0 : 모노레포 빌드 시스템, 릴리스 공지

    • Express, Fastify, Koa 지원 개선
    • Angular LTS 지원
    • Storybook 7.0 베타 지원
  • Grafana v9.4 : 매트릭 대쉬보드, 릴리스 공지

    • Canvas 패널의 개선으로 더 복잡한 시각화 가능
    • 새로운 패널 디자인 적용
    • ctrl/cmd + K 단축키로 빠른 검색 지원
  • Phoenix Framework v1.7.0 : Elixir 웹 프레임워크, 릴리스 공지
  • GitLab v15.9 : 오픈소스 설치형 Git 플랫폼, 릴리스 공지
  • Angular v15.2.0 : JavaScript 프레임워크, 릴리스 공지
  • three.js r150 : JavaScript 3D 라이브러리, 릴리스 공지
  • RedwoodJS v4.2.0 : 풀스택 웹프레임워크, 릴리스 공지
  • podman v4.4.0 : 컨테이너 엔진, 릴리스 공지
  • curl v7.88.0 : URL로 데이터를 처리하는 CLI, 릴리스 공지
  • Cilium v1.13.0 : eBPF 기반 CNI, 릴리스 공지
  • Node.js v19.7.0 (Current) : 자바스크립트 런타임, 릴리스 공지
  • Waypoint v0.11.0 : 빌드, 배포, 릴리스 워크플로우, 릴리스 공지
  • Prisma v4.11.0 : TypeScript/Node.js 데이터베이스 툴킷, 릴리스 공지

    • JSON 프로토콜 초기 프리뷰 기능으로 도입됨. 그동안은 쿼리 엔진과 통신할 때 GraphQL 유사 프로토콜을 사용했지만, 성능 문제로 JSON 프로토콜을 도입함
  • mruby v3.2.0 : Ruby 언어의 경량 구현체, 릴리스 공지
  • ESLint v8.35.0 : JavaScript 코드 분석 도구, 릴리스 공지
  • Docker Desktop v4.17 : 데스크톱용 Docker 애플리케이션, 릴리스 공지

    • 이미지 취약점을 분석하는 새로운 Docker Scout 서비스의 얼리 엑세스
    • Docker 익스텐션의 셀프 발행 기능 추가
2023/03/01 18:54 2023/03/01 18:54