λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
CICD

[CI/CD] SonarQubeλž€?

by The Future Engineer, Lucy 2025. 1. 22.
728x90
λ°˜μ‘ν˜•

μ†Œλ‚˜νλΈŒλŠ” 정적 μ½”λ“œ 뢄석 도ꡬ 쀑 ν•˜λ‚˜λ‘œ μš°μ„  정적 뢄석에 λŒ€ν•΄ κ°„λ‹¨ν•˜κ²Œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


정적 λΆ„μ„μ΄λž€?

정적 뢄석은 ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜μ§€ μ•Šκ³  μ†ŒμŠ€ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ 검사함여 μˆ˜ν–‰ν•˜λŠ” 뢄석 λ°©λ²•μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” μ½”λ“œ λ² μ΄μŠ€μ— λŒ€ν•œ 이해λ₯Ό μ œκ³΅ν•˜κ³  μ½”λ“œ λ² μ΄μŠ€κ°€ κ·œμ •μ„ μ€€μˆ˜ν•˜κ³  μ•ˆμ „ν•˜λ„λ‘ 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

정적 뢄석 μ£Όμš” νŠΉμ§•

ꡬ뢄 λ‚΄μš©
μ½”λ“œ 검사 μ½”λ“œμ˜ 문법, μŠ€νƒ€μΌ, 잠재적 버그, λ³΄μ•ˆ 취약점 등을 μ°ΎκΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ λ™μž‘μ„ μ΄ν•΄ν•˜μ§€ μ•Šκ³ λ„ κ°€λŠ₯ν•œ μΌμž…λ‹ˆλ‹€.
도ꡬ μ‚¬μš© 정적 뢄석을 μˆ˜ν–‰ν•˜λŠ” 도ꡬ듀이 μžˆμŠ΅λ‹ˆλ‹€.
μžλ™ν™” 정적 뢄석 λ„κ΅¬λŠ” 지속적 톡합(CI) μ‹œμŠ€ν…œμ— ν†΅ν•©λ˜μ–΄ μžλ™μœΌλ‘œ μ½”λ“œ ν’ˆμ§ˆμ„ 검사할 수 μžˆμŠ΅λ‹ˆλ‹€.
초기 발견 μ½”λ“œ μž‘μ„± 초기 λ‹¨κ³„μ—μ„œ 버그와 λ³΄μ•ˆ 취약점을 λ°œκ²¬ν•  수 μžˆμ–΄, 개발 λΉ„μš© 절감과 μ½”λ“œ ν’ˆμ§ˆ ν–₯상에 κΈ°μ—¬ν•©λ‹ˆλ‹€.
예방 잠재적 문제λ₯Ό 미리 μ˜ˆλ°©ν•  수 μžˆμ–΄, μ‹€μ œ μ†Œν”„νŠΈμ›¨μ–΄ 릴리슀 전에 μ‹¬κ°ν•œ 문제λ₯Ό 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

SonarQubeλž€?

μ†Œλ‚˜νλΈŒλŠ” μ˜€ν”ˆ μ†ŒμŠ€ 기반의 정적 μ½”λ“œ 뢄석 λ„κ΅¬λ‘œ, μ½”λ“œ ν’ˆμ§ˆκ³Ό λ³΄μ•ˆμ„±μ„ κ΄€λ¦¬ν•˜κ³  κ°œμ„ ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. 이 λ„κ΅¬λŠ” Java, JavaScript, Python, C, C++ λ“± 20개 μ΄μƒμ˜ μ–Έμ–΄ μ§€μ›ν•˜λ©°, 개발 쀑 λ°œμƒν•  수 μžˆλŠ” μ½”λ“œ 결함, λ³΄μ•ˆ 취약점, μœ μ§€λ³΄μˆ˜μ„±μ„ μ €ν•΄ν•˜λŠ” 문제λ₯Ό μ‹λ³„ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 νŒ€μ€ λ”μš± μ‹ λ’°μ„± 있고 ν’ˆμ§ˆ 높은 μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ†Œλ‚˜νλΈŒλŠ” Continuous Inspection을 μ œκ³΅ν•˜λ©°, μ½”λ“œκ°€ 변경될 λ•Œ λ§ˆλ‹€ μ‹€μ‹œκ°„μœΌλ‘œ ν’ˆμ§ˆμ„ μ κ²€ν•˜κ³  뢄석 λ³΄κ³ μ„œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œ ν’ˆμ§ˆμ„ μ§€μ†μ μœΌλ‘œ μœ μ§€ν•˜κ³ , ν”„λ‘œμ νŠΈ 기술 뢀채λ₯Ό μ€„μ΄λŠ” 데 κΈ°μ—¬ν•©λ‹ˆλ‹€.

SonarQube μ£Όμš” νŠΉμ§•

  • 정적 μ½”λ“œ 뢄석 지원
  • λ‹€μ–‘ν•œ μ–Έμ–΄ 지원
  • λŒ€μ‹œ λ³΄λ“œ 및 λ³΄κ³ μ„œ 지원
  • 지속적인 톡합 지원
  • ν™•μž₯μ„±κ³Ό μ»€μŠ€ν„°λ§ˆμ΄μ§•

SonarQube κ΅¬μ„±μš”μ†Œ

1. ν’ˆμ§ˆ 게이트(Quality Gate)

μ†Œν”„νŠΈμ›¨μ–΄μ˜ ν’ˆμ§ˆμ„ ν‰κ°€ν•˜κ³  κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ 기쀀을 μ„€μ •ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. μ½”λ“œκ°€ 릴리즈 될 수 μžˆλŠ”μ§€μ— λŒ€ν•΄ 진행/λΆˆκ°€λ₯Ό μ œκ³΅ν•˜λŠ” 기쀀이 λ˜λŠ” 'μ½”λ“œ ν’ˆμ§ˆ μ§€ν‘œ'λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

μ—¬λŸ¬ 가지 κΈ°μ€€μœΌλ‘œ κ΅¬μ„±λ˜λŠ”λ°, 일반적으둜 μ½”λ“œ 컀버리지, μ½”λ“œ λ³΅μž‘μ„±, 버그 및 μ·¨μ•½μ μ˜ 수, μ½”λ“œ μŠ€νƒ€μΌ 등이 ν¬ν•¨λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 기쀀을 ν”„λ‘œμ νŠΈμ˜ μš”κ΅¬ 사항과 ν‘œμ€€μ„ μΆ©μ‘±μ‹œν‚€κΈ° μœ„ν•΄ 쑰정될 수 μžˆμŠ΅λ‹ˆλ‹€.

2. SonarScanner

μ†ŒμŠ€ μ½”λ“œ ν’ˆμ§ˆμ„ λΆ„μ„ν•˜κ³  정적 뢄석 λ³΄κ³ μ„œλ₯Ό μƒμ„±ν•˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€. μ½”λ“œ 쀑볡, μ½”λ”© κ·œμΉ™ μ€€μˆ˜, μ„±λŠ₯ 문제, λ³΄μ•ˆ 취약점 등을 μ‹λ³„ν•˜μ—¬ κ°œλ°œμžμ—κ²Œ μ½”λ“œ ν’ˆμ§ˆμ„ κ°œμ„ ν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€. λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž˜λ° 언어와 ν†΅ν•©λ˜μ–΄ μ‚¬μš©ν•  수 있으며, μžλ™ν™”λœ 정적 뢄석을 μˆ˜ν–‰ν•˜μ—¬ μ½”λ“œ ν’ˆμ§ˆμ„ μ§€μ†μ μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

SonarScannerλ₯Ό μ΄μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” SonarQube λ˜λŠ” SonarCloud와 같은 SonarSource의 정적 뢄석 ν”Œλž«νΌμ΄ ν•„μš”ν•©λ‹ˆλ‹€. μ†ŒμŠ€ μ½”λ“œλ₯Ό κ²€μƒ‰ν•˜κ³  λΆ„μ„ν•œ ν›„, κ²°κ³Όλ₯Ό SonarQube λ˜λŠ” SonarCloud둜 μ „μ†‘ν•˜μ—¬ 뢄석 λ³΄κ³ μ„œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

3. κ·œμΉ™(Rules)

SonarQubeλŠ” μ½”λ“œ ν’ˆμ§ˆ 문제(μ½”λ“œ 슀멜, 버그, 취약점, λ³΄μ•ˆ 취약점 λ“±)을 ν™•μΈν•˜λŠ” 미리 μ •μ˜λœ λ‹€μ–‘ν•œ κ·œμΉ™μ„ κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ κ·œμΉ™μ€ μˆ˜μ • κ°€λŠ₯ν•˜μ—¬ νŒ€μ΄ νŠΉμ • μš”κ΅¬μ— 맞게 맞좀 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ AλΌλŠ” μ½”λ“œ 버그라고 좜λ ₯이 되고 μžˆμ§€λ§Œ 우리 νŒ€μ—μ„œλŠ” AλΌλŠ” λ²„κ·ΈλŠ” ν—ˆμš©ν•˜κΈ°λ‘œ ν–ˆλ‹€λ©΄, ν•΄λ‹Ή Ruleμ—μ„œ μˆ˜μ •μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

4. μ½”λ“œ κ·œμΉ™ μœ ν˜•

SonarQubeλ₯Ό μˆ˜ν–‰ν•˜μ—¬ 리포트λ₯Ό 얻을 경우 μ½”λ“œ κ·œμΉ™ μœ ν˜•μ— λŒ€ν•΄ 좜λ ₯이 λ©λ‹ˆλ‹€. 이에 λŒ€ν•΄ 각각에 λŒ€ν•΄ μ–΄λ–€ λ¬Έμ œμΈμ§€ 확인해보아야 ν•©λ‹ˆλ‹€.

5. 이슈(Issue)

SonarQubeμ—μ„œ 발견된 μ½”λ“œμ˜ 문제 λ˜λŠ” κ°œμ„  사항을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄μŠˆλŠ” λ‹€μ–‘ν•œ μœ ν˜•μ΄ μžˆμ„ 수 있으며, 예λ₯Ό λ“€μ–΄ μ½”λ“œ 쀑볡, μ½”λ”© κ·œμΉ™ μœ„λ°˜, λ³΄μ•ˆ 취약점 등이 μžˆμŠ΅λ‹ˆλ‹€. SonarQubeμ—μ„œ 이슈λ₯Ό μ‹λ³„ν•˜κ³  ν‘œμ‹œν•˜μ—¬ κ°œλ°œμžλ“€μ΄ μ½”λ“œμ˜ 문제λ₯Ό νŒŒμ•…ν•˜κ³  μˆ˜μ •ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.


좜처

정적뢄석

SonarQube

728x90
λ°˜μ‘ν˜•

'CICD' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[CI/CD] CI/CDλž€?  (1) 2025.01.16
[CI/CD] Docker둜 Jenkins μ„€μΉ˜ν•˜κΈ°  (0) 2025.01.11