[CI/CD] SonarQube๋ฅผ ํ†ตํ•ด Code Convention ์ ์šฉ

2023. 6. 1. 23:38ใ†System ์ž‘์—…์‹ค/DevOps

728x90
๋ฐ˜์‘ํ˜•

 

 

 

 

 



๐Ÿ—‚ ๋ชฉ์ฐจ

โš ๏ธ ์•„๋ž˜ ๋ชฉ์ฐจ ์ค‘ ๋ช‡๋ช‡๊ฐœ์˜ ๋งํฌ๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š” ๋ฌธ์ œ๋กœ ๊ธ€ ๋งจ ํ•˜๋‹จ์— ๋‹ค์Œ ๊ธ€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

โœ… [CI/CD] Jenkins์™€ Gitea ์—ฐ๋™
โœ… [CI/CD] Jenkins Trigger ์ •๋ณด Discord๋กœ ๋ณด๋‚ด๊ธฐ
โœ… [CI/CD] ์ •์  ์ฝ”๋“œ ๋ถ„์„ ํˆด SonarQube์™€ Jenkins ์—ฐ๋™
โœ… [CI/CD] SonarQube๋ฅผ ํ†ตํ•ด Code Convention ์ ์šฉ
โœ… [DevOps] JAVA Gradle JaCoCo (Code coverage) ์„ค์ •ํ•˜๊ธฐ 
โœ… [DevOps] JAVA Gradle JaCoCo (Code coverage) ์„ค์ •ํ•˜๊ธฐ (์ถ”๊ฐ€)(https://junyharang.tistory.com/392)

โœ… [CI/CD] Jenkins + Docker๋ฅผ ์ด์šฉํ•œ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ - โ‘  Application Linuxt(Ubuntu)์— SSH๋ฅผ ์ด์šฉํ•œ ํŒŒ์ผ ์ „์†ก
โœ… [CI/CD] Jenkins + Docker๋ฅผ ์ด์šฉํ•œ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ - โ‘ก Create Docker Image And BackUp
โœ… [CI/CD] Jenkins + Docker๋ฅผ ์ด์šฉํ•œ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ - โ‘ข Application Server Docker Job (โ‘  Application ๋„์ปค ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ)
โœ… [CI/CD] Jenkins + Docker๋ฅผ ์ด์šฉํ•œ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ - โ‘ข Application Server Docker Job (โ‘ก Application Docker Run)(https://junyharang.tistory.com/406)
โœ… [CI/CD] Jenkins + Docker๋ฅผ ์ด์šฉํ•œ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ - โ‘ข Application Server Docker Job (โ‘ข Application Docker Health Check)
โœ… [CI/CD] Jenkins + Docker๋ฅผ ์ด์šฉํ•œ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ - โ‘ฃ NGINX Server Docker Job (โ‘  NGINX ๊ฐ ์ข… ์„ค์ •) 
โœ… [CI/CD] Jenkins + Docker๋ฅผ ์ด์šฉํ•œ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ - โ‘ฃ NGINX Server Docker Job (โ‘ก NGINX Docker ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ) 
โœ… [CI/CD] Jenkins + Docker๋ฅผ ์ด์šฉํ•œ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ - โ‘ฃ NGINX Server Docker Job (โ‘ข NGINX Docker Run & Health Check)
โœ… [CI/CD] Jenkins + Docker๋ฅผ ์ด์šฉํ•œ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ - โ‘ฃ NGINX Server Docker Job (โ‘ข NGINX ์žฌ ์„ค์ •)



๐Ÿค” ๋‚ด๊ฐ€ ๋งŒ๋‚œ ๋ฌธ์ œ

โ›”๏ธ [Jenkins] java.lang.OutOfMemoryError: Java heap space

 

 

 

 

๐Ÿš€ SonarQube Code Convention

    ๐Ÿ”ฝ ๊ฐœ์š”

        ๐Ÿ“ฆ ๊ตฌ์„ฑ๋„

CI/CD ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๊ตฌ์„ฑ๋„

 

 

 

 

 

 

 

deploy Directory Path

 




        ๐Ÿ“ฆ ์†Œ๊ฐœ

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” SonarQube๋ฅผ ํ†ตํ•ด ํ•œ Project์—์„œ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๊ณตํ†ต์˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ์ •ํ•  ์ˆ˜ ์žˆ๋Š” Code Convention์„ ์ ์šฉํ•ด ๋ณด๋„๋ก ํ• ๊ฑฐ์—์š”.

Code Convention์„ ์ ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋“ค์ด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•œ Code ์ž‘์—…๋ฌผ์„ ๋ณด๋”๋ผ๋„ ์ฝ๊ณ , ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ , ๊ตฌ์กฐ์ ์œผ๋กœ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ Coding Style ๊ทœ์น™์ด์—์š”.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์˜ ์ฝ”๋“œ๋ฅผ ๋นจ๋ฆฌ ์ดํ•ดํ•ด์„œ ๊ฐœ๋ฐœ ์‹œ๊ฐ„๊ณผ ์œ ์ง€ ๋ณด์ˆ˜ ์‹œ๊ฐ„๋“ฑ์„ ๋‹จ์ถ• ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.

์ฃผ๋‹ˆ๋Š” ํ˜„์žฌ ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ Naver Coding Convention์„ ์ด์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€์–ด์š”.

 

์บ ํผ์Šค ํ•ต๋ฐ์ด Java ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜

์ค‘๊ด„ํ˜ธ({,}) ๋Š” ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ์ œ์–ด๋ฌธ์˜ ๋ธ”๋Ÿญ์„ ๊ตฌ๋ถ„ํ•œ๋‹ค. 5.1. K&R ์Šคํƒ€์ผ๋กœ ์ค‘๊ด„ํ˜ธ ์„ ์–ธ ํด๋ž˜์Šค ์„ ์–ธ, ๋ฉ”์„œ๋“œ ์„ ์–ธ, ์กฐ๊ฑด/๋ฐ˜๋ณต๋ฌธ ๋“ฑ์˜ ์ฝ”๋“œ ๋ธ”๋Ÿญ์„ ๊ฐ์‹ธ๋Š” ์ค‘๊ด„ํ˜ธ์— ์ ์šฉ๋˜๋Š” ๊ทœ์น™์ด๋‹ค. ์ค‘๊ด„ํ˜ธ

naver.github.io


์œ„์— Site์— ์—ด๊ฑฐ ๋˜์–ด ์žˆ๋Š” ๋‚ด์šฉ๋“ค์„ ๋ด๊ฐ€๋ฉด์„œ ์ฝ”๋”ฉํ•œ๋‹ค๋ฉด ์ •๋ง ์–ด๋ ค์šด ์ผ์ด ๋  ๊ฑฐ์—์š”.

๊ทธ๋ž˜์„œ ์ฃผ๋‹ˆ๋Š” SonarQube์— Coding Convention์„ ์ ์šฉ ์‹œํ‚ค๊ณ , InteliJ์˜ PlugIn ์ค‘ SonarLint์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ๋‹น์‹œ์™€ ๋ฐฐํฌ๊ฐ€ ์ด๋ค„์ง€๋Š” ์‹œ์ ์— Convention Rule์„ ๊ฒ€์ฆ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„ํ•˜๋ ค๊ณ  ํ•ด์š”.


 

 

 

    ๐Ÿ”ฝ Source Code

        ๐Ÿ“ฆ PlugIn ์ถ”๊ฐ€

์ตœ์ดˆ Gradle์— PlugIn์„ ์„ค์ •ํ•ด ์ฃผ์–ด์•ผ ํ•ด์š”.

build.gradle


์ฃผ๋‹ˆ๋Š” ์œ„์™€ ๊ฐ™์ด 6 ~ 8๋ฒˆ์งธ ์ค„์— PlugIn์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋„ฃ์–ด ์ฃผ์—ˆ์–ด์š”.

//Check Style (Code Convention) Plugins
id 'checkstyle'
id 'org.ec4j.editorconfig' version '0.0.3'
// Gradle 6.0 ์ด์ƒ์—์„œ Lombok ์‚ฌ์ด ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋กœ Build ๋•Œ, QueryDsl Error ๋ฐœ์ƒ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ์„ค์ •
// franzbecker๋Š” Lombok Annotation Process๋ฅผ ๋‹จ์ˆœํ™” ํ•˜๋Š” Plugin
id "io.franzbecker.gradle-lombok" version "3.0.0"


xml.report๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์ด checkstyle PlugIn์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ์–ด์š”.


build.gradle


๊ทธ๋Ÿฐ ๋’ค ์œ„์™€ ๊ฐ™์ด Checkstyle ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ์–ด์š”.

ํ•ด๋‹น ์„ค์ •์— ์ƒ์„ธ ๋‚ด์šฉ์€ ์•„๋ž˜ Site๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

 

Checkstyle - Gradle DSL Version 2.1

Runs Checkstyle against some source files. PropertyDescriptioncheckstyleClasspathThe class path containing the Checkstyle library to be used.classpathThe class path containing the compiled classes for the source files to be analyzed.configFileThe Checkstyl

sorcersoft.org

 

 

 

Apache Maven Checkstyle Plugin – checkstyle:checkstyle

checkstyle:checkstyle Note:This goal should be used as a Maven report. Full name: org.apache.maven.plugins:maven-checkstyle-plugin:3.3.0:checkstyle Description: A reporting task that performs Checkstyle analysis and generates an HTML report on any violatio

maven.apache.org

 

 

GitHub - checkstyle/checkstyle: Checkstyle is a development tool to help programmers write Java code that adheres to a coding st

Checkstyle is a development tool to help programmers write Java code that adheres to a coding standard. By default it supports the Google Java Style Guide and Sun Code Conventions, but is highly co...

github.com

 

์œ„์—์„œ ์„ค์ •ํ•œ config File ๊ฒฝ๋กœ์™€ Config Properties์˜ ๊ฒฝ๋กœ๋Š” Naver Code Convention File์„ ๋‚ด๋ ค ๋ฐ›๊ณ ,
Project์— ์ง€์ •ํ•œ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ด ์ค€๊ฑฐ์—์š”.



Project Root Directory/config


์ฃผ๋‹ˆ๋Š” ์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ์–ด์š”.


์ด ์ „ ๊ธ€์—์„œ ์†Œ๋‚˜ํ๋ธŒ ์—ฐ๋™ ์‹œ 162๊ฐœ์˜ ์ฝ”๋“œ ์•…์ทจ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฑธ ํ™•์ธํ–ˆ์—ˆ์–ด์š”.

 

[CI/CD] ์ •์  ์ฝ”๋“œ ๋ถ„์„ ํˆด SonarQube์™€ Jenkins ์—ฐ๋™

๐Ÿ—‚ ๋ชฉ์ฐจ โœ… [CI/CD] Jenkins์™€ Gitea ์—ฐ๋™ โœ… [CI/CD] Jenkins Trigger ์ •๋ณด Discord๋กœ ๋ณด๋‚ด๊ธฐ โœ… [CI/CD] ์ •์  ์ฝ”๋“œ ๋ถ„์„ ํˆด SonarQube์™€ Jenkins ์—ฐ๋™ โœ… [CI/CD] SonarQube๋ฅผ ํ†ตํ•ด Code Convention ์ ์šฉ โœ… ๋ฐฐํฌ ์ž๋™ํ™”์™€ ์ง€์†

junyharang.tistory.com

 

 


๊ทธ๋Ÿผ ์œ„ ์„ค์ •์„ ํ†ตํ•ด ์ฝ”๋“œ ์•…์ทจ๋ฅผ ์—†์• ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ๊ฒŒ์š”.

 

 

    ๐Ÿ”ฝ IntelliJ

        ๐Ÿ“ฆ PlugIn - CheckStyle-IDEA

๋จผ์ € ์ธํ…”๋ฆฌ์ œ์ด์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ฐ›์•„ ๋ณด๋ ค๊ณ  ํ•ด์š”.

CheckStyle-IDEA PlugIn


์œ„ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ฐ›๋„๋ก ํ• ๊ฒŒ์š”.

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด IDE๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด ์ค๋‹ˆ๋‹ค.



๋„๊ตฌ -> Checkstyle


์žฌ ์‹œ์ž‘ ์™„๋ฃŒ ๋’ค ์œ„์˜ ์„ค์ • ์ฐฝ์—์„œ ์„ค์ •์„ ํ•ด์ค˜์•ผ ํ•ด์š”.



๋จผ์ € Scan Scope์— All sources(including tests)๋ฅผ ์„ ํƒํ•ด ์ค„๊ฒŒ์š”.



๊ทธ๋Ÿฐ ๋’ค Configuration File์„  ์ถ”๊ฐ€ํ•ด ๋ณผ๊ฒŒ์š”.



์ตœ์ดˆ ์ด๋ฆ„์„ ์„ค์ •ํ•ด ์ฃผ๊ณ , ํ•ด๋‹น File ์ฆ‰, xml File์„ ์ฐพ์•„ ๋ณผ๊ฑฐ์—์š”.

BROWSE ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค„๊ฒŒ์š”.

naver-checkstyle-rules.xml


์œ„ File์„ ์ฐพ์•„ Import ํ•ด ์ค๋‹ˆ๋‹ค.


 

๊ทธ๋Ÿฐ ๋’ค NEXT๋ฅผ ๋ˆŒ๋Ÿฌ์ค„๊ฒŒ์š”.



์ด ๊ณณ์—์„œ /config/checkstyle์— ๋„ฃ์–ด๋‘์—ˆ๋˜ naver-checkstyle-suppressions.xml ์ด๋ฆ„์„ ๋ช…์‹œํ•ด ์ฃผ์—ˆ์–ด์š”.

๊ทธ๋Ÿฐ ๋’ค NEXT๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.



๊ทœ์น™ ํŒŒ์ผ์˜ ์œ ํšจ์„ฑ์ด ๊ฒ€์‚ฌ๋˜์—ˆ์œผ๋ฉฐ ์ถ”๊ฐ€ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


์ด์ œ FINISH๋ฅผ ๋ˆŒ๋Ÿฌ์ค„๊ฒŒ์š”.



์„ค์ •ํ•œ ๋‚ด์šฉ์ด ๋ณด์ด๋ฉด ํ™œ์„ฑํ™” ํ•˜๊ณ , ์ ์šฉ์„ ๋ˆ„๋ฅธ ๋’ค ํ™•์ธ์„ ๋ˆŒ๋Ÿฌ ๋น ์ ธ ๋‚˜๊ฐ‘๋‹ˆ๋‹ค.



์ธํ…”๋ฆฌ์ œ์ด ์™ผ์ชฝ์— ... ๋ชจ์–‘์„ ๋ณด๋ฉด ์œ„์™€ ๊ฐ™์ด CheckStyle์ด ์ƒ๊ธด๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.



CheckStyle์„ ์„ ํƒํ•˜๋ฉด ๋ฐ‘์— ํ™”๋ฉด์ด ์œ„์™€ ๊ฐ™์ด ๋ฐ”๋€”๊ฑด๋ฐ, Rules ๋ถ€๋ถ„์— ์šฐ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€ํ•œ ์„ค์ • ์ด๋ฆ„์„ ์„ ํƒํ•ด ์ค๋‹ˆ๋‹ค.



์™ผ์ชฝ์— ๋ณด๋ฉด ํด๋” ๋ชจ์–‘ (Check Project)๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๊ฑธ ํด๋ฆญํ•˜๋ฉด ์œ„์™€ ๊ฐ™์ด ๊ฒ€์‚ฌ๊ฐ€ ์ง„ํ–‰๋˜๊ณ ,
์–ด๋–ค ๋ถ€๋ถ„์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์–ด์š”.


์ด๋ฒˆ์—๋Š” ์–ด๋–ค ๋ถ€๋ถ„์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ–ˆ์œผ๋‹ˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค์ •ํ•ด ๋ณผ๊ฒŒ์š”.








        ๐Ÿ“ฆ IntelliJ-Formatter

์ด๋ฒˆ์—๋Š” ์ธํ…”๋ฆฌ์ œ์ด์˜ Formatter๋ฅผ ํ†ตํ•ด naver-intellij-formmater.xml์„ ์ด์šฉํ•˜์—ฌ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•ด ๋ณผ๊ฒŒ์š”.


์ธํ…”๋ฆฌ์ œ์ด ์„ค์ •(Intellj Configure) -> ์—๋””ํ„ฐ(Editor) -> ์ฝ”๋“œ ์Šคํƒ€์ผ(Code Style) -> Java


์œ„์™€ ๊ฐ™์ด ์„ค์ • ์ฐฝ์— ๊ฐ€๋ฉด ๊ตฌ์„ฑํ‘œ ์˜†์— ...์ด ์„ธ๋กœ๋กœ ์žˆ๋Š” ๊ฒƒ์ด ๋ณด์ด๋Š”๋ฐ,
์—ฌ๊ธฐ์„œ ๊ตฌ์„ฑํ‘œ ๊ฐ€์ ธ์˜ค๊ธฐ -> IntelliJ IDEA ์ฝ”๋“œ ์Šคํƒ€์ผ XML ์„ ์„ ํƒํ•ด ์ค„๊ฒŒ์š”.



๊ทธ๋ฆฌ๊ณ , ์œ„์™€ ๊ฐ™์ด naver-intellij-formatter.xml์„ ์ฐพ์•„ Import ํ•ด ์ค๋‹ˆ๋‹ค.


์ด ํ™”๋ฉด์ด ๋‚˜์˜ค๋ฉด ํ™•์ธ์„ ๋ˆŒ๋Ÿฌ์ฃผ๋ฉด ๋œ๋‹ต๋‹ˆ๋‹ค.



์œ„์™€ ๊ฐ™์ด ๊ตฌ์„ฑํ‘œ ์ด๋ฆ„์ด ๋ฐ”๋€๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ ์šฉ์„ ๋ˆ„๋ฅด๊ณ , ํ™•์ธ์„ ๋ˆŒ๋Ÿฌ ํ•ด๋‹น ์ฐฝ์„ ๋น ์ ธ ๋‚˜์™€ ์ค„๊ฒŒ์š”.


naver-checkstyle-suppressions.yml


์ฐธ๊ณ ๋กœ ์œ„ ๋‚ด์šฉ์€ Test Method ์ด๋ฆ„์ด ํ•œ๊ธ€์ธ ๊ฒƒ์„ ๋ฌธ์ œ๋กœ ์‚ผ์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ํ•ด์ค€ ๋‚ด์šฉ์ด์—์š”.


์ด๋ฒˆ์—๋Š” Code Convention์„ ์žก์•„์ฃผ๋Š” ์œ ์šฉํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๊ณ , ์„ค์ •ํ•ด ๋ณผ๊ฒŒ์š”.

 

 

 

        ๐Ÿ“ฆ PlugIn - Save Actions


์œ„ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ฐ›์•„ ์ฃผ๋„๋ก ํ• ๊ฒŒ์š”.



์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์œ„์™€ ๊ฐ™์ด ์ธํ…”๋ฆฌ์ œ์ด ์„ค์ •์— ๊ธฐํƒ€ ์„ค์ •์— ๋ณด๋ฉด Save Actions๊ฐ€ ๋ณด์ด๋Š”๋ฐ,
์œ„์™€ ๊ฐ™์ด ์„ธ ๊ฐœ์˜ ์ฒดํฌ ๋ฐ•์Šค๋ฅผ ํ™œ์„ฑํ™” ํ•ด ์ค„๊ฒŒ์š”.

๊ทธ๋Ÿฐ ๋’ค ์ ์šฉ์„ ๋ˆ„๋ฅด๊ณ , ํ™•์ธ์„ ๋‚˜์™€ ๋น ์ ธ ๋‚˜์˜ค๋ฉด import ์ตœ์ ํ™”์™€ ํ•จ๊ป˜
Fommater Rule์— ๋”ฐ๋ผ Code๊ฐ€ ์žฌ ์ •๋ ฌ ๋  ๊ฑฐ์—์š”.


Project Root Directory ์šฐํด๋ฆญ -> ์ฝ”๋“œ ์„œ์‹ ๋‹ค์‹œ ์ง€์ •


๊ทธ๋ฆฌ๊ณ  ์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ ์„œ์‹ ๋‹ค์‹œ ์ง€์ •์„ ์„ ํƒํ•ด ์ค„๊ฒŒ์š”.



์œ„์™€ ๊ฐ™์€ ์ฐฝ์ด ๋‚˜์˜ค๋ฉด import ๋ฌธ ์ตœ์ ํ™”๋งŒ ํ™œ์„ฑํ™” ํ•œ ๋’ค ์‹คํ–‰์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.



๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ์—ด์‹ฌํžˆ ์ธํ…”๋ฆฌ์ œ์ด๊ฐ€ ์ž‘์—…ํ•˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.


์ฐธ๊ณ ๋กœ ๋„ค์ด๋ฒ„ ์ฝ”๋“œ ์ปจ๋ฒค์…˜์˜ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์˜ ๊ฐœํ–‰์€ LF๋กœ ๋๋‚˜์•ผ ํ•ด์š”.

์ด ๋ถ€๋ถ„์„ ๋งž์ถฐ๋ณผ๊ฒŒ์š”.

์ธํ…”๋ฆฌ์ œ์ด ์„ค์ • -> ์—๋””ํ„ฐ(Editor) -> ์ฝ”๋“œ ์Šคํƒ€์ผ(Code Style)


์œ„ ์„ค์ •์ฐฝ์—์„œ ์œ„์™€ ๊ฐ™์ด ์ค„ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋ฅผ Unix ๋ฐ MacOS(\n)๋กœ ์„ ํƒํ•ด ์ค„๊ฒŒ์š”.



์ธํ…”๋ฆฌ์ œ์ด ๋ฐ‘์— ์˜ค๋ฅธ์ชฝ์„ ๋ณด๋ฉด ์œ„์™€ ๊ฐ™์ด LF๋กœ ์„ค์ •๋œ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.


์„ค์ • ์ „

 

์„ค์ • ๋’ค


์„ค์ • ์ „์—๋Š” ์œ„์™€ ๊ฐ™์ด ๋ฌธ์ œ๊ฐ€ 7,814๊ฐœ๋‚˜ ์žˆ์—ˆ๋Š”๋ฐ, ์ด์ œ 472๊ฐœ๋กœ ๋ถˆ์–ด๋“  ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.



Source Code push๋ฅผ ํ†ตํ•ด CI/CD๋ฅผ ๊ฑธ๊ณ , ์†Œ๋‚˜ํ๋ธŒ์— ๊ฒ€์ฆ์„ ๋ฐ›์•„ ๋ณด๋‹ˆ ์œ„์™€ ๊ฐ™์ด ๊น”๋”ํ•ด ์ง„๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.


 

 

        ๐Ÿ“ฆ PlugIn - SonarLint

SonarLint๋Š” Code ์ž‘์„ฑ ์‹œ ๋ฒ„๊ทธ, ์ทจ์•ฝ์ , ์ฝ”๋“œ ์•…์ทจ๋ฅผ ์ฐพ์•„ ๋ฌธ์ œ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋ฌด๋ฃŒ IDE ํ”Œ๋Ÿฌ๊ทธ์ธ์ด์—์š”.

๋งž์ถค๋ฒ• ๊ฒ€์‚ฌ๊ธฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฆ‰์‹œ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฅผ ํ•˜๊ณ , ํ˜•์ƒ ๊ด€๋ฆฌ๋กœ Push ๋“ฑ์„ ํ•˜๊ธฐ ์ „์— ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด์—์š”.

SonarLint๋Š” IntelliJ IDEA, CLion, WebStorm, PHPStorm, PyCharm, Rider, Android Studio ๋ฐ RubyMine์„ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ JetBrains IDE์™€ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Visual Studio Code์—์„œ๋„ ์ง€์›์ด ๋˜๊ณ  ์žˆ์–ด์š”. 
์ง€์›๋˜๋Š” ์–ธ์–ด์—๋Š” C, C++, Java, JavaScript, TypeScript, Python, C#, Kotlin, Ruby, HTML ๋ฐ PHP๊ฐ€ ์žˆ๋‹ต๋‹ˆ๋‹ค.

์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ์†Œ๋‚˜ํ๋ธŒ์™€ ์—ฐ๋™ํ•˜์—ฌ Code Convention ๋“ฑ์„ ๋ณด๋‹ค ํ™•์‹คํ•˜๊ณ , ๊ฒฌ๊ณ ํ•˜๊ฒŒ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ค„ ์ˆ˜ ์žˆ์–ด์š”.

์ฐธ๊ณ ๋กœ SonarLint๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด IDE๋ฅผ JVM 11+ ์ด์ƒ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•ด์š”. (์ตœ๊ทผ ๋ชจ๋“  JetBrains IDE์˜ ๊ฒฝ์šฐ) 
JavaScript ๋ฐ TypeScript๋ฅผ ๋ถ„์„ํ•˜๋ ค๋ฉด ์ปดํ“จํ„ฐ์— Node.js 12.22 ์ด์ƒ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ด์š”.

 

 

์ด๋ฒˆ์—๋Š” Sonar Lint ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ฐ›์•„์„œ ์„ค์ •ํ•ด ๋ณผ๊ฒŒ์š”.

 

 

๋ฐ˜์‘ํ˜•

์†Œ๋‚˜ํ๋ธŒ์™€ ์—ฐ๋™์„ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์ด ์ค‘๊ฐ„ ๋ถ€๋ถ„์— ๊ตฌ๋ฆ„ ๋ชจ์–‘์„ ๋ˆŒ๋Ÿฌ์ค„๊ฒŒ์š”.

 

 


์ด ๊ณณ์—์„œ Bind project to SonarQube / SonarCloud ํ™œ์„ฑํ™” ํ•œ ๋’ค
CONFIGURE THE CONNECTION...์„ ๋ˆŒ๋Ÿฌ ์ค๋‹ˆ๋‹ค.

 


์ด ๊ณณ์—์„œ + ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌ์„ฑํ•œ ์†Œ๋‚˜ํ๋ธŒ์™€ ์—ฐ๋™์„ ํ•ด ์ค„๊ฑฐ์—์š”.


http://{์†Œ๋‚˜ํ๋ธŒ IP}:{Port Numbe}/


๋จผ์ € ์ด๋ฆ„์„ ์ ์–ด์ฃผ๊ณ , ์šฐ๋ฆฌ๋Š” Cloud๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— sonarQube๋ฅผ ์„ ํƒํ•œ ๋’ค ํ•ด๋‹น
์†Œ๋‚˜ํ๋ธŒ์˜ IP ์ฃผ์†Œ์™€ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ž‘์„ฑํ•ด ์ค๋‹ˆ๋‹ค.



์œ„์™€ ๊ฐ™์ด ์ฐฝ์ด ๋‚˜์˜ค๋ฉด Token ๋ฐฉ์‹์„ ์„ ํƒํ•˜๋˜์ง€ ์ฃผ๋‹ˆ์ฒ˜๋Ÿผ ID / Password ๋ฐฉ์‹์œผ๋กœ ์—ฐ๋™์„ ํ•ด์ฃผ์–ด์•ผ ํ•ด์š”.


์ฃผ๋‹ˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต์šฉ ๊ณ„์ •์„ ๋งŒ๋“ค์–ด์„œ ์—ฐ๋™ํ•ด ์ฃผ์—ˆ์–ด์š”.




๋‹ค์Œ์„ ๋ˆŒ๋Ÿฌ์ค„๊ฒŒ์š”.
  


์œ„์™€ ๊ฐ™์€ ์ฐฝ์ด ๋‚˜์˜ค๋ฉด ์•Œ๋ฆผ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ํ™œ์„ฑํ™”๋ฅผ ํ•ด ์ฃผ์–ด์•ผ ํ•ด์š”.

ํ™œ์„ฑํ™”๋ฅผ ํ•ด ์ฃผ๋ฉด ๋‹ค์Œ ์•Œ๋ฆผ์„ ์†Œ๋‚˜ํ๋ธŒ๋กœ ๋ถ€ํ„ฐ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”.

1. ๋ฐ”์ธ๋”ฉ๋œ ํ”„๋กœ์ ํŠธ์˜ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ์ƒํƒœ ๋ณ€๊ฒฝ

2. ์†Œ๋‚˜ํ๋ธŒ์—์„œ ๋ฐ”์ธ๋”ฉ๋œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ตœ์‹  ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•œ ๋ฌธ์ œ ์•Œ๋ฆผ

 

 

 

๋‹ค์Œ์„ ๋ˆ„๋ฅด๋ฉด ์œ„ ์ฐฝ์ด ๋‚˜์˜ฌํ…๋ฐ, ์ƒ์„ฑ์„ ๋ˆŒ๋Ÿฌ์ค„๊ฒŒ์š”.


์ด ๊ณณ์—์„œ ํ™•์ธ์„ ๋ˆŒ๋Ÿฌ ํ•ด๋‹น ์ฐฝ์„ ๋‚˜๊ฐ€์ค„๊ฒŒ์š”.



์ด ๊ณณ์—์„œ ๋ฐฉ๊ธˆ ๋งŒ๋“  ์—ฐ๋™ ์ •๋ณด๋ฅผ ์„ ํƒํ•ด ์ฃผ๊ณ , ํ™•์ธ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.



๊ทธ๋ฆฌ๊ณ  Project key ๋ถ€๋ถ„์— SEARCH IN LIST...๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.


๊ทธ๋Ÿผ ๋ฐ‘์— ์†Œ๋‚˜ํ๋ธŒ ์—ฐ๋™ Project Key๊ฐ€ ์žˆ์„ํ…๋ฐ, ์ด๊ฑธ ์„ ํƒํ•˜๊ณ , ํ™•์ธ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.


๊ทธ๋ฆฌ๊ณ  ์ด ๊ณณ์—์„œ๋„ ํ™•์ธ์„ ๋ˆŒ๋Ÿฌ ์ฃผ๋ฉด ๋œ๋‹ต๋‹ˆ๋‹ค.



Report์— ๋ณด๋ฉด ์™ผ์ชฝ์— ํด๋” ๋ชจ์–‘(Analyze All Project Files)๊ฐ€ ์žˆ๋Š”๋ฐ,
์ด๊ฑธ ๋ˆŒ๋Ÿฌ ์†Œ๋‚˜ํ๋ธŒ์—๊ฒŒ ๊ฒ€์ฆ์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์–ด์š”.

๊ทธ๋Ÿผ ์œ„์™€ ๊ฐ™์ด ๋‚ด์šฉ์ด ๋‚˜์˜ค๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.



Log๋ฅผ ํ†ตํ•ด์„œ๋„ ์ •์ƒ์ ์œผ๋กœ ์—ฐ๋™๋œ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

์ด์ „ ๊ธ€: [CI/CD] ์ •์  ์ฝ”๋“œ ๋ถ„์„ ํˆด SonarQube์™€ Jenkins ์—ฐ๋™


๋‹ค์Œ ๊ธ€:
[DevOps] JAVA Gradle JaCoCo (Code coverage) ์„ค์ •ํ•˜๊ธฐ

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•