Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

소스코드 정적 분석 #23

Open
hyejungg opened this issue Jan 6, 2022 · 3 comments · Fixed by #24
Open

소스코드 정적 분석 #23

hyejungg opened this issue Jan 6, 2022 · 3 comments · Fixed by #24
Assignees
Labels
refator 코드 개선

Comments

@hyejungg
Copy link
Collaborator

hyejungg commented Jan 6, 2022

IntellJ 플러그인 SonarLint 를 이용하여 정적 분석을 시행 (소스코드 정적분석)

정적분석 이란

정적분석은 코드를 실행하지 않고, 프로그램의 기능을 파악하고 코드나 프로그램의 구조를 분석하는 것이다.
코드리뷰나 단위 테스트에서 검출되지 않는 runtime error를 소스코드에서 검출하여 치명적 버그를 차단할 수 있다.
또한 보안 취약점 분석을 통해 잠재적 보안 취약점을 예방할 수 있고, 개발자 코딩 수준을 자동화된 검출 시스템으로 꾸준히 향상시켜 잠재적인 버그 예방 및 코딩 수준 향상에 도움이 된다.

정적분석 도입 이유

프로젝트에 정적분석을 도입한 이유는 다음과 같다.

  1. runtime error 검출
    • 혼자 프로젝트를 진행하므로 코드리뷰를 진행하지 못하므로 놓친 부분을 찾기 위함
  2. 코드 품질 향상
  • 잘못된 코드는 또 다른 잘못된 코드를 양상
  • '돌아가기만 하는 코드'는 전혀 도움되지 않음
  • 떨어지는 가독성과 높아지는 복잡도는 유지보수를 어렵게 함
  • 캠퍼스 핵데이 Java 컨벤션을 지키며 가독성을 높이기 위함
  1. 문제점을 출력하는 것에 그치지 않고, 솔루션 제공
  • 코드 내 취약한 부분을 알려줌
  • 좋은 코드와 나쁜 코드를 함께 보여주며 이해를 쉽게 함
  • 솔루션을 제공하여 쉽게 적용할 수 있도록 함

SonarLint을 적용하여 얻는 기대효과

  • 통일된 코드 스타일 적용 가능
  • 보안 취약점 검출을 통해 코드 품질 향상
    • code smell 없애기
    • major, minor 한 코드를 변경하여 취약점 줄이기
@hyejungg hyejungg added the refator 코드 개선 label Jan 6, 2022
@hyejungg hyejungg self-assigned this Jan 6, 2022
@hyejungg
Copy link
Collaborator Author

hyejungg commented Jan 7, 2022

(21.01.06)알게된 점

  • 사용하지 않는 import 는 지워두는게 좋다. Minor
  • return 타입을 Generic으로 두는 것보다 Object라도 달아두는게 좋다. Major
    ex. 위보다는 아래를 권장
    -> 안전하지 않은 코드가 런타임으로 탐지되는 것을 방지
@GetMapping("/info")
   public ResponseEntity showPerformanceInfo(@Valid @RequestParam(value = "date", required = true)
                                                 @DateTimeFormat(pattern = "yyyy-MM-dd") Date date,
                                             @Valid @RequestParam(value = "title", required = false) String title) {
   }
@GetMapping("/info")
   public ResponseEntity<Object> showPerformanceInfo(@Valid @RequestParam(value = "date", required = true)
                                                 @DateTimeFormat(pattern = "yyyy-MM-dd") Date date,
                                             @Valid @RequestParam(value = "title", required = false) String title) {
   }
  • 코드를 주석처리 한 부분은 사용하지 않을 경우 지우는게 좋다. Major

@hyejungg
Copy link
Collaborator Author

hyejungg commented Jan 11, 2022

향후 계획

  1. 코드 컨벤션 체크 스타일 intellj에 적용하여 코드 리포맷하기
  2. sonarQube와 Jenkins를 이용하여 정적분석 및 빌드 자동화 과정 진행

hyejungg added a commit that referenced this issue Jan 14, 2022
- 코드 스멜 최소화
- BookingService에 있는 redssion 분산락 관련 주석도 지워야 하지만, 공부용으로 남겨둘 예정
hyejungg added a commit that referenced this issue Jan 14, 2022
NAVER CAMPUS HACKDAY의 Java Code Conventions 적용을 위한 xml 파일 추가
@hyejungg
Copy link
Collaborator Author

hyejungg commented Jan 20, 2022

정적 코드 분석을 진행하면 왜 썼고, 왜 고치려고 하는지 서술할 수 있어야 함!
일급함수, 일급시민으로 코드를 작성하여 code smell check를 통해 없앨 수 있어야 함

code smell

: 컴퓨터 프로그래밍 코드에서 더 심오한 문제를 일으킬 가능성이 있는 프로그램 소스 코드의 특징
잘못 설계된 디자인 패턴 or 전체적인 프로그램의 디자인 패턴을 해치는 특정 구조들을 의미
code smell은 개발을 느리게 하고, 쉽게 버그가 생기도록 함

CICD 진행 시 프로세스 흐름을 유지해주는 코드가 중요!!
플러그인이 많을수록 플러그인에 의존하게 됨 -> 알고 쓰는게 중요. command 상에서 어케 돌아가는지 이해할 것!

hyejungg added a commit that referenced this issue Feb 7, 2022
[fix:#23] Java Code Convetions 적용 및 충돌 해결
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
refator 코드 개선
Projects
None yet
1 participant