프로젝트에 있는 코드 줄 수 계산해보기

프로젝트에 있는 코드 줄 수 계산해보기

개요

  • 프로젝트의 총 코드 라인수를 세는 방법
  • linux 커맨드 이용해서 세보기
  • python 스크립트로 세보기


모 회사 면접을 갔는데 본인이 짜본 프로젝트의 전체 코드수랑 자신이 짠 코드수는 얼마정도 되는지 물어보는 질문이 있었다. 코드의 라인수로 평가하려던건 아닐테고 프로젝트의 규모가 대략적으로 어느정도 되었는지 알고싶었던 것이 아닐까 생각한다.

대충 어림잡아 말했는데 집에오니까 진짜 라인수는 얼마나 될까 궁금한 마음에 직접 세 봤다.


Linux 커맨드로 세보기

모든 java 파일의 라인수를 카운트 하려면 프로젝트 루트폴더로 가서 아래 명령어를 실행시켜주면 된다.

$ find . -name '*.java' | xargs wc -l

점(.) 으로 표시한 현재 디렉토리에서 .java 로 끝나는 파일명을 찾고, 각각의 파일에 wc -l (word count, option 으로 라인수 출력) 명령어를 실행시켜서 한줄로 출력하는 것이다.

결과
272 ./src/main/java/cd/ac/sagenet/controller/AdminController.java
101 ./src/main/java/cd/ac/sagenet/controller/CertificateController.java
101 ./src/main/java/cd/ac/sagenet/controller/CourseApplyController.java
.
.
(중략)
.
.
623 ./src/main/java/cd/ac/sagenet/util/PDFBuilder.java
5114 total

또는 아래와 같은 명령어를 사용해서 프로젝트 루트에서 java 파일의 라인수만 출력할 수도 있다.

$ find . -name *.java | xargs cat | grep "$" | wc -l

find . -name 'JavaFileName.java' | xargs cat 여기까지만 실행하면 현재디렉토리에서 JavaFileName.java 라는 파일을 찾은 후 cat 이라는 명령어를 실행하게 된다. 실행결과는 JavaFileName.java 파일 내용이 터미널에 표시된다.

여기에 파이프라인으로 grep "$" 를 해주면 JavaFileName.java 파일에서 “$” 를 찾는데, “$” 는 EOL을 의미한다. 그리고 파이프라인으로 wc -l 해줘서 EOL 의 라인수를 세는 방법이다.

그런데 프로젝트 안에는 라이브러리도 있고, 폰트 파일도 있고… 내가 손하나 대지 않은 코드들이 많이 있다. 이런 디렉토리는 제외하고 싶고, 또 특정 파일을 제외하고 싶기도 했다.

그래서 좀더 쉽게 사용하고 싶어서 파이썬으로 코드를 하나 짜봤다.


파이썬 스크립트 만들어서 세보기

사용법은 아래와 같다.

  • ROOT_DIR: 조사할 프로젝트 루트 경로를 넣어준다.
  • extensions: 조사할 확장자명들을 넣어준다. ‘*.java’, ‘.py’ 이런식으로.
  • ignore_paths: 라인수 카운트에서 무시하고 싶은 디렉토리 경로를 넣어준다. (예, 라이브러리들이 담긴 디렉토리 경로)
  • ignore_files: 라인수 카운트에서 무시하고 싶은 파일의 이름을 넣어준다.
실행결과
 623 /Users/yaboong/DevWorkspace/eclipse-workspace/sagenet/src/main/java/cd/ac/sagenet/util/PDFBuilder.java
 529 /Users/yaboong/DevWorkspace/eclipse-workspace/sagenet/src/main/webapp/resources/js/functionScript.js
 361 /Users/yaboong/DevWorkspace/eclipse-workspace/sagenet/src/main/java/cd/ac/sagenet/util/ExcelUploadScore.java
 320 /Users/yaboong/DevWorkspace/eclipse-workspace/sagenet/src/main/resources/cd/ac/sagenet/mybatis/mapper/studentMapper.xml
 285 /Users/yaboong/DevWorkspace/eclipse-workspace/sagenet/src/main/resources/cd/ac/sagenet/mybatis/mapper/scoreMapper.xml
 276 /Users/yaboong/DevWorkspace/eclipse-workspace/sagenet/src/main/java/cd/ac/sagenet/controller/ScoreController.java
 .
 .
 (중략)
 .
 .
  16 /Users/yaboong/DevWorkspace/eclipse-workspace/sagenet/src/main/webapp/WEB-INF/views/student/noData.jsp
  
  지정한 확장자별 파일 개수
  *.java   48 개
  *.jsp    31 개
  *.xml    16 개
  *.css     8 개
  *.js      3 개
  
  프로젝트 전체 파일 수: 106 개
  프로젝트 전체 코드 라인 수: 10082 줄

이런식으로 나온다. 궁금하긴 했었는데 재밌다.

Comments

Yaboong's Picture

Yaboong

오스카 쉰들러는 흔해빠진 기회주의자요 부패한 사업가였다. 그러나 거대한 악이 세상을 점령하는 것처럼 보일 때 그 악에 대항해서 사람의 생명을 구한 것은 귀족도 지식인도 종교인도 아닌 부패한 기회주의자 오스카 쉰들러였다.

Seoul, South Korea https://github.com/yaboong