웹개발 관련
- How GitHub Actions renders large-scale logs : GitHub Actions에서 아주 긴 로그를 보여줄 때 성능 향상을 위해서 보이는 영역만 렌더링 하도록 virtualization이라는 기법을 사용했다. 초기 구현에서 React 라이브러리와 바닐라 자바스크립트를 비교했는데 구현의 제약 때문에 바닐라 자바스크립트를 선택했지만 제약사항이나 좋지 않은 UX 경험이 생겼다. 즉, 페이지에 2개의 스크롤 영역이 생겼고 테스트가 많이 되지 않아서 브라우저 탭이 비활성화되었다가 돌아온 경우 로그가 제대로 갱신되지 않거나 로그를 선택하면서 스크롤하는 경우는 선택된 영역이 깨지는 등의 문제가 발생했다. 초기와 달리 데이터를 살펴보니 99.51%가 5만 라인 이하의 로그를 가지고 있었고 2만 라인부터 브라우저가 어려움을 겪고 있었다. 그래서 보여줄 데이터만 메모리에 올리는 data virtualization은 버리고 UI virtualization만 사용하기로 결정하고 처음부터 다시 작성했다. 작성 전에 목표를 정해놓고 이 목표를 달성할 수 있는지 테스트를 하고 만들 수 있다는 판단이 들어서 작업한 결과 1주일 만에 모든 면에서 좋아진 초기 구현체를 얻었다고 한다.(영어)
- Mitigate cross-site scripting (XSS) with a strict Content Security Policy (CSP) : XSS 공격을 막기 위해 CSP를 사용하는데 Allowlist CSP는 대부분 건너뛸 수 있어서 공격을 제대로 막아주지 못하기 때문에 strict CSP를 사용하라고 하고 있다. strict CSP는 매 요청마다 다른 값을 응답 헤더로 알려주는 Nonce 방식과 스크립트마다 다른 값을 가지는 Hash 방식이 있는데 Nonce 방식은 매 요청마다 다른 값을 줄 수 있는 경우 적합하고 Hash 방식은 정적 파일을 서빙할 때 더 접합하다. strict CSP를 도입하기 위해서 두 방식 중 적합한 방식을 선택한 뒤에 Report-only 모드나 enforcement 모드를 선택해서 점진적으로 적용하면서 strict CSP에서 허용 안 되는 스크립트를 수정하면서 도입하라고 하고 있다.(영어)
- requestIdleCallback으로 초기 렌더링 시간 14% 단축하기 : Line 증권 프론트엔드에서 Core Web Vitals의 LCP(Largest Contentful Paint)를 개선하기 위해 첫 페이지의 하단 부분을 지연 로딩하기로 결정하고 React의
lazy
와 Suspense
를 이용해서 webpack을 청크를 나누었지만 webpack의 동작과 섞여서 appendChild
가 발생하면서 성능 개선이 충분히 되지 않았다. 이를 해결하려고 메인스 레드가 여유 있을 때 실행되는 requestIdleCallback
를 사용해서 지연 로직을 새로 구현했고 700ms가 걸리던 초기 렌더링 시간을 600ms로 줄였다고 한다.(한국어)
- Building a Settings component : 슬라이드와 체크박스가 있는 설정 컴포넌트를 만드는 과정을 보여준다. PostCSS Preset Env를 사용해서 CSS를 작성하는데 Grid를 이용해서 레이아웃을 반응형으로 구성하고
lch()
로 색을 지정하고 color-scheme
와 accent-color
를 사용하는 방법을 보여준다. 슬라이드와 체크박스를 CSS로 디자인하는 방법까지 보여주는데 CSS를 최근에 안 봤더니 많은 게 달라졌구나 싶다.(영어)
- Introducing Relay Hooks: Improved React APIs for Relay : React Hooks를 사용해서 만든 Relay Hooks으로 Facebook에서는 2019년 후반부터 실 서비스에서 이 방법을 적극적으로 사용하고 있다고 한다. Relay Hook은 Relay와 React를 사용한 Hook 기반의 API로 refetching과 페이지네이션에서 개발자 경험을 향상 시킬 수 있다고 한다.(영어)
- 웹 접근성 인증 받는 방법과 후기 : 국내 인증 기관에서 웹 접근성 인증을 받은 후기이다. 마지막에 접근성에서 주의해야 할 점이 정리되어 있기는 하지만 주로는 인증기관에 연락해서 인증절차를 진행하는 과정이 잘 나와있다. 글만 봐도 답답하고 어려운 과정이구나 싶은데 글에서도 필수로 해야 하는 게 아니면 인증을 받을 필요는 없어 보인다고 하고 있다. 실제로 진행해보지 않으면 알 수 없는 부분이고 삽질을 많이 할 수 있는 부분이라 유용한 글이다.(한국어)
그 밖의 개발 관련
인프라 관련
볼만한 링크
- 로블록스: 메타버스의 새벽 : Craig Sherman이 쓴 Roblox: Dawn of the Metaverse의 번역글이다. 로블록스의 초기부터 로블록스의 설립자인 데이빗 배저키(David Baszucki)를 알게 되고 이후 실제 투자까지 하면서 성장 과정을 본 크레이그 셔먼이 지난달 30조 원의 가치가 된 로블록스와 메타버스를 소개하는 글이다. 로블록스에는 엔터테인먼트와 사회적 관계 두 가지를 모두 제공하는 몇 안 되는 서비스로 게임 중심이기 때문에 사용자가 즐길만한 요소가 처음부터 있었지만 게임 플랫폼이 아닌 메타버스를 우선했기 때문에 사용자들이 인간의 공동 경험(Human Co-Experience)을 할 수 있게 한다고 한다. 다른 게임에 비해 품질이 떨어진다고 무시받기도 하지만 로블록스는 이 기초를 만들기 위해서 10년을 투자했고 최근에 이 결과가 나오면서 품질에 신경 쓰고 있기 때문에 이 부분은 사용자를 통해서 금방 올라갈 수 있을 거라고 보고 있고 이제는 게임이 아니라 다른 엔터테인먼트 분야까지 넓히고 있다고 한다. "같은 문제에 도전하는 수많은 신생 기업들이 등장하고, 이런 기업들이 갑자기 인기를 끄는 이유를 도저히 이해할 수 없다면, 아마도 새로운 분야가 등장하는 것이다"라는 말이 인상적이었다.(영어)
- How HashiCorp Works : HashiCorp가 어떻게 일하는지를 정리한 사이트이다. 크게 각 개인이 하는 관례, 매니저나 팀이 하는 관례, 회사가 하는 관례로 나누어져서 HashiCorp가 어떤 부분을 중요하게 생각하고 어떻게 일하는지가 자세하게 정리되어 있다. 개인적으로는 개인 부분에서 문제를 제기하기 위해 PRD(Problem Requirements Document)를 작성하고 이에 대한 해결책으로 RFC(Request for Comment) 문서를 작성해서 모두가 고민과 결정을 문서로 남기게 하도록 템플릿까지 만들어놓고 사용하는 부분이 인상적이었다.(영어)
IT 업계 뉴스
프로젝트
- Charts.css : CSS 데이터 시각화 프레임워크.
- Taro : 웹의 경량 3D 게임 엔진.
- CodeTour : VS Code 익스텐션으로 코드위에서 단계별로 설명을 넣으면서 녹화하면 이후 이를 단계별로 따라 해 볼 수 있게 해 준다.
- nextjs-auth0 : Auth0으로 Next.js 애플리케이션에서 로그인할 수 있게 하는 SDK.
- Yorkie CodePair : 동시 편집 애플리케이션을 위한 도큐먼트 스토어인 Yorkie를 이용해서 온라인에서 페어 코딩을 할 수 있게 만든 프로젝트.
- tfnotify : Terraform 실행 결과를 파싱 한 뒤 템플릿을 적용해서 GitHub 댓글이나 슬랙 등으로 알려주는 CLI 도구.
- permission.site : 웹 API를 이용해서 퍼미션이 필요한 기능을 테스트하는 사이트로 크로미움의 프로젝트.
- xbar : macOS의 메뉴바에 스크립트나 프로그램을 설정할 수 있는 프로그램으로 다양한 플러그인 지원.
버전 업데이트
- JDK 16 GA : Java Development Kit, 릴리스 공지
- Amazon Corretto 16 : Amazon의 OpenJDK 배포판, 릴리스 공지
- V8 v9.0 : JavaScript 엔진, 릴리스 공지
- 정규표현식에서
/d
플래그를 쓴 경우 캡처 그룹의 배열에 접근할 수 있는 indices
추가
- 빨라진
super
프로퍼티 접근
- 빨라진 JS-to-Wasm 호출
- Ghost v4.0 : 오픈소스 블로그 플랫폼, 릴리스 공지
- 대시보드 추가
- 이메일 뉴스레터 기능 추가
- 멤버십과 구독 기능 추가
- Argo CD v2.0 RC1 : Kubernetes 배포 도구, 릴리스 공지
- Argo CD Notifications 프로젝트를 통한 알림 기능 추가
- 수천 개의 앱을 관리하는 경우 유용한 Argo CD Application Set 추가
- 이미지 태그를 자동으로 업데이트해주는 Argo CD Image Updater 추가
- Pod 뷰 추가
- 로그 뷰어 추가
- Docker Desktop Apple Silicon Tech Preview RC1 : 데스크톱용 Docker 애플리케이션, 릴리스 공지
- 아직 Rosetta2 필요.
- 모든 이미지가 ARM64에서 사용할 수 있는 것이 아니므로 에뮬레이션으로 인텔 이미지를 실행하려면
--platform linux/amd64
필요
- macOS 인터넷 공유와 호환되지 않음.
- 일부 컨테이너는 disk I/O가 상당히 느릴 수 있다
- Git v2.31.0 : 분산 형상관리 도구, 변경사항
- 백그라운드 유지보수를 위한
git maintenance
명령어 추가.
- socket.io v4.0.0 : JavaScript 리얼타임 엔진, 릴리스 공지
- Cutter v2.0 : 리버스 엔지니어링 플랫폼, 릴리스 공지
- Next.js 10.1 : 서버렌더링 React 애플리케이션 프레임워크, 릴리스 공지
- 3배 빨라진 리프레시
- 설치 용량이 58% 작아지고 의존성도 56% 줄어듬.
next/image
의 Apple Silicon 지원
- Next.js 커머스 Shopify 통합
- 커스텀 500 에러 페이지
- Spring Tools 4.10.0 : Spring 코딩 환경을 위한 도구, 릴리스 공지
- Cortex v1.8.0 : 확장가능한 장기 Prometheus 스토리지, 릴리스 공지
- Grafana v7.5 : 매트릭 대쉬보드, 릴리스 공지
- 새로운 파이 차트 패널(베타) 추가
- Loki의 alert 지원
- Rust 1.51.0 : 프로그래밍 언어, 릴리스 공지
- SQLAlchemy v1.4.0 : Python ORM, 릴리스 공지
- Vault v1.7 : 시크릿 정보 관리 도구, 릴리스 공지
- ESLint v7.16.0 : JavaScript 코드 분석 도구, 릴리스 공지
- eleventy v0.12.0 : Node.js 정적 사이트 생성기, 릴리스 공지
- Emacs v27.2 : 에디터, 릴리스 공지
- Rollup v2.44.0 : JavaScript 번들러, 변경 사항
- Elastic Stack v7.12.0 : 엘라스틱 스택, 릴리스 공지
- GNOME 40 : GUI 데스크톱 환경, 릴리스 공지
- GitLab v13.10 : 오픈소스 설치형 Git 플랫폼, 릴리스 공지
- webpack v5.28.0 : JavaScript 번들러, 변경사항
- ember v3.26.0 : JavaScript 프레임워크, 릴리스 공지
- Svelte v3.36.0 : 웹앱 프레임워크, 변경사항
- Node.js v12.22.0 (LTS) : 자바스크립트 런타임, 릴리스 공지
- Node.js v15.12.0 (Current) : 자바스크립트 런타임, 릴리스 공지
- Gatsby v3.2.0 : 정적 웹사이트 생성기, 릴리스 공지
- WebdriverIO v7.3.0 : Browser 테스트 자동화도구, 릴리스 공지
- Recoil v0.2.0 : React 용 상태 관리 라이브러리, 릴리스 공지
Outsider
2021/04/01 13:40
2021/04/01 13:40
Comments