티스토리 뷰
[React Native] react-native-config로 환경변수(.env) 유동적으로 관리하기!
썬이_ 2024. 2. 22. 14:04
사용자에게 앱을 배포하기 위한 환경으로는 여러 케이스가 있지만,
어떠한 경우든 develop(개발 서버), production(운영 서버) 로 나누어 작업하는게 원칙이다.
또한 API URL이나 Key 등 개발자 또는 팀만이 알아야 하는, 오픈소스에 올리면 안되는 정보들을 관리하는 env(환경 변수 파일)는
거의 모든 앱,웹 개발 환경에서 사용되고 있다.
그렇다면 prod 서버와 dev 서버 등 여러 환경을 배포할 때 일어날 수 있는 수많은 휴먼 리스크를 방지하고
근본적으로 서버 환경을 변경할 때마다 env파일을 일일이 수정하는 번거로움을 최소화하려면,
각 서버 환경에 사용되는 env파일을 각각 작성해두고 개발자가 "개발 서버를 보고싶어!" 또는 "운영 서버를 보고싶어!" 할 때
자동적으로 해당 env 스크립트를 바라보게 하면 된다.
이를 해결하기 위해서는 react-native-dotenv 혹은 react-native-config 라이브러리가 존재하는데,
dotenv 라이브러리같은 경우에 다중 환경 빌드 지원에 이슈가 있다고 하여 react-native-config를 선택하여 진행해보자.
https://github.com/lugg/react-native-config
📚 Installation
npm i react-native-config
cd ios && pod install
⚒️ Setting
💪 env 파일 생성하기
(project root)/.env
(project root)/env/.env.development (개발환경)
(project root)/env/.env.production (운영환경)
env 파일명은 알아보기 쉽게 지어주면 된다👍
🟡 iOS 설정하기
1. Configuration Settings 파일 생성
XCode > Project명 우클릭 > New file... 클릭 > Configuration Settings FIle 선택 후 Next
이후 생성된 파일에 위 이미지대로 코드 한줄을 추가해준다.
#include? "tmp.xcconfig"
2. 생성된 Config 파일 설정
PROJECT > Info > Configurations에 Debug, Release 부분에 Config 적용
3. Scheme 생성
XCode > Product > New Scheme...
Development와 Production 두개 다 생성해주어야 한다.
4. Xcode > Product > Scheme > Edit Scheme
3 에서 생성한 스키마에 RunScript를 작성해주자.
Build > Pre-actions에 + 버튼을 클릭하여 아래 스크립트를 작성해주면 된다.
Run Script 파일
# Type a script or drag a script file from your workspace to insert its path.
cp "${PROJECT_DIR}/../env/.env.development" "${PROJECT_DIR}/../.env"
"${SRCROOT}/../node_modules/react-native-config/ios/ReactNativeConfig/BuildXCConfig.rb" "${SRCROOT}/.." "${SRCROOT}/tmp.xcconfig"
Production의 경우에도 똑같이 추가해주고 development 부분만 production으로 바꾸어 작성해주면 된다.
5. package.json 수정
npm run ios 명령어를 통해 빌드한다면 현재 디렉토리에 있는 .env 파일을 읽어오게 되는데
package.json 에 아래 빌드 명령어를 추가하여 빌드할 때 개발자가 원하는 환경을 자동적으로 가져오게 해주자.
"ios:dev": "react-native run-ios --scheme Development",
"ios:prod": "react-native run-ios --scheme Production"
XCode > Run 으로 빌드한다면,
헤더에 스키마를 수동으로 바꿔주고 Run 해주면 원하는 환경에 맞게 알아서 .env 파일이 변경된다 👍
🟠 Android 설정하기
1. android/app/build.gradle 수정
+ apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
...
+ project.ext.envConfigFiles = [
+ developdebug: "env/.env.development",
+ developrelease: "env/.env.development",
+ productdebug: "env/.env.production",
+ productrelease: "env/.env.production",
+ anothercustombuild: ".env",
+ ]
...
android {
...
+ flavorDimensions "version"
+ productFlavors {
+ develop {
+ }
+ product {
+ }
+ }
...
}
❗ developdebug, develorelease 처럼 상세하게 적어주지 않으면 앱을 빌드할 때
'Task installDevelopdebug is ambiguous in project ':app'. Candidates ...' 와 같은 에러가 나니 자세히 적어주자!
2. package.json 수정
"android:dev": "react-native run-android --variant=develop",
"android:prod": "react-native run-android --variant=product",
iOS 설정 > 5. 항목과 동일.
설정 끝! 🙆♂️
'개발 세상 > React Native' 카테고리의 다른 글
- Total
- Today
- Yesterday
- useEffect
- vscode
- 영종도데이트
- React Hooks
- rn
- Xcode
- JavaScript
- 스파르타코딩클럽
- app
- It
- ChatGPT
- ReactNative
- Mac
- Ai
- vsC
- ios
- React Native
- Android
- useState
- 코린이
- REACT
- TS
- FlatList
- gradle
- build
- Firebase
- IMAGE
- 앱개발
- typeScript
- CSS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |