Qodana logo

Qodana

The code quality platform for teams

All Things Web Code Review Coding Collaboration Development Kotlin Plugins Releases

Qodana 2024.1을 사용하여 IntelliJ IDEA 등에서 맞춤형 코드 검사 생성

Read this post in other languages:

JetBrains Qodana는 2023년 7월 공식 상용 릴리스 이후 코드 품질 커뮤니티에서 화제를 불러일으켰습니다.

Qodana는 팀을 위한 공식 JetBrains 정적 코드 분석 플랫폼으로, JetBrains IDE 및 팀 도구와의 호환성이 뛰어날 뿐만 아니라, 광범위한 고유 검사가 포함되어 있으며, 사용자 경험 전반에서 우수한 고객 지원을 제공합니다.

Qodana가 전 세계적으로 채택되고 있는 지금이 바로, 새로운 기능과 업데이트를 발표하여 팀이 그 어느 때보다 수요가 급증하는 업계에서 소프트웨어 품질을 강화할 수 있도록 도울 수 있는 적기일 것입니다.

팀을 위한 맞춤형 검사를 생성하거나, 규정 준수를 하거나 유지하기 위해 기본적으로 라이선스를 감사하거나, 단순히 코드 분석 결과를 보다 쉽게 탐색하거나, 원하는 것이 무엇이든, Qodana는 2024.1 릴리스에서 이러한 기능과 그 이상을 제공합니다.

Qodana 사용해 보기

목차

FlexInspect
qodana-dotnet에 대한 차이점 분석
바로 사용할 수 있도록 활성화된 라이선스 감사
GitLab 코드 품질 및 BitBucket 코드 분석 지원
IDE 플러그인 UX 개선 사항
qodana.yaml에서 정의되지 않은 경우 선택되는 디폴트 Linter
qodana.yaml 구성 파일의 이름 사용자 지정
데모 예약

FlexInspect – 맞춤형 검사를 작성하는 새로운 방법

팀에는 저마다 코드 품질과 관련된 고유한 요구 사항이 있습니다. 그러나 현재로서는 기본적으로 전체 규칙 범위를 포괄하는 단일 코드 품질 도구가 없으므로, 특정 요구 사항이 있는 팀에게는 빈틈이 생길 수 있습니다.

이제 Qodana의 FlexInspect를 사용하면, 코드나 저장소에 적용하려는 모든 규칙에 대해 맞춤형 코드 검사를 생성할 수 있습니다. 그런 다음 IntelliJ IDEA에서 해당 프로젝트에 대해 또는 CI/CD 파이프라인에서 Qodana를 사용하여 이러한 검사를 실행할 수 있습니다.

Qodana의 맞춤형 코드 검사.
FlexInspect – Qodana의 맞춤형 코드 검사.

이러한 방식으로 코드 베이스와 팀과 관련된 특정 이슈를 파악하고, 시간과 노력을 줄일 수 있습니다.

IntelliJ IDEA 내에서 Kotlin IntelliJ API를 사용하여 맞춤형 검사를 작성하려면 다음 단계를 따르세요.

  • 소스 코드의 AST(추상 구문 트리)에 액세스합니다.
  • 새로운 검사가 코드에서 어떻게 작동되는지 실시간으로 디버그합니다.
  • 예상 동작을 충족하지 않는 코드 세그먼트 강조 표시를 비롯하여, 실제로 실행되는 새로운 맞춤형 검사를 관찰합니다.

이 기능을 사용하면 모든 IntelliJ 및 Qodana 검사에서 사용되는 API인 PSI에 액세스하고, 필요할 수 있는 추가적인 맞춤형 검사를 구현할 수 있습니다.

IntelliJ IDEA PSI 뷰어를 사용하여 코드의 AST에 액세스하는 방법은 다음과 같습니다.

강화된 코드 품질 및 코드 검토의 맞춤형 검사를 위한 PSI 뷰어

PSI 뷰어.

FlexInspect에서는 Java, Kotlin, JavaScript, TypeScript, PHP, Go, Python, Ruby, SQL, XML, CSS, YAML, JSON, shell, Dockerfile을 비롯한 다양한 언어로 코드를 분석할 수 있습니다. 이 목록을 늘리기 위해 노력하고 있으니, 계속 지켜봐 주시기 바랍니다!

참고: 맞춤형 검사를 구현하려면 Kotlin으로 코드를 작성해야 합니다. 즉, IntelliJ IDEA Ultimate을 사용해야 합니다.

또한 FlexInspect의 첫 릴리스이므로, 문제가 발생할 경우 언제든지 지원 팀에 문의해 주세요. qodana-support@jetbrains.com으로 문의하여 지원을 받거나, Qodana 이슈 트래커에 버그 보고서를 제출하세요.

Qodana for .NET에 추가된 차이점 분석

이제 전체 코드 베이스를 스캔하는 대신 QDnet linter를 사용하여 원할 때만 병합 및 풀 리퀘스트를 분석할 수 있습니다.

이 모드를 사용하여 변경 세트(예: 병합 또는 풀 리퀘스트)에서 증분 또는 차이점 분석을 실행할 수 있습니다. qodana-github-action 사용자의 경우 이 변경 사항이 자동으로 적용됩니다.

상황별 사용 방법:

“방금 커밋을 마쳤고 변경 사항을 분석하고 싶습니다.”

qodana scan --diff-start=$GIT_START_HASH

“두 커밋 간에 일련의 변경 사항을 분석하고 싶습니다.”

qodana scan --diff-start=$GIT_HASH_START --diff-end=$GIT_HASH_END

“CI 실행에 Qodana GitHub 액션을 사용하고 있습니다.”

자동으로 작동됩니다.

참고: 이 기능은 유료 Qodana for .NET linter에서만 지원되며, Qodana for .NET Community linter에서는 지원되지 않습니다.

기본적으로 활성화된 라이선스 감사

알맞은 도구가 없다면 규정 준수는 악몽이 될 수 있습니다. 이와 같은 이유로, 라이선스 감사 기능이 사용자에게 인기가 높습니다. 이제 License Audit(라이선스 감사) 기능이 기본적으로 활성화됩니다(일반적으로 이 기능을 지원하는 유일한 라이선스인 Ultimate Plus 라이선스가 있는 경우).

Qodana가 해당 프로젝트 종속성 라이선스에 대해 찾은 모든 정보는 Qodana Cloud에서 해당 프로젝트의 License Audit 탭에 자동으로 표시되므로, 이를 실행하기 위해 분석을 구성할 필요가 없습니다.

또한 기존 라이선스 감사 사용자가 전체 문제 목록 대신 Qodana Cloud UI 탭에서 감사 이슈를 볼 수 있도록 만들었습니다. 여러분과 팀이 전반적인 문제에서 라이선스 이슈를 계속 확인하고 싶다면 적절하게 구성을 업데이트하시기 바랍니다.

코드 검토 및 코드 보안에 대한 라이선스 감사.

Qodana License Audit.

GitLab 코드 품질 및 BitBucket 코드 인사이트 지원(풀 리퀘스트 데코레이션)

2024.1부터 Qodana linter는 BitBucket Pipelines 및 GitLab CI에 대한 풀 리퀘스트 데코레이션을 지원합니다. 이전에는 GitHub Actions에만 이 기능을 사용할 수 있었습니다.

이제 Qodana는 GitHub Actions, GitLab CI 및 BitBucket Pipelines에 대한 풀 리퀘스트 또는 병합 요청 인터페이스 내에서 바로 코드 품질에 대한 자동화된 인사이트를 통해 코드 검토를 개선할 수 있습니다.

이와 같은 통합 덕분에, 풀 리퀘스트 또는 병합 요청에서 바로 문제 설명 및 가능한 해결책 또는 권장 사항을 확인하고 이슈가 감지된 특정 코드 줄에 액세스할 수 있습니다.

이 기능을 활성화하는 방법:

    스크립트:

 - qodana --results-dir=$CI_PROJECT_DIR/.qodana/results
            --cache-dir=$CI_PROJECT_DIR/.qodana/cache

  아티팩트:

        보고서:

     codequality: .qodana/results/gl-code-quality-report.json

qodana.yaml을 통해 정의되지 않은 경우 디폴트 linter 선택

JVM 및 Python 프로젝트에 대한 디폴트 linter 선택이 변경되었습니다. 기능이 풍부한 최고급 분석 기능을 사용자에게 제공하기 위해, 이제 Qodana는 Community 버전의 linter(JVM 프로젝트용 QDJVMC 및 Python 프로젝트용 QDPYC) 대신 Ultimate 버전의 linter(각각 QDJVM 및 QDPY)를 기본적으로 사용합니다.

이와 같은 변경에 따라, qodana.yaml 구성이 특정 linter 버전을 지정하지 않고 Qodana Cloud 토큰이 제공되지 않은 경우, Ultimate 버전이 자동으로 사용되므로 Qodana의 모든 기능을 이용할 수 있습니다.

Community 버전을 선호하는 경우 Qodana 2024.1로 업그레이드한 후 사용 버전의 변경을 방지하려면 qodana.yaml 파일에서 이를 명시적으로 정의해야 합니다.

IDE 플러그인용 UX 개선

  1. Qodana 강조 표시가 더 이상 IDE 강조 표시와 중복되지 않습니다. IDE가 이미 Qodana 보고서의 문제를 강조 표시한 경우 Qodana 플러그인은 이 문제를 강조 표시하려고 시도하지 않습니다.
  2. Qodana 보고서에 나열된 문제 중 하나를 수정하거나 관련 코드 조각을 조정하면 Qodana 플러그인이 보고서에서 문제 상태를 Fixed(수정됨)(수정된 경우) 또는 Not found(찾을 수 없음)(관련 코드 조각이 제거된 경우)로 자동으로 업데이트합니다.

    이러한 방식으로, 보고서에서 어떤 문제가 해결되었는지 바로 확인하고 나머지 작업을 계속 진행할 수 있습니다.

문제 심각도에 따른 품질 게이트 구성

낮은 심각도 이슈로 인한 빌드 실패를 원하지는 않으실 겁니다. 다행히 이제 빌드 실패를 정교하게 조정할 수 있습니다.

Qodana Community for .NET을 제외한 모든 linter에서는 각각의 문제 심각도에 대해 별도의 품질 게이트를 구성할 수 있으며, 한 가지 설정 제한만 초과해도 총 문제 수를 포함한 빌드 실패가 발생하게 됩니다. qodana.yaml 심각도 구성의 예는 다음과 같습니다.

failureConditions:
  severityThresholds:
    any:  # Total problems
    critical:  # Critical and other severities
    high: 
    moderate: 
    low: 
    info: 

사용자 지정 qodana.yaml 파일의 매개변수

2024.1 버전은 동일한 저장소에서 다양한 구성으로 여러 Qodana 빌드를 실행하는 프로세스를 간소화합니다.

이전 버전에서 Qodana linter는 구성을 유지하고 linter의 작동 방식(실행되는 검사 세트, 분석해야 하는 폴더 및 파일 등 포함)을 정의하는 qodana.yaml 파일을 사용했습니다.

따라서 다른 구성을 사용하여 linter로 CI 작업을 실행하려면 qodana.yaml 파일을 교체해야 했습니다.

또한, 예를 들어 JavaScript, PHP 및 Python이 포함된 모노레포가 있고 linter별로 각각 세 가지 작업을 실행한 경우, 서로 다른 qodana.yaml 파일을 사용하고 싶어도 이전에는 그렇게 할 수 없었습니다.

Qodana 2024.1부터는 어떠한 파일 이름이든 사용할 수 있으며 이를 매개변수로 전달하면 됩니다. 이제 모든 linter는 어떠한 파일이든 구성으로 전달할 수 있는 config라는 선택적 매개변수를 제공합니다.

사용 예시:

#qodana-cli
qodana scan --config custom.qodana.yaml

#qodana docker
docker run \
  -v :/data/project \
  -v :/data/results \
  jetbrains/qodana-jvm:2024.1 \
  --config .qodana/license-check.qodana.yaml

이는 현재 가장 중요한 내용 중 일부일 뿐이며, 더 많은 기능이 곧 제공될 예정입니다. 누락되었다고 생각되는 새로운 기능을 원하시면 Qodana YouTrack 보드에서 알려 주시기 바랍니다. 자세한 내용은 전체 Qodana 2024.1 릴리스 문서를 참조해 주세요.

가장 먼저 최신 소식을 확인하세요

TwitterLinkedIn에서 Qodana를 팔로우하거나 Qodana 블로그에서 제품의 새로운 소식을 가장 먼저 보고 해당 지역이나 온라인 상에서의 특별 행사를 확인하세요.

Qodana 데모 예약하기

게시물 원문 작성자

Jessie Cho

Kerry Beetge

Qodana Advocate, Tech Journalist and IoT enthusiast.

image description

Discover more