환경변수 알기전 하드코딩...
- 개발을 하며 배포는 해본적이 없어 그동안 아래와 같이 서버를 하드코딩 해왔는데, 마스터에게 서버URL 제발 하드코딩 하지말라는 피드백을 받았다...
export const APIManager = {
async getNewsData(tableName) {
const news = await fetch(`http://localhost:3000/${tableName}`);
const data = await news.json();
return data;
},
async postNewsData(pressInfo) {
await fetch(`http://localhost:3000/subscribeInfo`, {
method: "post",
headers: {
"content-type": "application/json",
},
body: JSON.stringify(pressInfo),
});
},
async deleteNewsData(pressName) {
try {
await fetch(`http://localhost:3000/subscribeInfo/${pressName}`, {
method: "DELETE",
});
} catch (error) {
console.error(error);
}
},
};
- 환경변수라는 것을 알게되어 학습해 적용해보기로 했다.
환경 변수 사용 이유?
- 환경변수를 사용하는 이유는 외부로 알려지면 안되는 API KEY나 db 관련 정보 등의 보안을 지켜야하며, 유지 보수를 용이하게 하기 위해 사용한다.
.evn 파일 생성
- 먼저 루트에 .env파일을 생성한다. .env파일은 항상 프로젝트 최상단에 위치해야한다.
- 환경 변수는 외부에 공개되면 안되기 때문에 .env파일을 .gitignore파일에 올려야한다.
gitIgnore
> .env
- .env파일에 환경 변수를 설정한다.
REACT_API_SERVER=http://localhost:4000/
- CRA는 보안을 위해 REACT_APP_으로 시작하지 않는 변수는 무시하기 때문에 REACT_APP_를 꼭 붙여야한다.
환경 변수 가져오기
- 사용하고자 하는 파일에 process.env로 환경 변수를 가져올 수 있다.
const serverURL = process.env.REACT_API_SERVER;
개발/배포 환경 설정
- CRA로 프로젝트를 시작했다면 개발환경과 배포환경을 분리할 수 있다.
- 최상단에 .env.development, .env.production 파일을 생성하고 개발중에 사용할 환경변수는 .env.development에, 배포할때 사용할 환경변수는 .env.production에 선언한다.
- 명령어를 실행하면 자동으로 개발/배포 환경을 분리해 환경변수를 사용한다.
npm run start > .env.development 환경변수를 실행한다.
npm run build > .env.production 환경변수를 실행한다.
# development 개발 env실행
$ npm start
# production 배포 env실행
$ npm run build
적용!
const serverURL = process.env.REACT_APP_SERVER;
export const APIManager = {
async getNewsData(tableName) {
const news = await fetch(serverURL + tableName);
const data = await news.json();
return data;
},
async postNewsData(pressInfo) {
await fetch(serverURL + "subscribeInfo", {
method: "post",
headers: {
"content-type": "application/json",
},
body: JSON.stringify(pressInfo),
});
},
async deleteNewsData(pressName) {
try {
await fetch(serverURL + `subscribeInfo/${pressName}`, {
method: "DELETE",
});
} catch (error) {
console.error(error);
}
},
};