IntelliJ와 build.gradle을 사용하는 Spring 프로젝트를 개발할 때 Gradle runner를 사용하는 이유

2022. 2. 24. 13:58·Programming

Google에 'IntelliJ 테스트 속도'로 검색한 결과

 

IntelliJ로 Spring 베이스의 프로젝트를 개발하거나 공부해본 경험이 있는 분들이 있다면 한 번쯤은 검색해보았을 키워드가 바로 테스트 속도, 빌드 속도일 것이다. 검색 결과의 내용은 거의 대부분 아래와 같은 방법으로 속도를 올릴 수 있다고 나온다.

2개의 Select Box의 값을 Gradle이 아닌 IntelliJ로 설정

  1. 프로젝트 빌드 툴을 Gradle로 사용하고 있는 경우,
  2. IntelliJ의 Preference -> Build, Execution, Deployment -> Gradle -> Build and run 탭을 확인한다.
  3. Build and run using과 Run tests using을 전부 Gradle이 아닌 IntelliJ로 변경한다.

하지만 왜 이렇게 하면 속도가 빨라지는지, 그리고 Gradle, IntelliJ의 두 Runner가 무엇이 다른지에 대한 설명이 상세하게 되어있는 글은 찾기 어렵다. 이와 관련해서 최근에 경험했던 내용들을 바탕으로 정리해보려 한다.

 

공식 문서에도 자세하게 설명이 되어있진 않다.

공식 문서에서도 두 가지 Runner의 차이가 상세하게 설명되어있지 않다. 여기서 말하는 상세하다는 것은 내부 구조까지 설명하면서 왜 속도 차이가 날 수밖에 없는지에 대한 기술적인 설명을 말한다.(못 찾은 걸 수도 있지만...)

 

Testing in Gradle | IntelliJ IDEA

 

www.jetbrains.com

하지만 두 Runner에 대한 간단한 소개는 하고 있다. 요약하면...

  • Gradle Runner는 CI/CD 환경에서 빌드한 것과 동일한 결과를 얻을 수 있다.
  • IntelliJ Runner는 JUnit Test Runner를 사용해 Incremental Compilation으로 인해 테스트 속도가 빠르다.

이러한 이유로 인해 테스트 케이스 실행 시 IntelliJ Runner로 설정한 뒤에 수행하면 좀 더 빠른 속도가 나왔던 것이다.

 

하지만 Runner 선택에 대한 가이드는 하고 있다.

 

 

Gradle projects | IntelliJ IDEA

 

www.jetbrains.com

Runner를 설정하는 부분에도 작은 글씨로 가이드를 하고 있지만, 공식 문서 내용과 함께 요약하면...

  • Pure Java/Kotlin 프로젝트인 경우 IntelliJ Runner를 선택하면 좀 더 빠른 속도를 기대할 수 있다.
    • 여기서 말하는 Pure 하다는 것은 Native Java/Kotlin 프로젝트를 말하는 것 같다.
  • 하지만 IntelliJ Runner는 모든 Gradle 플러그인을 지원하지 않는다. 그래서 빌드 시 Gradle의 빌드 결과와 동일하지 않을 수 있다.
  • 프로젝트에서 Annotation Processor를 사용하고 있다면 Gradle Runner를 사용하는 것을 권장한다.
    • 쉽게 말해서 Lombok을 사용하는 것이 Annotation Processor를 사용하는 것이라고 생각하면 된다.

 

실제로 차이가 난다.

내가 겪은 사례는 다음과 같다.

  • 특정 테스트 케이스에 대해서 IntelliJ Runner로 빌드한 뒤 IntelliJ Runner로 실행 시 실패
  • 특정 테스트 케이스에 대해서 Gradle Runner로 빌드한 뒤 IntelliJ Runner로 실행 시 성공
  • 특정 테스트 케이스에 대해서 Gradle Runner로 빌드한 뒤 IntelliJ Runner로 실행 시 실패

로컬에서 테스트 케이스가 실패하는데 정작 현재 작업 브랜치는 CI/CD로 빌드가 잘 되어 성공하는 경우를 겪은 뒤로는 그냥 속 편하게 빌드, 테스트 둘 다 Gradle Runner를 사용하고 있다.

 

결론

Spring Initializer로 생성되는 기본 빌드 스크립트의 형태에서 크게 벗어나지 않는다면 실제로 속도가 좀 더 빠른 IntelliJ Runner를 선택하지 않을 이유가 없다. 다만 IntelliJ Runner의 경우 빌드 스크립트가 복잡해지거나 여러 플러그인을 사용하는 경우 위와 같은 이슈가 발생할 수 있고, CI/CD를 통해 빌드된 결과물과 조금 다를 수 있다는 사실을 염두하면 좋을 것 같다.

'Programming' 카테고리의 다른 글

성능 테스트  (0) 2022.06.01
[springdoc-openapi 전환기 01] Spring Boot 2.6.x 버전에서 springfox와의 충돌 관련 이슈 & 임시 해결책  (0) 2022.03.20
좋은 글  (1) 2021.11.07
macOS Monterey의 5000번 포트  (0) 2021.11.04
k8s commands 04  (1) 2021.10.31
'Programming' 카테고리의 다른 글
  • 성능 테스트
  • [springdoc-openapi 전환기 01] Spring Boot 2.6.x 버전에서 springfox와의 충돌 관련 이슈 & 임시 해결책
  • 좋은 글
  • macOS Monterey의 5000번 포트
Doljae
Doljae
  • Doljae
    Zero to Hero
    Doljae
  • 전체
    오늘
    어제
    • 분류 전체보기 (349)
      • Programming (54)
      • Algorithm (161)
      • Review (102)
      • Career (8)
      • Diary (18)
      • Shorts (4)
      • Temp (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글 쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    BOJ
    line
    공채
    java
    AI
    회고
    2022
    sql
    2021
    인프콘
    jpa
    라인
    코딩테스트
    면접
    한빛미디어
    나는 리뷰어다
    컨퍼런스
    db
    2023
    leetcode
    코딩
    mysql
    ChatGPT
    sql튜닝
    PYTHON
    프로그래머스
    개발자
    나는리뷰어다
    database
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Doljae
IntelliJ와 build.gradle을 사용하는 Spring 프로젝트를 개발할 때 Gradle runner를 사용하는 이유
상단으로

티스토리툴바