PhpStorm 2020.1 출시: 별도 설정 없이 바로 사용할 수 있는 composer.json 지원, 향상된 유형 추론, PHPUnit Toolbox, Grazie 문법 검사기 및 기타 다양한 기능 제공

Jessie Cho

PhpStorm 2020.1이 출시되었습니다!

PhpStorm 2020.1

이 주요 릴리스에는 별도 설정 없이 바로 사용 가능한 composer.json 지원, PCOV 및 PHPDBG의 코드 커버리지, PHPUnit Toolbox, 새로운 검사, 빠른 수정 및 리팩토링, 고급 문법 검사기 및 기타 유용한 기능이 다양하게 포함되어 있습니다.

PhpStorm 2020.1 다운로드

단 몇분만 시간이 있으시다면 위에 있는 2020.1의 새로운 기능 동영상을 보고 주요 개선 사항을 간단하게 확인해 보세요. 조금 더 시간이 여유 있으시다면 이 새 버전에서 알아야 할 전체 변경 내용에 관한 개요를 읽어보세요. 하지만 GIF가 무척 많이 포함되어 있으니 마음의 준비를 단단히 하세요!

별도의 설정 없이 지원되는 composer.json

이제 모든 종속 요소 관리 액션을 composer.json 파일을 편집하면서 바로 사용할 수 있습니다.

새로운 composer.json 파일을 생성하려면 컨텍스트 메뉴 또는 Ctrl(⌘)+N을 누르세요. 이 파일의 템플릿은 Preferences(기본 설정)/Settings(설정) | Editor(에디터) | File and Code Templates(파일 및 코드 템플릿)에서 찾을 수 있습니다.

composer-json_create_600

패키지를 종속 요소로 추가
종속 요소를 추가하려면 간단히 벤더 및 패키지 이름을 입력하세요. 그러면 PhpStorm에서 적절한 옵션을 제안해줍니다.
version 필드에서는 이 패키지의 이용 가능한 버전을 제안해줍니다. 지금은 버전 범위에 대해 캐럿 또는 기타 심볼을 직접 추가해야 하지만 다음 릴리스에서는 이를 자동으로 구현할 것입니다.

composer-json_manage_dependencies

또한 필요한 PHP 및 확장 프로그램을 지정해야 하는 경우 자동 완성 기능이 작동합니다.

패키지 팝업에서는 packagist.org에서 가져온 다운로드 수 및 평점에 관한 정보를 찾을 수 있습니다. 패키지 및 해당 버전에 대한 모든 정보는 packagist.org에서 가져와 캐시됩니다.

composer_package_info

패키지 설치 및 업데이트
composer.lock 파일 및 패키지가 설치되어 있지 않으면, PhpStorm에서 requirerequire-dev 섹션 이름을 강조 표시합니다. 에디터 상단의 도구 모음에서 Install(설치) 버튼을 클릭하거나 Alt(⌥)+Enter를 누르고 Install packages(패키지 설치)를 선택하여 인텐션을 사용하세요.

composer-json_install-update

그리고 일부 패키지만 다운로드되어 있을 경우, PhpStorm은 아직 설치되지 않은 패키지를 강조 표시합니다. 해당 패키지 위에서 Alt(⌥)+Enter를 누르면 Update package (패키지 업데이트) 또는 Update all packages(모든 패키지 업데이트)를 선택할 수 있습니다.

현재 설치된 패키지 버전은 버전 요구 사항 옆에 회색으로 표시됩니다.

파일 및 폴더로 이동
Ctrl(⌘)+클릭 또는 Ctrl(⌘)+B를 사용하면 엔티티 정의로 이동하거나 사용 위치를 검색할 수 있다는 사실은 아실 겁니다.

이제 이 기능이 composer.json에서도 작동합니다. 패키지에서 Ctrl(⌘)+클릭하면 Project Tree(프로젝트 트리)에서 해당 디렉토리가 강조 표시됩니다. 파일이라면 에디터에서 열립니다.

composer-json_navigate

composer.json 내 임의의 링크 위에서 Ctrl(⌘)+클릭 또는 Ctrl(⌘)+B를 누르면 해당 항목이 브라우저에서 열립니다.

autoload(-dev) 내 자동 완성 기능 지원
자동 완성 기능이 프로젝트의 클래스 및 디렉토리 구조를 기반으로 네임스페이스 및 폴더 경로를 완성합니다.

composer-json_autoload@2x

여기에서도 Ctrl(⌘)+클릭하거나 Ctrl(⌘)+B를 눌러 파일 및 폴더로 이동할 수 있습니다.

스크립트 개선 사항
첫째, 파일/폴더/메소드로 이동할 수 있습니다. 둘째, 명령어의 별칭이 지원됩니다. 셋째, 스크립트 이름 근처에 있는 gutter_play_tr 버튼을 누르면 에디터에서 스크립트가 실행됩니다.

이렇게 하면 자동으로 실행 구성이 생성됩니다. 즉, 단축키 Ctrl(⌃)+R로 스크립트를 재실행할 수 있어 디버그 시 매우 편리합니다.

composer-json_scripts_run-config@2x

코드 품질 도구
dev 종속 요소에 FriendsOfPHP/PHP-CS-Fixer가 있는 경우, PhpStorm에서 그에 해당하는 검사가 활성화되어 있는지, 규칙 집합이 설정되어 있는지 확인합니다. 그렇게 되어 있지 않은 경우, Alt(⌥)+Enter를 눌러 수정할 수 있습니다.

composer-json_quality_tools@2x

PHP 유형 추론 개선 사항

유형 추론 엔진은 PhpStorm의 핵심 기능으로, 몇가지 중요한 변경 내용이 적용되었습니다.

중복 @var 태그 강조 표시
@var 태그를 추가하면 PhpStorm에 변수의 유형을 편리하게 제안할 수 있습니다. 그러나 유형 추론의 기능이 점차 개선되어 PhpStorm에서 해당 유형을 이미 인지하게 되면서 그러한 선언 중 일부가 중복되는 경우가 있습니다. 이러한 경우 Alt(⌥)+Enter를 눌러 “Remove @var” 빠른 수정을 사용하여 해당 항목을 강조 표시한 후 제거할 수 있습니다.

php-type-inf_var

null 유형 추적은 까다로운 작업으로, 기존 PhpStorm이 해결하지 못했던 부분입니다. 2020.1에서 PhpStorm은 변수가 null일 수 있는 경우와 아닌 경우를 인지합니다. 다음 예시를 확인해 주세요.

php-type-inf_null

type-inference_null-guard

초기화된 배열에 코드 완성 지원
알려진 요소를 가진 배열이 있고 나중에 이 배열을 반복한다고 생각해 보세요. 이전에 이러한 배열에서는 유형 정보가 손실되어 코드 완성이 작동하지 않았습니다. 하지만 2020.1에서는 모든 것이 작동합니다.

php-type-inf_array_completion

array_map/filter에서 코드 완성 지원
이제 array_map()array_filter()로 전달된 클로저의 본문에 있는 배열 항목에 코드 완성이 지원됩니다.

type-inference_array_map@2x

PCOV 및 PHPDBG 코드 커버리지

Xdebug를 사용하면 코드 커버리지 보고서를 얻을 수 있습니다. 그러나 이 도구는 기본적으로 디버거이기 때문에 상당한 오버헤드가 발생합니다. 커버리지 보고의 속도를 높이려면 krakjoe/pcov 확장 프로그램이나 PHP 5.6+에서 기본 제공되는 PHPDBG와 같은 가벼운 도구를 사용하면 됩니다.

그리고 이제 이 두 가지 도구가 PhpStorm에서 지원됩니다. 테스트용 실행 구성을 생성하려면 설정에서 원하는 커버리지 드라이버를 선택해야 합니다. 그런 다음, run_coverage_tr 버튼을 클릭하여 커버리지 보고서가 함께 출력되는 테스트를 실행하면 됩니다.

code-coverage

Xdebug, PCOV, phpdbg의 커버리지 보고 간의 차이점에 관해서는 PCOV의 README에서 자세히 읽어보세요.

PHPUnit Toolbox

최근 출시된 PHPUnit 9에서는 수많은 기능이 제거되고 사용 중단된다고 발표되었습니다. 이에 따라 마이그레이션의 속도를 높이고 오류를 방지하기 위해 수많은 검사와 빠른 수정이 추가되었습니다.

phpunit_quick-fixes

또한 이제 클래스 선언에서 Alt(⌥)+Enter를 누르고 Create New PHP Test(새 PHP 테스트 생성)를 선택하여 매우 빠르게 클래스에 대한 새 테스트를 생성할 수 있습니다.

phpunit_create_test@2x

메타데이터

고급 메타데이터를 사용하면 PhpStorm에 프로젝트에 관한 추가 정보를 제공할 수 있어 코드 완성 및 검사가 향상됩니다. 예를 들어 이 기능은 Symfony 플러그인Laravel IDE Helper에서 사용됩니다.

이 외에도 수많은 메타데이터 개선 사항이 PhpStorm 2020.1에 추가되었습니다.

재정의, 매핑, 유형 지시문에서 매개변수 색인 지정
이전에는 override(), map(), type()을 사용하여 함수 내 첫 번째 인수의 동작을 조정할 수 있었습니다. PhpStorm 2020.1에서는 임의의 매개변수 색인을 지정할 수 있습니다.

metadata_override_with_index

__get을 통해 속성에 액세스
매직 메소드 __get()을 통해 속성에 액세스하려 하면 유형 정보가 손실됩니다. @var 또는 @property 태그를 추가적으로 사용하면 해결되기도 했지만 이 방법이 항상 통하지는 않았습니다. 그러나 이제 메타데이터를 이용해 모든 것을 지정할 수 있습니다.

metadata_getters

ArrayAccess를 구현하는 객체에 대한 키 완성
메타데이터는 ArrayAccess 객체를 지원했지만 값의 유형만을 제안했었습니다. 하지만 이제 사용 가능한 키도 자동 완성됩니다.

metadata_arrayaccess_keys

사용자 지정 출력 지점
PhpStorm은 die()exit()과 같은 함수나 실행 종료와 같은 예외 처리를 고려합니다. 그러나 애플리케이션에는 더 복잡한 종료점이 있을 수 있습니다(예: 간단한 dd() 또는 E_USER_ERROR 인수를 가진 trigger_error()).

PhpStorm 2020.1은 함수를 종료점으로 표시하여 그에 따라 제어 흐름 분석이 올바르게 실행되도록 합니다.

metadata_exitpoint

메타데이터를 통해 동작이 변화된 함수를 표시하는 아이콘
override(), exitPoint() 또는 expectArguments()를 사용하여 동작이 변경된 함수에는 여백에 아이콘이 표시됩니다. 이 아이콘을 클릭하면 해당 동작이 수정되어 있는 .phpstorm.meta.php 파일이 열립니다.

metadata_guttericons

이 아이콘은 Preferences(환경 설정)/Settings(설정) | Editor(에디터) | General(일반) | Gutter Icons(여백 아이콘)에서 숨길 수도 있습니다.

머신러닝 기반의 코드 완성 순위 지정

머신러닝을 사용하여 제안의 순위를 지정하므로 제안 목록이 더 최적화되어 정렬됩니다.

ML이 실제로 작동하는 것을 보는 방법?
ML 기반의 순위 지정 기능은 기본적으로 비활성화되어 있습니다. 이 기능 때문에 저희 일을 뺏기기는 싫으니까요! 활성화하려면 Preferences(환경 설정)/Settings(설정) | Editor(에디터) | General(일반) | Code Completion(코드 완성)으로 이동하여 Rank completion suggestions based on Machine Learning(머신러닝을 기반으로 한 코드 완성 제안의 순위 지정)PHP라는 2가지 옵션을 켜세요.

Show position changes in completion popup(완료 시 위치 변경 팝업 표시) 옵션을 활성화하면 자동 완성 목록에서 항목 순서가 어떻게 변경되었는지 표시됩니다.

ml-completion

저희는 AI에 일자리를 뺏기지 않기 위해 향후 릴리스에서 이 기능을 계속 보완할 계획입니다.

새로운 검사 기능

private 속성을 지역 변수로 교체 가능
속성의 정의가 메소드 하나에서만 사용되고 즉시 재정의되면 강조 표시됩니다. 그러한 경우 Alt(⌥)+Enter를 사용하여 “Replace property with local variable”(지역 변수로 속성 교체)빠른 수정을 호출할 수 있습니다.

inspection_private-to-local@2x

불필요한 속성 초기화
private 속성에 클래스의 기본값이 있지만 일부 다른 값이 생성자의 속성에 즉시 대입되었다고 가정해보겠습니다. 이러한 경우 기본값이 중복되어 불필요한 것이 추가될 뿐입니다.

사용되지 않은 초기화는 강조 표시되며, Alt(⌥)+Enter를 눌러 “Remove redundant initializer”(중복된 이니셜라이저 제거) 빠른 수정을 사용해 제거할 수 있습니다.

inspection_redund_prop_init@2x

PHP 7.4의 기본값에 따라 속성 유형 변경
php-74_default_type_mismatch@2x

중복 삼항 연산자
PhpStorm에서 불필요한 삼항식을 강조 표시해주므로 Alt(⌥)+Enter 빠른 수정을 사용하여 간단한 표현식으로 교체할 수 있습니다.

ternary_redundant

과도한 pass-by-ref
pass-by-ref를 사용하면 예기치 못한 결과가 발생할 수 있어서 이 때문에 Nikita Popov는 PHP에서 Allow explicit call-site pass-by-reference annotation(명시적 call-site pass-by-reference 어노테이션 허용)을 제안했습니다.

현재 PhpStorm 2020.1에서는 pass-by-ref로 선언되었지만 그렇게 사용되고 있지 않은 매개변수를 강조 표시합니다. 이러한 매개변수는 Alt(⌥)+Enter로 빠른 수정을 실행하여 안전하게 제거할 수 있습니다.

pass-by-ref_param

이는 foreach 루프 내 pass-by-ref를 가진 배열에도 동일하게 작동합니다.

pass-by-ref_array

Removing an unnecessary PHPDoc block that only has type declarations(유형 선언만 있는 불필요한 PHPDoc 블록을 제거)에 그에 해당하는 빠른 수정이 추가되어 처리가 간편해졌습니다.

phpdoc_remove_redundant

기본적으로 이 검사는 Info(정보) 수준으로 설정되어 있으므로 아무 것도 강조 표시하지 않습니다. 중복 PHPDoc 블록을 강조 표시하려면 Preferences(환경 설정)/Settings(설정) | Editor(에디터) | Inspections(검사)에서 Redundant PHPDoc comment(중복 PHPDoc 주석) 검사의 심각도를 Weak Warning(약한 경고) 이상으로 설정하세요.

‘메소드 이동’ 리팩토링 업데이트

때로는 메소드를 다른 클래스로 이동하는 것이 합리적입니다. 그리고 이러한 메소드를 프로젝트 코드베이스 전체에서 여러 번 사용하는 경우 PhpStorm을 사용하는 것이 유용할 수 있습니다.

이전에는 먼저 메소드를 정적으로 만든 다음, 다른 액션을 호출하여 메소드를 이동해야 했습니다. PhpStorm 2020.1에서 ‘Move method'(메소드 이동) 리팩토링은 하나의 강력한 액션으로 재설계되었습니다. 불필요한 작업 및 팝업이 제거되었으며 모든 것이 단 하나의 단계로 수행됩니다.

메소드를 커서로 가리킨 후 F6(또는 Ctrl+T, 3)을 누른 다음, 대상 클래스를 선택하면 이동이 완료됩니다.

move_refactoring

HTTP 클라이언트에서 PHP 디버그

이제 디버그를 시작할 때 귀찮은 매개변수 작업을 하거나 브라우저에 확장 프로그램을 설치하지 않아도 됩니다. 간단히 .http 파일에서 HTTP 요청을 작성하고 Alt(⌥)+Enter 메뉴에서 사용 가능한 PHP Debug 명령어를 실행하거나 재생 아이콘 gutter_play_tr을 클릭하여 실행하기만 하면 됩니다. 이렇게 하면 XDEBUG_SESSION 쿠키가 요청에 자동으로 추가됩니다.

http-client_php_debug

그 외에 PHP와 관련된 몇가지 작은 개선 사항

@deprecated 요소가 Structure(구조) 트리 뷰에서 취소선으로 처리되어 표시됩니다.
Ctrl(⌘)+F12

deprecated_structure_view_cut

짝을 이루는 태그 <?php / ?> 강조 표시

php_tags_highlight@2x

여는 괄호/닫는 괄호로 이동
Shift+Ctrl+M (⌃+M)

jump_brace@2x

Twig에 대한 Lexer 사용자 지정
간혹 같은 구문이 있는 Twig 템플릿의 태그 문자를 변경해야 할 수 있습니다(예: Angular를 사용하는 경우).
이제 이러한 작업을 Preferences(환경 설정)/Settings(설정) | Languages & Frameworks(언어 및 프레임워크) | PHP | Twig에서 수행할 수 있습니다.

IDE

고급 철자 검사기 및 문법 교정기

Grazie 플러그인은 PhpStorm에서 기본 제공됩니다. 이 플러그인은 텍스트의 철자 오류뿐만 아니라 문법 및 스타일 오류도 검사합니다. Grazie는 16개 언어를 지원하며 모든 검사는 데이터를 제3자에게 전송하는 일 없이 로컬에서 수행됩니다.

기본적으로 텍스트 파일을 검사하도록 설정되어 있습니다.
모든 문자열 리터럴, 주석, PHPDoc 블록, 커밋 메시지에 Grazie를 사용하도록 설정할 수도 있습니다.

PHP에 사용하려는 경우 Settings(설정)/Preferences(환경 설정) | Editor(에디터) | Proofreading(교정) | Grammar(문법)에서 Grazie를 켤 수 있습니다.

grazie

LightEdit 모드

파일을 빠르게 살펴보거나 수정해야 하는 경우가 있습니다. 이러한 경우 단 하나의 파일을 위해 전체 IDE를 여는 것은 과한 것 같지만 강조 표시 및 기타 유용한 기능은 사용하고 싶을 겁니다. LightEdit 모드는 정확히 이러한 상황을 위해 준비되었습니다.

작동 방식은 다음과 같습니다. PhpStorm이 실행되고 있지 않은 상태에서 명령줄 또는 OS 컨텍스트 메뉴에서 파일을 열면 파일이 LightEdit에서 열립니다. 단, 모든 기능을 갖춘 PhpStorm 인스턴스가 활성화된 경우 PhpStorm에서 바로 파일이 열립니다.

lightedit

이제 JetBrains Mono를 기본 글꼴로 사용

jetbrainsmono

Zen 모드

이 모드에는 Distraction Free(집중력 분산 방지) 및 Fullscreen(전체 화면) 모드가 결합되어 있어, 사용 시 방해 없이 코드에 집중할 수 있습니다.
View(보기) | Appearance(모양) | Enter Zen Mode(Zen 모드 실행)에서 활성화할 수 있습니다.

zenmode

UI

터미널 세션 분할

새 탭을 열고 탭을 전환하는 대신 창을 분할해 하나의 탭에서 여러 세션을 열 수 있습니다. 이렇게 하려면 컨텍스트 메뉴에서 Split Horizontally/Vertically(수평/수직 분할)를 선택하세요.

split_terminal

IntelliJ Light 테마

라이트 테마가 업데이트되었습니다. 모든 운영 체제에서 동일하게 보이도록 통합되었으며 이름이 IntelliJ Light로 변경되었습니다.

상태 표시줄 사용자 지정

컨텍스트 메뉴에서 IDE 창의 오른쪽 하단에 있는 상태 표시줄에 표시할 정보를 선택할 수 있습니다.

customize_statusbar

구성

통합된 SSH 구성

이전에는 배포, 원격 인터프리터 또는 SSH 터미널에서 SSH 연결을 재사용할 때마다 다시 구성해야 했습니다.

이제 Preferences(환경 설정)/Settings(설정) | Tools(도구) | SSH Configurations(SSH 구성)에 있는 단일한 곳에서 모든 SSH 연결을 추가하거나 편집하고 필요할 때 어디서나 사용할 수 있습니다.

unified_ssh_config

unified_ssh_remote_php

IDE 구성 경로 변경

예를 들어, macOS는 다음과 같습니다.

- ~/Library/Preferences/PhpStorm2019.3
+ ~/Library/Application Support/JetBrains/PhpStorm2020.1

도움말에서 자세히 알아보기

보다 유연한 실행 구성 공유

이전에는 실행 구성이 .idea 폴더에 저장되었습니다. 그래서 대부분의 사용자가 더 나은 방법이 있음에도 불구하고 실행 구성을 폴더째로 .gitignore에 추가했습니다. 이제 실행 구성을 저장할 위치를 선택해 해당 구성을 VCS를 통해 팀원과 공유할 수 있습니다. 이 방법으로 프로젝트를 가져와 PhpStorm에서 열고 단 한 번의 클릭으로 실행할 수 있기 때문에 특히 새로운 직원이 합류할 때 편리할 수 있습니다.

이 기능을 이용하려면 Run/Debug configuration(실행/디버그 구성) 대화상자에서 Store as project file(프로젝트 파일로 저장) 옵션을 선택한 다음, 톱니바퀴 아이콘을 클릭하여 프로젝트에서 원하는 경로를 선택하세요.

run-configurations_share

버전 관리

새로운 커밋 도구 창

Commit(커밋) 창이 모달이 아닌 모드로 제공되며 왼쪽에 표시됩니다. 이렇게 되면 커밋이 준비되는 동안 다른 파일을 보고 작업하는 데 방해가 되지 않습니다. 또한 변경 내용에 대한 자세한 정보를 화면에서 볼 수 있습니다.

Commit 도구 창은 신규 사용자에게는 기본적으로 활성화되어 있지만 이전에 PhpStorm을 설치한 사용자에게는 비활성화되어 있습니다.

이 창은 Preferences/Settings(환경 설정/설정) | Version Control(버전 관리) | Commit(커밋)에서 Use non-modal commit interface(비 모달 커밋 인터페이스 사용) 옵션을 사용해 언제든지 활성화할 수 있습니다.

commit_flow

향상된 Git 브랜치 워크플로

현재 Git 브랜치는 IDE 창의 오른쪽 하단에 지정되어 있습니다. 이를 클릭하면 IDE 창에서 VCS | Git | Branches(브랜치) 대화상자가 열립니다.

이 대화상자에는 검색창이 추가되었으며 Refresh(새로고침) 버튼을 누르면 원격 브랜치 목록이 업데이트됩니다. 각 커밋에 대한 표시도 수신은 파란색, 송신은 녹색으로 추가되었습니다.

git_branches

IDE에서 Git 설치

기존 Git 저장소를 복제하면 PhpStorm이 컴퓨터에서 Git 실행 파일을 찾고, 찾을 수 없는 경우 해당 파일을 다운로드하여 설치하도록 제안합니다.

새롭게 작업된 대화형 리베이스 워크플로

Git Rebase를 사용하면 커밋 기록을 다시 작성할 수 있으며, 임시 커밋을 빠르게 제거하고 메시지를 수정하거나 커밋 순서를 재정렬할 수 있습니다. 물론 이 모든 작업을 터미널에서도 직접 수행할 수 있지만 PhpStorm에서는 커밋 및 Diff의 내용까지 볼 수 있습니다.

시작하려면 커밋 기록에서 원하는 베이스 커밋을 선택해야 합니다. 그런 다음 컨텍스트 메뉴에서 Interactively rebase from here(여기에서 상호작용으로 리베이스)를 선택하세요.

git_rebase

데이터베이스 도구

PhpStorm에는 DataGrip의 거의 모든 기능이 기본적으로 포함되어 있습니다. 새로운 기능에 관해서는 저희 PhpStrom 팀 동료가 개괄한 데이타베이스 도구의 새로운 기능을 확인해 보세요.

평소와 마찬가지로 WebStorm 2020.1의 모든 업데이트도 PhpStorm에 통합되었습니다.

이번 릴리스의 모든 변경 내용에 관한 전체 목록은 매우 긴 릴리스 노트에서 확인하실 수 있습니다.

긴 글을 끝까지 읽어 주셔서 감사합니다! 질문, 제안 사항, 버그 보고, 의견이 있으신 경우 댓글에 남겨 주시면 기쁜 마음으로 응답해 드리겠습니다.

건강 조심하세요!
JetBrains PhpStorm 팀
The Drive to Develop

이 글은 Roman Pronskiy가 작성한 PhpStorm 2020.1 Released: Out-of-the-box composer.json Support, Improved Type Inference, PHPUnit Toolbox, Grazie Grammar Checker, and More를 번역한 글입니다.