프런트엔드 로컬 틸트 아키텍처
이 회고에서는 bf25fc6, 8b28948, 88d7c0a, c7ad439 및 5501704 전반의 변화를 다룹니다.
증상
next dev가 클러스터 수신 뒤에서 실행될 때 프런트엔드 하이드레이션 및 HMR이 불안정했습니다.- 프런트엔드 반복 속도는 클러스터 배포 및 수신 동작과 결합되었습니다.
*.localhost의 로컬 커스텀 도메인 검사가 서버 측 가져오기에 실패했습니다.- Apple Silicon의 Turbopack 개발 세션은 안정화되지 않고 몇 시간 동안 메모리를 늘릴 수 있습니다.
진단
현재 아키텍처는 의도적으로 로컬 우선입니다.
lumie-frontend/Tiltfile는lumie-frontend를npm run dev를 실행하는local_resource로 등록합니다.lumie-frontend/package.json는dev를next dev --turbo가 아닌 일반next dev로 정의합니다.lumie-frontend/src/shared/api/resolveBaseUrl.ts는 SSR 요청을 프런트엔드 원본을 통해 다시 루프하고localhost및*.localhost에http를 사용합니다..github/tilt-up.sh는 여전히 작업 공간 루트에서 Tilt를 실행하므로 프런트엔드는 클러스터에 배포되지 않고 클러스터 지원 서비스와 함께 시작됩니다.
근본 원인
원래 dev-cluster 레이아웃은 Next.js 프런트엔드를 다른 클러스터 작업 부하처럼 처리했습니다. 해당 모델은 next dev의 실제 동작과 싸웠습니다.
bf25fc6는 Traefik HTTP/2 ALPN 뒤에 반복적으로 수화 교착 상태가 발생한 후 클러스터 배포를 완전히 제거했습니다.8b28948는tilt up의 프런트엔드 참여를 복원했지만 개발자 노트북의 로컬 프로세스로만 가능했습니다.- 장기간 실행된 Apple Silicon 개발 세션에서 터보팩 메모리 증가 가 무제한으로 나타난 후
88d7c0a는--turbo를 제거했습니다. c7ad439는 비밀이 아닌 프런트엔드 환경을Tiltfileserve_env로 옮겼으므로 로컬 개발자는 더 이상 개발자별.env.local드리프트에 의존하지 않습니다.5501704는 나머지 SSR 엣지 케이스를 수정했습니다.next dev가http를 통해 해당 호스트에 서비스를 제공하더라도resolveBaseUrl()는foo.localhost를https로 처리했습니다.
수정
안정적인 아키텍처는 다음과 같습니다.
- 상태가 많은 서비스는 클러스터에 유지됩니다.
- Next.js 앱은 Tilt 관리형
npm run dev를 통해 로컬로 실행됩니다. - 브라우저 요청은
http://localhost:3000에서 동일한 출처를 유지하고 프런트엔드/api프록시를 통해NEXT_PUBLIC_API_BASE로 이동합니다. - 로컬 SSR은 강제 내부 백엔드 URL 대신 요청
Host헤더를 사용합니다.
관련 프록시별 인증 함정은 Next.js API Proxy Auth Gotchas에 문서화되어 있습니다.
예방 및 검증
- 클러스터 배포로
next dev를 다시 도입하 지 마십시오. 경고는lumie-frontend/Tiltfile에 직접 보존됩니다. tilt up가 Kubernetes 배포가 아닌 로컬lumie-frontend리소스를 노출하는지 확인합니다.lumie-frontend/package.json가 여전히next dev를 사용하는지 확인하세요.resolveBaseUrl()가 여전히localhost와*.localhost를 모두http에 매핑하는지 확인합니다.