반응형
⚙️ 시작: uuid 설치 및 사용
React Native 앱에서 일정 추가 시 고유 ID가 필요해서
보통 많이 사용하는 uuid 패키지를 설치하고 다음처럼 사용했습니다:
pnpm add uuid
import { v4 as uuidv4 } from 'uuid';
const id = uuidv4();
그리고 이 값을 일정 객체에 사용했죠:
addSchedule({
id: uuidv4(), // ❌ 여기서 에러 발생
title: '주사 맞기',
...
});
그런데 앱을 실행하자 다음과 같은 에러가 발생했습니다:
Error: crypto.getRandomValues() not supported.
👀 이 에러는 웹 브라우저에서 제공하는 crypto.getRandomValues()를
React Native에서 사용할 수 없기 때문에 발생한 것입니다.
🔍 원인 요약
- uuid 패키지는 웹 브라우저 환경을 기준으로 만들어졌고
- 내부적으로 crypto.getRandomValues()를 사용함
- 하지만 React Native는 웹이 아니므로 해당 API가 없음
⚠️ 원인: uuid 패키지의 내부 동작
많은 개발자들이 사용하는 uuid 패키지는 브라우저 환경에서 잘 작동합니다.
하지만 이 패키지의 v4 구현은 내부적으로 crypto.getRandomValues()를 사용하기 때문에 React Native에서는 동작하지 않습니다.
💡 해결 방법: React Native에 맞는 UUID 패키지 사용
✅ 방법 1: react-native-uuid 사용 (권장)
- 설치
pnpm add react-native-uuid
- 사용법
import uuid from 'react-native-uuid';
const id = uuid.v4() as string;
uuid.v4()는 string | number[] 형태를 반환하므로, 타입스크립트에서는 as string으로 명시해주는 것이 좋습니다.
✅ 방법 2: expo-crypto 사용 (Expo 사용자)
- 설치
pnpm add expo-crypto
- 사용법
import * as Crypto from 'expo-crypto';
const id = await Crypto.getRandomUUID();
이 방식은 async/await이 필요하기 때문에 함수 구조를 비동기적으로 변경해야 합니다.
🧠 정리
패키지 RN 지원 여부 특징
uuid | ❌ (웹 전용) | crypto.getRandomValues() 사용 → 에러 발생 |
react-native-uuid | ✅ | 동기 방식, 간단하게 사용 가능 |
expo-crypto | ✅ (Expo 전용) | 공식 지원, 비동기 방식 필요 |
✨ 마무리
React Native에서는 브라우저의 crypto API를 사용할 수 없습니다.
따라서 UUID가 필요할 경우, RN에 맞는 패키지를 선택해서 사용하는 것이 중요합니다.
이번 경험을 통해 웹과 네이티브의 차이를 잘 이해하게 되었고, 앞으로는 환경에 맞는 라이브러리 선택이 얼마나 중요한지 다시 한 번 느꼈습니다. 💪
반응형
'programing > App' 카테고리의 다른 글
[Flutter macOS] 앱을 항상 위에 고정(Always on Top) + 기본 창 크기 설정하는 방법 (1) | 2025.04.01 |
---|---|
[React] key를 분명히 넣었는데도 Warning이 뜬다면? (Fragment 주의!) (0) | 2025.03.27 |
[React Native] Cannot read property of undefined – default export vs named export 완전 정복 (0) | 2025.03.26 |
React Native에서 Pressable vs TouchableOpacity: 어떤 걸 써야 할까? (1) | 2025.03.25 |
[React Native] TailwindCSS 전체 색상표를 React Native에 적용하기 (0) | 2025.03.25 |