React Native에서 process.env 환경변수 사용은 몇 가지 중요한 제한사항과 주의점이 있습니다:
1. 브라우저와 다른 동작
process.env가 기본적으로 제공되지 않음2. 보안 취약점
3. 플랫폼별 차이
1. react-native-config 사용
npm install react-native-config
2. Expo Config 활용 (Expo 환경)
import Constants from 'expo-constants';
const apiUrl = Constants.expoConfig?.extra?.apiUrl;
3. 안전한 환경변수 관리
따라서 process.env를 직접 사용하기보다는 React Native에 특화된 환경변수 관리 도구를 사용하는 것이 안전하고 효율적입니다.
=============================================================================
yarn add react-native-config
# 또는
npm install react-native-config
React Native 0.75는 자동 링킹을 지원하므로 별도의 링킹 작업이 필요하지 않습니다.
android/app/build.gradle 파일 상단에 추가:
// 2번째 줄에 추가
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
만약 applicationIdSuffix나 applicationId가 AndroidManifest.xml의 패키지명과 다르다면:
android {
defaultConfig {
// ...
resValue "string", "build_config_package", "YOUR_PACKAGE_NAME_IN_ANDROIDMANIFEST_XML"
}
}
cd ios && pod install
프로젝트 루트에 .env 파일 생성:
API_URL=https://myapi.com
GOOGLE_MAPS_API_KEY=abcdefgh
APP_NAME=MyApp
import Config from 'react-native-config';
console.log(Config.API_URL); // 'https://myapi.com'
console.log(Config.GOOGLE_MAPS_API_KEY); // 'abcdefgh'
react-native-config.d.ts 파일 생성:
declare module 'react-native-config' {
export interface NativeConfig {
API_URL?: string;
GOOGLE_MAPS_API_KEY?: string;
APP_NAME?: string;
}
export const Config: NativeConfig;
export default Config;
}
android/app/proguard-rules.pro에 추가:
-keep class com.yourpackage.BuildConfig { *; }
.env 파일은 앱 번들에 포함되므로 민감한 정보는 저장하지 마세요.env.staging, .env.production 등의 파일을 만들어 ENVFILE 환경변수로 지정할 수 있습니다