Resilient Import Maps - Better Theme Development and Beyond : Shopify에서 빌드 파이프라인을 개선하기 위해 Module을 사용하기 시작했지만, 모듈이 제대로 로드되지 않는 문제를 발견했고 발견해서 이를 해결해 간 과정이다. import maps를 사용하면 URL이 아닌 이름으로 참조할 수 있는 등 다양한 이점을 일으킬 수 있다. 하지만 import maps가 로드되기 전에는 다른 모듈을 로드할 수 없고 import maps는 하나만 존재할 수 있었기에 이러한 시나리오를 어기면 오류가 발생하도록 만들어져서 채택하기가 쉽지 않았다. 이 문제는 이를 조정해 주는 메커니즘이 없었기 때문이라고 판단하고 모든 문서에 하나의 전역 import maps가 있고 모든 모듈을 포함하는 모듈 세트가 있으며 머지 알고리즘으로 모든 import maps를 전역 map으로 합치도록 했다. 이 기능을 테스트 후 승인을 받아 HTML 명세로 토론을 옮겨서 사양을 변경하고 최신 브라우저에도 구현되어 import map을 자유롭게 사용할 수 있게 되었다.(영어)
Next.js 트러블슈팅: CORS와 Version Skew 에러 원인부터 해결까지 : 카카오페이에서 웹 뷰 배포하면서 예상과 달리 CSS 요청으로 캐시된 파일을 CORS 요청에서 그대로 사용하려고 하면서 헤더 문제로 CORS 오류가 나는 문제를 해결하기 위해 Vari: Orgin 응답헤더를 고려 후 Next.js의 crossOrigin: 'anonymous'를 설정해서 모든 요청이 CORS 요청이 되도록 해서 해결했지만 결국 특정 브라우저에서 다른 CORS 오류가 발생해서 dynamic import로 해결했다. 이후 프로덕션 배포 이후 파일의 해시때문에 배포 때마다 404가 발생해서 Sticky Session을 적용해서 문제를 완화했다.(영어)
How Imports Work in RSC : RSC에서 모듈 임포트가 동작하는 방식을 설명하기 위해 간단히 모듈이 임포트할 때 어떻게 동작하는지 설명하고 이전과 달리 이제는 서버에서도 실행되면서 클라이언트와 서버가 코드를 재사용하기 때문에 양쪽에서 모듈을 임포트할 때 각각 별도의 임포트 시스템으로 동작한다는 걸 설명한다. 코드를 재사용하는 경우 클라이언트에 포함되면 안 되는 민감한 코드가 포함될 수 있는데 이런 상황을 막기 위해 server-only와 client-only 모듈을 임포트하면 빌드 단계에서 잘못된 임포트를 빠르게 잡아낼 수 있다. 그럼에도 서버와 클라이언트는 서로 참조할 수 없는 문제가 있기 때문에 use client와 use server를 통해서 서로 간의 문 열기를 통해 참조할 수 있게 해준다.(영어)
HTML spec change: escaping < and > in attributes : Mutation XSS 취약점을 해결하기 위해 5월 20일 HTML 속성에서 <, >를 이스케이프 처리하도록 HTML 스펙이 업데이트되었고 Chrome 138에 도입되어 6월 24일 안정상태로 바뀔 예정이다. 기존에는 HTML 속성에 HTML 태그가 있는 경우 outerHTML이 태그를 그대로 반환했지만 이제는 <, >로 이스케이프해서 반환한다.(영어)
Nuxt Roadmap to v4 : Nitro v3와 함께 Nuxt 4를 작년에 릴리스하려던 계획을 수정해서 Nuxt 4를 6월 2일 알파버전으로 릴리스하고 Nitro v3가 준비되는 대로 Nuxt 5를 릴리스하겠다고 로드맵을 공개했다.(영어)
[State of FE·JS Korea 2025] 설문조사 결과를 공유합니다! : 국내 FE 개발자를 대상으로 249명에게 설문 조사한 결과가 공유되었다. 답변자의 대다수가 TypeScript를 사용한다고 대답했고 React를 사용한다는 비중은 94%에 달했다. 상태 관리 라이브러리는 Zustand가 1위였으면 빌드 도구는 Vite가 1위를 차지했다.(한국어)
그 밖의 개발 관련
Agentic Coding Recommendations : Armin Ronarcher가 본인이 사용하는 에이전트 코딩 방식을 정리한 글이다. Claude Code를 주로 사용하는데, 에이전트에 작업을 할당하고 대부분의 권한을 주어 작업을 완료할 수 있게 하고 있으면 대부분의 도구를 단순하게 유지하려고 하면 대체 서비스가 불안정할 때만 MCP를 사용하고 있다. 가능하다면 Go 언어의 사용을 강력히 추천하며 효과적인 도구를 같이 사용하는 것이 중요하며 빠른 도구를 사용하면 더 좋은 결과를 얻을 수 있고 의존성을 업그레이드할 때는 AI가 알아서 해줄 것이라는 유혹에 빠지지 말고 더 보수적으로 해야 한다고 경고한다. 그리고 AI의 발전이 아주 빨라서 이 권장 사항도 금방 유효하게 않아질 것이라고 얘기한다.(영어)
I Read All Of Cloudflare's Claude-Generated Commits : Cloudflare에서 Claude로 작성해서 공개한 OAuth 2.1 라이브러리의 커밋을 읽고 생각을 정리한 글이다. 이 라이브러리는 Cluade Code로 주로 작성했는데 커밋에 Claude에 요청한 프롬프트 기록을 다 남겨두었고 사람이 개입한 커밋은 따로 올려서 이를 알 수 있게 했는데 Cloudflare의 수석 엔지니어인 Kenton Varda이 AI 회의론자로 시작했지만, 결과적으로 프로덕션에서 사용할 수 있는 라이브러리를 만들 수 있었다고 한다. 프롬프트를 통해 예제를 제공하고 명확한 상황을 설명하는 프롬프트가 꽤 도움이 되지만 커밋이 20개가 넘어가면서 사람의 개입이 점점 많아지게 되었다.(영어)
A look at CloudFlare’s AI-coded OAuth library : 바로 윗글에서도 소개한 Cloudflare가 Claude Code로 작성한 OAuth 라이브러리를 IETF의 OAuth 워킹그룹에서도 활동하고 OAuth 제공업체의 기술 책임자인 사람이 코드를 읽어보고 평가한 글이다. 코드는 꽤 인상적이었지만 이해하기 어려운 CORS 헤더 설정이 있었고 표준 보안헤더가 부족했으며 OAuth 명세에 익숙지 않은 사람이 작성한 것처럼 인증을 잘못 구현하거나 편향된 토큰 ID를 생성하고 있었다고 한다.(영어)
jemalloc Postmortem : memory allocator jemalloc을 20년간 개발한 Jason Evans가 직접 정리한 회고이다. 2004년에 Lyken 프로그래밍 언어를 작업하다가 메모리 할당기를 만들고 이를 FreeBSD에 통합하기 시작했다. 당시는 멀티 프로세스로의 전환이 이뤄지던 시기였고 FreeBSD에는 phkmalloc가 있었지만, 병렬 스레드를 제대로 지원하지 못했기에 jemalloc을 FreeBSD에 통합하기 시작했지만, 심각한 조각화 문제를 발견했고 이를 개선하기 위해 레이아웃 알고리즘을 완전히 변경했다. 2009년 Facebook에서 일하기 시작하면서 jemalloc에 계측이 부족하다는 것을 깨닫고 힙 프로파일링 기능을 구현하고 GitHub으로 저장소를 옮겨서 다른 사람들의 기여도 받기 시작한다. Facebook의 내부 사용으로 많은 개선을 하면서 Facebook 내부에서 jemalloc 팀을 꾸려서 jemalloc 개발을 할 수 있었고 Facebook을 떠난 후에도 해당 팀을 jemalloc을 계속 개발했다. 이후 Facebook의 분위기가 달라지면서 jemalloc에 대한 개발도 끊기게 되었고 오픈 소스이지만 다른 외부 주요 기여자를 확보하지 못해서 업스트림 개발도 멈추게 되었지만 가장 보람찬 프로젝트였다고 한다.(영어)
인프라 관련
Cloudflare service outage June 12, 2025 : 지난 6월 12일 Cloudflare 대부분의 서비스가 2시간 28분 동안 중단되는 장애가 발생했다. 이번 장애는 Cloudflare 대부분의 제품이 Workers KV 서비스에 의존하고 있는데 Workers KV 인프라의 일부가 타사 클라우드(상황상 GCP)의 의존하고 있었기에 타사 클라우드에 장애가 나면서 같이 장애가 났다. 근본 원인은 타사 클라우드의 장애가 원인이었지만 Cloudflare는 Workers KV에 단일 장애 지점이 없어야 했지만, 이 부분에서 놓친 부분이 있어서 Cloudflare까지 장애가 발생했다.(영어)
GCP Outage : Google Cloud 대부분의 서비스가 한국 기준 13일 3:51부터 11:18까지 제대로 동작하지 않는 대규모 장애가 발생했다. Google Cloud에는 API의 정책과 할당량을 확인하는 Service Control이 있고 Serive Control을 분산된 구조의 지역 서비스이지만 데이터스토어의 메타데이터는 전 세계로 복제되어 할당량 정책을 관리하는 구조이다. 5월 29일에 할당량 정책을 확인하는 추가 기능이 배포되고 이 바이너리에 널포인트 오류 문제가 포함되어 있었고 13일 3시 45분 정책 변경이 적용되었는데 이 정책에 의도치 않은 빈 필드가 포함되면서 바이너리가 널포인트에 도달하는 오류가 발생하게 되었다.(영어)
DASH 2025: Guide to Datadog's newest announcements : Datadog의 기술 콘퍼런스인 Dash에서 AI 워크로드 모니터링 기능, 장기 로그를 싸게 저장하면서 쿼리할 수 있는 Flex Logs, 복잡한 데이터를 분석할 수 있는 Datadog Sheets, 개선된 Datadog Internal Developer Portal(IDP), 온콜을 도와주는 Bits AI SRE 등을 공개했다.(영어)
Introducing Gateway API Inference Extension : LLM은 기존 웹 요청과는 달리 오리 실행되고 리소스 집약적이며 상태가 저장되는 경우가 많기 때문에 Kuberntes Gateway API에 추론 전용 라우팅 기능을 추가하는 Gateway API Inference 확장이 만들어졌다. 이 확장을 사용하면 Gateway 라우팅 뒤에 Inference Model API를 제공하고 InferencePool을 통해 제공 위치와 방법을 관리할 수 있다.(영어)
Announcing Multigres: Vitess for Postgres : supabase에 Vitess의 공동 창시자인 Sugu가 합류해서 Postgres용 Vitess인 Multigres를 만들게 되었다. Multigress는 MySQL의 클러스터링 시스템인 Vitess와 마찬가지로 Postgres 앞에 동작하는 샤딩을 위한 프록시이다.(영어)
Comments