(+) Application Layer - environment

Environment 의 ν•„μš”μ„±

같은 μ’…λ₯˜μ΄μ§€λ§Œ λΉŒλ“œ ν™˜κ²½μ— λ”°λΌμ„œ 값이 λ‹¬λΌμ Έμ•Όν•˜λŠ” 것듀이 μžˆλ‹€. κ°€μž₯ 큰 예둜 개발 μ„œλ²„, 운영 μ„œλ²„μ˜ μ—”λ“œν¬μΈνŠΈκ°€ μžˆλ‹€. ν•˜μ§€λ§Œ 이λ₯Ό μœ„ν•΄μ„œ ν”„λ‘œλ•μ…˜ μ½”λ“œμ™€ 개발 μ½”λ“œλ₯Ό κ΅¬λΆ„ν•΄μ„œ κ°œλ°œν•˜λŠ” 것은 잘λͺ»λœ κ°œλ°œμ΄λ‹€. λͺ¨λ“  ν…ŒμŠ€νŠΈμ™€ κ°œλ°œμ€ ν”„λ‘œλ•μ…˜μ„ κΈ°μ€€μœΌλ‘œ μž‘λ™ν•˜κ³  κ΅¬ν˜„λ˜μ–΄μ•Όν•œλ‹€.

λ”°λΌμ„œ μ½”λ“œ λ‚΄μ—μ„œ ν”„λ‘œλ•μ…˜ μ½”λ“œμ™€ 개발 μ½”λ“œκ°€ κ΅¬λΆ„λ˜μ§€ μ•Šκ³  μΌκ΄€λ˜κ²Œ ν”„λ‘œλ•μ…˜ μ½”λ“œλ‘œ κ΅¬ν˜„λ˜λ„λ‘ ν•˜λ˜ λΉŒλ“œ ν™˜κ²½μ— 따라 달라져야할 값듀은 λ‹€λ₯΄κ²Œ μ‚¬μš© λ˜λ„λ‘ ν•΄μ•Όν•œλ‹€. 이λ₯Ό μœ„ν•΄μ„œ ν™˜κ²½μ— λŒ€ν•΄μ„œλ§Œ λΆ„κΈ° 처리λ₯Ό ν•˜κ³  κ·Έ μ™Έμ—λŠ” λͺ¨λ‘ λ™μΌν•œ ν”„λ‘œλ•μ…˜ μ½”λ“œμ—μ„œ ν™˜κ²½ λ³„λ‘œ λ‹€λ₯Έ 값을 κ°–κ³  λ™μž‘ν•˜λ„λ‘ μ²˜λ¦¬ν•΄μ•Όν•˜λŠ”λ° 이λ₯Ό Environment κ°€ μ²˜λ¦¬ν•˜λ„λ‘ ν–ˆλ‹€.

VM μ˜΅μ…˜μ„ ν™œμš©ν•΄λ„ 될 것 κ°™μ•˜λŠ”λ° 일단 μ•± κΈ°λ™μ‹œ μ§„μž… 지점을 μ•„μ˜ˆ λ‹€λ₯΄κ²Œ μ„€μ •ν•˜μ—¬ μ½”λ“œ 내에 enum 으둜 λ‹€λ₯΄κ²Œ μ²˜λ¦¬ν•΄λ‘λŠ” 방식을 μ·¨ν–ˆλ‹€.

νŒ¨ν‚€μ§€ ꡬ성 κ΄€μ μ—μ„œ 바라본 Environment

Environment κ΅¬ν˜„

development.dart(production.dart 도 λ™μΌν•œ 방식)

void main() {
  final Environment environment =
      Environment.newInstance(EnvironmentType.development);
  environment.run();
}

environment.dart

import 'package:app_frame_sample/app.dart';
import 'package:flutter/cupertino.dart';

import '../application.dart';

class Environment {
  static Environment? _instance;
  final EnvironmentType environmentType;

  const Environment._internal(this.environmentType);

  static bool get _isDevelopment {
    return _instance!.environmentType == EnvironmentType.development;
  }

  static bool get _isProduction {
    return _instance!.environmentType == EnvironmentType.production;
  }

  static String get baseUrl {
    if (_isDevelopment) {
      return 'http://localhost:8080';
    }

    if (_isProduction) {
      return 'http://localhost:8090';
    }

    throw UnsupportedError(ErrorMessage.notFoundEnvironmentType);
  }

  factory Environment.newInstance(EnvironmentType environmentType) {
    _instance ??= Environment._internal(environmentType);
    return _instance!;
  }

  void run() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Injector.prepareDependencies();
    runApp(const Application());
  }
}

Last updated