DEV/WebProgramming

[React.js] 빌드 후 환경변수 수정

9thxg 2024. 7. 12. 17:31

const 빌드 후 환경변수 수정 = ( Param ) => {

💻 return Result;

env.js 파일 생성

// public/env.js
// 전역에 선언되기 때문에 window 객체를 통해 참조할 수 있음
export const env = {
    ...import.meta.env, // vite 환경변수 값
    ...window["env"], // 전역에 저장된 이전 환경변수 값
	// 필요 환경 변수 정의
	BASE_URL: "http://localhost:3000"
};

 

index.html에서 script 태그를 통해 env.js 선언

<!-- index.html -->
<html>
	<head>
		...
		<script src="/env.js"></script>
	</head>
</html>

 

env.js의 환경변수 적용

//App.jsx
import env from "../public/env"

...

return (
	<div>
		{env.BASE_URL}
		{env.VITE_VERSION}
		// or
		{window.env.BASE_URL}
		{window.env.VITE_VERSION}
	</div>
)

 

배포된 후 env.js를 수정하여 환경변수 변경하기

// 배포된 env.js 파일
// 배포 후에는 전역으로 접근하기 때문에 아래와 같이 사용해야 함
window.env = {
	...window.env,
	// 다시 정의할 환경변수
	BASE_URL: "http://aaa.com"
	VITE_VERSION: 0.1.0
}

 

 

📝 console.log( history )

 회사에서 프로젝트 진행 중 환경변수를 변경할 때마다 빌드하는 상황이 발생하여 빌드 후 특정 파일을 수정하면 환경변수를 수정할 수 있도록 하는 방법이 필요했다.

 

  열심히 구글링해 본 결과 public 폴더에 env.js를 선언하여 사용하는 방식을 발견했다. react-inject-env 라이브러리를 적용하여 테스트해 보니 작동이 되는 것을 확인했다.

 

 env.js 파일에 선언된 env 변수는 전역으로 선언되었기 때문에 window 객체를 통해 접근할 수도 있고 import를 통해 접근할 수 있다. 따라서 빌드 후 env.js 파일을 수정하면 빌드된 파일에서 수정된 변수의 값을 바라볼 수 있다.

 

 react-inject-env 결과물을 확인해 보니 굳이 라이브러리를 사용하지 않고 직접 배포된 폴더에서 env.js 파일을 접근하여 수정해도 되겠다는 생각이 들어 테스트해 보니 동일하게 동작하는 것을 확인했다.

 

다만, 라이브러리와 직접 수정하는 두 경우 모두 변경된 사항을 반영하기 위해서 브라우저를 새로고침해야 한다.

 

  환경 변수를 배포 후에 재빌드하지 않고 수정할 수 있지만 env.js 파일이 로드될 때 브라우저 개발자 도구에서 확인할 수 있기 때문에 보안상 중요한 키와 같은 값들은  계속해서 .env를 활용하는 것이 좋아 보인다.

 

/ /  Improvements

 빌드 후 환경변수 수정에 대한 개선 사항은 아니지만 해당 기술을 확인하는 것을 일주일 전에 진행했고 동작하는 것을 확인하고 넘어갔다가 필요할 때 사용하려 하니 생각이 나지 않았다. 옵시디언을 통해 메모하는 습관은 있지만 미루다 보니 작성하지 못했다. 기술 확보 및 배운 것이 있다면 바로 메모하는 습관을 가져야 할 것 같다.

 

 24.07.15

 당연한 결과지만 개발자 도구에서 env.js에 지정한 모든 변수에 접근이 가능하다. 그래서 해당 변수를 바꾸면 적용되는 것을 확인했다. env.js에 선언된 env에 접근할 수 없도록 만들거나 난독화, 암호화하는 방법 등을 찾아봐야 할 것 같다.

}