티스토리 뷰

배경

팀 프로젝트를 하면서 비지니스 로직 이외에 code formatting 과 같이 다른 부분에서 리뷰를 남기거나 신경을 써야하는 것이 또 다른 낭비라고 생각했다. 모두가 좀 더 깔끔한 코드 형태를 보면서 비지니스 로직에 집중했으면 하는 마음에서 린트 설정을 알아보게 되었다. 실제로 근로에서는 kotlin을 사용하는데, ktlint를 사용하여 코드 컨벤션이 맞지 않으면 커밋 자체가 되지 않도록 설정되어 있다.

 

  • 비지니스 로직에 집중
  • 깔끔한 코드 스타일을 유지
  • intelliJ 자동정렬에서 개행이라던지, 메소드 간 2줄이 띄워지는 형식들은 잡아주지 못함

정적 분석도구 찾기

ktlint와 같은 것들을 찾다보니, sonarlint, checkstyle 등이 나왔다. 확실히 모르지만 sonarlint는 개인이 설정파일에서 설정해주어야 하는 것 같아 보였다. 팀 간에 형식을 협의하고 같은 파일 내용으로 사용하면 되는 듯 해 보였다. 해당 내용이 누락되었을때, 강제하거나 자동화하여 알려줄 수 있는 방식은 아니라고 느껴졌다. checkstyle이 내가 원하던 분석도구에 다 가깝다고 생각하여 checkstyle을 도입하게 되었다. 또한, checkstyle은 java file에 한해서만 동작한다.

 

  • checkstyle 선택
  • 강제성, 자동화
  • java

설정하기

gradle 설정

plugins {
    id 'checkstyle'
}

checkstyle {
    maxWarnings = 0 // 규칙이 어긋나는 코드가 하나라도 있을 경우 빌드 fail
    configFile = file("${rootDir}/config/gpu-im-checkstyle.xml") // 설정 파일 경로 지정
    toolVersion = "8.39" // 처음에 낮은 버전을 사용했더니 깨지는 현상이 있었다. 설정파일의 내용에 맞는 버전을 선택
}

파일 설정

  • config 디렉토리에 xml 파일을 추가
  • 우아한테크코스 컨벤션은 구글 가이드였기 때문에 구글 스타일 가이드를 거의 유지했다. (indent는 4로 변경)

체크스타일 구글 컨벤션 적용

  • 체크스타일에서 구글 컨벤션 체크스타일을 제공한다.
  • 체크스타일 google-check.xml
  • 메소드명, 클래스명, import 순서 등등 더 많은 내용을 컨벤션으로 지정되어 있었다.
  • checkstyle의 파일을 그대로 유지하면 테스트 상의 한글 메소드명, 라인길이, import 순서 등등에서 컨벤션이 깨지는 부분들이 많았다.
  • 이런 부분까지 강제해야할 필요성을 느끼지 못해 (서로 충분히 잘 하고 있다고 판단) 현 코드에 맞게 불필요한 부분들은 제거했다.
  • 파일 끝의 개행, 2줄이상 공백라인 금지 등 몇가지 추가사항을 넣어주었다.

설정 변경 내용

 

  • 파일 마지막 개행(lf, eof)
  • 1줄 이상 띄우는 multi empty 라인 제거
  • 한 라인의 최대길이 120 (line-max-length: 120)
  • import, javadocs, method name 과 관련된 내용은 삭제함(테스트 코드를 한글로 만들기 때문에 해당 내용이 들어가면 깨지는 내용이 다수)
  • indent: 4

인텔리제이에 구글 컨벤션 적용

  • intelliJ에서 코드 포맷팅 자체를 해주진 않기 때문에 구글 자바 스타일가이드 xml 공통 설정 파일로 설정예정이다.
  • 구글 자바 스타일 가이드 xml
  • 해당 파일에서 일부 인덴트 등을 변경하였다.
  • xml 파일 다운로드하여 원하는 위치에 저장
  • (깃허브 파일을 raw 보기로 해서 저장하거나, 내용을 복붙하여 xml 파일 형식으로 저장하면 된다.)
  • preferences>codestyle>java 에서 default 대신 해당 xml 파일로 설정

실행하기

cli 로 실행

  • 컨벤션에 맞는다면 BUILD SUCCESSFUL 확인가능
  • cd back-end // gragle 을 실행할 수 있는 디렉토리로 들어가서 ./gradlew -q checkstyleMain // main 에 대한 컨벤션 체크 ./gradlew -q checkstyleTest // test 에 대한 컨벤션 체크

gradle 사이드바에서 실행

  • 인텔리제이 오른쪽 사이드바에서 실행가능하다.
  • 실행하면 테스트까지 진행이 된다.
  • 실패하면 html 파일로 리포트가 제공이 되어 확인이 가능하다.
  • 어떤 클래스의 몇 번째 줄에서 어떤 내용으로 컨벤션이 지켜지지 않았는지 확인이 가능하다.

자동화

  • pre-commit의 git hooks으로 적용하려고 했으나 스크립트 작성에 어려움이 있었다. 또한, 너무 빡빡한 강제는 서로간의 스트레스가 될 수도 있을 것 같았다.
  • github action 으로 PR시 지켜지지 않으면 merge 되지 않도록 설정할 수 있을 듯 하다.

정리

  • 코드 컨벤션 결과를 자동화 해서 확인이 가능했고, 강제할 수 있는 툴을 사용하여 팀 컨벤션을 유지하는데 도움이 될 듯 하다.

'우아한테크코스 > 레벨3' 카테고리의 다른 글

서브모듈 적용하기  (0) 2021.08.12
팀 프로젝트가 나에게 남긴 것  (0) 2021.08.05
JobQueue 처리 기술 도입기  (4) 2021.07.14
Jpa OneToMany 단방향 연관관계  (0) 2021.07.09
JPA 기초: 연관관계매핑  (0) 2021.07.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함