티스토리 뷰

기존에 Sonarqube 6.7에서 사용하던 Java Custom Ruleset이 있었다. 그런데 Sonarqube를 8.5 version으로 올리면서 기존의 Custom Rule + Sonarqube 8.5에 추가된 Sonay way를 선별해서 반영해야 한다. 결론부터 말하자면 생각만큼 간단한 일은 아니었다. 생각보다 복잡하다.

 

대략 이런 그림이 그려진다. 

 

그리고 해야할일은 다음과 같다. 

  • 1번 영역(6.7 버전의 Custom Ruleset)은 2번 영역(6.7 Sonar way에는 있으나 8.5 Sonar way에는 없는 부분)에 대해서는 빼줘야하는 작업이 일어나야한다. (optional) 이를 하기 위해서는 4번 영역(6.7버전과 8.5버전이 공통인 Rule을 가지고 있는 영역)을 구해야 한다. 
  • 3번 영역(8.5 버전에서만 새로이 추가된 RuleSet)에서는 새로운 Ruleset 중 어떤것을 1번 영역에 추가할지 선정을 해본다. 

 

골치가 아프다... 그래서 첫번째 해야 할일은 나중에 하기로 하고 3번 영역만 잘 선정해서 1번 영역에 붙일 계획이다. 

 

단계별로 정리를 한번 해보았다. 

 

Step 1. Sonarqube 6.7 Custom Ruleset 추출

(내려 받는걸 Sonarqube에서는 backup 이라는 단어를 쓴다. )

Sonarqube rule backup

Quality Profiles > Java 에서 Custom Ruleset에 대해서 Back up 눌러서 xml 파일을 받는다. xml을 받으면 이상한 파일명으로 받아지는데 이름을 알아보기 좋게 바꿔도 상관없다. 

 

 

Step 2. Sonarqube 6.7 Sonar way Ruleset 추출 (backup)

Sonar way copy

Built-in인 Sonar way는 Back up 을 할 수 없다. 하지만 방법은 있다. 대신 Copy를 만들어 Copy본을 만들어서 Backup을 하면 된다.

 

Sonar way copy

이렇게 새로이 만들고 이것을 Backup 해주면 된다.

 

이름을 알아보기 쉽게 바꿔서 위와 같은 모습으로 남기고 일단 다음 단계로 넘어간다.

 

 

Step 3. Sonarqube 8.5에 추가된 내용만 추출하기 

새로 추가된 내용만 추출하기 위해서는 위의 sonarqube_6.7_java.xml 파일을 Sonarqube 8.5가 설치된 곳에 넣어줘야한다. (Sonarqube에서는 restore 라는 용어로 사용. restore <-> backup 개념이다.) 하지만 저 파일을 그대로 restore 해주면 원하는대로 잘 추가가 되지 않는다. 원인은 이것 때문이다.

 

좌 : 8.5 version ruleset    vs    우 : 6.7 version ruleset

repositoryKey가 서로 다르기 때문이다. 다른 언어는 안바뀐것도 있지만 java는 다르다. 6.7버전의 squid를 java로 변경을 해야한다. 또한 key를 사용하는 방식도 다른것도 있다. 8.5는 S100 처럼 code값처럼 사용한다면 기존버전은 일부분은 PMD와 다른 code값으로 구성이 되어있다. 앞으로 갈일이 험난하다. 일단은 squid를 java로 모두 변경하여 8.5 version에 restore를 시켰다. 

(지금 비교파일은 json인데 이게 더 익숙해서 이런게 컨버팅해서 본것이고 원래의 모습은 xml 형식이다. )

 

다시, Sonarqube 8.5로 돌아가서 Quality Profiles 우측 상단에 있는 restore를 이용해서 위의 수정된 6.7 version의 ruleset을 추가시켜준다. 

이런 모습이 되었다. 위의 Sonar way는 8.5 version, 아래의 Sonar way java는 6.7 version이다. 우측의 톱니바퀴 모양을 누르면 Compare가 나오고 추가된 Sonar way java 6.7 version과 비교를 해준다. 

 

그러면 이런 화면을 만날 수 있다. 6.7 버전만 유일하게 가지고 있는것은 7개의 rule이 있고 8.5 버전만 가지고 있는것은 163개이다. 즉 좌측의 7개는 deprecate 된것이라고 보면 되고 우측의 163개가 새로 추가된 rule이니 이것을 분석해야 한다. 이 163개중 어떤걸 사용할지 사용 안할지 등급은 어떻게 변경할지 고민을 해야 된다는 말이다. 굉장한 노가다와 코드에 대한 해박한 지식이 필요하다... 하나씩 살펴보며 이건 추가를 할지, serverity는 어떻게 할지 정한다.

 

이 과정이 어느 과정보다도 시간과 노력이 많이 들어가는 부분이다. 어떤 ruleset을 적용할지에 대한 기준은 모두 다르겠지만 필자는 행자부의 지침과 OWASP top10을 이용하여 구성을 하였다. 

 

정리가 되었으면 그 목록을 일단 엑셀같은 곳으로 복사를 해두자. 

 

Step 4. Custom Ruleset과 Sonarqube 8.5 에만 추가된 Ruleset 비교 후 병합

 

이번에는 Custom Ruleset과 8.5 version의 Ruleset을 비교해보자. 그러면 8.5가 가지고 있는 Ruleset이 369개나 된다. 여기서 아까 정리한 내용으로 검색을 해서 넣기로 한 항목만 Custom Ruleset에 추가를 시켜준다. < 모양의 버튼을 누르면 

Sonarqube Activate In Quality Profile

이런 창이 뜨고 Serverity를 정해서 Activate 시켜주면 된다. 그리고 확인하는 방법은

상단의 Rule > 우측의 Quality Profile > Custom Ruleset의 이름을 누르면 내가 추가한 내용들을 확인할 수 있다. 

 

8.5에서 새로 추가된 내용을 Custom Ruleset에 추가를 해봤다. 위와 같은 모양으로 나오고 우측 상단에서는 repositoryKey도 확인할 수 있다. 다른곳에서는 다 Major급 Serverity이지만 Custom Ruleset에서는 Minor이다. 이런식으로 내 프로젝트에 맞게 지정을 할 수 있다. 

 

 

Step 5. 병합한 Custom Ruleset 추출하기 

병합작업이 다 되었다면 Ruleset을 추출해서 보관을 해야 한다.

Sonarqube rule backup

Custom Ruleset을 Backup 한다. 

파일을 열어서 아까 추가한 S4143이 잘 들어가있는지 확인해 보자. 

이렇듯 잘 추가가 된것을 확인할 수 있다. 

 

QA쪽 지식이 많이 필요하고 코드에 대한 지식도 많이 필요한 일이다. 하면서 또 많은 것을 배운것 같다. 

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31