Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.

기술 뉴스 #233 : 23-11-01

웹개발 관련

  • Why I Won't Use Next.js : Remix가 나오고 Remix를 계속 지지하던 Kent C. Dodds가 Next.js의 문제를 지적하는 글을 썼다.(영어)

    • React의 테스트 프레임워크인 Enzyme에 불만이 있어서 Testing Library를 만들었는데 주요한 점은 이식성 때문이었다. Remix는 표준 웹 플랫폼을 그대로 이용하는 경우가 많아서 Remix에 익숙해 지면 웹에도 익숙해지지만 Next.js는 자신만의 API가 있어서 Enzyme과 비슷한 상황이라고 할 수 있다.
    • Next.js는 Vercel 외에는 배포하기가 어렵기 때문에 OpenNext가 나올 정도이다. 이는 Vercel의 호스팅을 매력적으로 만들고자 한 것이지만 어디서나 배포할 수 있도록 하는 작업의 우선순위가 낮은 것은 분명하다. Remix는 JavaScript를 실행할 수 있는 모든 곳에 배포할 수 있게 설계되었다.
    • Meta가 React를 소유할 때도 불안했지만 Vercel이 React 팀원들을 데려간 이후에는 오히려 덜 협조적으로 느껴졌다. Vercel은 Next.js와 React의 경계를 모호하게 하는 것처럼 보인다.
    • Next.js의 안정적인 기능이 React에서는 카나리아 릴리스에 있는 이상한 상황이 종종 있다.
    • 너무 많은 마법을 사용하는 데 대표적으로 fetch를 재정의해서 자동 캐싱을 추가한 것이다.
  • Why I'm Using Next.js : 위 Kent C. Dodds가 쓴 글에 Vercel의 VP of DX인 Lee Robinson가 반박 글을 작성했다.(영어)

    • 웹 플랫폼을 그래도 이용해야 한다는 것에 동의하기에 Next.js도 2021년에는 미들웨어를 도입했고 이는 Remix가 출시된 해이기도 하다. 그리고 앱 라우터에서도 웹 플랫폼 API를 그대로 사용할 수 있다.
    • Vercel은 Next.js를 Docker로 배포하는 방법에 대한 예제와 가이드를 하고 있고 셀프호스팅 할 수 있는 다양한 방법이 있다. 또한 Build Output API도 제공하고 있다.
    • React와 Next.js의 경계를 모호하게 한다는 지적에 대해서는 고의가 아니며 React의 미래에 크게 걸고 있고 작업하는 중이며 경계를 명확하게 할 수 있도록 노력하고 있다.
    • fetch에 대한 마법도 개선하려고 노력하고 있다.
    • 마지막으로 Next.js를 좋아하는 이유는 별도의 백엔드를 만들 필요가 없고 인프라 걱정 없이 앱을 만들 수 있으면 사이트를 따르게 하는 기능을 다양하게 제공한다는 점이다.
  • Introducing HAR Sanitizer: secure HAR sharing : HTTP 아카이브 파일인 HAR는 웹브라우저와 웹 애플리케이션의 상호 작용에 대한 JSON 형식의 아카이브 파일인데 여기엔 인증 정보도 모두 담겨있기 때문에 세션 쿠키나 JWT 토큰이 유출되는 가장 일반적인 경로이기도 하다. Cloudflare에서는 HAR File Sanitizer를 공개해서 사용자가 HAR 파일을 업로드하면 쿠키, JWT 등을 모두 제거할 수 있게 했고 이 도구는 Cloudflare Workders 기반이고 모든 처리는 클라이언트에서 진행되므로 Cloudflare에서도 내용을 볼 수 없다고 한다.(영어)

그 밖의 개발 관련

  • Progress on no-GIL CPython : 지난 7월 Python steering council이 Global Interpreter Lock(GIL)을 선택 사항으로 만들겠다는 제안을 승인하겠다고 발표했습니다. 아직 결정 나진 않았지만, 그동안의 진행 과정을 정리한 글입니다. CPython 안정 ABI로 빌드된 확장 프로그램은 no-GIL CPython 3.13에서는 동작하지 않을 것이라서 이에 대한 해결책으로 둘을 모두 지원하는 새로운 ABI를 만들자는 의견도 있고 확장 프로그램이 두 가지 빌드를 모두 만드는 것이 오히려 비용면에서 낫다는 의견도 있다. 또한 이름에 대한 이슈도 있는데 사용자들이 테스트할 수 있도록 python3 외에 no-GIL도 설치해서 테스트해 봐야 하는데 python-nogil3, python-nogil3.13 등의 이름도 제안되었고 반대로 GIL이 뭔지 일반적인 개발자들이 알 필요 없으므로 nogil이라는 단어를 사용하지 않아야 한다는 의견도 있다. 이후 새로운 ABI인 abi4를 만들자는 아이디어를 채택해서 프로토타입을 개발 중이며 PEP가 필요하다는 데까지 합의가 된 상황이다.(영어)
  • Kafka에서 파티션 증가 없이 동시 처리량을 늘리는 방법 - Parallel Consumer : Kafka를 사용할 때 기본적으로 파티션 하나당 하나의 컨슈머만 붙을 수 있기 때문에 컨슈머가 메시지가 발행되는 속도를 따라가지 못한다면 Lag가 쌓이기 때문에 파티션을 늘려야 한다. 이는 프로듀서하고도 논의해서 늘려야 하는 부분이고 한번 늘리면 줄일 수 없기 때문에 문제가 되는데 Parallel Consumer를 이용해서 파티션을 늘리지 않고 처리량을 늘리는 방법을 설명한다. 기본 컨슈머와 Parallel Consumer의 동작 차이를 설명하고 오프셋 갱신의 처리 방법, 순서 보장 방법을 자세히 설명하고 있다.(한국어)
  • 쿠버네티스가 스프링 부트 3.0 네이티브 이미지를 만났네 : 넷마블에서 JVM 이미지가 부팅 시간 때문에 팟이 늘어가는 데 걸리는 시간을 줄이기 위해 SpringBoot 3.0부터 GraalVM의 Native Image 생성 기능을 도입했다. 네이티브 이미지는 독립적으로 실행할 수 있도록 실행 환경에 맞춰서 빌드하므로 용량이 작고 부팅 시간도 크게 줄어들게 된다. 네이티브 이미지를 만드는 방법을 설명하고 이를 적용하면서 GC 설정과 리소스 설정을 적용하면서 차이를 보여주고 최종적으로는 50초였던 실행시간이 2초로 줄어들었고 이미지 크기도 300MB에서 70MB로 줄어들었다고 한다.(한국어)
  • Base64 Encoding, Explained : 개발하면서 자주 보는 Base64의 동작 방식을 RFC 4648을 공부하고 정리한 글이다. 대소문자 알파벳, 숫자, +, /의 64개의 문자를 사용해서 Base64인데 주어진 텍스트를 이진 표현으로 변환한 뒤 각 비트를 6비트로 나누고 각 그룹을 0~63 사이의 소수로 변환한 뒤에 Base64 알파벳으로 변환한다.(영어)

인프라 관련

  • Measuring Git performance with OpenTelemetry : Microsoft가 Windows나 Office의 저장소를 Git으로 마이그레이션 했을 때 300GB가 넘었고 역대 가장 큰 규모였기에 성능 개선이 필요했고 Git의 성능을 알 수 있도록 Trace2 기능을 Git에 포함했다. 이 Trace2만으로는 분석하기가 어렵기에 이를 OpenTelemetry로 수집할 수 있도록 오픈소스 수집기인 trace2receiver를 만들었다. 이를 통해 Git 명령어를 사용할 때 시간이 오래 걸리는 부분은 분석 추적해서 파악할 수 있게 되었다.(영어)
  • Vector를 활용해 멀티 CDN 로그 및 트래픽 관리하기 : Line에서 멀티 CDN을 사용하면서 로그와 트래픽을 모니터링하면서 Datadog에서 만든 Vector를 사용한 이야기이다. 기존에 모니터링이 있었지만, 시간이 지나면서 유지보수도 편하고 통합으로 관리할 수 있는 모니터링 체계가 필요했고 Vector를 사용하게 되었다. Vector는 데이터를 수신하는 source, 데이터를 변환하는 transforms, 데이터를 전송하는 sinks 단계로 구성되는 Aggregator 구성으로 Vector를 설치해서 log_to_metric 기능으로 CDN 로그를 받아서 메트릭으로 변환해서 Prometheus로 쏠 수 있게 구성했다.(한국어)
  • OWASP Kubernetes Top 10: A Comprehensive Guide : OWASP(Open Web Application Security Project)의 10대 Kubernetes 취약점을 하나씩 설명한 글이다.(영어)

    1. 안전하지 않은 워크로드 구성: Alpine 등 가벼운 이미지를 사용해서 위험성을 최소화하는 것이 좋고 OPA 등으로 잘못된 구성을 차단하는 것도 좋다.
    2. 공급망 취약점: Docker Hub의 이미지에도 많은 취약점이 포함되어 있으므로 이미지 스캔을 해야 한다.
    3. 지나치게 허용적인 RBAC: RBAC Audit, Kubescan, Krane 같은 도구로 검사할 수 있다.
    4. 중앙화된 정책 시행의 부재: Admission Controller로 필요한 정책을 적용할 수 있다.
    5. 부적절한 로깅: 감사로그뿐 아니라 OS 로그, 네트워크 활동 로그 등을 남기고 모니터링해야 한다.
    6. 인증 실패: 인증할 때는 반드시 2FA로 사람이 개입하도록 해야 하면 Falco 등으로 로그인을 감사할 수 있다.
    7. 네트워크 세분화: Istio같은 서비스 메시나 CNI로 부적절한 내부 접근을 제어할 수 있다.
    8. 시크릿 관리 실패
    9. 잘못 구성된 클러스터 컴포넌트: 대표적인 실수로 Kubelet에 익명 인증 설정이 있고 kube-apiserver에서 TLS 구성을 추가
    10. 오래되고 취약점이 있는 Kubernetes 컴포넌트: Kubernetes에서 취약점이 존재하므로 취약점 정보를 모니터링하고 업데이트해야 한다.

볼만한 링크

  • 컴퓨터 해킹. 자유. 그리고 GNU. : GNU의 40주년을 기념한 모임이 스위스에서 열렸는데 이때 참석하신 분이 올리신 후기다. 글을 잘 쓰셔서 GNU를 어떻게 느끼고 있었고 왜 참여하고 무엇을 느꼈는지를 정리해 주셨는데 느껴지는 부분이 많다.(한국어)
  • Announcing the Recipients of the 2023 Spotify FOSS Fund : 작년에 Spotify에서 FOSS 펀드를 만들고 올해도 10만 유로(약 1억 4천만 원)로 AssertJ, Jdbi,Testcontainers, Xiph를 지원한다. 이 프로젝트는 내부 R&D 커뮤니티가 추천했다.(영어)
  • The Startup CTO's Handbook : CTO의 리더십, 관리, 기술 주제를 다루는 책으로 아마존에서 판매하고 있지만 저장소에서 원문 파일과 PDF 파일을 무료로 볼 수 있다.(영어)

IT 업계 뉴스

  • Tracking Unauthorized Access to Okta's Support System : Okta에서 도난당한 인증 정보를 이용한 악의적인 접근이 확인되어서 영향받은 모든 고객에게 알림을 보냈다. 이 글에는 아주 명확히 설명하고 있진 않지만, 고객센터에 HTTP 아카이브 파일인 HAR 파일을 업로드하게 하고 있는데 이 파일이 제대로 살균되지 않았고 이 파일이 도난당하면서 이 파일의 인증 정보로 공격자가 접근할 수 있었다.(영어)
  • AI.gov : 미국 바이든-해리스 행정부가 AI의 이점을 활용하고 위험을 완화하기 위해 미국 정부의 AI에 대한 방향성을 안내하고 AI 인력을 채용하기 위한 사이트를 공개했다. 이 사이트에서 AI 전문가가 정부의 움직임에 참여해 주기를 제안하고 있다.(영어)
  • HHKB Studio : HHKB 키보드에 포인팅 스틱과 마우스 버튼, 제스처 패드가 포함된 기계식 키보드를 출시했다.(일본어)
  • Microsoft의 급여 가이드라인 유출. 연봉, 채용 보너스 및 주식 보상범위가 직급별로 공개됨 : 비즈니스인사이더에서 유출된 Microsoft의 직급별 연봉과 보상 범위를 공개했다. 52 레벨부터 70 레벨까지 있으면 각 레벨별 연봉 범위와 보너스, 주식 보너스 범위를 볼 수 있다.(한국어)

프로젝트

  • WintetJS : Rust로 작성된 JavaScript 서비스 워커 서버로 SpiderMonkey 런타임을 사용하고 Cloudflare Workers, Deno Deploy, Vercel 처럼 WinterCG 스펙을 따름. 아주 빠를 뿐 아니라 WebAssembly로도 컴파일 가능. 릴리스 공지
  • Geist : Vercel에서 오픈소스 무료 폰트를 공개했다. Sans, Mono 2가지 종류다.
  • Skiff : DHH가 Kamal을 이용해서 정적 사이트를 nginx와 함께 배포하는 도구로 once.com을 만들 때 사용했다고 한다.
  • Is BGP safe yet? : Border Gateway Protocol(BGP)를 안전하게 하려면 RRKI를 구현해야 하는데 사용하는 ISP의 BGP가 안전한지 보여주는 사이트로 Cloudflare에서 만들었다.
  • JetBrains Writerside : JetBrains에서 문서작성 도구를 공개했다.

버전 업데이트

2023/11/01 03:09 2023/11/01 03:09