Dev/트러블슈팅 & 삽질일지
crypto.randomUUID is not a function 오류
hyelee.dev
2025. 5. 30. 10:58
React Router caught the following error during render
TypeError: crypto.randomUUID is not a function
개발환경에선 문제없던 프로젝트가 고객사 서버에 올리니 위와 같은 오류가 발생.
확인해보니 Skeleton UI 컴포넌트 쪽에서 에러가 난거였고, crypto.randomUUID()는 최신 브라우저나 Node.js 14.17 이상에서만 동작하는데, 내가 돌린 환경에서는 이 함수가 없어서 터졌던 거였다.
원인을 요약하자면,
- crypto.randomUUID()는 환경에 따라 아예 존재하지 않을 수도 있음
- 특히 개발 중 SSR이나 테스트 환경, 구형 브라우저에선 에러 터질 수 있음
- key에 randomUUID()를 매번 써도 안 좋은 게, 렌더링마다 key가 계속 바뀌면 React가 컴포넌트를 다시 그려버려서 성능 저하됨
아래처럼 generateUUID()라는 함수를 하나 만들어서 해결했음.
// utils/common.ts
export const generateUUID = (): string => {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = (Math.random() * 16) | 0;
const v = c === 'x' ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
};
import { generateUUID } from '@shared/utils/common';
{Array.from({ length: 3 }).map(() => (
<div key={`row-${generateUUID()}`}>
결론은
- Skeleton UI 자체가 잘못된 게 아니라 key로 crypto.randomUUID()를 쓰는 방식이 문제였음
- 렌더링 자체는 정상인데 key 때문에 React가 제대로 못 그리는 상황이었고 generateUUID()로 대체하니까 문제 해결됨