[์ฝ๋๋ถ์๋๊ตฌ]# 3 SonarLint, SonarQube
by JiwonDev2021.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 ๋ถ์ ์ต์ ์ ๋ฃ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํฉ๋๋ค.
# 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๋ก ์ ์ก๋ฐ์ผ๋ฉด ์๋ํ๋ธ๋ ์น ์๋ฒ๋ฅผ ์ด์ฉํด์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ฆฌํฌํ ํ๊ฒ ๋ฉ๋๋ค.
* ๊ตฌ์ฒด์ ์ธ ์ค์น๋ฐฉ๋ฒ์ ๋์ค์ SonarQube ์๋ฒ๋ฅผ Docker์ ์ง์ ์ค์นํ ๋ ์ถ๊ฐ๋ก ์์ฑํ ์์ ์ ๋๋ค. ๊ทธ์ ๊น์ง๋ ์ ์ค๋ช ๋ ๋งํฌ๋ก ๋์ฒด.
@์ฝ๋ ๋ถ์ ๋๊ตฌ ์ ์ฉ๊ธฐ - 3ํธ, SonarQube ์ ์ฉํ๊ธฐ
'๐ฑBackend > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ JPA๋ฅผ ์ ๋๋ก ์๊ณ ์ฐ๋ ๊ฒ์ธ๊ฐ (์ ๋ฆฌ์ค..) (0) | 2021.11.17 |
---|---|
ํ ์คํธ ๋ชจํน Mockito ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2021.09.07 |
[์ฝ๋๋ถ์๋๊ตฌ]#2 Jacoco ์ ์ฉํ๊ธฐ (0) | 2021.08.21 |
[์ฝ๋๋ถ์ ๋๊ตฌ]# 1 ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋? (0) | 2021.08.21 |
#22 ์๋ฐ ์ฑ ๋ฐฐํฌ (JAR, WAR) (0) | 2021.07.21 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev