배포 전에 취약점을 잡아라: 로컬 SonarQube 설정 (파트 2)

발행: (2025년 12월 9일 오후 09:05 GMT+9)
8 min read
원문: Dev.to

Source: Dev.to

소개

정적 애플리케이션 보안 테스트(SAST)는 소프트웨어 보안 개발 라이프사이클(SSDLC) 내에서 중요한 실천으로, 개발자가 코드 개발 단계 초기에 보안 취약점을 식별할 수 있게 해줍니다. SAST 개념을 이해하는 것도 중요하지만, 실제 프로젝트에 효과적으로 구현하는 것이 견고하고 안전한 소프트웨어 제공을 보장합니다.

이번 SAST 시리즈의 두 번째 파트에서는 인기 있는 정적 분석 도구인 SonarQube Cloud를 IntelliJ IDEA에 통합하고 Docker와 함께 실행하는 방법에 초점을 맞춥니다. 다음을 살펴볼 것입니다:

  • SAST를 위한 SonarQube Cloud
  • IntelliJ IDEA를 통한 SonarQube Cloud 로컬 스캔
  • SonarQube 이미지와 Docker Compose를 이용한 로컬 스캔

도구: SonarQube Cloud, Spring Boot, IntelliJ IDEA, Docker‑Compose

전제 조건: IntelliJ IDEA 또는 Spring Boot Initializr 를 사용해 Spring Boot 프로젝트를 생성합니다.

SonarQube Cloud

SonarQube Cloud는 자체 인프라를 관리하지 않고도 정적 코드 분석을 손쉽게 시작할 수 있는 방법을 제공합니다. 클라우드에서 호스팅되는 스캔 기능을 통해 코드 품질, 보안 취약점, 버그 및 코드 냄새를 분석합니다.

  1. 계정 생성 – SonarQube 공식 웹사이트에 방문해 무료 또는 유료 클라우드 계정을 등록합니다.
  2. 새 프로젝트 생성 – 저장소 정보를 입력합니다.
  3. 인증 토큰 생성My Account > Security 에서 토큰을 생성하고 안전하게 보관합니다(예: GitHub Actions 비밀).
  4. 프로젝트 설정 구성 – 품질 게이트, SLA 및 규칙을 보안 정책에 맞게 설정합니다. 무료 계정은 기본 품질 게이트를 사용해야 합니다.

SonarQube Cloud는 상세 보안 보고서와 코드 품질 메트릭을 확인할 수 있는 중앙 허브가 됩니다.

SonarCloud

SonarCloud는 지속적인 정적 코드 분석을 위해 완전 관리형 SaaS 플랫폼으로, 코드 품질 문제, 보안 취약점 및 유지보수 위험을 현대 소프트웨어 프로젝트 전반에 걸쳐 탐지하도록 설계되었습니다. Java, Python, C#, JavaScript, TypeScript, Go 등 30개 이상의 프로그래밍 언어를 지원합니다.

기능

  • 클라우드 호스팅 및 완전 관리형 – 설치, 호스팅, 유지보수가 필요 없습니다. 엄격한 규정 준수가 요구되지 않는 팀에 이상적입니다.
  • SonarSource 관리 – 가동 시간, 확장성, 규칙 업데이트, 언어 분석기 및 보안 패치를 담당합니다.
  • 깊이 있는 정적 분석 – 버그, CWE 기반 및 OWASP 정렬 보안 이슈(예: SQL 인젝션, 경로 탐색, 입력 검증 문제, 하드코딩된 비밀, 명령어 인젝션)를 탐지합니다.
  • 코드 냄새 및 인지 복잡도 – 유지보수 문제를 표시하고 코드 이해 난이도를 측정합니다.
  • 다중 언어 지원 – Java, Python, JavaScript, TypeScript, Go, C#, Kotlin, PHP, Terraform, YAML 등.
  • 원활한 CI/CD 통합 – GitHub Actions, Azure Pipelines, Bitbucket Pipelines, GitLab CI 및 Gradle Sonar 플러그인 등과 네이티브 통합.
  • 풀 리퀘스트 및 브랜치 분석 – PR 리뷰 중 인라인 분석 제공(무료 플랜에서는 사용 불가).

품질 게이트

품질 게이트는 코드를 병합하기 전에 충족해야 할 규칙을 정의합니다. 기본 체크 항목은 다음과 같습니다:

  • 새로운 치명적 또는 차단 이슈가 없음.
  • 최소 코드 커버리지 임계값 충족.
  • 새로운 버그 또는 보안 취약점이 없음.
  • 새로운 코드 중복이 없음.

무료 플랜에서는 사용자 정의 품질 게이트를 지원하지 않습니다.

대시보드 및 알림

  • 중앙 집중식 이슈 추적, 히스토리 트렌드 차트, 핫스팟 보안 검토, 커버리지 진행 상황.
  • GitHub 체크, GitLab 머지 리퀘스트, Slack, 이메일, 웹훅 및 맞춤 확장을 위한 오픈 API를 통한 알림.

IntelliJ IDEA에 SonarQube 플러그인 설치 및 구성

  1. 플러그인 설치

    • IntelliJ IDEA → File > Settings > Plugins 열기.
    • SonarQube를 검색하고 설치합니다. IDE를 재시작합니다.
  2. 인증 토큰 생성

    • SonarCloud 웹사이트 → My Account > Security 로 이동하거나 직접 방문합니다.
    • 토큰 이름을 입력하고 Generate Token을 클릭합니다.
  3. 플러그인 구성

    • SonarQube 플러그인 아이콘 → 톱니바퀴 아이콘 클릭.
    • SonarQube Cloud 서버 URL을 입력하고 생성한 토큰을 붙여넣습니다.
  4. 연결 추가

    • Connection 섹션에서 + 클릭 → 연결 이름 입력 → Next.
    • 토큰을 붙여넣기(또는 이 창에서 생성) → Next.
    • IDE가 연결을 검증하고 성공적인 인증 메시지가 표시됩니다.
  5. 스캔 실행

    • 프로젝트 우클릭 → SonarQube → Analyze All Project Files.
    • 결과가 인라인으로 표시되며, 플러그인이 이슈를 강조하고 상세 보고서 링크를 제공합니다.

로컬 스캔의 장점

  • 보안 및 품질 이슈에 대한 즉각적인 피드백.
  • 취약한 코드를 푸시할 가능성 감소.
  • 개발 워크플로 초기에 문제를 해결함으로써 시간 절약.

Docker Compose와 SonarQube 이미지로 로컬 스캔 수행

SonarQube를 로컬에서 실행하고 싶다면 Docker를 이용해 복잡한 설치 없이 손쉽게 설정할 수 있습니다.

Docker Compose로 SonarQube 로컬 설정

다음 내용을 가진 docker-compose.yml 파일을 생성합니다:

version: "3.9"

services:
  sonarqube:
    image: sonarqube:latest
    ports:
      - "9000:9000"
    environment:
      SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: "true"
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions

volumes:
  sonarqube_data:
  sonarqube_extensions:

프로젝트 루트에 다음 gradle-local.properties 파일을 추가하고 .gitignore에 포함합니다:

systemProp.sonar.qualitygate.wait=true
sonar.projectKey=sonarqube_action

스택을 실행합니다:

docker compose up -d

SonarQube UI는 에서 확인할 수 있습니다. 이제 IntelliJ 플러그인이나 SonarScanner를 통해 로컬 인스턴스로 스캔을 보낼 수 있습니다.

Back to Blog

관련 글

더 보기 »

Show HN: Detail, 버그 파인더

안녕 HN, tl;dr 우리는 버그 파인더를 만들었는데, 특히 앱 백엔드에서 정말 잘 작동하고 있어요. 한번 사용해보고 의견을 보내 주세요! 자세한 이야기는 아래에 있습니다.