이번에 사용해볼 패키지는 flutter_dotenv 패키지입니다.
응용 프로그램 내에서 사용할 환경 변수는 보통 한 개 파일에서 관리하는 것이 바람직합니다.
특히 API Key처럼 민감한 정보들은 하드코딩으로 직접 값을 넣는 대신 환경 변수 파일에서 값을 읽어서 사용해야 합니다.
1. dotenv가 무엇일까?
패키지 설명을 보면 애플리케이션 전체에서 사용할 수 있는 .env파일을 런타임 중에 구성하는 것이라고 적혀있습니다.
.env파일은 애플리케이션의 구성 변수를 저장하는 텍스트 파일입니다. 일반적으로 ".env"라는 이름의 파일로 저장되며,
각 줄은 키-값 쌍으로 구성되어 있습니다. 구성 변수는 애플리케이션의 동작에 영향을 주는 설정 값들을 나타냅니다.
예를 들어 api-key, 서버 URL 등 외부로 공개하기 민감한 구성변수를 .env 파일에 저장합니다.
한마디로 dotenv는 Flutter에서 env파일을 관리하고 쉽게 사용할 수 있게 도와주는 패키지입니다.
하지만 꼭 파일 이름이 .env일 필요는 없습니다.
2. dotenv 사용법
(1) 패키지 설치
$ flutter pub add flutter_dotenv
먼저 터미널에서 위 명령어를 실행해서 패키지를 설치해줍니다.
(2) .env 파일 생성 및 구성 변수 작성
루트 디렉토리에 .env라는 파일을 만들어줍니다.
그리고 키=값의 형태로 사용할 값을 작성해줍니다. Map<String,String> 구조로 되어있습니다.
(위 API Key는 유효하지 않은 키입니다.)
(3) pubspec.yaml 파일에 .env파일 등록
그리고 반드시 pubspec.yaml 파일의 assets:에 사진처럼 .env파일을 등록해줍니다.
(4) .gitignore에 .env파일 추가하기 *(중요)
환경변수나 API키처럼 중요한 정보들이 저장되어 있는 만큼, 이 파일은 git public으로 올라가면 안됩니다.
// .gitignore
.env
.gitignore에 위의 키워드를 추가해서 로컬에서만 환경변수를 관리할 수 있도록 해줍니다.
(5) main함수 작성
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await dotenv.load(fileName: ".env");
runApp(const MyApp());
}
dotenv.load()를 통해서 .env파일을 런타임에 가져오는 작업을 합니다.
load() 메서드는 비동기 함수이기 때문에 해당 작업이 끝난 후 runApp을 하기 위해서 await를 걸어 줍니다.
그리고 main 함수에 async를 붙여줍니다.
해당 작업을 하면 .env 파일에 작성한 구성 변수들을 사용할 수 있습니다.
(6) 구성변수 사용
KakaoSdk.init(
javaScriptAppKey: dotenv.get("JAVASCRIPT_APP_KEY"),
);
위와 같이 dotenv.get({키값})으로 .env파일에 작성한 값들을 String으로 반환받을 수 있습니다.
dotenv.env['키']
이처럼 바로 값을 불러올 수도 있습니다. dotenv.get()와는 Null Safety 방지 여부에서 차이가 있습니다.
그래서 dotenv.get() 메소드를 사용하면 찾고자하는 환경변수가 정의되지 않을 시 예외(Exception)을 발생시킵니다.
만약 특정한 환경변수가 정의되지 않았을 시 기본값도 지정해 줄 수도 있습니다.
추가) Release 환경에서의 에러 발생 + 해결 방법
.env파일을 작성하고 flutter build web을 통해서 build를 했을 때 build/web 디렉토리 안에 .env파일이 잘 들어있는 것을 확인했습니다.
하지만 배포 이후에 Release환경에서는 아래와 같이 variable not found라는 에러 메시지가 나옵니다.
그래서 진짜진짜 많은 자료를 찾아보며.... 해결책을 발견하고 마는데
https://github.com/java-james/flutter_dotenv/issues/16
using flutter dotenv for build release · Issue #16 · java-james/flutter_dotenv
How can I use this library to build releases for android and ios? the environment variable does not seem to work after building apk release version
github.com
위 글에서는 .env 파일 이름에서 .을 지우고 빌드하니까 제대로 실행되었다는 것을 보았습니다.
그래서 .을 지우고 빌드를 하고 다시 배포하니 진짜 에러 메시지가 나오지 않고 제대로 실행되었습니다!!!
왜 그런지는 모르겠는데... 알고 계신분이 이 글을 본다면 이유를 댓글로 남겨주세요!!
env라고 두긴 좀 그래서 public.env로 바꾸고 다시 빌드했을 때도 제대로 실행되는 것을 보니 .으로 시작하는 파일명이
문제가 될 수도 있다는 생각을 했습니다.
'개발 > Flutter' 카테고리의 다른 글
[Flutter] 채팅앱 만들기(1) 기존 앱 분석 (main) (0) | 2024.08.28 |
---|---|
[Flutter] 채팅앱 만들기 - Flutter앱을 Firebase와 연동하기 (0) | 2024.08.17 |
[Dart] Dart 개념 정리 - 1 (변수) (0) | 2024.07.26 |