-
๐ฐ | ์ฝ๋ ํ์ง ๊ด๋ฆฌ๊ฐ ํ์ํ ์ด์ ์ ๋ฐฉ๋ฒ, ์ ์ &๋์ ๋ถ์, Sonar Cloud๐ฐ ์ํฐ๋ ์คํฐ๋ 2024. 8. 8. 19:19
Sonarํด๋ผ์ฐ๋์ ๋ฏธํ ํ ๋ ์ฒ์ ์ ํด๋ณด๋ ๊ฐ๋ฐ ์์๋ค์ด ์์๋ค. ๋ฏธํ ์ด ๋๋์๋ง์ ๊ฒ์โพ๏ธ์ ์ฐ์..๊ผฌ๋ฆฌ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๋ฉฐ ์ฝ๋ ํ์ง ๊ด๋ฆฌ์ ๋ํด์ ํบ์๋ดค๋ค.
๐คท๐ปโ๏ธ์ฝ๋ ํ์ง ๊ด๋ฆฌ๊ฐ ํ์ํ ์ด์
์ฝ๋๋ฅผ ์์ฑํ๋ค ๋ณด๋ฉด ํต์ฉ๋๋ ์ปจ๋ฒค์ , ์ค๋ณต๋๋ ์ฝ๋, ๋ณด์ ์ทจ์ฝ์ ๋ฑ์ ์ธ์งํ์ง ๋ชปํ์ฑ ๊ฐ๋ฐํ๊ฒ ๋๋ค. ๋์ฑ์ด ๊ฐ๋ฐ์ ๊ฐ๊ฐ์ธ์ด ์๋ก์ด ์ธ์ด๋ฅผ ๋ฐฐ์ด๋ค ํ๋๋ผ๋ ๋ณธ์ธ์๊ฒ ์ต์ํ ์ธ์ด์คํ์ผ๋ก ๊ฐ๋ฐ์ ํ๊ฒ ๋๋๋ฐ, ์ฌ๋ด์์ ๊ณต์์ ์ผ๋ก ์ฌ์ฉํ๋ ์ธ์ด์ ๋ฐฉ์๊ณผ ๋ณธ์ธ์ ์คํ์ผ์ด ๋ค๋ฅด๋ฉด ๊ทธ ๊ฐ๊ทน์ ์ปค์ง๋ค. ๋ง์น Java๋ฅผ C์ธ์ด ์ฒ๋ผ ์ฌ์ฉํ๋ค๊ฑฐ๋ Go์ธ์ด๋ฅผ JS์ฒ๋ผ ์ฌ์ฉํ ์๋ ์๊ฒ ๋๋ค๋ ๋ฌธ์ ์ ์ด ์๊ธฐ ๋๋ฌธ์ ํ์ง ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค.
๋ํ ์ฝ๋ ํ์ง๊ด๋ฆฌ๋ฅผ ํ๋ฉด ์์ ํจ์จ์ด ๋์์ง๋๋ฐ, ์๋์ ์ด์ ๋ค๋ก ์ธํด ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ํ์์ ์ธ ์์๋ผ๊ณ ๋ณผ ์ ์๋ค.
- ๋ฒ๊ทธ ๊ฐ์ : ๋์ ํ์ง์ ์ฝ๋๋ ๋ฒ๊ทธ๋ฅผ ์ค์ด๊ณ , ์์คํ ์ด ์์ธก๋๋ก ๋์ํ๋๋ก ํ๋ค.
- ์ ์ง ๋ณด์์ฑ ํฅ์ : ์ฝ๊ธฐ ์ฝ๊ณ ์ผ๊ด์ฑ ์๋ ์ฝ๋๋ ์ ์ง ๋ณด์๋ฅผ ๋ ์ฝ๊ฒ ๋ง๋ ๋ค. ์๋ก์ด ๊ฐ๋ฐ์๊ฐ ํ๋ก์ ํธ์ ์ฐธ์ฌํ ๋์๋ ์ ์์ด ๋น ๋ฅด๋ค.
- ์์ฐ์ฑ ํฅ์ : ์ ๊ตฌ์กฐํ๋ ์ฝ๋์ ์๋ํ๋ ํ ์คํธ๋ ๊ฐ๋ฐ์๋ค์ด ์๋ก์ด ๊ธฐ๋ฅ์ ๋น ๋ฅด๊ฒ ์ถ๊ฐํ๊ณ ๋ณ๊ฒฝ ์ฌํญ๋ค์ ์ฝ๊ฒ ๋ฐ์ํ ์ ์๊ฒ ํ๋ค.
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ : ๋์ ํ์ง์ ๋ชจ๋ํ๋ ์ฝ๋๋ ๋ค์ํ ํ๋ก์ ํธ์์ ์ฌ์ฌ์ฉํ๊ธฐ ์ฉ์ดํ๋ค.
- ๋ณด์ ๊ฐํ : ์ฝ๋ ํ์ง ๊ด๋ฆฌ ๋๊ตฌ์ ํ๋ก์ธ์ค๋ ๋ณด์ ์ทจ์ฝ์ ์ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๊ณ ์์ ํ ์ ์๊ฒ ๋์์ค๋ค.
- (๊ถ๊ทน์ ์ผ๋ก)๋น์ฉ ์ ๊ฐ : ๋ฒ๊ทธ๋ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ๋ฐ๊ฒฌํ๊ณ ์์ ํจ์ผ๋ก์จ, ์ดํ ๋จ๊ณ์์ ๋ฐ์ํ ์ ์๋ ๋์ ๋น์ฉ์ ์ ๊ฐํ ์ ์๋ค.
๐๐ปโ๏ธ์ฝ๋ ํ์ง ๊ด๋ฆฌ ๋ฐฉ๋ฒ
- ์ฝ๋ ๋ฆฌ๋ทฐ(Code Review) : ํ์๋ค์ด ์๋ก์ ์ฝ๋๋ฅผ ๊ฒํ ํ์ฌ ๋ฒ๊ทธ, ์คํ์ผ ๋ฌธ์ , ๋ ผ๋ฆฌ์ ์ค๋ฅ ๋ฑ์ ๋ฐ๊ฒฌํ๋ค.
- ๋จ์ ํ ์คํธ(Unit Testing) : ๊ฐ๋ณ ํจ์๋ ๋ชจ๋์ด ์์๋๋ก ๋์ํ๋์ง ํ์ธํ๋ ํ ์คํธ๋ฅผ ์์ฑํ๋ค. ์์คํ ์ ์ผ๋ถ๋ถ์ด ์ ๋๋ก ํตํฉ๋๊ณ ์๋์ง ๊ฒ์ฆํ๋ค.
- CI/CD ํ์ดํ๋ผ์ธ(CI/CD Pipeline) : Jenkins, Travis CI, GitHub Actions ๋ฑ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์์ ํตํฉ(Continuous Integration)๊ณผ ์ง์์ ๋ฐฐํฌ(Continuous Deployment)๋ฅผ ํตํด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ผ๋ก ํ ์คํธ๋๊ณ ๋ฐฐํฌ๋๋๋ก ํ๋ค.
- ์ฝ๋ฉ ํ์ค ๋ฐ ์คํ์ผ ๊ฐ์ด๋(Code Standards and Style Guides) : ํ ์์์ ์คํ ๋ค๋๋ฅผ ์ ์ํ๊ณ , ์ค์ํ๋ค.
- ๋ฆฌํฉํ ๋ง(Refactoring) : ์ฝ๋์ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ์ฌ ์ ์ง ๋ณด์์ฑ์ ๋์ธ๋ค.
- ๋ฌธ์ํ(Documentation) : READMEํ์ผ ๋ฑ์ ์์ฑํ์ฌ ์ฝ๋์ ๋ชฉ์ ๊ณผ ์ฌ์ฉ๋ฒ์ ๋ช ํํ ํ์ฌ ์ฝ๋ ์์ฒด์ ์ฃผ์์ ์ถ๊ฐํ๊ณ , ํจ์๋ ๋ชจ๋์ ์ฌ์ฉ๋ฒ์ ๋ฌธ์ํ ํ๋ค.
๐๐ปโ๏ธ์ฝ๋ ํ์ง ๊ด๋ฆฌ ๋ฐฉ๋ฒ-์ ์ ๋ถ์ ๋๊ตฌ
์ ์ ๋ถ์ ๋๊ตฌ(Static Analysis Tools) : ์ฝ๋์ ํ์ง์ ์๋์ผ๋ก ๋ถ์ํ๋ค. ์์ค ์ฝ๋๋ ์ปดํ์ผ๋ ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ๋ถ์ ์์ : ์ฝ๋๋ฅผ ์์ฑํ ํ, ์คํํ๊ธฐ ์ ์ ์ํ๋๋ค.
- ์ด์ : ์ฝ๋ ์คํ์ผ, ๋ฌธ๋ฒ ์ค๋ฅ, ์ ์ฌ์ ์ธ ๋ฒ๊ทธ, ๋ณด์ ์ทจ์ฝ์ , ์ฝ๋ ๋ณต์ก๋, ์ค๋ณต ์ฝ๋, ํ์ ์ค๋ฅ ๋ฑ์ ์๋ณํ๋ค.
- ๋ถ์ ๋๊ตฌ : SonarQube, ESLint, Pylint
- ์ฅ์ :
- ์ฝ๋๊ฐ ์ค์ ๋ก ์คํ๋๊ธฐ ์ ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฝํ ์ ์๋ค.
- ์ฝ๋์ ๊ตฌ์กฐ์ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ์ฌ ์์ ํ ์ ์๋ค.
- ์๋ํ๋ ๋๊ตฌ๋ฅผ ํตํด ๋น ๋ฅด๊ณ ๊ด๋ฒ์ํ ๋ถ์์ด ๊ฐ๋ฅํ๋ค.
- ๋จ์ : (→ ์ค์ ๋ก ์ฝ๋๋ฅผ ์คํํ๋ฉฐ ๋ถ์ํ๋ ๋์ ๋ถ์Dynamic Analysis์ผ๋ก ๋ณด์ํด์ผํ๋ค.)
- ์คํ ์์ ์์ ๋ฐ์ํ๋ ๋ฐํ์ ์ค๋ฅ๋ฅผ ์ก์๋ด์ง ๋ชปํ๋ค.
- ์ค์ ๋์๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ์๋ณํ์ง ๋ชปํ ์ ์๋ค.
*์ฐธ๊ณ ! ์ ์ ๋ถ์์ ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ์์ค ์ฝ๋ ์์ฒด๋ฅผ ๋ถ์ํ์ฌ ๋ฌธ์ ๋ฅผ ์ฐพ๊ณ , ๋์ ๋ถ์์ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ๋ถ์ํ์ฌ ๋ฐํ์ ์ค๋ฅ, ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ , ์ฑ๋ฅ ๋ฌธ์ ๋ฑ์ ๋ฐ๊ฒฌํ๋ค. ์ด ๋๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ถ์ ์์ ์ด ๋ฌ๋ผ ์ํธ๋ณด์์ ์ด๋ค. ์ ์ ๋ถ์์ ํตํด ์ฝ๋ ์์ฑ ๋จ๊ณ์์ ์ค๋ฅ๋ฅผ ์ค์ด๊ณ , ๋์ ๋ถ์์ ํตํด ์ค์ ์คํํ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด ์ ์ฒด์ ์ธ ์ฝ๋ ํ์ง์ ํฅ์์ํฌ ์ ์๋ค.
๐๐ปโ๏ธ์ฝ๋ ํ์ง ๊ด๋ฆฌ ๋ฐฉ๋ฒ-์ ์ ๋ถ์ ๋๊ตฌ-Sonar Cloud
SonarCloud is a cloud-based code analysis service designed to detect code quality issues in 25 different programming languages, continuously ensuring the maintainability, reliability and security of your code.
SonarCloud๋ ๋ง ๊ทธ๋๋ก ์ ์ ์ฝ๋ ๋ถ์์ด๋ค. ๊ฐ๊ฐ์ ๊ฐ๋ฐ ์ธ์ด์์ ์ง์ ๋ ์ฝ๋ ํ์ง์ ๋ํ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ๋ถ์ํ์ฌ ์ ์ง๋ณด์์ฑ, ์์ ์ฑ ๋ฐ ๋ณด์ ๋ฑ์ ์ง์์ ์ผ๋ก ๊ด๋ฆฌํด์ฃผ๋ ์ ๋ฌดํด์ด๋ค.
Sonar๋ ๊ธฐ๋ณธ์ ์ผ๋ก Automatic Analysis๋ฐฉ์์ ๋ํดํธ ์ต์ ์ผ๋ก ์ ๊ณตํ๊ณ ์๋ค.
SonarCloud์ ์๋ ๋ถ์ ๊ธฐ๋ฅ์ ์ฝ๋ ํ์ง๊ณผ ๋ณด์์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ๊ฐ์ ํ ์ ์๋๋ก ๋์์ค๋ค. CI/CD ํ์ดํ๋ผ์ธ๊ณผ ํตํฉ๋์ด ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์๋์ผ๋ก ๋ถ์์ ์ํํ๋ฉฐ, ํ์ง ๊ฒ์ดํธ๋ฅผ ํตํด ์ฝ๋๊ฐ ๋ฐฐํฌ๋๊ธฐ ์ ์ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ ์ ์๊ณ , ์ง๊ด์ ์ธ ๋์๋ณด๋์ ์ด์ ํธ๋ํน ๊ธฐ๋ฅ์ ํตํด ์ฝ๋ ํ์ง์ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค๊ณ ํ๋ค.
๐๐ปโ๏ธ์ ๋ฆฌ
Sonar๋ ์์์น ๋ชปํ ์๋ฌ๋ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ ์๋ ์ํ๋๋ฅผ ๋ฎ์ถฐ์ฃผ๊ณ ์ ๋ขฐ์ฑ์ ๋์ฌ์ฃผ๋ฉฐ, ๊ด๋ฆฌ์๋ ๋์ฌ๋ณด๋์์ ์ ๋์ ์ธ ์ฝ๋ ์งํ๋ฅผ ๋ณผ ์ ์์ด ํฉ๋ฆฌ์ ์ธ ์ฝ๋ ํ๋ฆฌํฐ๊ฐ ๊ฐ๋ฅํ ํด์ด๋ค. ์์์ ๋งํ๋ฏ ์ ์ ๋ถ์์ด ์๋ฌ๋ ๋ฒ๊ทธ ์ฒ๋ฆฌ์ ์ ๋์ ์ด์ง๋ ์๋ค. (๋์ ๋ถ์์ ํจ๊ป ํด์ฃผ๋ฉฐ ์ํธ๋ณด์์ ํด์ผํ๋ค.) ํ์ง๋ง ์ ํํ ํ์ ์ ํ๋ฉฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์๋นํ ์ ์ฉํ ํด์ธ ๊ฒ ๊ฐ๋ค.
'๐ฐ ์ํฐ๋ ์คํฐ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ