SonarQube와 GitHub Actions로 정적 코드 품질 관리하기
by rowing0328Intro
이번 글에서는 SonarQube를 Docker Compose를 이용해 실행하는 방법과 GitHub App과의 연동을 통해 코드 분석 환경을 자동화하는 과정을 다룬다.
이를 통해 안정적이고 효율적인 코드 분석 환경을 구축하는 방법을 배운다.
정적 코드 분석이란
정적 코드 분석은 소프트웨어를 실행하지 않고 코드 자체를 분석하여 잠재적인 결함, 보안 취약점, 코드 스멜(Code Smell) 등을 발견하는 방법이다.
다만, 코드 실행 없이 이루어지기 때문에 메모리 누수, 스레드 경쟁, 성능 문제와 같은 런타임 오류를 발견할 수 없다는 한계가 있다.
반면, 동적 코드 분석은 소프트웨어를 실제로 실행하면서 코드의 동작을 분석하여 런타임 문제를 식별하는 방법이다.
이를 통해 메모리 사용, 스레드 동기화, 성능, 보안 취약점 등 실행 중에 발생하는 다양한 문제를 발견할 수 있다.
Docker Compose로 SonarQube 실행
SonarQube는 기본적으로 H2 데이터베이스를 사용하지만, 안정적인 운영을 위해 PostgreSQL을 사용한다.
컨테이너 환경에서 실행하기 위해 아래와 같은 docker-compose.yml 파일을 작성한다.
docker-compose.yml
services:
sonarqube:
image: sonarqube:community
hostname: sonarqube
container_name: sonarqube
read_only: true
depends_on:
postgresql:
condition: service_healthy
environment:
SONAR_JDBC_URL: jdbc:postgresql://postgresql:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- ./sonarqube_data:/opt/sonarqube/data
- ./sonarqube_extensions:/opt/sonarqube/extensions
- ./sonarqube_logs:/opt/sonarqube/logs
- ./sonarqube_temp:/opt/sonarqube/temp
ports:
- "9000:9000"
networks:
- ${NETWORK_TYPE:-ipv4}
postgresql:
image: postgres:15
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
hostname: postgresql
container_name: postgresql
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- ./postgresql:/var/lib/postgresql
- ./postgresql_data:/var/lib/postgresql/data
networks:
- ${NETWORK_TYPE:-ipv4}
networks:
ipv4:
driver: bridge
enable_ipv6: false
environment
- SONAR_JDBC_URL: jdbc:postgresql://postgresql:5432/sonar
PostgreSQL 데이터베이스에 연결하기 위한 JDBC URL - SONAR_JDBC_USERNAME: sonar
PostgreSQL 사용자 이름 - SONAR_JDBC_PASSWORD: sonar
PostgreSQL 비밀번호
networks
- ${NETWORK_TYPE:-ipv4}
`:-ipv4`는 기본값을 설정하는 연산자이다.
SonarQube & GitHub App 연동
1. SonarQube에 로그인 (http://your-ec2-ip:9000)
- 초기 아이디 & 비밀번호 : admin
2. developer setting 클릭한다.
3. new github app 클릭하고, App name과 프로젝트 Homepage URL를 작성한다.
4. Callback URL의 경우 SonarQube의 퍼블릭 ip를 설정한다.
5. Permissions Access를 아래와 같이 설정한다.
- Repository
Checks - Read and write
Issues - Read and write
Metadata - Read-only
Pull requests - Read and write
Commit statuses - Read-only
Contents - Read-only
Workflows - Read and write
- Organization
Members - Read-only
Projects - Read-only
- Account (OAuth 로그인 필요로 하는 경우)
Email address - Read-only
6. Import from GitHub Setup 클릭하고, 필수 항목을 입력한다.
- GitHub API URL, App ID, Clinet ID & Secret, Private Key는 GitHub App Setting을 참고하자.
7. Choose an organization의 프로젝트를 선택 후, 희망하는 저장소를 import 한다.
8. 아래 선택은 상황에 맞게 하자!
9. 추가된 저장소를 선택하고, With GitHub Actions 클릭 후, GitHub Secrets를 아래 내용을 참고해 생성한다.
10. 아래 내용을 참고해 Workflow YAML과 gradle을 추가한다.
마무리
SonarQube와 GitHub Actions를 연동하면서,
코드 품질 관리와 자동화를 통해 개발 효율성을 크게 높일 수 있었다.
특히, Docker Compose로 환경 구성을 간소화하고,
GitHub Secrets를 활용해 보안성을 유지하며 워크플로우를 구축한 점이 유익했다.
다음 포스팅에서는 Jacoco 연동을 통해 테스트 커버리지를
SonarQube로 스스로 검증하는 시간을 가져보겠다.
참고 자료 :
SonarQube - GitHub Offical integration
'📌ETC > Development Log' 카테고리의 다른 글
Testcontainers를 활용한 AWS S3 테스트 환경 구성하기 (2) | 2025.01.20 |
---|---|
Spring Boot와 LocalStack으로 AWS S3 테스트 환경 구성하기 (0) | 2025.01.20 |
Spring Boot와 AWS S3 & CloudFront로 파일 관리 설계하기 (0) | 2025.01.16 |
K6와 InfluxDB를 활용한 성능 테스트 및 모니터링 설계하기 (2) | 2025.01.02 |
Prometheus와 Grafana 활용한 Spring Boot 모니터링 설계하기 (0) | 2025.01.02 |
블로그의 정보
코드의 여백
rowing0328