๐ ๋ค์ด๊ฐ๋ฉฐ
์ต๊ทผ React Native + TypeScript ๋ก ๊ฐ๋จํ ์ดํ์ ๋ง๋ค๋ฉด์ ๊ณต๋ถํ๋ ๋์ค์ ํ๊ฒฝ ๋ณ์ (env)๋ฅผ ์ ์ฉ์ด ํ์ํ๋๋ฐ,
๊ทธ๋ฅ React์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์กฐ๊ธ ๋ค๋ฅธ ๊ฒ ๊ฐ์์ ์์ํ์ต๋๋ค.
1. react-native-dotenv
react-native-dotenv๋ React Native ํ๊ฒฝ์์ ํ๊ฒฝ๋ณ์(env)๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
ํฐ๋ฏธ๋์ ์ผ๊ณ ํด๋น ๋ช ๋ น์ด๋ฅผ ํตํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค.
npm i react-native-dotenv
๋๋
yarn add react-native-dotenv
๊ทธ๋ฆฌ๊ณ ํ์ ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์๋ ์ถ๊ฐ๋ก types๋ฅผ ์ค์นํด ์ค์ผ ํ์ ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
npm install -D @types/react-native-dotenv
๋๋
yarn add -D @types/react-native-dotenv
2. babel.config.js ์ ๋ฐ์ดํธ ํ๊ธฐ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์น ํ์ babel.config.js ํ์ผ์ ๋ด์ฉ์ ์์ ํด์ค์ผ ํฉ๋๋ค.
module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
[
'module:react-native-dotenv',
{
moduleName: '@env',
path: '.env',
blacklist: null,
whitelist: null,
safe: false,
allowUndefined: true,
},
],
],
};
};
์์ ๋ ๋ด์ฉ ์์ moduleName์ import ํ ๋ ๋ช ์ํ ์ด๋ฆ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๋๋ก ์ค์ ํ ๊ฒ์ ๋๋ค.
import { ENV_VAR } from "@env"
moduleName์ ๋ฐ๋ก ์ค์ ์ ํ ์์๋
import { ENV_VAR } from "react-native-dotenv"
3. .env ํ์ผ ์์ฑ
๋ฃจํธ ๋๋ ํ ๋ฆฌ์ .envํ์ผ์ ์์ฑํ๊ณ ์ฌ์ฉ ํ๊ณ ์ ํ๋ ํ๊ฒฝ ๋ณ์๋ฅผ .envํ์ผ ์์ ์ถ๊ฐ ํด์ค๋๋ค.
์์)
API_URL=https://yong-nyong.tistory.com
4. env.d.ts
ํ์ ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์๋ env.d.ts ํ์ผ์ ์์ฑํ๊ณ ์ฌ์ฉํ๊ณ ์ ํ๋ ํ๊ฒฝ ๋ณ์ ํ์ ์ ์ง์ ํด์ผํฉ๋๋ค.
ํด๋น ํ์ผ๊ณผ ๋ด์ฉ์ ์ถ๊ฐ๋ฅผ ์ ํ ์, ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ค ํ ๋ ํด๋น ๋ณ์๋ฅผ ์ฐพ์ ์ ์๋ค๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
declare module '@env' {
export const API_URL: string;
}
5. ์ฌ์ฉํ๊ธฐ
์ด์ ๋ชจ๋ ์ ํ ์ ๋๋ฌ์ต๋๋ค.
์ฌ์ฉ ์์)
import { API_URL } from '@env';
export async function fetchData() {
try {
const data = await fetch(API_URL);
const json = data.json();
return json;
} catch (error) {
console.error(error);
return error;
}
}
๐ ๋ง๋ฌด๋ฆฌ
๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ + ํ์ ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์ react-native-dotenv๋ฅผ ํตํด์ ํ๊ฒฝ๋ณ์(env) ํ์ผ์ ์ ์ฉํด ๋ณด์์ต๋๋ค.