요즘 개발을 하면서, 코드 리뷰가 완벽하지 않다는 것을 항상 느끼고 있다. 간단한 코드 컨벤션부터, Security Hotstop까지 많은 부분을 놓치고, 그 코드가 프로덕션 환경으로 나가는 경우가 종종 발생한다.
그래서 기술로 그러한 문제들을 해결하고자 나온게 코드 정적 분석 도구들이다. 이번 시간에는 현재 내가 처한 상황에서, 대표적인 무료 도구인 SonarCloud와 Qodana를 비교한 후 어떤 도구를 사용할지, 혹은 그냥 사용하지 않을지, 혹은 다 사용할지 고민하는 글을 작성해보고자 한다.
현재 나는 어떤 상황인가?
1. 프로젝트를 2개 진행하고 있다. 하나는 2년동안 서비스 중이고, 다른 하나는 이제 막 시작에서, MVP를 거의 완성하고, 프론트엔드랑 빠르게 소통하며, 코드리뷰 없이 DTO를 수정하는 정도의 일을 하고있다.
2. 프로젝트 2개 모두 수익창출을 하지 않아서, 유료 툴을 사용하기에는 무리가 있다.
3. 두 프로젝트 모두 테스트 코드 작성이 안돼있으며, 첫번째 프로젝트는 4인이서 리팩토링을 하며, 테스트 코드를 작성할 계획이다. 두번째 프로젝트는 곧 배포를 앞두고 있으며, 이 프로젝트는 테스트 코드를 작성하고 있다.
4. 프로젝트 2개 모두 빠른 개발을 추구하기 때문에 협업 비용을 최소화 하여서, 자기 할 일에 집중할 수 있으면 좋겠다.
다음을 기준으로 코드 정적 분석 도구 선별 기준을 생각해보자면,
1. 무료다.
2. 최대한 많은 관점에서 코드를 리뷰해준다.
3. 쓰기 간편하고, 설정하는게 복잡하지 않다.
다음 3가지가 중요한 기준이다. 다음을 기준으로 두가지 툴을 모두 사용해보고, 평가해보도록 하자.
적용해본 프로젝트를 보고싶다면, https://github.com/Team-INSERT/BUMAWIKI_SERVER_V2 이 주소를 방문하세요.
Qodana 사용해보기
Qodana는 Jetbrain에서 만든 코드 정적 분석 도구로, 특징은 Jetbrain IDE와의 호환성이 좋으며, 개발자 수로 비용책정을 하기 때문에, 개발자에 비해 코드 줄 수가 짧은 팀에서는 유용하게 사용할 수 있는 도구다.
Qodana는 Community(무료) 버전에는 프레임워크에 대한 지원, 보안 분석에 대한 지원, 코드 커버리지에 대한 지원이 없다. 사실 이 부분 때문에 Qodana를 무료로 사용하기에는 무리가 있다.
Qodana를 사용하는 방법은 향로님의 글을 참고했다.
Qodana의 인터페이스를 보고 처음 든 생각은, 깔끔하다, 생각보다 제공하는 정보가 없나? 였다.
그리고 저기 있는 동그라미를 누르면, 그 카테고리에 해당하는 이슈들을 모아서 볼 수 있다.
좋다고 느낀 곳은, 이렇게 Inspections을 끄고 켜는 것이 매우 간편했다. 아쉽게도, 내가 원하는 설정을 추가하는 기능은 없었다.
PR에 대해서는 다음과 같은 comment를 제공한다.
지원하는 기능이 많이 없다고 듣고 접해서 기대가 엄청 크진 않았지만, 생각보다 더 없어서 실망했다.
SonarCloud 사용해보기
SonarCloud는 SonarQube를 로컬에서 사용하지 않고, 클라우드 환경에서 사용할 수 있게 만든 도구이다. 분석할 수 있는 카테고리는 코드 악취, 버그, 취약성, 테스트 커버리지 등이 있다.
기본 설정은 이 블로그 글을 보고 하였고, CI 설정을 공식 글을 보고 하였다.
소나 클라우드를 처음 보고 느낀 것은 분석을 상당히 상당히 자세히 봐준다는 것이었다. Maintainability가 68인 것은 개발하는 입장에서도 상당히 충격적이었다.
PR에 대해서, 코드 커버리지와 중복부분에 관한 리뷰도 해주는 것이 마음에 들었다.
CI 실패를 띄우면서, Merge를 한차례 막아주는 것도 좋았다.
이외에도 정말 많은 기능들을 제공해준다. 설정을 잘 하면, PR에 대한 리뷰로 오류를 띄워줄 수 있다고도 들었다.
두개를 비교해보면?
1. 무료다.
2. 최대한 많은 관점에서 코드를 리뷰해준다.
3. 쓰기 간편하고, 성정하는게 복잡하지 않다.
라는 기준에서는
1. 두개 다 무료고,
2. 소나 클라우드가 훨씬 더 많은 관점에서 코드를 리뷰해줬다.
3. 쓰기는 UI가 간편한 Qodana가 더 쉬웠고, 설정하는 것도 개인적으로 Qodana가 더 간단했다.
커뮤니티 버전에서 훤씬 더 많은 기능을 제공해주는 SonarCloud를 쓰는 편이 더 좋다고 느껴졌다. 그리고 백엔드를 개발하는 팀은 전부 JetBrain 기반 IntelliJ를 사용하지만, 프론트 엔드 친구들은 VS Code를 사용하기 때문에 더 개발 플랫폼의 제약이 없는 SonarCloud를 도입하는 편이 좋아보였다.
각자 처한 상황이랑, 리소스가 다르기 때문에 내 글을 참고정도만 해주면 좋을 것 같다! 다들 고민 열심히 해서 할 수 있는 한 최선의 결과를 냈으면 좋겠다!!@ 화이팅이다!!!
'기술고민' 카테고리의 다른 글
bootJar 와 jar 각자 어떤 책임이 있을까? (0) | 2024.04.14 |
---|---|
스프링 시큐리티를 쓰지 맙시다. (feat. JWT) (4) | 2024.04.13 |
int와 Integer중에 무엇을 골라야할까? (4) | 2024.03.28 |
???: 빌더 패턴은 필수 값을 받지 못하잖아요. (3) | 2024.03.26 |
정팩메, 생성자 고를 때 무엇을 고려해야 할까? (2) | 2024.03.25 |