Thumbnail

3분

Github Code Search

cs.github.com

Github에서는 최근 테크니컬 프리뷰로 Github Code Search 검색엔진을 공개했습니다.

github_code_search

이 검색 엔진은 개발자들의 생산성 향상을 돕기 위해 만들어졌습니다. 현재는 사용자들의 피드백을 받고 있으며, 승인을 받은 사용자들이 이 검색엔진을 이용할 수 있습니다.

새로운 검색 엔진을 만들게 된 이유는 기존 솔루션들이 코드 검색, 규모, 검색 성능 및 속도와 같은 제약사항들을 충족시키지 못했기 때문입니다. 이를 위해 Github Code Search는 코드 검색에 최적화된 랭킹 시스템과 인덱스를 도입했습니다. 현재 검색 인덱스는 500만 개 이상의 가장 유명한 public 레파지토리와 엑세스 가능한 private 레파지토리를 포함하고 있습니다.

이 포스트를 읽으며 어디에 중점을 두었는지 확인해보았습니다.

왜 새로운 엔진을 만들었는가?

수년 동안 GitHub는 다양한 솔루션을 사용했지만, 요구 사항의 변화와 스케일 문제가 점점 더 어려워지면서 맞춤형 검색 엔진이 필요하다고 판단했습니다.

결국은 개발자들에게 필수적인 워크플로우 경험을 제공하기 위함입니다. 이러한 결정은 시스템의 기능, 성능, 확장성에 다음과 같은 제약을 초래했습니다:

  • 코드 검색은 다르다: 표준 기술들(형태소 분석, 토큰화 등)이 소스코드 검색과 상충되기 때문에 특수 쿼리에 와일드카드나 정규식이 필요할 수 있습니다. 자연어와 웹페이지에 적합한 스코어링 방식(휴리스틱)은 소스 코드에서는 잘 작동하지 않습니다.
  • 규모(레포지토리): GitHub은 2억 개 이상의 레포지토리를 호스팅하고 있으며, 작년에만 6100만 개 이상의 레포지토리가 생성되었습니다. 이를 모두 포함하여 글로벌 쿼리를 지원하는 것이 목표입니다.
  • 검색 성능과 속도: 개발자들은 도구가 매우 빠르게 작동하기를 원하며, 이러한 기대에 부응해야 합니다. 인덱스의 규모에도 불구하고 p95 쿼리 시간을 1초 미만으로 유지하려고 합니다. 대부분의 사용자 쿼리, 레파지토리, 조직 범위에서의 쿼리는 그보다 더 빠르게 작동해야 합니다.

현재는

GitHub는 새로운 코드 검색 엔진을 개발 중이며, 초기에는 별도의 인터페이스를 제공합니다. 만족스러운 피드백을 받고 널리 적용할 준비가 되면, 이 기능을 github.com 경험에 통합할 예정입니다.

현재 검색 인덱스는 500만 개 이상의 가장 인기있는 공개 레파지토리를 포함하며, 접근 가능한 비공개 레파지토리도 검색할 수 있습니다.

새로운 코드 검색 엔진의 주요 기능은 다음과 같습니다:

  • 스마트 랭킹 및 코드 최적화 인덱스를 사용하여 상위 결과에서 원하는 항목을 쉽게 찾을 수 있습니다.
  • 정규식이나 "exact string"을 사용하여 substring 매칭과 특수 문자(ex: 정규식(/[0-9]/와 같은))를 지원합니다.
  • 자동 완성 제안과 함께 검색 범위를 한정할 수 있는 org:repo: 한정자를 사용합니다.
  • language:, path:, extension:, 부울 연산자(OR, NOT) 등의 필터를 사용하여 결과를 세분화하고, symbol:을 사용하여 심볼 검색을 수행합니다.
  • 폴더 트리 뷰, 검색 범위에 대한 심볼 정보, jump-to-definition, select-to-search 등의 추가 기능을 통해 검색 방향을 빠르게 잡습니다.

result
result2

코드 검색 엔진의 구문 정보는 해당 링크에서 확인할 수 있습니다.

향후엔

GitHub는 기술 프리뷰 단계에서 새로운 코드 검색 엔진을 사용자와 공유하며, 독특하고 참신한 사용 사례와 워크플로우를 찾기 위해 사용자와 함께 협력하고자 합니다.

GitHub는 다음과 같은 목표를 세우고 집중할 계획입니다:

  • GitHub에서 접근 가능한 모든 레파지토리를 포함할 때까지 검색 인덱스를 확장합니다.
  • 최적의 결과를 얻기 위해 스코어링 및 랭킹 방법(휴리스틱)을 실험합니다.
  • 가장 영향력 있는 API와 통합 방법을 찾습니다.
  • 지원되는 프로그래밍 언어를 지속적으로 추가합니다.

GitHub는 사용자의 피드백을 듣고, 사용자가 필요로 하는 도구를 개발하는 것을 목표로 합니다.

Github에서의 개발자 생산성 향상

As a developer, staying in a flow state is hard. Whenever you look up how to use a library, or have a test fail because your developer environment has diverged from CI, or need to know how an error message can arise, you are interrupted. The longer it takes to resolve the interruption, the more context you lose. 개발자들이 일할 때 흐름에 머무는 것은 어려운 일입니다

  • 라이브러리 사용법을 찾거나,
  • 개발 환경이 CI와 분기되어 테스트가 실패하거나,
  • 에러 메시지가 어떻게 발생하는지 알아야 할 때마다

이런 상황에 마주치게 되면 우리는 중단이 발생합니다.
이러한 중단 상황을 해결하는 데 걸리는 시간이 길수록 더 많은 맥락을 잃게 됩니다.

Github copilot은 개발자들이 낯선 영역에서도 자신 있게 코딩할 수 있게 도와주었습니다.
Github codespaces를 출시하여 Github 생산성 향상 방법을 공유했습니다.
Github Code Search는 개발자 생산성에 관한 폭넓은 맥락에서 코드 검색 및 탐색 개선을 목표로 하는 Github의 통합 솔루션의 일부입니다.

Github의 코드 검색 비전은 모든 개발자가 코드를 빠르고 직관적으로 찾고, 발견하고, 탐색하고 이해할 수 있도록 돕는 것입니다. Github Code Search를 사용하면 전 세계의 코드를 쉽게 찾을 수 있으며, 관련성이 높은 결과를 먼저 표시하고 자동 완성을 지원하여 흐름 상태를 유지하는데 도움이 됩니다.

Github.com에 통합되기까지 시간이 걸릴 수 있지만, 프리뷰를 사용하고 싶다면 여기서 신청할 수 있습니다.

마무리하며

최근의 개발은 협업과 오픈 소스의 힘이 큽니다. 그 중심에는 Github이 있으며, 수많은 오픈 소스 기여자와 메인테이너의 작업이 매우 소중한 자료, 도구 등이 됩니다. 이를 돕기 위한 새롭고 성능이 뛰어난 검색 엔진은 반가운 소식입니다.

Github Code Search 사용 경험은 놀랄 만큼 빠릅니다. 사용하기 편한 문법도 있지만, 속도에 크게 놀랐습니다. 앞으로 많이 사용하게 될 것 같고, 피드백도 남길 수 있도록 노력할 것입니다.

reference

마지막 업데이트

1/11/2022


Avatar

JHSeo

배우는 것을 좋아하고 관심이 많은 웹 엔지니어 입니다. 느리더라도 꾸준하게 성장하려고 노력하는 개발자입니다.