Java Kotlin Releases

Qodana 2022.1 버전 출시

Read this post in other languages:
English, Français, 简体中文

JetBrains는 코드 품질 플랫폼인 Qodana에 새로운 기능을 지속적으로 추가하여 개선하고 있습니다. 새로운 기능을 알려드리고자 Qodana 2022.1의 주요 릴리스와 더불어 정기 릴리스 관련 블로그 게시물 연재를 시작하려 합니다.

라이선스 감사는 기본 린터와 별도로 구성해야 하는 추가 린터였으나, 이제 Qodana에서 별도 설정 없이 바로 사용할 수 있습니다. 또한 PHP 및 JVM 린터를 위한 새롭고 유용한 검사가 여러 개 추가되었습니다. 계속해서 자세한 관련 내용을 읽어보세요.

QODANA 시작하기

라이선스 감사

코드에서 올바르지 않거나 부적절한 라이선스가 사용된 경우, 막대한 법률 및 컴플라이언스 벌금을 물어야 할 수 있습니다. Qodana를 사용하여 코드 저장소의 종속성을 스캔하여 라이선스를 검색하고 잠재적 이슈를 확인해 보세요.

Qodana 라이선스 감사 활용 사례

이번 릴리스를 통해 라이선스 감사를 프로젝트에 쉽게 적용하고, CI/CD 파이프라인의 일부로 구성할 수 있습니다. 새로운 라이선스 감사 기능은 Python, Java, Kotlin, PHP 및 JavaScript를 포함한 모든 린터에서 지원됩니다.
라이선스 감사를 활성화하려면 프로젝트 루트의 qodana.yaml 파일에 다음 코드 줄을 추가하세요.

include:
  - name: CheckDependencyLicenses

프로젝트의 특정 종속성을 무시하려는 경우, 다음 줄을 추가하면 됩니다.

dependencyIgnores:
- name: "dependency/name"

라이선스 감사와 관련한 사용자 지정 구성 방법을 자세히 알아보려면 문서 또는 이 블로그 게시물을 참조하여 개발자, 관리자 및 법무팀의 업무 루틴을 간소화할 방법을 살펴보세요.

PHP 검사

Qodana 2022.1 버전은 PhpStorm 2022.1의 모든 신규 검사를 지원합니다. 또한 PHP 린터를 사용하여 파이프라인에 검사를 추가할 수도 있습니다. Qodana는 PhpStorm에서 번들로 제공되므로 Qodana에서 코드 이슈와 관련한 알림이 표시된 경우 IDE에서 자세한 내용을 바로 확인할 수 있습니다.

배열 키 중복

PHP에서 array_merge()의 동작과 + 연산자를 사용한 병합은 동일하지 않습니다. + 연산자를 사용한 병합 시에는 키가 중복된 경우 값이 재정의되지 않으므로, 혼동이나 버그가 발생할 수 있습니다. 따라서 Qodana for PHP는 해당 사례를 강조 표시합니다.

count($array)를 배열 색인으로 사용

배열에 항목을 추가할 때 명시적으로 색인을 지정할 필요가 없습니다. Qodana for PHP가 불필요한 count() 호출에 대한 경고를 표시합니다.

pow() 호출을 **로 바꾸기

PHP 5.6 버전부터 ** 지수 연산자가 지원되었습니다. Qodana for PHP는 PhpStorm에서 기존의 pow() 호출을 ** 연산자로 바꿀 수 있는 빠른 수정(Alt+Enter)을 제안합니다.

읽기 전용 프로퍼티

클래스 내의 읽기 전용 액세스 권한이 있는 private 프로퍼티는 readonly 플래그로 선언할 수 있습니다. Qodana for PHP에서 프로퍼티 선언 업데이트를 제안합니다.

final 클래스 상수

PHP 8.1 버전부터 상수를 final로 선언할 수 있습니다. 따라서 Qodana for PHP는 상속받지 않는 상수가 있으면 경고를 표시하고, final 제어자를 추가하도록 제안합니다. PhpStorm 통합이 지원되므로, 빠르게 IDE로 이동하여 이슈를 해결할 수 있습니다.

역순의 rand 함수 인수

이 검사는 max 인수가 min보다 작을 수 있는 rand 계열의 함수 호출을 강조 표시합니다. 예를 들어, rand(10, 1) 호출은 rand(1, 10) 호출과 동일하지만 mt_rand()의 경우 인수의 순서가 엄밀하게 지정됩니다.

PHPUnit의 잘못된 모의 테스트 대상

Qodana for PHP는 모의 객체에서 private 또는 final 메서드에 액세스하려는 경우 경고를 표시합니다.

불필요한 제어자

이 새로운 검사는 정규식 패턴에 사용되나, 일치 항목에 영향을 미치지 않는 제어자를 보고합니다.

  • 문자를 포함하지 않는 패턴의 /i(대/소문자 구분 없음)
  • 달러 기호를 포함하지 않거나 \m(PCRE_MULTILINE) 제어자를 포함하는 패턴의 /D( PCRE_DOLLAR_ENDONLY).
  • 마침표를 포함하지 않는 패턴의 /s (마침표는 줄 바꿈과 일치)

지원되지 않는 제어자

이 검사는 PHP 버전 7.0 이상에서 사용되지 않는 /e 제어자의 사용 위치를 보고합니다.

Java 및 Kotlin 검사

이번 릴리스는 IntelliJ IDEA 2022.1의 새로운 검사를 Qodana for JVM에 추가했습니다. IntelliJ IDEA 통합이 지원되므로 이슈가 발견되면 IDE에서 바로 오류가 있는 코드를 열어 신속하게 해결할 수 있습니다.

가장 주목할 만한 검사를 살펴보겠습니다.

의심스러운 역참조

Qodana for JVM은 런타임에서 확인할 수 없는 참조를 찾습니다. 이것은 역참조가 어떤 것과도 일치할 수 없음을 의미합니다. 그룹이 역참조 다음으로 정의되거나, 대체 항목의 다른 브랜치에 정의된 경우 역참조를 확인할 수 없습니다.

‘InputStream’과 ‘OutputStream’은 ‘Files’ 메서드로 생성될 수 있습니다

이 검사는 FileInputStreamFileOutputStream 생성자를 각각 Files.newInputStream()Files.newOutputStream()으로 바꿀 수 있는 경우 보고합니다. Files 메서드를 사용하여 생성된 스트림은 일반적으로 스트림 생성자를 사용해 생성된 스트림보다 더 효율적입니다.

대량 ‘Files.readAttributes’ 호출을 다수의 파일 속성 호출 대신 사용할 수 있습니다

이 검사는 isDirectory, isFile, lastModified 또는 length 등 다수의 java.io.File 속성 검사가 연속으로 사용되는 위치를 찾습니다. 이러한 호출은 일괄 Files.readAttributes 호출로 바꿀 수 있습니다. 일반적으로 대량 메서드는 다수의 속성 검사보다 성능이 우수합니다.     

루프는 ‘List.replaceAll()’로 대체될 수 있습니다

이 검사는 List.replaceAll() 호출 하나로 축소할 수 있는 루프를 보고합니다.

자리표시자의 개수가 로깅 호출의 인수 개수와 일치하지 않습니다

Qodana for JVM은 logger.info(\"{}: {}\", key)와 같이 로거 메시지의 {} 자리표시자 개수가 로깅 호출의 다른 인수 개수와 일치하지 않는 SLF4J 또는 Log4j 2 로깅 호출을 보고합니다.

정규 표현식을 단순화할 수 있습니다

이 검사는 단순화 가능한 정규식을 탐지합니다.

디폴트 검사 프로파일을 사용자 지정하거나 완전히 새로운 프로파일을 생성하여 분석 시 특정 검사를 제외할 수 있습니다. 또한 코딩 가이드라인이나 모범 사례에 중요한 검사를 적용할 수도 있습니다. 자세한 정보는 Qodana 문서에서 확인하세요.

지금까지 Qodana 2022.1의 새로운 기능을 설명해 드렸습니다! 릴리스 블로그 게시물이 도움이 되었길 바랍니다. 향후 블로그에 게시할 주제를 제안하거나 비즈니스에 Qodana를 활용할 방법을 알아보려면 이 게시물에 댓글을 남기거나, Twitter 또는 qodana-support@jetbrains.com으로 문의해 주세요.

Qodana 팀

게시물 원문 작성자

Jessie Cho

Anastasia Khramushina

Discover more