Outsider's Dev Story

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

기술 뉴스 #193 : 22-03-01

웹개발 관련

  • 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에서 사용할 수 있게 한다.(영어)
  • Avoiding the Top 10 NGINX Configuration Mistakes : NGINX 설정에서 자주 보는 실수를 정리해 놓은 글이다.(영어)

    1. 워커당 부족한 파일 디스크립터: 웹서버로 동작할 때는 클라이언트에 하나, 제공하는 파일에 하나로 2개가 필요하고 프록시서버에서는 하나가 필요하기 때문에 worker_connections보다 최소 2배로 FD를 설정해야 한다.
    2. error_log off 디렉티브: access_log 디렉티브와 달리 error_logoff 파라미터를 받지 않으므로 실제로는 off라는 파일을 만든다.
    3. 업스트림 서버에 keepalive 연결 비활성화: 기본적으로 요청마다 업스트림에 새로운 연결을 맺는데 새 연결 비용은 크므로 트래픽이 많으면 비효율적이 된다.
    4. 디렉티브 상속의 동작 방식을 잊음: 자식 컨텍스트는 부모 컨텍스트의 디렉티브를 상속받는다. 하지만 동일한 디렉티브를 설정하면 값을 추가하는 것이 아니라 덮어쓰게 된다.
    5. proxy_buffering off 디렉티브: 기본으로 버퍼링이 켜져있는데 모든 응답이 버퍼링되었을 때 응답을 주고 버퍼링을 끄면 응답을 받는 즉시 클라이언트에 응답을 보내기 때문에 클라이언트에 지연시간을 줄이려고 버퍼링을 끄는 경우가 있는데 레이트 리밋이나 캐싱이 안되는 등의 문제가 많으므로 끄지 않길 권한다.
    6. if 디렉티브의 잘못된 사용: if 디렉티브는 사용하기가 까다롭고 if 디렉티브에서 안전하게 사용할 수 있는 것은 returnrewrite 디렉티브 뿐이다.
    7. 과도한 헬스체크: 모든 server 블록에 health_check 디렉티브를 사용하면 추가적인 정보는 없이 업스트림에 부하를 줄 수 있다.
    8. 안전하지 않은 메트릭 접근: stub_statusapi 디렉티브를 누구나 접근하게 열어두면 공격자가 이를 활용할 수 있다.
    9. 모든 트래픽이 같은 /24 CIDR 블록에서 올 때 ip_hash의 사용: 로드 밸런싱 목적으로 ip_hash를 사용할 때 IPv4에서는 앞의 3가지 옥텟으로 해시키를 만들기 때문에 같은 /24 CIDR을 사용하면 해시키가 같아지게 된다.
    10. 업스트림 그룹의 장점을 사용하지 않음: 업스트림 서버가 1개만 있는 경우 upstream 블록을 사용하지 않는 경우가 있는데 업스트림 서버가 1대여도 upstream 블록은 다양한 기능을 제공하고 있다.
  • LINE Open Source Sprint 2021: 오픈소스에 잘 기여하는 문화 만들기 : 라인에서 작년말에 Line의 오픈소스 프로젝트를 대상으로 사내 스프린트 행사를 열었다고 한다. 프로젝트는 Ameria, Central Dogma, Decaton, Line FIDO2 Server가 참여했고 3주간의 개발 기간 동안 온라인에서 의사소통하면서 업무시간에 개발하도록 규칙을 정해서 진행했다고 한다. 이번 행사를 통해 25명이 참여해서 24개의 PR을 만들었다고 한다.(한국어)
  • 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% 줄었다고 한다.(영어)
  • Introducing a Google Cloud architecture diagramming tool : Google에서 GCP의 아키텍처를 그릴수 있는 다이어그램 도구를 공개했다.(영어)

IT 업계 뉴스

  • Why we are acquiring Area 1 : Cloudflare가 이메일 기반 보안 위협에서 비즈니스를 보호하는 기술을 만드는 Area 1 Security를 인수하기로 했다. 클라우드플레어는 Area 1의 기술을 자사의 글로벌 네트워크에 통합시킬 예정이라고 한다.(영어)

프로젝트

  • Krius : 다수 클러스터에 Prometheus, Thanos 등을 설정하고 관리할 수 있는 CLI 도구
  • Yew : Rust/WASM 웹앱 프레임워크

버전 업데이트

  • podman v4.0.0 : 컨테이너 엔진, 릴리스 공지
  • Vitess 13.0 : MySQL 클러스터링 시스템, 릴리스 공지
  • Istio v1.13 : 서비스 매쉬, 릴리스 공지
  • Next.js 12.1 : 서버렌더링 React 애플리케이션 프레임워크, 릴리스 공지

    • getStaticProps를 사용하는 페이지를 리밸리데이트할 수 있는 unstable_revalidate() 함수를 노출해서 온디멘드 증분 정적 재생성을 하는 기능 추가(베타)
    • SWC가 styled-components, Relay 등 지원
    • 제로 컨피그레이션 Jest
    • SWC를 통한 더 빠른 압축(현재는 RC 버전)
  • Deno v1.19.0 : TypeScript 런타임, 릴리스 공지

    • deno vendor 명령어로 의존성을 분석해서 vendor/ 디렉터리에 포함할 수 있게 됨.
    • --allow-*같은 권한 플래그가 필요할 때 기본적으로 예외를 던지는 대신 프롬프트로 허용할 수 있게 됨
    • 파일, 네트워크, 소켓, stdio는 이제 네이티브 웹 스트림이 됨
  • Spock v2.1 : Java 테스트 프레임워크, 릴리스 공지
  • Rust 1.59.0 : 프로그래밍 언어, 릴리스 공지
  • Playwright v1.19.0 : Chromium, Firefox, WebKit 브라우저 자동화 Node.js 라이브러리, 릴리스 공지
  • Parcel CSS v1.4.0 : CSS 트랜스포머/미니파이어, 릴리스 공지
  • Gatsby v4.8.0 : 정적 웹사이트 생성기, 릴리스 공지
  • Grafana v8.4 : 매트릭 대쉬보드, 릴리스 공지
  • Argo Events v1.3 : Kubernetes용 이벤트 기반 워크플로우 프레임워크, 릴리스 공지
  • Strapi v4.1.0 : 헤드리스 CMS, 릴리스 공지
2022/03/01 17:11 2022/03/01 17:11