블로그

지속적 통합에서 IntelliJ 검사 실행하기

February 15, 2021
앨런 리처드슨
노트북으로 코딩하는 손과 화면에 표시된 텍스트: Sensei로 마스터하는 안전한 코딩.

지속적 통합에서 IntelliJ 검사 실행하기

IntelliJ IDEA는 코드를 작성할 때 인텐션(Intentions)을 통해 코딩 개선을 돕는 기능을 제공합니다. 인텐션은 배치 모드에서 소스 코드 전체의 패턴을 검사하는 데 사용할 수 있으며, 명령줄 분석으로 확장하거나 지속적 통합에 추가할 수도 있습니다. 이 게시물에서는 IntelliJ의 기본 기능과 Sensei로 생성한 사용자 지정 인텐션을 활용한 확장 방법을 다룹니다.

‍

IntelliJ 검사

IntelliJ의 검사(Inspections) 기능은 코딩 시 IDE에서 동적으로 보고되는 많은 오류를 표시합니다. 예:

  • 인터페이스로 변환 가능한 추상 클래스 감지,
  • 로컬로 변경 가능한 중복 클래스 필드 식별,
  • 사용 중단된 메서드 사용에 대한 경고,
  • 기타 등등.


이러한 검사는 IDE에서 일치하는 코드를 인텐션 액션으로 강조 표시하며, 종종 관련 퀵픽스(QuickFix)를 제공합니다.


Inspection Deprecated Api Usage Options


코드와 검사 항목이 일치할 때 실시간으로 IDE에서 강조 표시되는 기능은 코딩을 동적으로 개선하는 데 도움을 줍니다. 코드에서 문제를 식별한 후, IntelliJ 인텐션 액션을 사용하여 퀵픽스를 적용하면 더 나은 코딩 패턴을 익힐 수 있습니다.

검사 프로필

검사는 IDE 내에서 배치 모드로 실행할 수 있으며, 명령줄이나 지속적 통합 프로세스에서도 실행 가능합니다.

IntelliJ 검사를 배치 모드로 활용하는 핵심은 검사 프로필(Inspections Profile)을 사용하는 것입니다.

IntelliJ에는 프로젝트에 저장되는 프로필과 IDE에 저장되는 프로필, 두 가지 기본 검사 프로필이 있습니다.

특정 플러그인이나 사용 사례를 구성하기 위해 새로운 검사 프로필을 생성할 수 있습니다. 예:

  • Checkstyle 실시간 스캔만 실행
  • 특정 Sensei 규칙 세트 실행
  • HTML 검사 실행

프로필 내의 검사 항목은 IntelliJ 환경 설정에서 활성화하거나 비활성화할 수 있습니다. 환경 설정 대화 상자는 사용 가능한 다양한 검사 항목을 파악하는 데도 유용합니다.


Inspections Usage Of Api Marked For Removal


'도구' 아이콘을 사용하면 프로필을 복제하여 특정 규칙 세트를 모아둘 새로운 프로필을 만들 수 있습니다.


Tool Icon To Duplicate A Profile


IDE에서 검사 프로필 실행하기

검사 프로필(Inspection Profiles)은 IDE 내의 `Analyze \ Inspect Code...` 메뉴를 통해 실행할 수 있습니다.


Run An Inspection Profile Using The Analyze Or Inspect Code


분석 기능을 사용하면 전체 프로젝트, 테스트 소스 포함/제외 여부, 또는 특정 파일 세트 등 검사가 실행될 범위를 제어할 수 있습니다.


Specify Inspection Scope


여기에서 검사 프로필을 관리하여 특정 프로필을 생성하거나 구성할 수도 있습니다.


“Specify Inspection Scope” 대화 상자에서 [OK]를 클릭하면 IntelliJ가 정의된 범위 내에서 프로필에 선택된 모든 검사를 실행합니다.

IntelliJ는 `Inspection Results` 탭에서 검사 실행 결과를 보고합니다.


IntelliJ Report The Results Of Running The Inspections In Inspection Results Tab


Secure Code Warrior의 Sensei 플러그인을 사용하면 사용자 지정 코드 매칭 레시피를 만들 수 있습니다. Sensei는 IntelliJ와 긴밀하게 통합되어 이러한 사용자 지정 레시피를 IntelliJ의 Intention Actions처럼 자연스럽게 사용할 수 있게 해줍니다. 즉, 레시피가 검사 항목으로 IntelliJ에 로드되며 검사 프로필을 사용하여 그룹화, 활성화 및 비활성화할 수 있습니다. 사용자 지정 검사 프로필을 생성한 다음 Analyze Inspect Code 기능을 사용하는 것이 프로젝트 전체에서 Sensei 레시피를 일괄 실행하는 권장 방법입니다.



명령줄에서 검사 프로필 실행하기

IntelliJ는 JetBrains 문서에 설명된 대로 명령줄에서 검사를 실행하는 기능을 제공합니다:

- https://www.jetbrains.com/help/idea/working-with-the-ide-features-from-command-line.html


저는 주로 macOS를 사용하며, 다음 명령어로 명령줄에서 IntelliJ 인스턴스를 실행할 수 있습니다:

open -na "IntelliJ IDEA CE.app"


더 쉽게 실행하기 위해 이 명령어를 셸 스크립트에 추가합니다.

vi /usr/local/bin/idea


스크립트 내용은 IntelliJ에서 제공하는 공식 문서를 따릅니다.

#!/bin/sh
open -na "IntelliJ IDEA CE.app" --args "$@"



그런 다음 이 파일을 실행 가능하게 만들어 명령줄 검사 과정을 간소화했습니다.

chmod 755 /usr/local/bin/idea


공식 IntelliJ 문서에서는 검사 명령의 일반적인 형식을 다음과 같이 설명합니다:

idea inspect <project> <inspection-profile> <output></output></inspection-profile></project>
[<options>]</options>


실제로는 경로를 전체 경로로 지정하며 별도의 옵션은 필요하지 않습니다:

idea inspect /Users/user/GitHub/sensei-blog-examples /Users/user/GitHub/sensei-blog-examples/.idea/inspectionProfiles/senseiprofile.xml /Users/user/GitHub/sensei-blog-examples/scan-results

`senseiprofile`에 추가한 모든 검사를 실행하고 그 결과를 `scan-results` 폴더에 저장합니다.

Computer file explorer showing scan-results folder with multiple XML files and output.json file.


검사 결과 확인하기

나중에 살펴보겠지만, 지속적 통합(CI) 환경 내에서 이러한 결과를 보고할 수 있습니다.

또한 IntelliJ의 `Analyse \ View Offline Inspection Results…` 기능을 사용하여 IDE 내에서 직접 확인할 수도 있습니다.


Analyze View Offline Inspection Results


이 기능을 사용하면 `Inspection Results` 탭으로 결과가 로드됩니다.


Loads Results Into The Inspection Results Tab


관련 공식 문서는 JetBrains 사이트에서 확인할 수 있습니다:

- https://www.jetbrains.com/help/idea/command-line-code-inspector.html#inspection-results


명령줄 실행을 지속적 통합 프로세스에 통합하고 검토자가 검사 결과 항목의 전체 소스 컨텍스트를 확인해야 하는 경우, 코드 리뷰 과정에서 이 방법을 활용할 수 있습니다.

지속적 통합에서의 검사 프로필

명령줄 검사를 지속적 통합에 추가할 때는 보고서가 자동으로 생성되는 것이 이상적이며, 이를 위해 활용할 수 있는 여러 옵션이 있습니다.

TeamCity는 지속적 통합 환경에서 검사 프로필을 사용할 수 있도록 기본 지원을 제공합니다.

- https://www.jetbrains.com/help/teamcity/inspections.html


Jenkins Warnings NG 플러그인은 IntelliJ 검사의 명령줄 출력을 보고서 형식 중 하나로 지원합니다.

- https://github.com/jenkinsci/warnings-ng-plugin

- https://github.com/jenkinsci/warnings-ng-plugin/blob/master/SUPPORTED-FORMATS.md


다른 CI 도구에서 검사 프로필을 사용할 수 있도록 지원하는 `idea CLI Inspector`와 같은 커뮤니티 프로젝트도 존재합니다.

- https://github.com/bentolor/idea-cli-inspector


JetBrains Qodana 프로젝트의 도입으로 CI 프로세스에서 검사 프로필의 미래는 더욱 밝아 보입니다. Qodana 프로젝트는 공식 GitHub Actions 및 Docker 이미지를 제공하는 IntelliJ의 헤드리스 버전입니다.

- https://github.com/JetBrains/Qodana


Qodana는 현재 베타 버전이지만, Sensei 팀은 이를 지속적 통합(CI)의 일부로 Sensei 규칙을 실행할 수 있는 공식 지원 플랫폼으로 만들기 위해 모니터링하고 있습니다.


요약

Intention Actions를 사용하면 코딩 패턴을 강화하고 코딩 중 실수가 발생했을 때 IDE에서 즉시 수정할 수 있습니다.

Inspection Profiles를 사용하면 이러한 항목을 프로필로 수집하여 '코드 분석 및 검사(Analyze and Inspect Code)' 작업으로 일괄 실행할 수 있습니다. 이는 특정 패턴을 발견했을 때 코드 내 다른 곳에서 놓친 부분이 없는지 다시 확인하고 싶을 때 유용합니다.

Inspection Profiles는 명령줄에서 실행할 수 있으며, 지속적 통합 프로세스에 통합하여 '신뢰하되 검증하는' 모델을 지원하고 실수로 인한 오류를 방지할 수 있습니다.

위의 모든 기능은 IntelliJ에 내장되어 있으며, JetBrains는 Qodana 도입을 통해 지속적 통합 프로세스를 개선하고 있습니다.


Sensei 레시피는 IntelliJ에 로드되어 기본 Intention Actions로 작동하며, Inspection Profiles로 수집되어 '코드 검사(Inspect Code)'를 통한 일괄 확인과 JetBrains 공식 명령줄 실행 기능을 통한 지속적 통합을 지원합니다.

---


IntelliJ 내에서 "Preferences \ Plugins"(Mac) 또는 "Settings \ Plugins"(Windows)를 통해 Sensei를 설치할 수 있으며, "sensei secure code"를 검색하면 됩니다.

명령줄에서 IntelliJ 프로젝트를 실행해 보고 싶다면, 이 게시물에서 사용된 프로젝트를 Secure Code Warrior GitHub 계정의 `sensei-blog-examples` 저장소에서 찾을 수 있습니다. Sensei 규칙만 실행하는 프로필을 직접 만들어 보는 연습을 해보세요. 지금 바로 시도해 보세요:


https://github.com/securecodewarrior/sensei-blog-examples

Sensei에 대해 더 알아보기


태그라인

배포 전 AI 기반 개발 거버넌스 확보

AI 기반 위험을 측정하고, 커밋 시점에 보안 코딩 정책을 적용하며, SDLC 전반에 걸쳐 안전한 소프트웨어 제공 속도를 높이세요.

데모 예약하기
리소스 라이브러리

더 많은 블로그 살펴보기

보안 코딩, AI 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.

전체 보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

하나의 보안 문화: Sage는 어떻게 챔피언 프로그램을 구축했는가

Sage가 유연하고 관계 중심적인 접근 방식을 통해 보안을 강화하고, 200명 이상의 보안 챔피언을 양성하며 실질적인 위험 감소를 달성한 사례를 확인해 보세요.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

2026년 사이버 보안 인식의 달: 기업 방어의 핵심, AI 보안 이해하기

주요 AI 기업 대부분이 안전 가이드라인이 마련될 때까지 AI 개발 속도를 전 세계적으로 늦춰야 한다고 공개적으로 촉구하는 시점에 이르렀지만, 사실 심각한 보안 문제는 이미 현실화되었습니다. 이로 인해 AI 도입에 따른 금전적 비용과 위험 부담이 계속 쌓이면서 수많은 보안 책임자와 경영진이 절박한 상황에 놓였습니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

인에이블러 8: 프로그램 브랜딩

성공적인 보안 코딩 프로그램을 위해서는 훌륭한 콘텐츠 그 이상의 것이 필요합니다. 인에이블러 8에서는 브랜딩을 통해 참여를 누구나 선망하는 위상 중심의 경험으로 바꾸는 방법을 알아봅니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

이제 모든 직원이 AI 사이버 보안의 최전선에 있습니다

엔터프라이즈 기술 환경은 너무 늦기 전까지는 아무도 예상하지 못한 속도로 변화하고 있습니다. 우리는 공식적으로 사람이 직접 작성한 코드와 기본적인 코파일럿 지원의 시대를 지나 '에이전트 기반 개발 수명 주기(ADLC)'의 시대로 진입했습니다. 자율형 AI 에이전트는 여러 기능 전반에 걸쳐 전례 없는 효율성을 약속하지만, 동시에 완전히 새로운 차원의 보안 및 규제 위험을 야기합니다.

더 알아보기

배포 전 AI 기반 개발 보안 확보

소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.

데모 예약하기
항목이 없습니다.