Scala

IntelliJ Scala 플러그인의 성능 팁

Read this post in other languages:

전체 버전 IDE는 일반 노트북에서 있을 수 있는 가장 복잡한 애플리케이션 중 하나입니다. 이러한 이유로, JetBrains의 Scala 플러그인 팀은 JetBrains 제품이 특정 상황에서 지연되거나 일반적으로 느리게 작동한다는 보고를 간혹 받고 있습니다. 경우에 따라 도움을 드릴 수 있지만, 예를 들어 코드베이스가 크고 복잡하거나 컴퓨터가 오래된 경우에는 저희가 해드릴 수 있는 일이 많지 않습니다. 대신, IntelliJ IDEA 및 Scala 플러그인 환경을 개선하기 위해 구성을 조정하거나 좋은 코딩 방식을 유지하는 등, 여러분이 직접 시도해볼 수 있는 방안이 있습니다. 이 중 몇 가지를 간단히 살펴보겠습니다.

먼저, 성능이 중요한 IntelliJ IDEA의 두 가지 주요 영역에 대해 살펴보겠습니다.

  1. 중요한 순간 하나는 프로젝트를 만들거나 열 때입니다. 이것은 메모리 관리와 관련이 있습니다.
  2. 두 번째는 복잡한 로직과 관련이 있습니다. 즉, Scala 플러그인이 오류 및 경고를 식별하고 강조 표시하거나 코드를 개선하는 방법에 대한 팁을 표시하려는 경우, 그리고 사용자가 Scala 플러그인에서 제공하는 액션 중 하나를 수행하고 코드의 많은 부분이 자동으로 편집되는 경우 등, CPU를 많이 사용하는 경우입니다.

두 경우 모두 유사한 방식으로 성능을 향상할 수 있습니다. 방법은 다음과 같습니다.

  • IntelliJ IDEA에 더 많은 리소스 제공
  • 사용하지 않는 검사 비활성화
  • 코딩 방식 개선
  • 일부 기능 비활성화

리소스

리소스부터 시작해보겠습니다. 이때 리소스란 기본적으로 더 많은 메모리 제공을 의미합니다. 이렇게 하기 전에 메모리 표시기를 활성화하는 것이 좋습니다. IntelliJ IDEA의 하단 패널을 마우스 오른쪽 버튼으로 클릭한 다음 메뉴가 나타날 때 해당 메모리 표시기 줄을 클릭하면 됩니다. 그러면 IntelliJ IDEA가 실제로 사용하는 메모리 양이 표시되며, 이에 따라 메모리 크기를 설정할 수 있습니다.

요즘 일반 노트북에는 8GB 이상의 RAM이 있으며, 이는 일반적으로 IntelliJ IDEA, 기타 애플리케이션 및 운영 체제가 모두 제대로 작동하는 데 충분합니다.

IntelliJ IDEA 메모리 사용량을 확인한 후 idea.vmoptions 파일을 엽니다. Help(도움말) 메뉴를 열고 Edit Custom VM Options(사용자 지정 VM 옵션 편집)을 선택해도 됩니다. 그리고 -Xmx 설정을 메모리 표시기에 표시된 값보다 약간 큰 값으로 변경합니다. 단, 특정 값 이상에서는 -Xmx를 늘려도 더 이상 성능이 향상되지 않습니다. 저의 경우에는 4GB로 늘리면 어느 정도 효과가 있었지만, 그 이상은 추가적인 향상이 미미했습니다.

Scala 플러그인의 경우 IntelliJ IDEA 내에서 앱을 컴파일링하기로 결정한 경우 가용 메모리를 늘리면 컴파일링 속도도 높아질 수 있습니다. 이렇게 하려면 Settings(설정) | Build, Execution and Deploymentt(빌드, 실행, 배포) | Scala Compiler Server(Scala 컴파일러 서버)에서 VM 옵션을 수정합니다.

검사

CPU 측면에서 보면, Scala 플러그인의 가장 중요한 기능 중 하나이자 CPU를 많이 사용할 수 있는 기능은 검사 모음입니다. 검사는 코드를 검사하여 특정 유형의 문제를 찾는 로직입니다. 어떤 문제는 매우 간단합니다(예: 절대로 수정되지 않으므로 변경 불가능한 값으로 바꿀 수 있는 private 변수). 그러나 사용되지 않는 public 필드와 같은 다른 문제는 조사하는 데 시간이 오래 걸릴 수 있습니다.

이러한 검사 중 일부가 유용하지 않다고 생각되는 경우 비활성화하면 강조 표시 속도가 향상될 수 있습니다. Settings(설정) | Editor(에디터) | Inspections(검사)로 이동하여 사용 가능한 검사 목록을 살펴보고, 필요하지 않은 검사는 비활성화할 수 있습니다. 더불어, 설정을 탐색하면 Scala 플러그인이 제공하는 모든 기능을 알아볼 수 있는 좋은 기회가 될 수 있습니다.

다음으로, Scala 플러그인의 여러 가지 검사 중 3가지를 더 자세히 살펴보겠습니다. 이러한 3가지 검사를 비활성화하더라도 성능 개선은 미미할 수 있습니다. 각 검사는 플러그인 로직의 작은 부분일 뿐이며, 사용자마다 다르게 영향을 미칠 수 있지만, 어느 정도는 가치가 있습니다.

  1. 타입 검사를 패턴 일치로 대체 가능

이 검사는 일련의 if-else 문에서 타입 검사 및 타입 변환을 찾고 이를 패턴 일치로 바꿀 것을 제안합니다. 단, 가장 복잡한 검사라도 주어진 코드에 검사가 적용되지 않는지 빠르게 확인할 수 있습니다(예: isInstanceOf가 없는 경우). 그러나 경우에 따라 다음과 같은 코드를 사용하고 싶을 수 있으며, 그 코드를 유지하려면 검사를 비활성화하는 것이 좋습니다.

2. Scala 2 구문은 Scala 3으로 대체 가능

이 검사는 컴파일러 옵션 -Xsource:3을 활성화한 경우에만 작동됩니다. Scala 3의 대체 구문으로 바꿀 수 있는 Scala 2 구문을 보고합니다. 호환성을 위해 -Xsource:3을 사용하지만 코드를 다시 작성할 필요가 없는 경우에는 안전하게 비활성화할 수 있습니다.

3. ‘선언 액세스를 제한할 수 있음’ 및 ‘사용되지 않는 선언’ 검사

이 두 검사는 선언이 코드의 모든 선언에 대해 사용되는 방식을 확인하려고 합니다. 첫 번째는 선언이 public 또는 protected인 경우 작동됩니다. 이 검사는 선언이 자체 클래스, 특성 또는 객체의 범위 밖에서 실제로 사용되는지 확인합니다. 그렇지 않은 경우 선언을 private로 만들 수 있다는 힌트를 표시합니다. 두 번째는 모든 선언에 대해 작동됩니다. 선언 범위를 살펴보고 사용 여부를 확인합니다.

코딩 방식

Scala를 사용하면 복잡한 코드를 간결한 방식으로 작성할 수 있으며, 저희는 이를 최대한 활용하는 편입니다. 하지만 대가가 있습니다. IDE가 알아내도록 둘수록 성능이 저하됩니다. 위의 예에서 알 수 있듯이, 많은 경우에 엄격한 코딩 방식을 적용하면 Scala 플러그인의 검사 일부는 불필요해질 수 있습니다. 실제로 선언이 사용되지 않았는지 또는 변수가 값이 될 수 있는지 파악해야 하는 경우, Scala 플러그인 검사가 수행하는 작업은 여러분이나 제가 수행하는 작업과 별로 다르지 않습니다. 우선 범위를 확인할 것이고, 이와 관련될 수 있는 다른 요소를 찾아보고, 하위 클래스, 묵시적 변환 등을 찾아볼 것입니다.

검토자가 코드의 복잡성으로 인해 어려움을 겪는다면, 코드를 개선할 여지가 있어 분석하기가 더 쉬울 수 있습니다. 마찬가지로 코드를 검사하는 데 시간이 너무 오래 걸려 IntelliJ IDEA 속도가 느려지는 경우 코딩 방식을 조정하는 것이 좋습니다.

  1. 클래스, 메서드 및 선언에 대한 적절한 접근 제어자를 설정하여 범위를 좁힙니다.
  2. 타입 추론을 과도하게 사용하지 마세요.
  3. 묵시적 사용을 제한합니다.
  4. 검사 로직이 너무 많은 경로를 따를 필요가 없도록, 구성 요소에 대해 긴밀한 결합보다 느슨한 결합을 사용하는 것이 좋습니다.
  5. 그리고 대규모 프로젝트에서는 모듈과 하위 모듈로 코드를 분할하여 검사 대상 범위를 다시 제한하는 것이 좋습니다.

또한 Settings(설정) | Languages & Frameworks(언어 및 프레임워크) | ScalaPerformance(성능) 탭으로 이동하여 제어 기능을 확인하고, 이러한 기능이 문제를 처리하다가 프로젝트 성능에 영향을 주는지 살펴볼 수 있습니다. 예를 들어, 묵시적 매개변수를 많이 사용하는 경우 이를 파악하는 데 시간이 오래 걸릴 수 있습니다. 또는 코드 예시를 사용하는 주석 내에 클래스 및 메서드마다 문서 항목이 있는 대용량 파일을 사용하는 경우, Scala 플러그인은 이를 적절하게 강조 표시하려고 합니다. 이러한 기능과 몇 가지 다른 기능도 비활성화할 수 있습니다.

기능

지금까지 알려 드린 모든 힌트는 특별한 사례에서 도움이 될 수 있습니다. 일반적으로 컴퓨터가 충분히 좋은 경우 IntelliJ IDEA의 성능은 괜찮을 것입니다. 앞서 언급했듯이 일반 노트북이면 이미 충분히 괜찮습니다. 프로젝트가 특히 까다로운 경우에만 이러한 힌트가 유용합니다.

하지만 어떤 이유로든, 성능이 낮은 오래된 컴퓨터에서 IntelliJ IDEA를 사용해야 할 수도 있습니다. 이러한 경우 환경을 약간 더 개선하기 위해 몇 가지를 더 시도할 수 있습니다. Settings(설정) | Appearance & Behavior(모양 및 동작) | Appearance(모양)로 이동하여, 안티 엘리어싱 및 부드러운 스크롤을 비활성화합니다. 글꼴이 덜 매끄럽게 보이고 파일 내용을 스크롤할 때 덜 매끄럽게 느껴지지만, 이 두 기능 모두 성능에 약간의 영향을 미칩니다. 그래도 충분하지 않으면 File(파일) 메뉴를 열고 Power Save Mode(절전 모드)를 활성화합니다. 이렇게 하면 IntelliJ IDEA의 많은 기능이 해제되므로 아무것도 도움이 되지 않는 경우에만 이렇게 하는 것이 좋습니다.

이것이 너무 극단적이라면 JetBrains Marketplace에서 설치할 수 있는 Automatic Power Saver 플러그인을 사용해 볼 수 있습니다. 절전 모드가 자동으로 설정/해제되는 시기를 제어할 수 있으므로, 필요할 때 IntelliJ IDEA의 더 복잡한 기능을 계속 사용할 수 있습니다.

또 다른 옵션은 타입 인식 어노테이터를 비활성화하는 것입니다. IntelliJ IDEA 메인 창의 오른쪽 하단 모서리에 있는 작은 ‘[T]’ 기호를 클릭하면 됩니다.

Scala 플러그인이 코드의 타입을 확인하지 않게 합니다. 모든 오류 검사를 비활성화하는 것이 아니라, 예를 들어, Int를 수락하는 메서드에 String을 인수로 전달하려고 할 때 타입이 많지 않기 때문에 오류가 발생한 검사만 비활성화합니다.

이슈에 대해 알려주세요

마지막으로, 특히 재현 가능한 특정 상황에서 성능 저하가 발생하는 경우, 이는 Scala 플러그인 내의 문제일 수 있으므로, 저희에게 알려주세요. 더 좋은 방법은 Performance Testing 플러그인을 설치하고 성능 스냅샷을 캡처하고 JetBrains YouTrack 시스템에서 티켓을 생성한 다음 스냅샷을 업로드하는 것입니다. 사용자의 의견은 문제의 원인을 파악하고 해결하여 Scala 플러그인을 더 효율적이고 사용하기 쉽게 만드는 데 도움이 됩니다.

게시물 원문 작성자

Jessie Cho

Maciej Gorywoda