읽은 글들 (~25.2.28)
React Native
Shopify의 5년간 React Native 사용 경험
Shopify 가 모든 앱 개발을 네이티브에서 React Native 로 전환하면서 경험하고 느낀 것을 공유한 글. 상당히 긍정적인 시선이다.
원문은 읽지 않고 GeekNews 요약만 읽었는데, 해당 요약문에서도 개인적으로 주목할만한 부분을 다시 추려보았다.
- React Native 앱은 빠름
- 5년이 지난 지금, RN 앱은 빠르게 동작하며, Shopify 앱에서 500ms 이하(P75)의 화면 로드 시간을 달성
- 네이티브가 항상 빠르다는 보장은 없으며, RN이 항상 느린 것도 아님
- RN 프레임워크가 성숙해지면서 빠른 앱을 개발하는 것이 점점 더 쉬워질 것으로 기대
- 네이티브 개발자는 필수적임
- 플랫폼 레이어에 접근하거나, 바인딩 작성, 빌드 및 배포 마스터링, 그리고 React Native 버전 업데이트를 관리하는 등의 작업은 네이티브 전문 지식이 필요
- 네이티브 개발자는 다양한 기기 모델에서 앱 성능을 최적화하고, 모든 사용자에게 일관된 경험 제공
- iOS와 Android의 새로운 기능, API, 툴링 변화에 대응하고 React Native 버전 업데이트를 관리하는 데 필수적
- 네이티브 코드는 필수적임
- 100% React Native 사용은 지양해야 함: RN은 기능을 한 번만 개발해도 되는 효율적인 도구지만, 모든 상황에 적합한 기술은 아님
- React Native 업데이트는 심리스 하지 않음
- React Native(RN)의 새로운 버전으로 앱을 업데이트하는 데 많은 작업이 필요하며, 종종 코드베이스 재구성이 요구됨
- Shopify는 이를 해결하기 위해 소규모 순회 개발자 그룹을 구성하여 업데이트 작업을 전담하게 하고, 나머지 팀은 기능 개발에 집중하도록 조정
- React Native의 미래
- React Native(RN)의 미래는 밝으며, Meta는 이 프로젝트의 훌륭한 관리자로서 정기적인 개선을 제공하고 있음
- RN은 지난 5년간 큰 발전을 이루었으며, 도입을 주저하게 만들었던 많은 한계들이 이제는 사라짐
- RN을 한동안 안 써봤다면 지금은 RN을 다시 시도해 볼 적기임
특히 RN 의 성능에 만족하고 있는 것이 인상적이다.
Frontend
[번역] 모든 프런트엔드 개발자가 알아야 할 접근성 필수 사항
이래서 기자들이 기사의 제목을 자극적으로 짓는 것인가 싶을 정도로 자극적인 제목이라 누르지 않을 수 없었다.
이런 글을 볼 때마다 느끼는 건, 외국(아마도 특히 서양)에서는 장애인 혹은 제한된 환경에 대해 지원하는 것을 중요하게 생각한다는 것. 우리나라는 아직 그런 분위기가 아니라 볼 때마다 신선하다.
- 시맨틱 HTML: 시멘틱에 맞는 HTML 을 사용하자.
- 폼: 폼 밖에 input 을 두지 말자. 또한 label 과 placeholder 를 적절히 사용하자.
- "플레이스홀더는 라벨의 대체물이 아닙니다." 라는 문구가 마음에 든다.
- 키보드 내비게이션: 탭 키로의 포커스 이동을 잘 지원하자.
:focus-visible
속성도 눈여겨볼만 하다. 포커스 될 때마다 포커스링이 표시되는 게 싫은 사람들을 위한 속성.
- 모달: 이제
<dialog />
태그가 대부분의 브라우저에서 잘 동작하니 모달을 직접 구현하지 말고 해당 태그를 적극 활용하자.<dialog />
태그를 좀 자세히 찾아봐야겠다.
- 이미지 대체 텍스트
- nextjs lint 가 항상 강조하는
alt
에 대한 내용.
- nextjs lint 가 항상 강조하는
- 스타일링: 스타일링을 잘하자
- ARIA 속성: 접근성을 위한
aria-*
속성을 잘 활용하자.aria-label
과aria-hidden
에 대해 강조한다.
[번역] dialog 요소가 가진 슈퍼 파워 알아보기
바로 위 글에서 <dialog />
를 사용하라고 했던 게 생각나서 찾아본 글. <dialog />
사용 방법에 대한 기본을 다루고 있다.
Use the dialog element (reasonably)
윗 글과 맞물려서 찾아본 글. 아직 <dialog />
태그가 완벽하지는 않지만, 이제는 모달을 직접 구현하는 것보다는 더 나은 선택지가 되었다는 내용의 글이다. 작성 시기는 23년 1월인 걸 보면, 이미 2년이 지난 지금은 더 쓸만한 선택지이지 않을까 싶다.
TypeScript
The bottom type never in TypeScript
타입스크립트의 never
타입에 대해 설명한다.
CSS
(번역) 잘 가 SASS, 다시 만나 반가워 네이티브 CSS
이제 대부분의 SASS 기능을 CSS 에서 지원해주기 때문에 SASS 를 굳이 사용할 필요가 없다는 내용의 글.
글에서 언급한, SASS 가 필요 없어지게 만든 CSS 의 기능들은 아래와 같다.
- 변수
- CSS 중첩
:is()
:has()
@container
쿼리- Cascade Layers
여전히 SASS 에서만 지원 하는 기능이 있다곤 하지만
Etc
Why does Windows use backslashes for paths and Unix forward slashes?
문득 궁금해져서 찾아본, "왜 윈도우즈는 슬래시가 아닌 역슬래시를 사용할까?" 에 대한 글.
간단히 요약하면 "MS-DOS 에 디렉토리 개념을 도입할 당시 slash 는 이미 다른 용도로 사용하고 있었기 때문에 충돌을 피하기 위해 backslash 사용".
원래는 저작권 문제 같은 걸로 알고 있었는데 완전 잘못된 내용이었다.
[GeekNews] 나이 들어가는 프로그래머 - [발표영상] 요약
(원본 영상)
평생 프로그래밍 하면서 살아가려면 무엇을 준비해야 할까? 애 대한 내용. 시력, 뇌 등등 건강에 관련된 내용이 많다. 평생 프로그래머로 사는 게 목표이기도 한 지라 더 눈에 들어온다.
, 그 기능이 꼭 필요한 게 아닌 이상 굳이 사용할 필요가 없어보인다.
Do not use secrets in environment variables and here's how to do it better
.env
파일에 secret 을 관리할 경우 생길 수 있는 보안 취약점에 대해 이야기한다.
저자가 친절히 정리해둔 목차에 의하면 아래와 같은 이유로 취약점이 생길 수 있다.
- 이유 1: 환경 변수에 저장된 시크릿은 제대로 관리되지 않을 가능성이 높다
- 이유 2: 프론트엔드와 백엔드(SSR) 경계가 모호해져 시크릿이 유출될 위험이 있다
- 이유 3: .env 파일에 저장된 시크릿은 유출되기 쉽다
- 이유 4: 로그를 통해 시크릿 데이터가 유출될 수 있다
- 실제 사례: Seneca CVE-2019-5483
- 이유 5: 생성된 프로세스는 기본적으로 동일한 환경 변수를 공유한다
- FAQ: “내 애플리케이션은 자식 프로세스를 생성하지 않는데도 문제가 되나?”
- 이유 6: 환경 변수는 프로세스 목록에서 볼 수 있다
- FAQ: “다른 사용자의 프로세스를 볼 수 없는 것 아닌가?”
- FAQ: “시스템에 접근하는 것이 어렵지 않나?”
- 경로 탐색 취약점(Path Traversal)이 환경 변수의 시크릿을 노출할 수 있다
- 이유 7: Docker 빌드 인수(Build Arguments)와 .env 파일이 Docker 이미지에 유출될 위험이 있다
간단히 줄이자면 아래와 같은 이유로 취약점이 생긴다고 말할 수 있다.
- 개발자의 실수로 인한 유출
- 서드 파티 라이브러리에서의 의도치 않은 유출
- 프로세스/OS 레벨에서의 의도치 않은 유출
이는 개발자가 조심해서 막을 수 있는 수준이 아니고, 따라서 저자는 애플리케이션의 환경 설정과 시크릿은 명백히 분리되어 관리되어야 할 사항이라고 말하며 해결책을 제시하고 있다.
-
- “Secret Zero” 문제 해결
- 비밀정보를 분리해도 해당 비밀정보에 접근하기 위한 비밀이 또 필요하다는 딜레마가 있다. 이 경우 "비밀정보에 접근하기 위한 비밀"을 단기(short-lived) 이며 제한된 사용 횟수(limited usage count) 로 관리해야 한다.
-
- 가장 쉽고 편리한 방법: 시크릿 스토어(Secrets Stores)
- 예) 1Password
-
- 더 안전하지만 더 복잡한 방법: 시크릿 관리 서비스(Secrets Management Services)
- 예) Infisical, HashiCorip Vault, 혹은 Google Cloud Secret Manager 같은 클라우드의 시크릿 관리 서비스
글이 길긴 하지만 예시와 자세한 설명이 있으므로 읽어보기를 권한다.