The State of JavaScript 2021 : 매년 발표되는 JavaScript 개발자의 설문 조사를 통해서 생태계의 현황을 정리한 사이트 올해는 만여 명이 설문에 참여했다. 지역별 연봉, 프레임워크, 테스트 도구, 백엔드, 모바일 등 다양한 영역이 정리되어 있어서 어떤 기술을 많이 사용하고 있고 최근에 어떤 기술이 관심이 커지고 있는지 쉽게 알 수 있다. 2016년부터의 데이터가 쌓여있어서 추세의 변화도 알 수 있어서 유용하다.(영어)
Version 100 in Chrome and Firefox : 크롬은 3월 29일, 파이어폭스는 5월 3일에 버전 100이 릴리스 될 예정이라서 browserName/majorVersion.minorVersion 형식인 userAgent를 웹사이트에서 파싱할 때 메이저 버전이 2자리 숫자에서 3자리 숫자로 바뀌면서 문제가 될 수 있으니 확인을 요청하고 있다. 안 그래야 하는 게 맞지만 실제로 1자리에서 2자리가 될 때 문제가 있기도 했고 이번에도 일부 사이트는 문제가 될 수 있다고 한다. 100 버전으로 문제가 되는지는 파이어폭스 나이틀리 버전이나 크롬에서 플래그를 켜서 테스트해볼 수 있다고 한다.(영어)
FE 개발자의 성장 스토리 12 : Angular E2E 테스팅 경험기 : Angular 프로젝트에 Protractor를 사용 중이었는데 개발이 중단되었기 때문에 새로운 테스트 도구로 Cypress를 리서치했다고 한다. Cypress는 Automatic wating 기능으로 같은 동작에 성공할 때까지 반복해 주기 때문에 비동기 처리를 할 필요가 없고 간헐적인 실패도 줄어들었으며 Headless 모드도 지원하고 있었기 때문에 Cypress로 E2E 테스트를 작성하기로 했다고 한다. 시각적 테스트는 수정될 가능성이 높으므로 기능적 테스트에 더 집중하기로 했고 테스트를 작성하기 쉽게 가이드 문서도 작성했다고 한다.(한국어)
Open Web Advocacy : 오픈 웹의 미래를 지지하기 위해 모인 엔지니어 그룹이다. 오픈 웹에서 경쟁을 막는 문제는 해결하려고 노력하고 있고 Apple이 서드파티 브라우저를 허용하지 않아서 경쟁을 막고 있는 정책을 반대하고 웹앱이 앱이 되어야 하고 웹앱에 대해 게이트키퍼가 설치한 장벽을 제거해야 한다고 주장하고 있다.(영어)
그 밖의 개발 관련
How to publish Deno modules to NPM : Deno 웹 프레임워크인 oak를 만든 Kitson Kelly가 dnt를 이용해서 oak을 NPM 레지스트리에 배포하는 방법을 설명한다. dnt는 Deno 코드를 Node 호환 npm으로 변환하는 빌드 파이프라인을 제공하기 때문에 이를 이용해서 oak를 Deno로 개발한 뒤에 npm에 배포해서 node에서 사용할 수 있게 한다.(영어)
워커당 부족한 파일 디스크립터: 웹서버로 동작할 때는 클라이언트에 하나, 제공하는 파일에 하나로 2개가 필요하고 프록시서버에서는 하나가 필요하기 때문에 worker_connections보다 최소 2배로 FD를 설정해야 한다.
error_log off 디렉티브: access_log 디렉티브와 달리 error_log는 off 파라미터를 받지 않으므로 실제로는 off라는 파일을 만든다.
업스트림 서버에 keepalive 연결 비활성화: 기본적으로 요청마다 업스트림에 새로운 연결을 맺는데 새 연결 비용은 크므로 트래픽이 많으면 비효율적이 된다.
디렉티브 상속의 동작 방식을 잊음: 자식 컨텍스트는 부모 컨텍스트의 디렉티브를 상속받는다. 하지만 동일한 디렉티브를 설정하면 값을 추가하는 것이 아니라 덮어쓰게 된다.
proxy_buffering off 디렉티브: 기본으로 버퍼링이 켜져있는데 모든 응답이 버퍼링되었을 때 응답을 주고 버퍼링을 끄면 응답을 받는 즉시 클라이언트에 응답을 보내기 때문에 클라이언트에 지연시간을 줄이려고 버퍼링을 끄는 경우가 있는데 레이트 리밋이나 캐싱이 안되는 등의 문제가 많으므로 끄지 않길 권한다.
if 디렉티브의 잘못된 사용: if 디렉티브는 사용하기가 까다롭고 if 디렉티브에서 안전하게 사용할 수 있는 것은 return과 rewrite 디렉티브 뿐이다.
과도한 헬스체크: 모든 server 블록에 health_check 디렉티브를 사용하면 추가적인 정보는 없이 업스트림에 부하를 줄 수 있다.
안전하지 않은 메트릭 접근: stub_status나 api 디렉티브를 누구나 접근하게 열어두면 공격자가 이를 활용할 수 있다.
모든 트래픽이 같은 /24 CIDR 블록에서 올 때 ip_hash의 사용: 로드 밸런싱 목적으로 ip_hash를 사용할 때 IPv4에서는 앞의 3가지 옥텟으로 해시키를 만들기 때문에 같은 /24 CIDR을 사용하면 해시키가 같아지게 된다.
업스트림 그룹의 장점을 사용하지 않음: 업스트림 서버가 1개만 있는 경우 upstream 블록을 사용하지 않는 경우가 있는데 업스트림 서버가 1대여도 upstream 블록은 다양한 기능을 제공하고 있다.
Why Flutter is the most popular cross-platform mobile SDK : Flutter가 왜 인기 있는지를 정리한 글이다. 간단히 Flutter의 구조를 설명하고 Skia를 사용해서 플랫폼에 종속되지 않으며 앱 개발을 빨리할 수 있고 배우기도 쉬워서 모바일 개발자들이 좋아하고 있다고 한다. 단점으로는 앱의 크기가 크고 서드파티 라이브러리가 아직 부족한 데다가 Dart를 배워야 하고 아직 watchOS, tvOS, CarPlay 등은 지원하지 않고 있는 점을 꼽았다.(영어)
1Password for SSH & Git (Beta) : 1Password에서 SSH 키를 관리할 수 있게 지원할 예정이고 현재 베타라서 설정 파일에서 활성화해주어야 사용할 수 있다. SSH 키를 생성하거나 임포트에서 관리할 수 있고 브라우저에서 퍼블릭 키를 자동으로 채워주거나 1Password SSH 에이전트를 이용해서 Git이나 SSH에서 인증할 수 있다고 한다.(영어)
인프라 관련
AWS CDK에서 Terraform으로 : 인프런의 AWS 인프라를 관리하기 위해 AWS CDK를 사용하다가 Terraform으로 바꾸게 된 이유를 설명한 글이다. Terraform은 IaC(Infrastructure as Code)의 대표주자격이고 (개인 생각이지만) TypeScript나 Python같은 프로그래밍언어로 IaC를 할 수 있는 CDK 계열이 다음 세대로 생각할 수 있기에 CDK에서 Terraform으로 넘어온 경험이 더 값지게 느껴졌다. AWS CDK가 커뮤니티가 훨씬 부족하고 Cloudformation으로 인프라 적용을 하기 때문에 실제 인프라의 상태를 제대로 추적할 수 없어서 실수할 여지는 주는 부분을 주요 원인으로 꼽았습니다.(한국어)
Balancing Safety and Velocity in CI/CD at Slack : Slack의 메인 모노레포인 Webapp의 CI를 개선한 과정을 설명한 글이다. Webapp은 2017년부터 자동화된 테스트를 도입했는데 매달 10%씩 테스트 실행이 증가했고 2020년에는 하루에 백만개의 테스트 스위트를 실행했고(대부분 e2e 테스트) 대부분은 메인라인에 머지 전 실행되었으므로 PR을 올릴때 테스트 결과를 기다려야 했다. 이 테스트는 p95에서 30분이 걸렸고(최악은 90분) 테스트가 결과가 일관되지 않은 비율(다시 돌리면 성공하는 경우)가 50%였다고 한다. 그래서 머지 전 개발중에는 e2e 테스트의 서브셋(1% 미만)만 실행되도록 하고 메인 라인에 머지되면 좀더 큰 세트(10% 미만)의 e2e 테스트를 실행하고 레그레이션 파이프라인에서 2시간 마다 메인라인에 대해 전체 테스트를 돌렸다. 이로써 테스트 실행 시간이 40% 줄었고 테스트 결과가 일관되지 않은 비율오 90% 줄었다고 한다.(영어)
Why we are acquiring Area 1 : Cloudflare가 이메일 기반 보안 위협에서 비즈니스를 보호하는 기술을 만드는 Area 1 Security를 인수하기로 했다. 클라우드플레어는 Area 1의 기술을 자사의 글로벌 네트워크에 통합시킬 예정이라고 한다.(영어)
프로젝트
Krius : 다수 클러스터에 Prometheus, Thanos 등을 설정하고 관리할 수 있는 CLI 도구
Comments