IntelliJ + Flutter + env 으로 서버 Uri 관리하기

Flutter와 IntelliJ를 활용한 Uri 관리 방법을 알아보고, 환경 변수 설정으로 실수를 줄이는 팁을 공유합니다.
ImRieul's avatar
Jun 03, 2024
IntelliJ + Flutter + env 으로 서버 Uri 관리하기
안녕하세요. 앱 개발자가 되어 돌아왔습니다.
입사하자마자 버그 수정을 하며 코드를 보니 실수하기 좋은 부분이 있었습니다.
(그리고 한달 뒤에 실수했습니다..)
 

문자열로 관리되고 있는 Uri

테스트, 운영 서버의 Uri을 문자열로 사용하고 있었습니다.
// final API_SERVER_URI = 'https://dev.tistory.com' final API_SERVER_URI = 'https://product.tistory.com'
저는 절차가 1개씩 늘어날 때마다 실수를 해서 최대한 줄이려고 하는 편입니다.
그런 저에게 이 코드는 실수할 것이 분명했습니다.
그래서 Build Mode에 따라 Uri을 바꿔주기로 했습니다.
 

env 파일 생성

먼저, 프로젝트 루트 디렉터리에 환경 변수 파일을 생성합니다. 여기서는 .env와 .env.production 두 파일을 생성합니다.
# .env API_URL=https://dev.tistory.com
# .env.production API_URL=https://product.tistory.com
이제 환경 변수 파일을 통해 URI를 관리할 수 있게 되었습니다.
 

main.dart에 로직 추가

flutter_dotenv 패키지를 사용하여 환경 변수를 로드합니다. pubspec.yaml 파일에 해당 패키지를 추가합니다.
dependencies: flutter_dotenv: ^5.0.2 # 추가 # .... assets: - .env # 추가 - .env.production # 추가
그런 다음, main.dart 파일을 수정하여 환경 변수를 로드하는 로직을 추가합니다.
import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; Future<void> _initEnv() async { const envFileName = const String.fromEnvironment( 'ENV_FILE_NAME', defaultValue: '.env.production', // 기본 env 파일 이름 설정 ); await dotenv.load(fileName: envFileName); debugPrint('load env file: $envFileName'); } void main() async { WidgetsFlutterBinding.ensureInitialized(); await _initEnv(); runApp(MyApp()); } class API { late final API_URI; API() { API_URI = dotenv.env['API_URI']!; } }
  • 저는 flutter build apk와 같은 명령어를 쓸 때 .env.production 을 읽게 하려고 기본 값을 이렇게 설정했습니다.
 

IntelliJ에 실행 환경 구성

이제 IntelliJ에서 실행할 때 사용할 환경 변수를 설정합니다.
  1. Run/Debug Configuration을 엽니다.
  1. Add New Configuration 아이콘을 클릭하고 Flutter를 선택합니다.
  1. Name을 적절히 설정합니다(예: dev).
  1. Additional run args에 다음을 추가합니다:
    1. Test Uri 사용: -dart-define=ENV_FILE_NAME=.env
    2. 운영 Uri 사용: envFileName의 기본 값을 .env.production으로 설정해서 값을 주지 않으면 됩니다.
notion image
  • 단점은, 내부에 배포할 때 테스트 서버를 바라보도록 환경변수 값을 같이 설정해줘야 합니다.
    • 이것도 실수할 거 같으니 개선해봐야겠습니다..
 
Share article

Rieul's Index