지옥 같은 릴리즈 주간: 클린 코드 + 자동화로 Flutter 앱 배포
Source: Dev.to
문제: 지옥 같은 릴리즈 주간
화요일: 앱이 완벽합니다.
목요일: Gradle이 네임스페이스 문제를 외치고, 릴리즈 빌드가 리소스 링크 단계에서 죽으며, iOS 내보내기가 무작위 아카이브/복사 오류로 실패합니다.
금요일: “출시”가 아니라 두 운영 체제와 협상하고 있습니다.
디버그와 릴리즈 불일치
디버그 빌드에서 다른 점
- 다른 최적화
- 다른 스트리핑/난독화
- 다른 서명/권한 부여
- 다른 의존성 그래프 동작
흔한 원인
- 모듈 간 플러그인 또는 Gradle 설정이 달라짐
- 버전이 “대체로 호환”하지만 릴리즈 작업이 실행될 때 충돌
- 앱 코드와 플랫폼 설정이 뒤섞여 있어 수정이 코드 churn을 일으킴
Android 해결책
빌드 구성을 제품 표면처럼 다루기
- 모듈 전반에 걸쳐 빌드 구성을 일관되게 유지
- 버전을 의도적으로 고정(CI가 자동으로 조용히 업그레이드하지 않도록)
- 릴리즈 빌드 검사를 매일 실행(“출시 전날 밤”이 아니라)
iOS 해결책
서명 및 권한 부여
- 번들 ID / 기능에 대한 단일 진실 소스 유지
- 아카이브 검증 자동화
- 서명을 “부족한 지식”으로 취급하지 않기
의존성 관리 규율
- 버전 고정(특히 빌드 도구 + 핵심 플러그인)
- “그린” 빌드와 “레드” 빌드 사이에 무엇이 바뀌었는지 로그 기록
- 간단한 롤백 경로 유지
클린 아키텍처 장점
- 경계: 플랫폼/구성은 가장자리에서 유지
- 안정성: 도메인 로직은 빌드 전투 중에 재작성되지 않음
- 빠른 수정: 전체 앱이 아니라 어댑터만 변경
릴리즈 고통은 종종 도구 문제라기보다 구조적 문제입니다.
자동화 가능한 위생 관리
-
릴리즈 사전 점검 스크립트 (매일)
# Run release builds in CI flutter build apk --release flutter build ipa --release빌드 구성이나 의존성 드리프트가 있으면 빠르게 실패합니다.
-
의존성 드리프트 감지
- 플러그인 / Gradle / CocoaPods 변경 감지
- PR 체크에 간단한 “무엇이 바뀌었는가” 요약 게시
-
서명 및 권한 부여 검증
- 기능이 활성화되었는지 확인
- 프로비저닝이 번들 ID와 일치하는지 확인
- 필요한 경우 푸시 / 백그라운드 모드 검증
-
원클릭 릴리즈 체크리스트
- “릴리즈 빌드가 그린 상태인가?”
- “버전이 고정되어 있는가?”
- “릴리즈 아티팩트에 대해 스모크 테스트를 실행했는가?”
자동화가 중요한 이유
- 반복적인 보일러플레이트가 여전히 한 주의 큰 부분을 차지합니다.
- AI 코드는 프로젝트 표준을 무시하는 경우가 많으며, 프롬프트가 “바이브 코딩”처럼 느껴져 무작위 결과를 만들고 신뢰할 수 있는 스캐폴딩을 제공하지 못합니다.
HuTouch 소개
Flutter 릴리즈의 지루한 부분을 자동화하기 위해 설계되었습니다.
- 클린 아키텍처 + 코딩 표준 청사진이 반복적인 스캐폴딩이 릴리즈 주간 부채로 변하는 것을 방지합니다.
얼리 액세스 받기
조기 액세스를 위해 가입하세요.
커뮤니티 지원
지금 지옥 같은 릴리즈 주간에 처해 있다면 혼자 고통받지 마세요—Discord에 참여해 질문하세요: