environment

environment ์˜ ์ฑ…์ž„

๋ณ€์ˆ˜๋ช…์—์„œ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด ํ™˜๊ฒฝ ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•ด ๋งŒ๋“  ๊ฐ์ฒด๋‹ค. ํ•ต์‹ฌ์€ ์•ฑ์˜ ์ง„์ž…์‹œ ์‚ฌ์šฉ๋˜๋Š” main ์—์„œ enum ์œผ๋กœ ํƒ€์ž…์„ ์ •์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ํ™˜๊ฒฝ์˜ ์•ฑ์„ ์‹คํ–‰ ์‹œํ‚ค๋„๋ก ํ•œ๋‹ค.

๋‹ฌ๋ฆฌ ๋งํ•ด, ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ์— ์ฝ”๋“œ๋ฅผ ์•„์˜ˆ ์ •ํ•ด๋‘๊ณ  ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ๋ฅผ ์›ํ•˜๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•˜์—ฌ ์•ฑ์„ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ชจ๋ฐ”์ผ์—์„œ์˜ ํ™˜๊ฒฝ๋ถ„๋ฆฌ๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”๊ฐ€

์„œ๋ฒ„์—์„œ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ์˜ ๋ชฉ์ ๊ณผ ๊ฐ™๋‹ค. ํฐ ํ‹€์—์„œ ๊ฒฐ๊ตญ ์›ํ•˜๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์„ค์ •๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ์ด๋‹ค. ์Šคํ”„๋ง์œผ๋กœ ์น˜์ž๋ฉด ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ตฌ๋ถ„ํ•ด์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

๊ตฌ์ฒด์ ์œผ๋กœ ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด ์•ฑ๋„ ๋‹น์—ฐํžˆ ํ™˜๊ฒฝ๋งˆ๋‹ค ๋ฐ”๋ผ๋ด์•ผํ•  ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๋‹ค๋ฅผ ๊ฒƒ์ด๊ณ , ์‚ฌ์šฉํ•ด์•ผํ•  ์™ธ๋ถ€ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํ† ํฐ ๊ฐ’ ๋“ฑ๋„ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ชจ๋“  ์š”์†Œ๋“ค์„ ๋™์ผํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ํ™˜๊ฒฝ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด 'ํ™˜๊ฒฝ๋ถ„๋ฆฌ' ๋ผ๋Š” ํ–‰์œ„์˜ ๋ชฉ์ ์ด๋‹ค.

์ด๋Ÿฌํ•œ ๋งฅ๋ฝ์—์„œ environment ๊ฐ์ฒด๋Š” ์ •ํ•ด์ง„ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์„ค์ •๊ฐ’์„ ๊ฐ€์ง€๋Š” configuration ์„ฑ๊ฒฉ์˜ ์ •์  ๊ฐ์ฒด(๊ฐ์ฒด๊ฐ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ํ•œ๋‹ค๊ธฐ๋ณด๋‹ค ์ผ๋ฐฉ์ ์œผ๋กœ ์„ค์ •๊ฐ’์„ ์ œ๊ณตํ•ด์ฃผ๋Š”) ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํŒจํ‚ค์ง€ ๊ตฌ์กฐ

ํ˜„์žฌ ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ์˜ ์ดˆ๋ฐ˜์ด๋ผ์„œ ๋‹ค๋ฅธ ๋ ˆ์ด์–ด๋“ค๋„ ๋“ค์–ด๊ฐ”๋Š”๋ฐ application > environments ๋งŒ ๋ณด๋ฉด ๋œ๋‹ค.

environment ๊ตฌํ˜„ ์„ค๋ช…

local.dart

import '../../barrel.dart';
import 'environment.dart';

void main() {
  final Environment environment =
      Environment.newInstance(EnvironmentType.LOCAL);
  environment.run();
}
enum EnvironmentType {
  LOCAL,
  DEVELOPMENT,
  PRODUCTION,
}

์œ„์™€ ๊ฐ™์ด ๊ฐ ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ(local.dart, development.dart, production.dart) ๋งˆ๋‹ค enum ์œผ๋กœ ํ™˜๊ฒฝ์„ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•ด๋‘๊ณ  ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ๋ฅผ ์„ ํƒํ•ด์„œ ๋นŒ๋“œํ•˜๋Š” ์›๋ฆฌ์ด๋‹ค.

import 'package:flutter/material.dart';

import '../../barrel.dart';

class Environment {
  Environment._(this._environmentType);

  static Environment? _instance;
  final EnvironmentType _environmentType;

  static get isLocal => _instance!._environmentType == EnvironmentType.LOCAL;

  static get isDevelopment =>
      _instance!._environmentType == EnvironmentType.DEVELOPMENT;

  static get isProduction =>
      _instance!._environmentType == EnvironmentType.PRODUCTION;

  static newInstance(EnvironmentType environmentType) {
    _instance ??= Environment._(environmentType);
    return _instance!;
  }

  static get baseUrl {
    switch (_instance!._environmentType) {
      case EnvironmentType.LOCAL:
        return 'http://localhost:8080';
      case EnvironmentType.DEVELOPMENT:
        return 'https://dev.example.com';
      case EnvironmentType.PRODUCTION:
        return 'https://example.com';
      default:
        return 'http://localhost:8080';
    }
  }

  run() {
    runApp(const AppName());
  }
}

์ „ํ˜•์ ์ธ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด๊ธด ํ•œ๋ฐ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ์•ˆ๋˜์–ด ์žˆ์ง€๋Š” ์•Š๋‹ค. ์™œ๋ƒ๋ฉด ๊ฐ์•ˆํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•ฑ ์‹คํ–‰์‹œ main ์ด ์ตœ์ดˆ๋กœ ๋‹จ๊ฑด์œผ๋กœ ์‹คํ–‰ ๋˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ newInstance() ์— ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์ด ์ง„์ž…ํ•  ์ผ์€ ์—†๋‹ค.

์—ฌ๊ธฐ์„œ ๋‹ค๊ตญ์–ด ์ฒ˜๋ฆฌ๋‚˜ ํ”Œ๋Ÿฌํ„ฐ ์—”์ง„์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ ์ดˆ๊ธฐํ™” ๋“ฑ์„ ํ•ด์ค˜์•ผํ•˜๋Š”๋ฐ ์ด๊ฑด ๊ทธ๊ฑธ ์ •๋ฆฌํ• ๋•Œ ๊ฐ™์ด ์ •๋ฆฌํ•˜๋Š” ํŽธ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ง€๊ธˆ์€ environment ์˜ ์šฉ๋„๋งŒ ๊ตฌํ˜„๋œ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ๋” ๋‚ด์šฉ์˜ ์š”์ง€๊ฐ€ ๋“œ๋Ÿฌ๋‚˜๋Š” ๋ฐ์— ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ์ด๋‹ค.

Last updated