이 글은 David Millington의 엠바카데로 블로그 글을 번역(및 일부의역)한 것입니다


04_RAD-Studio-10.4-Sydney_Now-Available_1200x628_social.png

10.4에서는 코드 완성(Code completion)를 포함한 여러 기능들이 업데이트됩니다. 10여년 만의 IDE에서 가장 중요한 변화 중 하나입니다.

코드 인사이트는 무엇인가요?

우선 배경부터 살펴보겠습니다. 코드 인사이트에 대해 잘 아시는 분들은 건너 뛰어도 됩니다...

코드 인사이트는 에디터의 IDE 생산성 기능들을 통칭하는 단어입니다. 다음과 같은 기능들을 제공합니다.

  • 코드 완성: 입력하려는 항목을 예측하는 드롭다운 리스트박스. 식별자 뒤에 마침표(.)를 입력하거나
    Ctrl+Space를 눌러 표시


     
  • 파라미터 완성: 오버로드된 메소드의 서로다른 메소드 파라미터들을 표현하는 도움말.
    Ctrl + Shift + Space를 눌러 표시


     
  • 선언 찾기: 식별자를 마우스 오른쪽 버튼으로 누르고 “Find Declaration”을 클릭하면 해당 메소드, 변수, 타입 등이 정의된 위치로 이동합니다. 컨트롤 버튼을 누른 상태에서 마우스를 에디터 위로 이동하면 해당 식별자가 하이퍼링크로 전환되어 선언을 찾을 수 있으며, 이를 코드 브라우징이라고 합니다.
     
  • 툴팁 인사이트: 변수 또는 타입 위에 마우스를 올리면 그에 대한 정보가 표시됩니다. 때로 이것은 XMLDoc을 포함하며, 헬프 인사이트로 알려져 있습니다.(우리는 우리의 문서에서 이름을 명확히 할 필요가 있습니다.)
     
  • 오류 인사이트: 컴파일 전 오류가 있는 코드에 붉은 지그재그 선을 표시합니다. 이것은 많은 사람들이 빨간줄(red squlgglies)이라 칭하며, 오류는 스트럭쳐 뷰(Structure view)의 오류 노드에도 표시됩니다.

이 기능들은 델파이에서 다년간 사용되었습니다. IDE에서 코딩할 때 굉장히 중요한 이점입니다. 특히 코드 완성은 많은 타이핑을 줄여주고, 오류 인사이트는 컴파일 전에 코드가 정상 작동하는지를 확인할 수 있습니다.

 

클래식 코드 인사이트

언어가 성장하고 시간이 지나면서, 이 기능들은 우리가 원하는만큼 잘 작동하지 않았습니다. 처음 도입되었던 당시에는 최첨단이었지만, 현재는 개선이 필요합니다.

잘못된 오류에 대한 버그 리포트(즉, 실제로는 오류없이 완벽한 소스 코드이지만 에디터나 스트럭처 화면에 오류가 표시) 또는 IDE가 메인 스레드에서 작동하고 있어 자동 완성 목록을 표시하는 동안 키 입력에 응답하지 않는 경우 버그 리포트를 확인하는 것이 일반적입니다 (이 기능은 ESC키를 눌러 취소할 수 있습니다). 매우 큰 규모의 프로젝트에서 코드 완성 기능을 사용하는 경우, 데이터 계산을 위해 IDE에서 많은 메모리를 사용하기도 합니다. 코드 완성이나 오류 인사이트 기능은 서로 다른 코드 파서(parser)로 구현되어 있어 코드에 대한 이해가 서로 달랐습니다. 그리고 디버깅하는 동안에는 코드 인사이트가 비활성화되어 디버깅 중 코드를 작성하게 되면 생산성 향상을 얻을 수 없었습니다.

이러한 불편을 개선하기 위해 10.4에서는 다음과 같은 목표를 설정했습니다.

  • 비동기 코드 인사이트 - 코드 인사이트는 다른 스레드 또는 다른 프로세스(또는 모두)에서 실행. 코드 작성 시 코드 인사이트가 백그라운드에서 동작시켜 IDE는 항상 응답
  • IDE에서 코드 완성을 위한 잠재적인 메모리 사용량 감소 또는 완전히 제거(어디에서 실행되고 있는지 시각화)
  • 오류 인사이트의 항상 올바른 결과 보장 - 컴파일러가 오류를 제시하고, 올바른 코드의 경우 오류를 표시하지 않음
  • IDE에서는 델파이 소스 해석을 위해 단일 파서 사용 - IDE의 코드 인사이트(코드 완성, 오류 인사이트 등)는 델파이 코드에 대해 모두 동일하게 이해
  • 최신 기술 사용을 위해 델파이 코드 툴링 방식 현대화
  • 코드 완성 관련 여러개의 버그 수정
  • 적어도 2개 이상의 코드 완성의 새로운 기능을 동시에 제공

이 모든 것이 델파이 10.4에서 제공됩니다.

어떻습니까? 대단하지요. 델파이 IDE 15년 만의 가장 크고 가장 좋은 변화 중 하나입니다.
(그리고 걱정마세요 - 필요하다면 클래식 코드 인사이트도 여전히 존재하며, 몇가지 새로운 버그를 해결해 돌아올겁니다.)

델파이 10.4의 코드 인사이트 기술

10.4에서는 위 코드 인사이트 기능을 ‘LSP 서버'를 이용해 구현합니다. 여러분들이 이 기술을 들어보셨을지 모르지만, LSP는 언어 서버 프로토콜(Language Server Protocol)을 뜻하며, 여러가지 언어에서 코드 인사이트와 같은 기능을 구현하기 위한 표준화된 방법입니다. IDE는 '언어 서버'와 통신합니다. 이것은 별도의 작은 앱(도우미 앱)에서 IDE에 표시되는 정보를 계산하고 생성합니다. 이 통신은 정의된 프로토콜, 즉 언어 서버 프로토콜을 사용해 수행됩니다.

즉, 이제 IDE는 프로젝트를 열거나 파일에 입력할 때 ‘언어 서버'와 대화하며, IDE는 주기적으로 ‘이 위치에서 완성된 결과는 무엇인가?’와 같은 질문을 합니다. ‘언어 서버'는 여러분의 코드를 추적하고, 질문에 대한 답과 도중에 발생한 오류에 대한 답을 IDE로 응답합니다.

‘언어 서버'는 컴파일러를 통해 LSP 결과를 제공합니다. 즉, IDE가 당신에게 보여주는 것은 ‘빨간줄' 오류를 포함해 컴파일러 자체에서 나오는 모든 데이터라는 것을 의미하는 것이죠.

이는 다음과 같은 의미가 있습니다:

  • IDE와 ‘언어 서버'의 통신은 비동기로 진행되며, IDE에서는 별도의 스레드로 구현됩니다. IDE가 요청된 데이터에 대한 회신을 기다리는 동안 계속 타이핑하거나 파일을 닫거나 다른 프로젝트를 열수도 있습니다.
  • ‘언어 서버' 작업은 별도의 프로세스에서 이뤄집니다. 이것은 결과를 계산하기 위해 모든 메모리 사용량이 더이상 IDE 자체에 있지 않음을 의미합니다. IDE는 더 많은 메모리 사용이 가능하며 ‘언어 서버'는 결과 제공만을 위한 전용 메모리 공간을 사용하게 됩니다.
  • 이 작업은 많은 언어에 적용되는 현대적이고 표준화된 프로토콜을 사용합니다.
  • 화면에서 보이는 것은 컴파일러에서 보는 것과 동일합니다. 코드가 컴파일되면 오류 인사이트가 표시되지 않고, 반대로 코드 또는 스트럭쳐 뷰에서 빨간줄이 보이면 코드가 컴파일되지 않는다는 것을 의미합니다.
  • 디버깅하는 동안에도 코드 완성을 사용할 수 있습니다.

이것은 매우 좋은 효과를 얻을 수 있습니다.

설명은 충분합니다. 어떤 모습일지 직접 살펴보겠습니다.

 

최신 델파이 코드 인사이트

사실 글로만 실시간 응답을 표현하기 어렵습니다.스크린샷에서는 입력중인 윈도우즈 대기 커서가 보이지 않기 때문에, 상상을 가미해서 보시기 바랍니다.

우리가 10.4를 출시하면 상상하던 것들이 현실이 될것입니다.

 

디버깅 중인 코드 인사이트

첫번째 새로운 기능은 긴말이 필요없습니다. 바로 디버깅하는 동안에도 코드 인사이트를 사용할 수 있다는 것입니다.

앱 디버깅과 코드 입력을 동시에, 코드 완성까지하고 싶으시죠? 이제는 할 수 있습니다.

네, 화면의 빨간줄은 오류가 아닙니다. 디버깅 하는 동안 코드 수정 시에도 오류 인사이트와 코드 완성을 제공합니다.

 

코드 완성 결과

코드 완성 방식은 10.3.3과 동일하지만, 10.4에서 응답하는 결과가 다릅니다. 10.4에서는 코드 완성 결과를 과거보다 많이(풍부하고, 유용하게) 보여주도록 기능을 추가했습니다. 하지만, 10.3.3의 항목은 결과 목록의 최상단에 여전히 위치합니다.

다음은 10.3.3의 코드 완성으로, VCL TButton 인스턴스 뒤에 ‘act’를 입력합니다.

참고로 10.3.3은 매우 적은 결과를 보여주는데, 실제로 한개의 결과를 표시합니다. 클래식 코드 완성은 입력한 항목으로 시작되는 항목만 나열됩니다.

다음은 10.4에서의 같은 동작의 결과입니다.

10.4에서 코드 완성은 입력한 내용을 포함하는 모든 항목을 나열합니다. 이제 여러분이 필요한 항목을 더 쉽게 찾을 수 있습니다.

예를 들어, 컨트롤에 무슨무슨Rect라는 속성이 있지만, 정확히 기억하지 못한다고 가정합니다. 10.3.3에서는 구글에 검색하거나, 처음부터 찾아야 합니다. 하지만 10.4에서는 ‘rect’를 입력하면 다음과 같이 표시됩니다.

여러분은 코드 타이핑을 통해 여러분의 코드를 찾을수도 있습니다.

더 많은 결과를 얻는 것이 여러분이 추가하는 것이 아닐 수도 있습니다. 여러분의 습관에서 입력한 것으로 시작하는 항목만을 기대할 수도 있습니다. 기본적으로 10.3.3에서 익숙해진 동작에 맞추기 위해, 우리는 코드 완성 목록을 식별자로 시작하는 항목을 기준으로 정렬합니다. 즉, 목록은 10.3.3과 동일한 결과를 제공하고 해당 식별자가 포함된 항목을 추가한 것입니다. 만약 필요하지 않다면 그것을 사용하지 않으면 됩니다. 그것들은 10.3.3이 여러분들에게 보여줬던 항목들 뒤에 표시됩니다.

모든 결과를 함께 나열하는 다른 IDE와 같은 동작을 원하는 경우 설정할 수 있습니다. 현재는 레지스트리 키로 설정하지만 UI로도 제공할수도 있습니다. 즉, VSCode가 제공하는 것에 더 익숙하다면 여러분들도 그것과 같이 할 수 있습니다.

10.4에서도 입력한 것으로 시작하는 모든 항목을 가장 상단에 정렬합니다. 10.3.3도 이 기능을 제공하죠. 10.4에서도 기본적으로 이렇게 제공합니다. 10.4에서는 입력한 단어가 포함된 모든 항목들을 범위별로 정렬해 모두 보여줍니다. 비주얼 스튜디오(Visual Studio)나 다른 IDE와 유사합니다. 기본적으로 이 기능은 꺼져있습니다.

 

코드 완성 목록에서의 선택

코드 완성은 자동으로 목록에서 가장 적합한 항목을 선택합니다.(즉, 입력 또는 스페이스 또는 마침표(.)를 눌러 해당 항목을 선택하고 계속 코딩할 수 있습니다.)

  • 입력한 것과 정확히 일치하는 항목
  • 입력한 것으로 시작하는 항목 중 가장 짧은 식별자
  • 입력한 내용이 들어있는 항목 중 가장 짧은 식별자

시작 우선순위 지정은 완료 목록이 자동으로 ‘SetParent’ 보다 ‘Parent’를 선택함을 의미합니다. 가장 짧은 항목을 선택하면 ‘ParentFont’ 보다 ‘Parent’를 선택하게 됩니다.(위 스크린샷 확인) 일반적으로, 우리는 이것이 여러분들이 타이핑할 가능성이 가장 높은 것으로 간주합니다. 물론 스크롤 또는 위/아래 화살표를 통해 원하는 항목을 선택할 수도 있습니다.

 

오류 인사이트

위의 스크린샷에는 입력 시 업데이트되는 실시간 오류 인사이트가 표시되며, 유효하지 않은 코드 ‘pare’에 빨간색으로 밑줄이 쳐져있습니다.(완성 목록에서 항목을 선택하면 밑줄이 없어집니다.) 오류 인사이트 결과는 컴파일러 자체에서 나오며, 컴파일러에서 보는 것과 정확히 일치합니다.

에디터 또는 스트럭처 뷰에는 더이상 잘못된 오류가 나타나지 않습니다. 화면에 보이는 오류 인사이트는 정확할것입니다.

 

멀티프로세스 아키텍처

기능상 중요하지는 않지만, 기술적으로 관심이 있을 수 있습니다.

앞서 LSP 서버가 별도의 프로세스로 실행된다고 언급했습니다. 이 프로세스는 코드 인사이트를 위한 전용 4GB 메모리 주소 공간을 포함해 많은 이점을 갖습니다. 윈도우즈 작업 관리자에서 실행 중인 10.4를 보면 여러델파이LSP 프로세스가 표시되는 걸 볼 수 있죠. 첫번째 것은 여러 에이전트들을 제어합니다. 그리고 코드 완성과 기타 결과들을 제공하는 에이전트가 있고, 오류 인사이트를 제공하는 에이전트도 있죠!

제가 아는 바로는, RAD스튜디오의 LSP 서버는 멀티프로세스 아키텍처를 사용하는 유일한 LSP 서버입니다.

 

품질

구현하는 동안, 과거 코드 완성에 영향을 미치는 많은 문제를 발견하고 수정했습니다.

 

다음 단계

새로운 코드 완성 기능은 10.3.3 이하 버전과는 다릅니다. 처음 사용하더라도 익숙하게 쓸 수 있도록 만들었습니다. 다른 곳에 적용된 기능들을 최대한 반영하고자 했습니다 - 예를 들어, 입력한 키워드로 시작하는 항목이 가장 상단에 표시되도록 하는 기능 등 -. 단 몇 분만에 너무 익숙해져서 10.3.3으로 돌아가고 싶지 않을 것입니다. 물론 다른 것들과 완전히 동일하지는 않습니다. 여러분이라면, 그 차이점을 발견할 수 있을 것입니다.

델파이 10.4의 새로운 코드 인사이트는 많은 문제를 해결하고, IDE 사용을 훨씬 더 즐겁고 좋은 환경으로 만들것입니다. 추가 결과 목록은 말할 것도 없이 매우 유용할 것입니다. 우리는 위에 작성한 목표에 따라 앞으로 나아가기 위해 꾸준히 노력할 것입니다. 10.4에서 우리와 베타 테스터들은 이러한 변화가 IDE에 큰 도움이 된다는 것을 알게되었습니다.

또한, 코드 완성을 통한 코드 탐색 기능과 디버깅 중 코드 인사이트 기능을 사용하는 두가지 새로운 기능도 추가했습니다.

이 기능에 대한 기대가 정말 큽니다. 비동기, 반응형 IDE, 현대식 프로토콜, 다른 언어 지원, 디버깅 중 코드 완성. 아주 훌륭합니다. 여러분들이 10.4를 받아 직접 확인해 보기까지 기다리기가 힘드네요.

새로운 LSP 기반 코드 인사이트는 환상적입니다.
제품에 혁명을 일으킬 것입니다.

— 닉 하지스, 베타 프리뷰 사용

 

 

10.4 무료 평가판으로 지금 경험해보세요!   [전체보기] 10.4 새기능들!

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 14355
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13021
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15529
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21048
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22296
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 17929
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38219
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173732
1223 2020년 5월 GM 업데이트 - 여러분의 비즈니스에 길을 열어주세요! 관리자 2020.05.26 314
1222 델파이 안드로이드 개발을 위해 OpenJDK 채택 file 김원경 2020.05.25 886
1221 엠바카데로 오픈 소스 프로젝트 관리자 2020.05.25 697
1220 [10.4 시드니 신기능] 겟잇 패키지 매니저(GetIt Package Manager) 개선 험프리 2020.05.21 593
1219 [10.4 시드니 신기능] 컨트롤 개별 VCL 스타일 적용(Per-Control Style) 적용 험프리 2020.05.19 918
1218 [10.4 시드니 신기능] 새로운 VCL TEdgeBrowser 컴포넌트 험프리 2020.05.18 22872
1217 [10.4] 커스텀 매니지드 레코드(Custom Managed Records) 험프리 2020.05.14 1104
1216 [고객 사례- 솔루션, 델파이] Beyond Compare - 데이터, 시스템 비교/병합/관리 프로그램 관리자 2020.05.14 737
1215 델파이, 25년의 혁신 - 버전 1부터 10.3까지 버전별 핵심 기능 [2] 관리자 2020.05.12 2540
1214 [고객 사례- 솔루션, 델파이] AlignMix - 시각화된 세일즈 관리 도구 관리자 2020.05.12 364
» [10.4 시드니 신기능] 다시 태어난 '코드 인사이트' [2] file 험프리 2020.05.08 1660
1212 [발표자료] 20200429 델파이 Push 메시지 전송 시스템 구현 방법 with 구글 Firebase [3] file 관리자 2020.05.04 1016
1211 헬스케어 분야에서의 델파이 - 코로나에 맞서며 file 김원경 2020.04.29 602
1210 [고객 사례- 의료, 델파이] COVID-19 격리 대상자 상태 관리 앱 관리자 2020.04.28 643
1209 이 달의 기술자료 - 2020년 05월 file 험프리 2020.04.24 349
1208 [사례 소개] 데브기어 마이그레이션 유상 컨설팅 사례 험프리 2020.04.22 528
1207 인터베이스와 FireDac에서 배열필드 사용하기 file 김원경 2020.04.16 405
1206 인터베이스, FireDAC 및 TEMSDataSetResource를 사용하여 RAD 서버에서 자동 증가 필드를 생성하는 방법 file 김원경 2020.04.16 409
1205 델파이용 벡터 컨테이너 file 김원경 2020.04.14 750
1204 [프로그래밍 애피타이저] 개발이 처음이거나 비 전공자 분들을 위한 가장 첫 번째 STEP! 관리자 2020.04.13 2440