Wednesday, September 23, 2020

플러터 개발 속도 200% 향상: Stable, Beta, Master 채널 초고속 전환 비법

플러터(Flutter)로 개발하다 보면 필연적으로 '채널(Channel)'이라는 개념과 마주하게 됩니다. 특히 최신 웹 기술이나 데스크톱 지원, 혹은 아직 정식 버전에 포함되지 않은 매력적인 기능을 먼저 사용해보고 싶을 때, 우리는 stable 채널을 떠나 betamaster 채널로의 외도를 감행합니다. 하지만 flutter channel beta 명령어를 터미널에 입력하고 하염없이 기다려 본 개발자라면 모두가 공감할 것입니다. 이 과정은 생각보다 훨씬 길고 지루하며, 개발의 흐름을 끊어 놓기 일쑤입니다.

매번 채널을 변경할 때마다 Flutter SDK 전체를 해당 채널 버전에 맞게 다운로드하고 재구성하는 작업이 백그라운드에서 일어나기 때문입니다. 프로젝트 A는 stable로 안정적인 앱을 빌드해야 하고, 프로젝트 B는 beta의 최신 웹 기능을 사용해야 하는 상황이라면 어떨까요? 두 프로젝트를 번갈아 작업할 때마다 이 지루한 기다림을 반복해야만 할까요? 다행히도, 정답은 '아니오'입니다. 이 글에서는 여러 Flutter 채널을 독립적으로 설치하고, 마치 TV 채널을 돌리듯 순식간에 개발 환경을 전환하는 실용적인 방법을 심도 있게 다룹니다. 수동 설정부터 FVM(Flutter Version Manager)을 활용한 최신 관리 기법까지, 여러분의 개발 생산성을 극적으로 끌어올릴 모든 노하우를 공개합니다.

1. 왜 여러 버전의 Flutter가 필요한가? - 채널의 이해

본격적인 설정에 앞서, 왜 우리가 여러 채널을 관리해야 하는지에 대한 근본적인 이유를 이해하는 것이 중요합니다. Flutter는 다양한 속도와 안정성을 가진 여러 채널을 통해 SDK를 배포합니다. 각 채널은 명확한 목적을 가지고 있습니다.

  • Stable 채널
    • 특징: 가장 안정적인 버전입니다. 구글 팀이 충분한 테스트를 거쳐 프로덕션 환경에 사용해도 좋다고 판단한 기능들만 포함됩니다. 분기별(Quarterly)로 업데이트되는 경향이 있습니다.
    • 용도: 실제 앱 스토어에 배포할 프로덕션 앱, 안정성이 최우선인 프로젝트에 적합합니다.
    • 단점: 새로운 기능이 추가되는 속도가 가장 느립니다.
  • Beta 채널
    • 특징: 약 한 달 주기로 stable 후보 기능들이 모이는 곳입니다. stable 채널보다는 훨씬 빠르게 새로운 기능을 접할 수 있으며, 비교적 안정적입니다. Flutter Web이나 Desktop 지원과 같이, 아직 stable로 승격되지 않은 주요 기능들을 사용해볼 때 주로 선택됩니다.
    • 용도: 차기 안정 버전을 미리 테스트하거나, 프로덕션 수준의 안정성은 아니더라도 새로운 기능을 적극적으로 도입하고 싶은 프로젝트에 적합합니다.
  • Dev 채널
    • 특징: master 채널에서 어느 정도 테스트를 거친 후 beta로 가기 전의 버전입니다. 버그가 있을 수 있으며, API가 예고 없이 변경될 수 있습니다.
    • 용도: Flutter 프레임워크 자체에 기여하거나, 아주 최신의 변화를 빠르게 확인하고 싶은 숙련된 개발자에게 적합합니다.
  • Master 채널
    • 특징: Flutter 개발팀의 모든 커밋이 실시간으로 반영되는, 가장 최신의 '날것' 그대로의 버전입니다. 언제든 빌드가 깨질 수 있으며, 심각한 버그가 포함되어 있을 확률이 가장 높습니다.
    • 용도: Flutter의 가장 최신 변경 사항을 즉시 확인해야 하는 경우, 혹은 특정 버그 수정 커밋이 적용되었는지 테스트하는 등의 매우 특수한 목적에 사용됩니다.

이처럼 각 채널의 역할이 명확하기 때문에, 개발자는 프로젝트의 성격과 목적에 따라 유연하게 채널을 선택할 수 있어야 합니다. 바로 이 지점에서 '빠른 채널 전환'의 필요성이 대두되는 것입니다.

2. 방법 1: 수동으로 여러 버전의 SDK 설치 및 관리하기

가장 고전적이면서도 Flutter의 내부 동작 방식을 이해하는 데 도움이 되는 방법입니다. 핵심 아이디어는 간단합니다. "각 채널별로 Flutter SDK를 별도의 폴더에 다운로드받고, 필요할 때마다 해당 폴더의 실행 파일을 사용하도록 설정하는 것"입니다.

2.1. 채널별 SDK 설치를 위한 디렉토리 구조 설계

가장 먼저, 여러 버전의 Flutter SDK를 깔끔하게 보관할 상위 폴더를 만드는 것이 좋습니다. 이렇게 하면 나중에 관리하기가 훨씬 수월해집니다. 예를 들어, 사용자의 홈 디렉토리 아래에 `Developer`라는 폴더를 만들고, 그 안에 `flutter_sdks`라는 폴더를 만들어 관리해 보겠습니다.


# 홈 디렉토리로 이동
cd ~

# 개발 관련 폴더 생성 (이미 있다면 생략)
mkdir -p Developer/flutter_sdks

# 생성한 폴더로 이동
cd Developer/flutter_sdks
이제 `~/Developer/flutter_sdks` 라는 경로가 우리의 베이스캠프가 됩니다.

2.2. Git을 사용하여 각 채널 클론(Clone)하기

Flutter SDK는 Git 저장소입니다. `git clone` 명령어와 `-b` (branch) 옵션을 사용하면 특정 채널(브랜치)의 소스 코드를 원하는 폴더 이름으로 바로 복제할 수 있습니다.

위에서 만든 `flutter_sdks` 폴더 안에서 다음 명령어들을 차례로 실행합니다.


# 1. Stable 채널 클론 (폴더명: flutter_stable)
git clone https://github.com/flutter/flutter.git -b stable flutter_stable

# 2. Beta 채널 클론 (폴더명: flutter_beta)
git clone https://github.com/flutter/flutter.git -b beta flutter_beta

# 3. Master 채널 클론 (폴더명: flutter_master)
git clone https://github.com/flutter/flutter.git -b master flutter_master

이 작업이 끝나면 `flutter_sdks` 폴더는 다음과 같은 구조를 갖게 됩니다.


각 폴더(`flutter_stable`, `flutter_beta`, `flutter_master`)는 서로 완전히 독립된 Flutter SDK입니다. 이제 각 폴더에 들어가서 `flutter doctor`를 실행하여 SDK를 초기 설정할 수 있습니다.


# Stable SDK 초기화
cd flutter_stable
bin/flutter doctor
cd ..

# Beta SDK 초기화
cd flutter_beta
bin/flutter doctor
cd ..

# Master SDK 초기화
cd flutter_master
bin/flutter doctor
cd ..

bin/flutter를 사용하는 이유는 아직 시스템 전역의 PATH에 이 SDK들을 등록하지 않았기 때문입니다. 이제 이 긴 경로를 매번 입력하는 불편함을 해소할 차례입니다.

2.3. 터미널의 효율을 극대화하는 Alias(별칭) 설정

매번 `~/Developer/flutter_sdks/flutter_stable/bin/flutter`와 같은 긴 경로를 입력하는 것은 비효율의 극치입니다. 이때 셸(Shell)의 `alias`(별칭) 기능을 사용하면 마법 같은 일이 벌어집니다. `alias`는 긴 명령어를 짧은 나만의 명령어로 대체해주는 기능입니다.

사용하는 셸에 따라 설정 파일이 다릅니다.

  • macOS (Catalina 이상) 및 최신 Linux 배포판: Zsh (`~/.zshrc` 파일)
  • 구형 macOS 및 다수 Linux 배포판: Bash (`~/.bash_profile` 또는 `~/.bashrc` 파일)
  • Windows (PowerShell): PowerShell 프로필 (`$PROFILE` 경로의 파일)

macOS / Linux (Zsh 또는 Bash) 설정

1. 선호하는 텍스트 편집기로 셸 설정 파일을 엽니다. (예: VS Code, nano, vim)


# Zsh 사용자의 경우
code ~/.zshrc

# Bash 사용자의 경우
code ~/.bash_profile

2. 파일의 맨 아래에 다음과 같이 별칭을 추가합니다. 경로는 반드시 자신의 환경에 맞게 수정해야 합니다.


# Flutter Version Aliases
export FLUTTER_SDK_HOME="$HOME/Developer/flutter_sdks"

alias flutter_s='$FLUTTER_SDK_HOME/flutter_stable/bin/flutter'
alias flutter_b='$FLUTTER_SDK_HOME/flutter_beta/bin/flutter'
alias flutter_m='$FLUTTER_SDK_HOME/flutter_master/bin/flutter'

# 각 채널의 pub 명령어 별칭도 만들어두면 편리합니다.
alias pub_s='$FLUTTER_SDK_HOME/flutter_stable/bin/pub'
alias pub_b='$FLUTTER_SDK_HOME/flutter_beta/bin/pub'
alias pub_m='$FLUTTER_SDK_HOME/flutter_master/bin/pub'

3. 파일을 저장하고 셸 설정을 다시 불러옵니다.


# Zsh 사용자의 경우
source ~/.zshrc

# Bash 사용자의 경우
source ~/.bash_profile

이제 터미널을 새로 열거나 `source` 명령어를 실행한 후부터는 다음과 같이 매우 간결하게 각 채널의 Flutter 명령어를 사용할 수 있습니다.


# Stable 채널 버전 확인
flutter_s --version

# Beta 채널로 프로젝트 생성
flutter_b create my_beta_project

# Master 채널의 의존성 패키지 가져오기
cd my_master_project
flutter_m pub get

터미널 작업의 효율이 비약적으로 상승했습니다. 하지만 아직 IDE와의 연동이라는 중요한 과제가 남았습니다.

3. IDE와의 완벽한 연동: VS Code & Android Studio

터미널에서 채널을 쉽게 바꾸는 것도 중요하지만, 실제 개발이 이루어지는 IDE(통합 개발 환경)에서 이를 인식하고 올바르게 동작하게 하는 것이 핵심입니다. 우리는 VS Code와 Android Studio/IntelliJ, 두 가지 주요 IDE에서의 설정 방법을 알아볼 것입니다.

3.1. Visual Studio Code (VS Code) 설정

VS Code의 Flutter 익스텐션은 여러 SDK 경로를 등록하고 손쉽게 전환할 수 있는 매우 강력한 기능을 제공합니다.

1. 설정 열기: `Cmd + ,` (macOS) 또는 `Ctrl + ,` (Windows/Linux)를 눌러 설정(Settings) UI를 엽니다.

2. 'Flutter Sdk Paths' 검색: 검색창에 `Flutter Sdk Paths` 또는 `dart.flutterSdkPaths`를 입력합니다.

3. SDK 경로 추가: 이 설정은 `settings.json` 파일에 직접 경로를 추가하도록 안내합니다. `Edit in settings.json` 링크를 클릭하여 JSON 설정 파일을 직접 엽니다.

4. 경로 배열 입력: `dart.flutterSdkPaths` 항목에 우리가 설치한 Flutter SDK들의 상위 폴더 경로를 배열 형태로 입력합니다. 주의할 점은 각 SDK 폴더(`flutter_stable` 등)가 아니라, 그들을 담고 있는 상위 폴더(`flutter_sdks`)의 경로를 입력해야 한다는 것입니다.


{
    // ... 다른 설정들 ...

    "dart.flutterSdkPaths": [
        "~/Developer/flutter_sdks"
    ]

    // ... 다른 설정들 ...
}

VS Code는 `~/` 같은 틸드(tilde) 경로 확장을 지원합니다. 또는 `/Users/your_username/Developer/flutter_sdks` 와 같이 전체 절대 경로를 사용해도 됩니다.


5. 설정 저장 및 VS Code 재시작: `settings.json` 파일을 저장하고 VS Code를 재시작(또는 창을 다시 로드)하면 마법이 시작됩니다.

이제 VS Code의 오른쪽 하단 상태 표시줄을 확인해 보세요. `Flutter: stable` 과 같이 현재 활성화된 Flutter 버전이 표시되고, 이 부분을 클릭하면 다음과 같이 등록된 모든 SDK 버전 목록이 나타납니다.

이제 원하는 버전을 클릭하는 것만으로 현재 작업 공간(Workspace)에서 사용할 Flutter SDK가 즉시 변경됩니다. 더 이상 `flutter channel` 명령 후의 지루한 기다림은 없습니다. 클릭 한 번이면 됩니다.

프로젝트별 SDK 고정: 만약 특정 프로젝트는 항상 `beta` 채널을 사용하도록 고정하고 싶다면, 해당 프로젝트 루트에 `.vscode` 폴더를 만들고 그 안에 `settings.json` 파일을 생성하여 다음과 같이 SDK 경로를 직접 지정할 수 있습니다.


// my_beta_project/.vscode/settings.json
{
    "dart.flutterSdkPath": "~/Developer/flutter_sdks/flutter_beta"
}

이렇게 하면 전역 설정과 관계없이 이 프로젝트를 열 때마다 자동으로 `beta` SDK가 활성화됩니다.

3.2. Android Studio / IntelliJ 설정

Android Studio나 IntelliJ 계열 IDE는 VS Code처럼 상태 표시줄에서 바로 전환하는 기능은 없지만, SDK 경로를 변경하는 과정 자체는 매우 간단합니다.

1. 설정 열기: `Preferences` (macOS) 또는 `Settings` (Windows/Linux)를 엽니다.

2. Flutter SDK 경로 설정으로 이동: `Languages & Frameworks > Flutter` 메뉴로 이동합니다.

3. Flutter SDK path 변경: 현재 설정된 SDK 경로 옆의 `...` 버튼을 클릭하여 파일 탐색기를 엽니다. 그리고 사용하고자 하는 채널의 SDK 폴더(예: `~/Developer/flutter_sdks/flutter_beta`)를 선택하고 `OK`를 누릅니다.

IDE가 변경된 SDK를 인덱싱하는 짧은 시간이 지나면, 프로젝트가 새로운 버전의 SDK를 기반으로 동작하게 됩니다. 비록 VS Code처럼 원클릭 전환은 아니지만, 터미널에서 채널을 변경하는 것보다는 훨씬 빠른 방법입니다.

4. 방법 2: 더 스마트하고 강력한 대안, FVM (Flutter Version Manager)

지금까지 설명한 수동 관리 방법은 매우 훌륭하고 동작 원리를 이해하는 데 도움이 됩니다. 하지만 더 많은 Flutter 개발자들이 선택하는, 훨씬 더 세련되고 강력한 도구가 있습니다. 바로 FVM (Flutter Version Manager) 입니다.

FVM은 이름에서 알 수 있듯이 Flutter의 여러 버전을 관리해주는 전용 도구입니다. FVM을 사용하면 다음과 같은 엄청난 이점을 얻을 수 있습니다.

  • 간단한 명령어: `fvm install 3.16.0`, `fvm use stable` 등 직관적인 명령어로 버전을 설치하고 전환합니다.
  • 프로젝트별 버전 고정: FVM은 프로젝트 폴더 내에 어떤 버전의 Flutter를 사용할지 설정 파일(`.fvm/fvm_config.json`)을 생성합니다. 이를 통해 팀원 모두가 동일한 Flutter 버전으로 개발 환경을 통일할 수 있으며, Git으로 버전 정보를 공유할 수 있습니다.
  • IDE와의 완벽한 통합: 프로젝트 내에 생성된 심볼릭 링크(`.fvm/flutter_sdk`)를 IDE의 SDK 경로로 한번만 설정해두면, FVM으로 버전을 변경할 때마다 IDE가 자동으로 이를 감지하여 별도의 설정 변경이 필요 없습니다.

4.1. FVM 설치하기

FVM은 Dart Pub을 통해 설치하거나, macOS의 경우 Homebrew를 통해서도 설치할 수 있습니다.


# Dart Pub을 이용한 설치 (가장 일반적)
dart pub global activate fvm

# Homebrew를 이용한 설치 (macOS 사용자)
brew tap leoafarias/fvm
brew install fvm

설치가 완료되면 터미널에서 `fvm --version` 명령어로 설치가 잘 되었는지 확인합니다.

4.2. FVM 기본 사용법

FVM의 사용법은 놀라울 정도로 간단합니다.


# 사용 가능한 Flutter 버전 목록 보기 (stable, beta, dev 채널 등)
fvm releases

# 특정 버전 또는 채널 설치하기
fvm install stable
fvm install beta
fvm install 3.16.0 # 특정 버전 번호로도 설치 가능

# 설치된 버전 목록 확인
fvm list

# 특정 프로젝트 폴더로 이동
cd my_awesome_project

# 이 프로젝트에서 사용할 버전 지정하기
fvm use stable # 또는 fvm use 3.16.0
# 이 명령을 실행하면 프로젝트 루트에 .fvm 폴더가 생성됩니다.

# FVM을 통해 flutter 명령어 실행하기
fvm flutter doctor
fvm flutter run
fvm pub get

4.3. FVM과 IDE 연동 (궁극의 자동화)

FVM의 진정한 힘은 IDE 연동에서 나옵니다. `fvm use` 명령을 실행하면 프로젝트 루트에 `.fvm/flutter_sdk` 라는 심볼릭 링크(Symbolic Link, 바로가기)가 생성됩니다. 이 링크는 FVM이 관리하는 실제 SDK 캐시 폴더의 특정 버전을 가리킵니다. 우리는 IDE에게 이 심볼릭 링크를 Flutter SDK 경로라고 알려주기만 하면 됩니다.

VS Code + FVM 설정

프로젝트의 `.vscode/settings.json` 파일을 열고 다음과 같이 단 한 줄만 설정합니다.


{
    // 이 프로젝트의 Flutter SDK 경로는 .fvm/flutter_sdk 심볼릭 링크를 따른다.
    "dart.flutterSdkPath": ".fvm/flutter_sdk"
}

이제 모든 것이 끝났습니다. 터미널에서 `fvm use beta`라고 입력하면 `.fvm/flutter_sdk` 링크가 가리키는 대상이 `beta` 버전으로 변경되고, VS Code는 이 변경을 즉시 감지하여 아무런 추가 조작 없이도 `beta` 채널 환경으로 모든 분석과 실행 환경을 전환합니다. `fvm use stable`을 입력하면 다시 `stable` 환경으로 돌아옵니다. 이는 거의 완벽에 가까운 자동화입니다.

Android Studio / IntelliJ + FVM 설정

Android Studio도 동일한 원리를 적용합니다. `Preferences/Settings > Languages & Frameworks > Flutter` 로 이동하여, Flutter SDK path에 프로젝트 루트 폴더 기준의 상대 경로인 `.fvm/flutter_sdk` 또는 이 심볼릭 링크의 전체 절대 경로를 지정해주면 됩니다.

결론: 나에게 맞는 방법은?

우리는 Flutter 채널을 효율적으로 전환하는 두 가지 강력한 방법을 살펴보았습니다.

  • 수동 관리 방식:
    • 장점: 외부 도구 의존성이 없고, Flutter SDK가 어떻게 구성되고 동작하는지 내부 구조를 이해하는 데 도움이 됩니다. 간단한 개인 프로젝트나 학습 목적에 적합합니다.
    • 단점: 설정이 다소 번거롭고, 프로젝트별 버전을 체계적으로 관리하기 어렵습니다.
  • FVM 사용 방식:
    • 장점: 압도적으로 편리하고 직관적입니다. 프로젝트별 버전 고정이 가능하여 팀 협업에 절대적으로 유리합니다. IDE와의 연동이 거의 완벽하여 생산성을 극대화합니다.
    • 단점: FVM이라는 외부 도구에 대한 학습이 필요하지만, 그 비용은 매우 낮습니다.

결론적으로, 대부분의 현대적인 Flutter 개발 환경에서는 FVM을 사용하는 것을 강력히 추천합니다. FVM이 제공하는 프로젝트별 버전 관리와 자동화된 IDE 연동의 이점은 수동 관리의 번거로움을 훨씬 뛰어넘습니다. `flutter channel` 명령어 뒤에 커피를 타러 가던 시간은 이제 과거의 일이 되었습니다. 이제 여러분은 클릭 한 번, 혹은 명령어 한 줄로 채널을 넘나들며 끊김 없는 코딩의 즐거움을 만끽할 수 있습니다. 여러분의 Flutter 개발 여정이 더욱 빠르고 즐거워지기를 바랍니다.


0 개의 댓글:

Post a Comment