일기 slecs

팀 개발 환경 표준화: Flutter 버전 고정

목차

Flutter 버전을 3.44.2로 pinning하고, 빌드 signing secrets를 .gitignore에 추가했다. 한 줄짜리 변경처럼 보이지만, 이건 팀 개발 환경의 일관성과 보안을 동시에 강화하는 결정이었다.

문제: 개발자마다 다른 Flutter 버전의 혼란

앱 개발팀이 조금씩 성장하면서 반복된 문제가 있었다. 팀원들이 각자 다른 Flutter 버전을 쓰고 있었다. 누군가는 3.40, 누군가는 3.43, 또 다른 누군가는 최신 버전을 시도하던 중이었다.

그러면 무슨 일이 생길까:

  • 로컬 머신에서는 빌드가 성공하는데, CI 파이프라인에서 실패한다
  • "어라, 내 환경에서는 정상인데…" 같은 환경 이슈 디버깅이 반복된다
  • PR 코드 리뷰를 할 때 먼저 "당신의 Flutter 버전이 뭐죠?" 하고 묻게 된다
  • 새 팀원이 합류했을 때 온보딩 문서가 "아, 그냥 최신 Flutter 깔아도 괜찮을 거야"라는 모호한 지침으로 끝난다

Flutter처럼 빠르게 진화하는 프레임워크는 부 버전(3.40 → 3.41)에서도 런타임 동작, 기본 라이브러리 의존성, 빌드 도구 업그레이드 같은 변화가 포함된다. Gradle, Kotlin, 그리고 Android SDK와의 호환성도 미묘하게 변한다. 따라서 팀 전체가 같은 기반에서 시작해야 한다.

또 하나의 문제는 보안이었다. Android 앱의 서명(signing)에 필요한 keystore 파일, gradle.properties, signing config 같은 설정 파일들이 실수로 git에 커밋되는 일이 여러 번 발생했다. 민감한 비밀키가 git history에 올라가면, 나중에 제거하기가 훨씬 복잡해진다.

실행: FVM과 .gitignore로 표준화

이번엔 두 가지를 함께 정리했다.

먼저 .fvmrc 파일에 Flutter 3.44.2를 명시했다. 그러면 팀원들이 프로젝트를 git clone한 후 fvm install 한 번 실행하기만 해도, 자동으로 이 버전이 설치되고 활성화된다. 더는 "Flutter 버전이 뭐지?"라는 질문이 없다.

그리고 .gitignore에 signing secrets 관련 패턴을 추가했다. keystore 파일, 민감한 gradle properties, signing 설정이 실수로 커밋되지 않게 구조적으로 차단한 것이다.

항목 목적 효과
.fvmrc FVM에게 프로젝트 Flutter 버전 지정 각 개발자의 로컬 머신에서 자동으로 정확한 버전 설치/활성화
.gitignore signing secrets 안전 관리 인증서, 키스토어, 빌드 설정의 실수 커밋 방지

FVM의 가치:

  • 프로젝트마다 다른 Flutter 버전을 관리할 수 있다 (팀이 여러 프로젝트를 진행할 때 특히 유용)
  • 로컬 머신에 여러 Flutter 버전을 공존시킬 수 있어서, 전역 버전 하나로 제한할 필요가 없다
  • 새 팀원 온보딩이 간단해진다 (git clone → fvm install → 끝)
  • CI/CD 파이프라인도 .fvmrc를 읽어 정확한 버전으로 빌드할 수 있으므로, 로컬과 CI 환경이 일치한다

Signing secrets를 .gitignore에 추가하는 이유:

이건 선택이 아니라 필수 관행이다. 개발 초기에 규칙으로 정해두지 않으면, 나중에 누군가는 실수로 민감 파일을 커밋할 수 있다. git history에 올라간 비밀키는 제거하기 복잡하고, 보안 감수 때마다 시끄러운 이슈가 된다.

팀 수준의 변화

이건 작은 변경처럼 보이지만, 실제로는 여러 가지 달라졌다:

  1. 개발 생산성 향상: 환경 설정 문제로 인한 디버깅 시간이 눈에 띄게 줄었다. "내 환경에선 되는데?" 같은 시간 낭비가 없다.
  2. PR 리뷰 집중력: 코드 변경 자체에만 집중할 수 있게 됐다. 리뷰 중에 "Flutter 버전이 뭐죠?"라는 환경 설정 논의가 없어진다.
  3. 신입 온보딩 간소화: 새 팀원이 첫날부터 정확히 같은 개발 환경에서 작업을 시작한다. 환경 이슈로 인한 좌절감이 줄어든다.
  4. 보안 리스크 구조적 차단: signing secrets 노출 가능성이 git 규칙으로 사전에 차단된다.

배운 점

이런 작업은 종종 "미루는 잡무"로 느껴진다. 실제 기능 개발이 아니니까. 하지만 지난 경험상, 개발 초기에 환경 설정을 명시적으로 정하는 데 드는 시간이, 나중에 발생할 환경 오류 디버깅 시간을 몇 시간 단축시킨다.

특히 팀 규모가 커지면서 이 효과는 기하급수적으로 증가한다. 5명 팀에서 한 번의 환경 설정 혼란은 5명에게만 영향을 주지만, 20명 팀에서는 그 파급 효과가 훨씬 크다. 그래서 조기에 투자하는 게 맞다.

또한 signing secrets 같은 보안 사안은, 문제가 터진 후 대응하는 것(git history 정리, 비밀키 재발급 등)이 예방보다 훨씬 비싸다. 보안은 사후 대응 비용이 크고 흔적이 남으므로, 애초에 git 규칙으로 차단하는 게 경제적이다.

이번 변경은 작지만, 팀 개발 문화에 "환경도 코드처럼 버전 관리하고 정책으로 보호한다"는 메시지를 담았다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.