로컬 빌드 시간 48분 > 10분으로 줄였던 세팅 기록.
현재 진행하는 프로젝트에서 Pull -> Maven Install -> Local 서버 기동시 거의 50분이 걸려 어떻게든 줄이려고 애 쓴 기록을 남기려고 한다. 혹시나 도움을 받을 사람이 있을 수도 있고..
- 기존 메이븐 인스톨 속도는 대략 25분, 최근들어 40분넘게 걸리기도 했었다.
- 기존 JAVA 컴파일 속도는 대략 23분정도 걸렸다. 클래스가 8천개에 달하다보니..
현재는 mvn generate-source + JDK 17로 컴파일 해서 기동시간을 10분 이내로 줄여놓았다.
환경 :
Spring Boot (2인지 3인지 기억이 안나므로 추후 재확인)
OpenJDK 1.8_252
JPA
Maven
을 활용하는 프로젝트.
IDE : Spring tool Suite 4를 개조해서 쓰는듯 하다. (이클립스 기반이라 찐폐기물임...)
이 폐기물에서 IntelliJ 2022.3.3 버전으로 바꿔서 속도개선한 기록임.
발단 :
내 일을 다 끝내서 아주아주 일이 없는... 한 2주? 를 보낸거 같다.
그냥 내 소스를 리팩터링 하면서 놀고 있었는데 어느 순간부터 빌드가 안되는 것이다.
마침 빌드속도도 노답에 어디서 문제가 발생하는지 원인을 조사하기 위해 이짓 저짓 별짓거리를 다 했었다.
(https://insertintoblog.tistory.com/21) - 이때 관련해서도 이전에도 포스팅을 했었다..
가장 효과가 있었던 두가지 요소는,
- 컴파일러 버전을 최신으로 올리는 것
- 불필요한 Maven Install을 하지 않는 것
이었다.
1. 컴파일러 버전을 최신으로 올리기
위치 : 파일 | 설정 | 빌드, 실행, 배포 | 컴파일러 | Java 컴파일러
이렇게 설정해주니 java 1.8컴파일하다가 java 17버전으로 컴파일이 됐었다. (빌드 끝날때 콘솔에 버전이 표기됨)
로컬에서 빌드하는 속도가 속도는 23분 -> 6~7분으로 단축되었다. (출력 디렉터리 삭제 후에 빌드함.)
여튼 여기서 상당한 단축효과를 얻었다. 서버 구동도 너무 잘 됐었다.
2. 불필요한 Maven Install 과정 제거
현재 프로젝트에선 JPA를 쓴다. (난 JPA를 제대로 배워본적은 없다. 그래서 일부 내용은 추측이다)
일단 JPA를 사용하기 위해 DB <-> JAVA간에 연결통로인 Entity라는 클래스는 개발자가 만들어야 한다.
하지만 JPA는 속도가 빠르지 않고 쿼리 구현이 유연하지 않아서, 이를 보완하기 위해 QueryDSL이라는 라이브러리를 추가로 사용한다.
QueryDSL 에서 사용할 Entity 역시 필요한데, 이는 개발자가 만들기엔 너무 불편하니, 메이븐 컴파일을 통해 자동으로 생성할 수 있었다.
하지만 메이븐 컴파일을 위해 보통 clean install을 돌리는데, 이 짓거리 하는데 25분 ~ 40분이 걸리고 있었다.
모든 클래스를 파싱을 해서 그런지...더더욱 느렸다. (클래스가 8천개정도 됨)
문득 든 생각이 이 QueryDSL을 위한 Entity만 따로 생성하고, 바로 빌드를 돌리면 빠르지 않을까라는 거였다.
생성 자체는 maven generate-source 기능을 사용해 2분내로 생성이 가능했었다.
따라서 QueryDSL Entity 생성 2분 + 최적화된 최신 컴파일러로 빌드해 7분 = 10분이내 빌드 완료
가 가능했었다.
최근 커밋에서 Entity 수정이 없었다면 생략하고 바로 빌드가 되서 2분이내로 끝나는 경우도 있었다.
마무리 :
맨 첫줄에 언급했듯이
Pull > Maven clean install > 로컬 자체 빌드에 50분을 쓰던걸
Pull > Maven generate-source > 로컬 자체 빌드(최신 컴파일러)를 통해 10분내로 끝낼 수 있게 되었다.
물론 Spring tool Suite 4 에서도 가능하겠지만
얘는 정말 빌더설정이 지랄맞아서 빌더를 체크해제하고 빌드하고, 다시 체크 후 로컬 서버를 올리고
해야 되는 등 모든 과정이 사람 손을 타야 했었다.
게다가 너무 무거운 툴이라, 메뉴 하나하나를 누를때마다 응답 없음 응답 없음 응답 없음상태가 되서
그냥 그만 알아보기로 했다. (야이....XX)
![]() 클릭 한번 마다 먹통되는 이클립스를 보는 내 표정 |
![]() 클릭 한번 마다 먹통되는 이클립스를 보는 내 표정 |
![]() 클릭 한번 마다 먹통되는 이클립스를 보는 내 표정 |
추가 :
이 과정을 하려면 역시나 이 버튼 저 버튼을 눌러서 빌드를 기다려야 된다.
버튼 하나로 소스 새로고침 + generate source + 빌드 + 구동을 한번에 할 순 없을까?
당연히 되지!
Maven Goal 설명
- dependency:resolve - 메이븐 프로젝트 업데이트와 동일한 명령어다.
- generate-sources - 아까 윗 페이지에서 봤던 버튼을 대신하는 명령어다. (메이븐 라이브러리를 통한 소스생성)
이 실행 설정을 저장하고, 그냥 실행 버튼한번을 누르면
소스 새로고침 + generate source + 빌드 + 구동을 한번에 할 수 있다. 중간에 사람와서 버튼을 눌러줄 필요가 없다는것이다.
이 남는 시간동안 화장실을 갔다와도 되고 편의점을 갔다와도 되고.. 아주 여유로워질 것이다.
그럼 여기까지