JiwonDev

[์ฝ”๋“œ๋ถ„์„๋„๊ตฌ]# 3 SonarLint, SonarQube

by JiwonDev

2021.08.21 - [Backend/Java] - [์ฝ”๋“œ๋ถ„์„ ๋„๊ตฌ]# 1 ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๋ž€?

2021.08.21 - [Backend/Java] - [์ฝ”๋“œ๋ถ„์„๋„๊ตฌ]#2 Jacoco ์ ์šฉํ•˜๊ธฐ

 

# ์ •์  ์ฝ”๋“œ๋ถ„์„(static program analysis)

์‹ค์ œ ์‹คํ–‰์—†์ด ์ •์ ์ธ ์ฝ”๋“œ๋‚˜ ๋ชฉ์ ํŒŒ์ผ์„ ํ†ตํ•ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค์ฝ”๋“œ์˜ ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ œ, ์ž ์žฌ์  ์œ„ํ—˜์„ฑ, ์ฝ”๋“œ ์ปจ๋ฒค์…˜(๋ƒ„์ƒˆ๋‚˜๋Š” ์ฝ”๋“œ)๋ฅผ ์ฐพ๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. 

  • ์ค‘๋ณต ์ฝ”๋“œ, ์ฝ”๋”ฉ ํ‘œ์ค€, ์œ ๋‹› ํ…Œ์ŠคํŠธ, ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€(Jacoco), ์ฝ”๋“œ ๋ณต์žก๋„, ๋ฒ„๊ทธ ๋ฐ ์ทจ์•ฝ์ ๋“ฑ.

๋ฐ˜๋Œ€๋กœ ๋™์  ๋ถ„์„(์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋ฉฐ ๋ถ„์„)์€ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์‹คํ–‰ํ™˜๊ฒฝ ๊ตฌ์ถ•์ด ์–ด๋ ต๊ณ  ์†Œ์Šค ์ฝ”๋“œ์˜ ๋ชจ๋“  ๋ถ„๊ธฐ๋ฅผ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ธฐ ์–ด๋ ต๊ธฐ์— ํ…Œ์ŠคํŠธ๋‚˜ ๋ชจ๋‹ˆํ„ฐ๋ง์— ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


# SonarLint

SonarQube๋ฅผ ๋ฒ ์ด์Šค๋กœ ๋งŒ๋“  IntelliJ, Eclipse, VsCode๋“ฑ์— ์žˆ๋Š” IDE ํ”Œ๋Ÿฌ๊ทธ์ธ์ž…๋‹ˆ๋‹ค. SonarQube๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์  ํ‚จ์Šค ๋นŒ๋“œ์™€ ์—ฐ๋™์‹œํ‚ค๊ณ , ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ SonarQube๋ฅผ ์œ„ํ•œ CI ์„œ๋ฒ„๋ฅผ ๋„์šด๋‹ค๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๊ท€์ฐฎ์€ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์•„๋ฌด๋ž˜๋„ PR์„ ๋‚ ๋ ค์•ผ ๋ถ„์„์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋ณด๋‹ˆ ๋‹ต๋‹ตํ•จ๋„ ์ถ”๊ฐ€๋˜๊ตฌ์š”.

 

๊ทธ๋ž˜์„œ ํŒ€๋‹จ์œ„์˜ ๊ทœ๋ชจ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ปค๋ฐ‹์ „์— SonarLint ๋ถ„์„ ์˜ต์…˜์„ ๋„ฃ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

SonarLint ์„ค์น˜์‹œ ์ƒ๊ธฐ๋Š” ์ปค๋ฐ‹์˜ต์…˜ (intelliJ)
SonarLint๋ฅผ ์‹คํ–‰ํ•˜๋ฉด (์ขŒ์ธก์ƒ๋‹จ ์‹คํ–‰๋ฒ„ํŠผ) ์ด๋Ÿฐ ์‹์œผ๋กœ ์œ„ํ—˜์„ฑ์ด ์žˆ๋Š” ์ฝ”๋“œ๋“ค์„ ๋ถ„์„ํ•ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

 


# SonarQube(์†Œ๋‚˜ํ๋ธŒ)

Jacoco๊ฐ€ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€์ธก์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋ฉด, ์†Œ๋ƒํ๋ธŒ๋Š” ์ •์ ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. (๊ตฌ๊ธ€ ์• ๋„๋ฆฌ์Šคํ‹ฑ์„ ์ƒ๊ฐํ•˜๋ฉด ๋จ) ์†Œ๋ƒํ๋ธŒ ์„œ๋ฒ„๋ฅผ ๋„์›Œ์„œ Jacoco๊ฐ€ ๋งŒ๋“ค์–ด๋‚ธ ๋ฆฌํฌํŠธ(.xml)๋ฅผ ์ „์†กํ•˜๋ฉด ์›น์œผ๋กœ ํ†ต๊ณ„๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ž๋ฐ”์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ •์ ๋ถ„์„ ๋„๊ตฌ์˜ ๊ฒฝ์šฐ PMD, FindBugs, CheckStyle๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

  • PMD ( https://pmd.github.io )
    ๋ฏธ์‚ฌ์šฉ ๋ณ€์ˆ˜, ๋น„์–ด์žˆ๋Š” ์ฝ”๋“œ ๋ธ”๋Ÿญ, ๋ถˆํ•„์š”ํ•œ ์˜ค๋ธŒ์ ํŠธ ์ƒ์„ฑ๊ณผ ๊ฐ™์€ Defect์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌ
  • FindBugs http://findbugs.sourceforge.net )
    ์ •ํ•ด์ง„ ๊ทœ์น™์— ์˜ํ•ด ์ž ์žฌ์ ์ธ ์—๋Ÿฌ ํƒ€์ž…์„ ์ฐพ์•„์คŒ
  • CheckStyle http://checkstyle.sourceforge.net )
    ์ •ํ•ด์ง„ ์ฝ”๋”ฉ ๋ฃฐ์„ ์ž˜ ๋”ฐ๋ฅด๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋ถ„์„

๊ทธ ์ค‘์—์„œ๋„ SonarQube(์ด์ „์— Sonar๋ผ๊ณ  ๋ถˆ๋ ธ๋˜) ๋„๊ตฌ์˜ ๊ฒฝ์šฐ ์œ„์— ์•Œ๋ ค์ง„ ๋‹ค๋ฅธ ํˆด๋“ค์˜ ์ข…ํ•ฉํŒ์ด๋ผ๊ณ  ์ƒ๊ฐํ• ์ •๋„๋กœ ๊ธฐ๋Šฅ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๋‹ค์–‘ํ•˜๊ณ  github์™€ Jenkins๋“ฑ ์—ฐ๋™์„ฑ์ด ์ข‹์•„ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 


# SonarQube ์„ค์น˜ํ•˜๊ธฐ

SonarQube๋Š” ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋Š” [Scanner]์™€ ๋ถ„์„๊ฒฐ๊ณผ๋ฅผ API๋กœ ๋ฐ›์•„ ๋ณด๊ณ ์„œ๋ฅผ ๋งŒ๋“œ๋Š” [์›น ์„œ๋ฒ„]๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ํˆด(Gradle๋“ฑ)์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์Šค์บ๋„ˆ๊ฐ€ ์ง€์›๋˜๋Š”๋ฐ, ์‚ฌ์šฉํ•˜๊ณ ์žํ•˜๋Š” ์Šค์บ๋„ˆ๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๋งŽ๊ณ  ๊ธฐ๋Šฅ์ด ์ข‹์•„์„œ, ์™ ๋งŒํ•œ CI/CD ๋„๊ตฌ๋“ค๊ณผ๋Š” ๋‹ค ํ˜ธํ™˜๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ Docker๋กœ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•œ ํ›„, ์  ํ‚จ์Šค ๊ฐ™์€ ๋„๊ตฌ๋กœ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ/๋นŒ๋“œํ•˜๊ณ  ์†Œ๋ƒํ๋ธŒ์—๊ฒŒ API๋กœ ๋ณด๋‚ด ๊ฒ€์‚ฌ๋ฅผ ์˜๋ขฐํ•˜๋Š”๊ฒŒ ์ผ๋ฐ˜์ ์ธ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ API๋กœ ์ „์†ก๋ฐ›์œผ๋ฉด ์†Œ๋ƒํ๋ธŒ๋Š” ์›น ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•ด์„œ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ฆฌํฌํŒ…ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฑฐ๊ธฐ์— SonarLint๊นŒ์ง€ ์จ์ฃผ๋ฉด IDE์—์„œ ๊นŒ์ง€ ์—ฐ๋™์ด ๋ฉ๋‹ˆ๋‹ค.

 

* ๊ตฌ์ฒด์ ์ธ ์„ค์น˜๋ฐฉ๋ฒ•์€ ๋‚˜์ค‘์— SonarQube ์„œ๋ฒ„๋ฅผ Docker์— ์ง์ ‘ ์„ค์น˜ํ•  ๋•Œ ์ถ”๊ฐ€๋กœ ์ž‘์„ฑํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ๊ทธ์ „๊นŒ์ง€๋Š” ์ž˜ ์„ค๋ช…๋œ ๋งํฌ๋กœ ๋Œ€์ฒด.

@์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ ์ ์šฉ๊ธฐ - 3ํŽธ, SonarQube ์ ์šฉํ•˜๊ธฐ

 

์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ ์ ์šฉ๊ธฐ - 3ํŽธ, SonarQube ์ ์šฉํ•˜๊ธฐ

์ด ๊ธ€์€ ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค์—์„œ ์ง„ํ–‰ํ•œ ํ”„๋กœ์ ํŠธ์ธ ์ง๊ณ ๋ž˜์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ์— ํ•จ๊ป˜ ๊ฒŒ์‹œ๋œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์•ˆ๋…•ํ•˜์„ธ์š”. ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 2๊ธฐ, ์…€๋Ÿฌ๋ฆฌ ์ปดํผ๋‹ˆ์—์„œ ์ง๊ณ ๋ž˜๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ์Šคํ‹ฐ์น˜(์ด์ค€์˜)์ž…

velog.io

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ