본문 바로가기
Flutter

[Flutter] 빌드 환경 분리

by 가드 2022. 12. 21.
728x90

 개요

Flutter를 개발하면서 서버가 Local, Dev, Prod로 환경별로 나누어져 있어서 Flutter도 마찬가지로 빌드 환경에 따라 서버 엔드포인트 및 설정 값이 변경이 되어야 한다. 그래서 환경별 빌드 적용 경험에 대해 글을 정리하려고 한다.

 

 본문

Flutter 서버 환경

flutter build

  • 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 설정

flutter ide build

  1. Edit Configurations...
  2. + 버튼 -> Flutter를 선택하여 Flutter 환경을 추가한다.
  3. Name : 환경명을 추가한다. (local, dev, prod)
  4. Dart entryPoint : 환경 dart 파일을 찾아서 선택한다. (local.dart, dev.dart, prod.dart)

configurations

  • 1~4번을 반복하여 설정하고자 하는 모든 환경을 추가한다.
  • 애플리케이션을 실행하고자 하는 환경을 선택하고 Run을 실행해주면 된다.

 

 마무리

환경별로 빌드될 수 있도록 만들었다. 이제는 코드에서 수정해서 빌드는 하는 과정을 생략하고 빌드 환경만 선택해서 빌드 될 수 있도록 하자 생산성에 많은 도움이 될 것이다. 다음에는 Build Flavor를 이용하여 OS 애플리케이션이 환경별로 설치가 되는 방법에 대해서 정리하자.

300x250

댓글