
안녕하세요. 앱 개발자가 되어 돌아왔습니다.
입사하자마자 버그 수정을 하며 코드를 보니 실수하기 좋은 부분이 있었습니다.
(그리고 한달 뒤에 실수했습니다..)
문자열로 관리되고 있는 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']!;
}
}
- 위에서 꼭!!! String.fromEnvironment 메서드를 사용할 때 const를 붙여줘야 합니다!
- 저는 flutter build apk와 같은 명령어를 쓸 때 .env.production 을 읽게 하려고 기본 값을 이렇게 설정했습니다.
IntelliJ에 실행 환경 구성
이제 IntelliJ에서 실행할 때 사용할 환경 변수를 설정합니다.
- Run/Debug Configuration을 엽니다.
- Add New Configuration 아이콘을 클릭하고 Flutter를 선택합니다.
- Name을 적절히 설정합니다(예: dev).
- Additional run args에 다음을 추가합니다:
- Test Uri 사용: -dart-define=ENV_FILE_NAME=.env
- 운영 Uri 사용: envFileName의 기본 값을 .env.production으로 설정해서 값을 주지 않으면 됩니다.

- 단점은, 내부에 배포할 때 테스트 서버를 바라보도록 환경변수 값을 같이 설정해줘야 합니다.
- 이것도 실수할 거 같으니 개선해봐야겠습니다..
Share article