728x90
개요
Flutter를 개발하면서 서버가 Local, Dev, Prod로 환경별로 나누어져 있어서 Flutter도 마찬가지로 빌드 환경에 따라 서버 엔드포인트 및 설정 값이 변경이 되어야 한다. 그래서 환경별 빌드 적용 경험에 대해 글을 정리하려고 한다.
본문
Flutter 서버 환경
- Local Server : Dev 배포 전에 API 개발을 진행할 때 로컬 서버에서 먼저 개발 및 테스트 진행하는 환경
- Dev Server : Local API 개발이 완료되어 Dev 서버로 배포가 되어 개발된 API를 테스트할 수 있는 환경
- Prod Server : 테스트가 완료된 API가 실제 사용자들에게 제공되는 환경
서버의 각 환경별로 Data와 API가 다르므로 Flutter에서 각 환경별로 설정되어 테스트 또는 사용을 할 수 있어야 했다.
Flutter 프로젝트 구조
- env 폴더를 생성하고 env 폴더 하위에 entryPoint가 될 환경별 클래스 파일을 생성
- Evn.dart : 환경 설정 값을 제어하는 클래스
- local.dart : Local 환경 빌드 시 실행되는 entryPoint 클래스
- dev.dart : Dev 환경 빌드 시 실행되는 entryPoint 클래스
- prod.dart : Prod 환경 빌드 시 실행되는 entryPoint 클래스
Env.dart
enum BuildType { local, dev, prod }
class Env {
static Env? _instance;
static get instance => _instance;
late BuildType _buildType;
Env(BuildType buildType) {
_buildType = buildType;
}
String getScheme() {
if (_buildType == BuildType.local) {
return 'http';
} else {
return 'https';
}
}
String getHost() {
if (_buildType == BuildType.local) {
return '10.0.2.2:8080';
} else if (_buildType == BuildType.dev) {
return 'port-0-dev.cloudtype.app';
} else {
return 'port-0-prod.cloudtype.app';
}
}
String getApiKey() {
if (_buildType == BuildType.local) {
return '${apikey.local}';
} else if (_buildType == BuildType.dev) {
return '${apikey.dev}';
} else {
return '${apikey.prod}';
}
}
factory Env.newInstance(BuildType buildType) {
_instance ??= Env(buildType);
return _instance!;
}
void run() {
runApp(MyApp());
}
}
Env 클래스가 하는 역할은 BuildeType을 받아서 Sigleton Class 인스턴스를 생성하여 환경별 세팅값을 제공해주는 역할을 하게 된다.
Env.newInstance(BuildType.local); 정의하면 Local Env 인스턴스 생성되며 어디서든지 Env.instance.설정메소드(); 를 호출하면 해당 환경의 설정 값을 가져올 수 있게 된다.
local.dart
import 'package:ran_chat_flutter/env/Env.dart';
main() => Env.newInstance(BuildType.local).run();
dev.dart
import 'package:ran_chat_flutter/env/Env.dart';
main() => Env.newInstance(BuildType.dev).run();
prod.dart
import 'package:ran_chat_flutter/env/Env.dart';
main() => Env.newInstance(BuildType.prod).run();
각 환경별 클래스 파일들은 Env 클래스에 BuildType를 정의하고 앱을 실행시켜주는 역할을 한다.
Flutter IDE Build 설정
- Edit Configurations...
- + 버튼 -> Flutter를 선택하여 Flutter 환경을 추가한다.
- Name : 환경명을 추가한다. (local, dev, prod)
- Dart entryPoint : 환경 dart 파일을 찾아서 선택한다. (local.dart, dev.dart, prod.dart)
- 1~4번을 반복하여 설정하고자 하는 모든 환경을 추가한다.
- 애플리케이션을 실행하고자 하는 환경을 선택하고 Run을 실행해주면 된다.
마무리
환경별로 빌드될 수 있도록 만들었다. 이제는 코드에서 수정해서 빌드는 하는 과정을 생략하고 빌드 환경만 선택해서 빌드 될 수 있도록 하자 생산성에 많은 도움이 될 것이다. 다음에는 Build Flavor를 이용하여 OS 애플리케이션이 환경별로 설치가 되는 방법에 대해서 정리하자.
300x250
'Flutter' 카테고리의 다른 글
[Flutter] GetX - 다국어적용 (0) | 2022.12.22 |
---|---|
[Flutter] GetX - 라우트 관리 (0) | 2022.12.20 |
[Flutter] GetX - 상태관리 (0) | 2022.12.19 |
[Flutter] Firebase 안드로이드 SMS 인증 (1) | 2022.12.18 |
[Flutter] Firebase 안드로이드, IOS 설정 (0) | 2022.12.17 |
댓글