Outsider's Dev Story

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

기술 뉴스 #214 : 23-01-16

웹개발 관련

  • The State of JavaScript 2022 : 매년 발표되는 JavaScript 생태계의 설문조사로 올해는 3만 9천여 명이 응답자로 참여했다. JavaScript 언어의 새 기능이나 브라우저 API의 인지도 등을 볼 수 있다. 프론트엔드 프레임워크에서는 여전히 React가 많이 사용되지만, Solid와 Qwik의 반응이 좋은 걸 알 수 있고 렌더링 프레임워크는 Next.js가 가장 강세이지만 Astro와 Remix가 관심을 받고 있다. 다양한 분류로 시각화해두어서 주류인 기술과 새롭게 관심받는 기술을 알 수 있다.(영어)
  • Promise는 왜 취소가 안 될까? : 카카오에서 광고 렌더링의 취소 기능을 구현하려고 Promise의 취소에 대해 알아보다가 그 역사까지 정리한 글이다. TC39에서 Promise의 취소 기능을 오랫동안 고민했지만, 표준을 만들지 못한 상황에서 WHATWG에서 AbortController와 AbortSignal을 표준으로 내세웠지만 는 웹에 의존적이라서 TC39에서는 표준으로 채택할 수가 없었다. 취소는 쉬워 보이지만 그 의미가 동작에 어려운 부분이 많아서 긴 논의에도 정의되지 않았고 실제로 광고 쪽에서 취소를 구현하다가 쉽지 않음을 깨달았지만 적용한 Promise 취소 방법에 관해서도 설명하고 있다.(한국어)

그 밖의 개발 관련

  • Migrating our Largest Mobile App to React Native : Shopify가 2020년 모바일 앱을 React Native로 바꾸기로 하고 그로부터 3년 동안 모든 모바일 앱을 React Native로 바꾸는 과정을 설명한다. 한가지 접근 방법으로 모든 앱에 적용할 수는 없었는데 Shopify Point of Sale은 해커톤에서 시작된 앱이라서 기술 부채가 많이 쌓였기 때문에 점진적인 교체가 어렵다고 생각해서 완전히 재작성했고 Shopify Mobile은 플래그쉽 앱으로 다시 만드는 건 너무 큰 일이므로 점진적으로 React Native를 도입하기로 했다. 처음에는 Mobile Enablement 팀이 React Native로 새 기능을 만들며 필요한 기존 기능을 React Native로 마이그레이션 했는데 잘 동작하긴 했지만, 너무 왜 걸리고 마이그레이션 중 Android, iOS, RN을 모두 관리해야 해서 이 방법이 맞지 않음을 알게 되었다. 이후 반복 포팅이라는 방법으로 모든 기능을 React Native로 만들면서 기존 기능을 마이그레이션 하기로 하고 모든 엔지니어가 React Native로 작성할 수 있도록 교육 프로그램을 만들고 마이그레이션 할 대상의 우선순위를 정하고 마이그레이션을 추적하는 대시보드를 구성했다. 그 결과 iOS와 Android의 구현 차이를 줄일 수 있었고 서로 협업도 할 수 있게 되었다고 한다.(영어)
  • Making Airbnb’s Android app more accessible : Airbnb의 Android 앱의 접근성을 높이면서 모범 사례를 정리했습니다. 안드로이드의 접근성 기능이 읽을 수 있도록 콘텐츠에 설명을 넣고 더 잘 읽을 수 있게 그룹화하고 모든 UI의 폰트를 확대할 수 있게 했다. 접근성 구현을 쉽게 할 수 있도록 접근성 검사가 내장된 테스트 라이브러리 Espresso를 사용해서 엔지니어가 쉽게 문제를 확인할 수 있게 자동화하고 Happo를 이용해서 더 큰 글꼴을 확인할 수 있게 스크린숏 테스트를 추가했다.(영어)
  • 주석을 달지 않는 이유, 달아야 하는 이유 : 변수 이름이나 무엇을 하는지 등 코드로 표현할 수 있는 부분을 주석으로 작성하는 것은 피하고 직관적으로 알기 어렵거나 이유에 대한 설명이 필요하다면 주석을 작성하는 게 좋다고 설명하고 있다. 간단한 내용이지만 주석도 코드의 일부고 유지 비용이 들기 때문에 참고할만한 내용이다.(한국어)
  • The ngrok Cheat Sheet : 로컬 서버를 쉽게 인터넷에 연결할 수 있는 ngrok의 다양한 사용 방법을 치트 시트로 정리한 글로 PDF와 PNG로도 제공한다. 서버를 노출하는 방법뿐 아니라 소셜 로그인, 웹훅 인증, IP 제한, 서킷 브레이크, 헤더 추가 등의 방법이 정리되어 있다.(영어)

인프라 관련

  • Run Kubernetes Production Environment on EC2 Spot Instances With Zero Downtime: A Complete Guide : AWS EKS에서 스팟 인스턴스로 안정적으로 클러스터를 운영하는 방법을 설명한 글이다. EC2 스팟 인스턴스는 온디맨드에 비해 비용이 상당히 저렴하므로 Auto Scaling Group을 이용해서 스팟 인스턴스를 여러 타입으로 설정했다. 그리고 Cluster Autoscaler를 이용해서 항상 온디맨드보다 스팟 인스턴스를 선호하도록 하고 싶었는데 expander 플래그로 우선순위를 지정할 수 있게 하면 노드 그룹의 우선순위를 줄 수 있어서 스팟인스턴스 그룹이 더 높은 우선순위를 가지게 하였다. AWS Node Termination Handler로 스팟 인스턴스를 빼앗길 때를 대비하고 추가로 podAntiAffinityPodDisruptionBudget, 오버 프로비저닝을 이용해서 안정적으로 운영되도록 설정한다.(영어)
  • GitHub Actions – Support for configuration variables in workflows : GitHub Actions에서 기존에는 시크릿만 저장해서 관리할 수 있었지만 민감하지 않은 데이터를 관리할 수 있도록 configuration variables가 추가되었다. Actions 설정에서 추가한 뒤 워크플로우에서 ${{ vars.REPOSITORY_VAR }} 형태로 참조할 수 있다.(영어)
  • GitHub Actions – Support for organization-wide required workflows public beta : GitHub Actions에서 조직 수준에서 저장소의 필수 워크플로우를 지정할 수 있는 required workflows가 퍼블릭 베타로 공개되었다.(영어)
  • Amazon S3 신규 객체 암호화 기본 설정 : AWS에서 S3에 저장되는 모든 객체의 암호화가 기본 적용되도록 지원하게 되었다. 기본적으로 SSE-S3 암호화를 사용하고 SSE-C나 SSE-KMS를 선택할 수도 있다.(한국어)

IT 업계 뉴스

  • CircleCI security alert: Rotate any secrets stored in CircleCI : CircleCI에서 12월 21일부터 1월 4일까지 내부에서 의심스러운 접근으로 시크릿에 저장된 값에 접근했을 수 있는 가능성이 발견되어 CircleCI에 저장된 모든 시크릿을 로테이션 시키라고 권고하고 있다. 많이 쓰이는 CI라서 꽤 큰 보안 사고이지만 CircleCI에서 발 빠르게 조처하고 있고 각 시크릿을 찾는 방법을 안내하고 GitHub, GitLab, BitBucket, AWS와 협업해서 가능한 부분은 자동으로 로케이션시키고 고객들에게 안내하도록 조처하고 있다. CircleCI를 쓰고 있다면 저장된 시크릿을 revoke 시키고 새로 발급해야 한다. 이후 공개된 사고 경위에 따르면 이번 사고는 CircleCI 엔지니어의 노트북에 설치한 멀웨어를 통해 2FA SSO 세션을 탈취해서 발생했다고 한다.(영어)
  • Slack's private GitHub code repositories stolen over holidays : 공격자가 일부 직원의 토큰을 탈취해서 GitHub 저장소에 접근할 수 있었던 사고로 Slack의 개인 코드 저장소는 침해되었지만 기본 코드베이스와 사용자 고객 데이터는 영향받지 않았다고 한다.(영어)

프로젝트

  • giscus : utterances와 비슷하게 GitHub의 Discussions를 사용한 댓글 시스템.
  • Platformatic OSS : 내부 개발 플랫폼을 쉽게 만들 수 있게 API 개발을 도와주는 오픈소스 도구의 세트로 첫 도구는 데이터베이스를 API로 노출해 주는 Platformatic DB이다.
  • KWOK : Kubernetes 클러스터를 시뮬레이팅 해주는 툴킷.
  • Commitizen for contributors : Git 커밋 메시지의 작성을 도와주는 CLI 도구
  • kafka-sink-connector : Kafka에서 JSON 데이터를 읽어서 다른 Kafka 토픽에 보내는 Kafka Connect Connector로 Kakao에서 만들어서 오픈소스로 공개했다.
  • val town : 코드 스니펫을 저장해 두고 이를 웹 브라우저에서 바로 실행해보고 공유할 수 있게 하는 서비스.

버전 업데이트

2023/01/16 08:50 2023/01/16 08:50