Dart 튜토리얼 31편: 코드 품질과 분석(dart analyze·lints·analyzer plugins·diagnostics)
요약
핵심 요지
- 문제 정의: 문제를 실행 중에 발견하면 수정 비용이 커지고, 팀에서는 같은 실수가 반복되기 쉽다.
- 핵심 주장: Dart는
dart analyze1로 정적 분석을 수행하고, lints2와 analyzer plugins3로 규칙을 확장하며, diagnostics4로 “무슨 문제인지/어떻게 고칠지”를 확인하는 흐름을 제공한다. - 주요 근거:
dart analyze명령,--fatal-infos5/--no-fatal-warnings6 옵션, 규칙 세트(lints/flutter_lints) 소개, 플러그인 설정(analysis_options.yaml) 예시가 제시된다. - 실무 기준: (1) 분석을 항상 실행한다 → (2) 규칙 세트로 시작한다 → (3) 필요하면 플러그인을 추가한다 → (4) 메시지는 진단 코드로 빠르게 검색/정리한다.
문서가 설명하는 범위
dart analyze로 정적 분석을 실행하고, 실패 기준을 옵션으로 조정하는 방법- lints 세트로 규칙을 시작하고, 필요한 규칙/상태(Stable/Experimental 등)를 관리하는 방법
- analyzer plugins를
analysis_options.yaml에 연결하고, 진단을 켜고/끄고/무시하는 방법 - diagnostics 인덱스로 메시지(진단 코드)의 의미와 해결 방향을 찾는 방법
읽는 시간: 16분 | 난이도: 초급
참고 자료
문제 상황
코드 품질 이슈는 보통 “작은 실수”로 시작합니다.
하지만 작은 실수가 쌓이면, 리뷰 시간이 늘고, 배포가 늦어지고, 리팩터링이 무서워집니다.
그래서 실행하기 전에 잡을 수 있는 문제는 최대한 일찍 잡는 것이 이득입니다.
해결 방법
단계 1: dart analyze를 “기본 검사”로 고정하기
Why
NOTEIDE에서 보이는 경고/에러를 “커맨드라인에서도” 같은 기준으로 확인할 수 있어야, CI에서도 같은 결과를 보장할 수 있습니다.
그래서dart analyze를 기본 검사로 고정하는 것이 유리합니다.
What
NOTE
dart analyze는 IDE에서 하는 것과 같은 정적 분석(static analysis)7을 커맨드라인에서 수행합니다.
How
TIP프로젝트 루트에서 분석을 실행합니다.
Terminal window $ dart analyze하위 디렉터리 또는 단일 파일만 대상으로 할 수도 있습니다.
Terminal window $ dart analyze bin
Watch out
WARNING실패 기준을 조정하는 옵션이 있습니다.
예를 들어 info 레벨 이슈도 실패로 처리하려면--fatal-infos를 사용할 수 있습니다.Terminal window $ dart analyze --fatal-infos
결론: dart analyze를 기본 검사로 고정하면, IDE/CI에서 같은 기준으로 문제를 조기에 잡을 수 있습니다.
단계 2: lints는 “세트로 시작”하고, 필요한 규칙만 추가한다
Why
NOTE규칙을 하나씩 고르기 시작하면, 팀마다 기준이 달라지고 서로 충돌하는 규칙을 섞을 수도 있습니다.
그래서 검증된 “규칙 세트”로 시작하는 편이 안전합니다.
What
NOTElints(린트) 규칙은 코드에서 가능한 문제를 찾는 규칙 모음입니다.
규칙 세트로lints패키지의core/recommended와, Flutter용flutter_lints가 소개됩니다.
또한 일부 규칙은 Experimental/Deprecated/Removed 같은 상태를 가질 수 있다는 안내가 있습니다.
How
TIP처음에는 규칙 세트를 적용하고, 그 다음 “프로젝트에 맞는 규칙”만 추가/제거하는 방식으로 진행합니다.
또한 일부 규칙은 quick fix(자동 수정)를 제공할 수 있고, 그때는dart fix8로 자동 적용할 수 있다는 흐름이 제시됩니다.
Watch out
WARNINGlints는 false positive가 있을 수 있고, 규칙끼리 “철학이 다를 수 있다”는 주의가 있습니다.
즉, 규칙의 목적이 충돌한다면 프로젝트 기준(패키지/앱/Flutter)을 먼저 정해야 합니다.
결론: lints는 세트로 시작하면 기준이 빠르게 정리되고, 이후 필요한 규칙만 선택적으로 관리할 수 있습니다.
단계 3: analyzer plugins로 “우리 프로젝트 전용 규칙”을 확장한다
Why
NOTE기본 lints만으로는 프로젝트 특유의 규칙(예: 특정 패턴 금지, 특정 API 사용 강제)을 표현하기 어렵습니다.
그럴 때 플러그인으로 규칙을 확장할 수 있습니다.
What
NOTEanalyzer plugins는
dart analyze와 IDE 분석 서버에 “커스텀 진단(경고/린트) + quick fix + assists”를 추가할 수 있는 확장입니다.
analysis_options.yaml9의plugins:섹션에서 활성화할 수 있습니다.
How
TIP버전 제약으로 플러그인을 추가하는 예시가 제시됩니다.
plugins:my_plugin: ^1.0.0로컬 개발 중인 플러그인을 경로로 연결하는 예시도 제시됩니다.
plugins:my_plugin:path: /path/to/my_plugin플러그인이 제공하는 진단 중 특정 규칙만 켜고/끄는 설정도 가능합니다.
plugins:my_plugin:path: /path/to/my_plugindiagnostics:rule_1: truerule_2: truerule_3: false
Watch out
WARNING플러그인 진단은
ignore주석으로 무시할 수 있고, 특정 플러그인 진단을 가리키려면plugin_name/code형태로 접두사를 붙이는 방식이 제시됩니다.// ignore: some_plugin/some_code// ignore_for_file: some_plugin/some_code
결론: analyzer plugins를 쓰면 프로젝트 전용 규칙까지 정적 분석 단계에서 강제할 수 있습니다.
단계 4: diagnostics 인덱스로 “메시지 해석”을 빠르게 한다
Why
NOTE분석 도구가 내는 메시지는 “문제 요약”일 뿐입니다.
무엇을 바꿔야 하는지 빠르게 찾으려면 진단 코드 기준으로 의미를 확인하는 습관이 필요합니다.
What
NOTEdiagnostics 인덱스는 analyzer가 내는 진단 메시지들을 모아두고, 각 메시지의 의미와 해결 방향을 찾을 수 있게 구성되어 있습니다.
How
TIP분석 결과에서 진단 코드(또는 메시지 제목)를 복사해 diagnostics 인덱스에서 찾아봅니다.
팀에서는 자주 나오는 진단 코드를 “규칙/리뷰 체크리스트”로 정리해두면 반복이 줄어듭니다.
Watch out
WARNING진단은 언어/SDK 버전이 바뀌면서 새로 생기거나 의미가 달라질 수 있습니다.
따라서 “같은 코드인데 갑자기 경고가 늘었다”면, 분석기/SDK 업데이트 영향을 먼저 확인해야 합니다.
결론: diagnostics 인덱스를 기준으로 메시지를 해석하면, 문제 해결 속도가 안정적으로 빨라집니다.
Footnotes
-
dart analyze(dart analyze): 프로젝트의 Dart 코드를 정적 분석하는 명령이다. ↩
-
lints(lints): 코드의 문제 가능성을 찾는 린트 규칙 모음(또는 그 생태계)을 뜻한다. ↩
-
analyzer plugin(분석기 플러그인): analyzer에 커스텀 진단/수정/보조 기능을 추가하는 확장이다. ↩
-
diagnostics(진단 메시지): analyzer가 출력하는 진단 메시지/진단 코드의 목록이다. ↩
-
—fatal-infos(—fatal-infos): info 레벨 이슈도 실패로 취급하도록 하는 옵션이다. ↩
-
—no-fatal-warnings(—no-fatal-warnings): warning을 실패로 취급하지 않도록 하는 옵션이다. ↩
-
static analysis(정적 분석): 코드를 실행하지 않고도 오류/경고 가능성을 찾는 분석 방식이다. ↩
-
dart fix(dart fix): 분석 이슈에 대한 자동 수정(quick fix)을 적용하는 명령이다. ↩
-
analysis_options.yaml(분석 옵션 파일): 린트/플러그인 등 분석기 설정을 담는 파일이다. ↩
공유
이 글이 도움이 되었다면 다른 사람과 공유해주세요!