[문제] 소프트웨어 품질 보증(SQA: Software Quality Assurance)의 개념과 테스팅과의 차이를 설명하고, 코드 리뷰(Code Review)의 유형 (인스펙션, 워크스루, 피어 리뷰)과 효과적인 코드 리뷰 프로세스를 서술하시오. 또한 정적 코드 분석(Static Code Analysis) 도구의 유형과 CI/CD 파이프라인에서의 품질 게이트(Quality Gate) 적용 전략을 논하시오.
1. SQA 개념과 테스팅과의 차이
SQA(Software Quality Assurance)는 소프트웨어 개발 프로세스 전반에 걸쳐 품질 표준·방법론·절차를 수립하고 준수를 보장하는 활동이다.
| 구분 | SQA | 소프트웨어 테스팅 |
|---|---|---|
| 목적 | 프로세스 품질 보장 (결함 예방) | 제품 결함 발견 (결함 탐지) |
| 범위 | 개발 프로세스 전체 수명주기 | 개발 완료 후 주로 실행 |
| 활동 | 프로세스 감사, 표준 수립, 교육, 코드 리뷰 | 단위·통합·시스템·인수 테스트 실행 |
2. 코드 리뷰 유형 비교
| 유형 | 특성 | 참여자 | 형식성 |
|---|---|---|---|
| 인스펙션 (Inspection) | 가장 공식적인 리뷰. 역할(진행자·작성자·검토자·리코더) 분리. 결함 기록·추적 | 4~6명 팀 | 높음 (Fagan Inspection) |
| 워크스루 (Walkthrough) | 작성자가 직접 코드를 설명하며 참가자가 질문·의견 제시 | 작성자 주도 | 중간 |
| 피어 리뷰 (Peer Review) | 동료 간 1:1 또는 소규모 리뷰. Pull Request 기반 코드 리뷰가 대표 형태 | 2~3명 | 낮음 (비공식적) |
효과적인 코드 리뷰 원칙: ① 200~400줄 이하 단위로 리뷰 ② 60분 미만 집중 ③ 코드 스타일은 Linter 자동화 ④ 승인/변경요청 명확히 ⑤ 개인 비판 아닌 코드 비판
3. 정적 코드 분석 도구 유형
| 유형 | 분석 대상 | 대표 도구 |
|---|---|---|
| SAST (정적 보안 분석) | 소스 코드의 보안 취약점 (SQL Injection, XSS, 하드코딩 비밀번호) | SonarQube, Checkmarx, Semgrep, Snyk Code |
| 코드 품질 분석 | 복잡도, 중복 코드, 코드 스멜, 기술 부채 | SonarQube, ESLint, PMD, Pylint |
| SCA (소프트웨어 구성 분석) | 오픈소스 라이브러리 취약점·라이선스 | Dependabot, Snyk, OWASP Dependency-Check |
| IaC 분석 | Terraform·K8s YAML의 보안 구성 오류 | Checkov, tfsec, KICS |
4. CI/CD 품질 게이트(Quality Gate) 전략
- SonarQube Quality Gate: 코드 커버리지 >80%, 새 취약점 0, 코드 중복 <3% 등 기준 미충족 시 파이프라인 차단
- Shift Left 보안: PR 생성 시 SAST·SCA 자동 실행. 고위험 취약점 발견 시 머지 차단
- 단계별 게이트: 빌드 → 단위 테스트 커버리지 → SAST → 통합 테스트 → DAST → 배포 승인 단계별 통과 조건
- 이진 결정: 게이트는 통과/실패로만 결정. 경고(Warning)는 배포 차단하지 않되 기술 부채 대시보드에 누적 가시화
[ 결론 ]
SQA는 테스팅과 달리 개발 전 과정에서 품질을 예방적으로 보장한다. 코드 리뷰(인스펙션·워크스루·피어 리뷰)는 결함을 조기 발견하고, SAST·SCA·Quality Gate를 CI/CD에 통합하여 코드 품질·보안을 자동으로 검증함으로써 고품질 소프트웨어를 지속적으로 배포할 수 있다.