{"meta":{"title":"GitHub Code Search 구문 이해","intro":"특수 코드 한정자, 정규식 및 부울 연산자를 사용하여 원하는 결과에 대한 검색 쿼리를 작성할 수 있습니다.","product":"GitHub 검색","breadcrumbs":[{"href":"/ko/search-github","title":"GitHub 검색"},{"href":"/ko/search-github/github-code-search","title":"GitHub 코드 검색"},{"href":"/ko/search-github/github-code-search/understanding-github-code-search-syntax","title":"코드 검색 구문"}],"documentType":"article"},"body":"# GitHub Code Search 구문 이해\n\n특수 코드 한정자, 정규식 및 부울 연산자를 사용하여 원하는 결과에 대한 검색 쿼리를 작성할 수 있습니다.\n\n## 코드 검색 쿼리 구조 정보\n\n이 문서의 검색 구문은 GitHub 코드 검색을 사용하는 코드 검색에만 적용됩니다. 이슈, 사용자 및 토론과 같은 비 코드 콘텐츠를 검색하기 위한 구문 및 한정자는 코드 검색 구문과 동일하지 않습니다. 비 코드 검색에 대한 자세한 내용은 [GitHub 검색 정보](/ko/search-github/getting-started-with-searching-on-github/about-searching-on-github) 및 [GitHub 검색](/ko/search-github/searching-on-github)을(를) 참조하세요.\n\n검색 쿼리는 검색할 텍스트와 검색 범위를 좁히는 한정자로 이루어진 검색 용어로 구성됩니다.\n\n한정자 없는 기본 용어는 파일의 콘텐츠 또는 파일 경로와 일치합니다.\n\n예를 들어, 다음과 같은 쿼리가 있습니다.\n\n```text\nhttp-push\n```\n\n위의 쿼리는 용어`docs/http-push.txt`이(가) 없는 경우에도 파일`http-push`와(과) 일치합니다. 용어 `example.txt`이(가) 포함되어 있으면 `http-push`(이)라는 파일과도 일치합니다.\n\n공백으로 구분된 여러 용어를 입력하여 여러 용어를 모두 만족하는 문서를 검색할 수 있습니다.\n\n예를 들어, 다음과 같은 쿼리가 있습니다.\n\n```text\nsparse index\n```\n\n검색 결과에는 `sparse` 및 `index` 용어가 모두 포함된 모든 문서가 순서대로 포함됩니다. 예를 들어 `SparseIndexVector`이(가) 포함된 파일, `index for sparse trees` 구가 있는 파일 및 `index.txt` 이름을 가진 파일, `sparse` 용어가 포함된 파일과 일치합니다.\n\n공백으로 구분된 여러 용어를 검색하는 것은 검색 `hello AND world`와(과) 동일합니다.\n`hello OR world` 이외의 다른 부울 연산도 지원됩니다. 부울 작업에 대한 자세한 내용은 [부울 작업 사용](#using-boolean-operations)을 참조하세요.\n\n코드 검색은 공백을 포함한 정확한 문자열 검색도 지원합니다. 자세한 내용은 [정확한 일치 항목 쿼리](#query-for-an-exact-match)를 참조하세요.\n\n```\n          `repo:`, `language:`, `path:`와(과) 같은 특수 한정자를 사용하여 코드 검색 범위를 좁힐 수 있습니다. 코드 검색에서 사용할 수 있는 한정자에 대한 자세한 내용은 [한정자 사용](#using-qualifiers)을 참조하세요.\n```\n\n정규식을 슬래시로 둘러싸서 검색에 사용할 수도 있습니다. 정규식에 관한 자세한 내용은 [정규식 사용](#using-regular-expressions)을 참조하세요.\n\n## 정확한 일치 항목에 대한 쿼리\n\n공백을 포함한 정확한 문자열을 검색하려면 문자열을 따옴표로 묶을 수 있습니다. 예시:\n\n```text\n\"sparse index\"\n```\n\n한정자에서 따옴표가 붙은 문자열을 사용할 수도 있습니다. 예를 들면 다음과 같습니다.\n\n```text\npath:git language:\"protocol buffers\"\n```\n\n## 따옴표 및 백슬래시 검색\n\n따옴표가 포함된 코드를 검색하려는 경우 백슬래시를 사용하여 따옴표를 이스케이프할 수 있습니다. 예를 들어 정확한 문자열 `name = \"tensorflow\"`을(를) 찾으려면 다음을 검색할 수 있습니다.\n\n```text\n\"name = \\\"tensorflow\\\"\"\n```\n\n백슬래시를 포함하는 코드 `\\`을(를) 검색하려면 이중 백슬래시 `\\\\`을(를)사용합니다.\n\n두 이스케이프 시퀀스 `\\\\` 및 `\\\"`은(는) 따옴표 외부에서도 사용할 수 있습니다. 하지만 다른 이스케이프 시퀀스는 인식되지 않습니다.\n`\"` 또는 `\\` 뒤에 오지 않는 백슬래시는 변경되지 않고 그대로 검색에 포함됩니다.\n\n새 줄 문자와 일치하는 `\\n` 같은 추가 이스케이프 시퀀스는 정규식에서 지원됩니다.\n[정규식 사용](#using-regular-expressions)을 참조하세요.\n\n## 부울 연산자 사용\n\n코드 검색은 부울 식을 지원합니다. 연산자 `AND`, `OR`, `NOT`을(를) 사용하고 검색어를 결합할 수 있습니다.\n\n기본적으로 공백으로 구분된 인접 용어는 `AND` 연산자를 사용하는 것과 동일합니다. 예를 들어 검색 쿼리 `sparse index`은(는) `sparse AND index`와(과) 동일하고, `sparse`, `index` 용어를 포함하는 모든 문서를 어떤 순서든 검색 결과에 포함한다는 것을 의미합니다.\n\n한 용어 또는 다른 용어가 포함된 문서를 검색하려면 `OR` 연산자를 사용할 수 있습니다. 예를 들어 다음 쿼리는 `sparse` 또는 `index` 중 하나를 포함하는 문서와 일치합니다.\n\n```text\nsparse OR index\n```\n\n검색 결과에서 파일을 제외하려면 `NOT` 연산자를 사용할 수 있습니다. 예를 들어 `__testing__` 디렉터리에서 파일을 제외하려면 다음을 검색할 수 있습니다.\n\n```text\n\"fatal error\" NOT path:__testing__\n```\n\n괄호를 사용하여 더 복잡한 부울 식을 표현할 수 있습니다. 예시:\n\n```text\n(language:ruby OR language:python) AND NOT path:\"/tests/\"\n```\n\n## 한정자 사용\n\n특수 키워드를 사용하여 검색을 한정할 수 있습니다.\n\\*\n[리포지토리 한정자](#repository-qualifier)\n\\*\n[조직 및 사용자 한정자](#organization-and-user-qualifiers)\n\\*\n[Enterprise 한정자](#enterprise-qualifier)\n\\*\n[언어 한정자](#language-qualifier)\n\n* ```\n            [라이선스 한정자](#license-qualifier)\n  ```\n* ```\n          [경로 한정자](#path-qualifier)\n  ```\n* ```\n          [Symbol 한정자](#symbol-qualifier)\n  ```\n* ```\n          [콘텐츠 한정자](#content-qualifier)\n  ```\n* ```\n          [Is 한정자](#is-qualifier)\n  ```\n\n### 리포지토리 한정자\n\n특정 리포지토리 내에서 검색하려면 `repo:` 한정자를 사용합니다. 소유자를 포함하여 전체 리포지토리 이름을 제공해야 합니다. 예시:\n\n```text\nrepo:github-linguist/linguist\n```\n\n리포지토리 집합 내에서 검색하려면 여러 `repo:` 한정자를 부울 연산자 `OR`와(과) 결합할 수 있습니다. 예시:\n\n```text\nrepo:github-linguist/linguist OR repo:tree-sitter/tree-sitter\n```\n\n> \\[!NOTE]\n> 코드 검색은 현재 리포지토리 이름에 대한 정규식 또는 부분 일치를 지원하지 않으므로 `repo:` 한정자가 작동하려면 전체 리포지토리 이름(사용자 접두사 포함)을 입력해야 합니다.\n\n### 조직 및 사용자 한정자\n\n조직 내에서 파일을 검색하려면 `org:` 한정자를 사용합니다. 예시:\n\n```text\norg:github\n```\n\n개인 계정 내에서 파일을 검색하려면 `user:` 한정자를 사용합니다. 예시:\n\n```text\nuser:octocat\n```\n\n> \\[!NOTE]\n> 코드 검색은 현재 조직 또는 사용자 이름에 대한 정규식 또는 부분 일치를 지원하지 않으므로 한정자가 작동하려면 전체 조직 또는 사용자 이름을 입력해야 합니다.\n\n### 엔터프라이즈 한정자\n\n엔터프라이즈 내에서 파일을 검색하려면 한정자를 `enterprise:` 사용합니다. 예시:\n\n```text\nenterprise:octocorp\n```\n\n조직이 소유한 리포지토리를 해당 엔터프라이즈에서 검색합니다. 사용자 소유 리포지토리는 포함되지 않습니다.\n\n### 언어 한정자\n\n특정 언어로 범위를 좁히려면 한정자를 `language:` 사용합니다. 예시:\n\n```text\nlanguage:ruby OR language:cpp OR language:csharp\n```\n\n지원되는 언어 이름의 전체 목록은 [github-linguist/linguist](https://github.com/github-linguist/linguist/blob/main/lib/linguist/languages.yml)의 [languages.yaml](https://github.com/github-linguist/linguist)을 참조하세요. 기본 설정 언어가 목록에 없으면 끌어오기 요청을 열어 추가할 수 있습니다.\n\n### 라이선스 한정자\n\n라이선스 또는 라이선스 패밀리로 리포지토리를 필터링하려면 `license:` 한정자와 정확한 라이선스 키워드를 사용하십시오, 예를 들어 `Apache-2.0`, `CC`, `MIT`.\n\n```text\nlicense:MIT\n```\n\n라이선스 키워드 목록은 [리포지토리 라이선싱](/ko/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository#searching-github-by-license-type) 을 참조하세요.\n\n### 경로 한정자\n\n파일 경로 내에서 검색하려면 `path:` 한정자를 사용합니다. 이렇게 하면 해당 파일 경로의 어디에든 해당 용어가 포함된 파일과 매칭됩니다. 예를 들어 경로에 용어 `unit_tests`이(가) 포함된 파일을 찾으려면 다음을 사용합니다.\n\n```text\npath:unit_tests\n```\n\n위의 쿼리는 둘 다 일치하며 `src/unit_tests/my_test.py`, `src/docs/unit_tests.md` 둘 다 경로의 어딘가에 `unit_test`을(를) 포함하기 때문에 일치합니다.\n\n경로의 일부가 아닌 특정 파일 이름만 매칭하려면 정규식을 사용할 수 있습니다.\n\n```text\npath:/(^|\\/)README\\.md$/\n```\n\n```\n          `.` 파일 이름이 이스케이프됐으므로, `.`은(는) 정규식에 특별한 의미를 지닙니다. 정규식에 관한 자세한 내용은 [정규식 사용](#using-regular-expressions)을 참조하세요.\n```\n\n<br>\n\n```\n          `path:` 한정자에서 일부 제한된 GLOB 식을 사용할 수도 있습니다.\n```\n\n예를 들어 `txt` 확장이 있는 파일을 검색하려면 다음을 사용할 수 있습니다.\n\n```text\npath:*.txt\n```\n\n<br>\n\n```\n          `src` 디렉터리 내에서 JavaScript 파일을 검색하려면 다음을 사용할 수 있습니다.\n```\n\n```text\npath:src/*.js\n```\n\n* 기본적으로 글롭 식은 경로의 시작 부분에 고정되지 않으므로 위의 식은 다음과 같은 `app/src/main.js` 경로와 일치합니다. 그러나 식을 `/`(으)로 접두사로 지정하면 시작에 고정됩니다. 예시:\n\n  ```text\n  path:/src/*.js\n  ```\n\n* ```\n          `*`은(는) `/` 문자와 일치하지 않으므로 위의 예제에서는 모든 결과가 `src` 디렉터리의 직접 하위 항목이 됩니다. 하위 디렉터리 내에서 일치하고 `/src/app/testing/utils/example.js`와(과) 같은 결과에 깊이 중첩된 파일을 포함하려면, `**`을(를) 사용할 수 있습니다. 예시:\n  ```\n\n  ```text\n  path:/src/**/*.js\n  ```\n\n<br>\n\n```\n          `?` 글로벌 문자를 사용할 수도 있습니다. 경로 `file.aac` 또는 `file.abc`에 일치시키기 위해 다음을 사용할 수 있습니다.\n```\n\n```text\npath:*.a?c\n```\n\n<br>\n\n```\n          `*`, `?` 같은 특수 문자가 포함된 파일 이름을 검색하려면 따옴표가 붙은 문자열만 사용합니다.\n```\n\n```text\npath:\"file?\"\n```\n\n따옴표 붙은 문자열에 대해 글롭 식을 사용할 수 없으므로 위의 쿼리는 `file?` 리터럴 문자열을 포함하는 경로만 일치합니다.\n\n### 기호 한정자\n\n```\n          `symbol:` 한정자를 사용하여 코드에서 함수 또는 클래스 정의와 같은 기호 정의를 검색할 수 있습니다. 기호 검색은 open source [Tree-sitter](https://github.com/tree-sitter) 파서 에코시스템을 사용하여 코드를 구문 분석하므로 추가 설정 또는 빌드 도구 통합이 필요하지 않습니다.\n```\n\n예를 들어 다음과 같은 `WithContext` 기호를 검색합니다.\n\n```text\nlanguage:go symbol:WithContext\n```\n\n일부 언어에서는 접두사(예: 클래스 이름의 접두사)를 사용하여 기호를 검색할 수 있습니다. 예를 들어 Go에서는 `deleteRows` 구조체의 `Maint` 메서드를 `symbol:Maint.deleteRows`로 검색할 수 있으며, 또는 러스트에서는 `symbol:Maint::deleteRows`로 검색할 수 있습니다.\n\n기호 한정자가 있는 정규식을 사용할 수도 있습니다. 예를 들어 다음 쿼리는 Rust에서 `String` 형식에 대해 구현한 변환을 찾습니다.\n\n```text\nlanguage:rust symbol:/^String::to_.*/\n```\n\n이 한정자는 참조가 아닌 정의만 검색하며, 모든 기호 형식이나 언어가 아직 완전히 지원되지는 않습니다. 기호 추출은 다음 언어에 대해 지원됩니다.\n\n* Bash\n* C\n* C#\n* C++\n* CodeQL\n* Elixir\n* Go\n* JSX\n* Java\n* JavaScript\n* Lua\n* PHP\n* 프로토콜 버퍼\n* Python\n* R\n* Ruby\n* Rust\n* Scala\n* Starlark\n* Swift\n* TypeScript\n\n더 많은 언어에 대한 지원을 추가하기 위해 현재 노력하고 있습니다. 이러한 노력에 기여하려면 기호 검색의 기반이 되는 open source [Tree-sitter](https://github.com/tree-sitter) 파서 에코시스템에서 언어에 대한 지원을 추가할 수 있습니다.\n\n### 콘텐츠 한정자\n\n기본적으로 bare 용어는 경로와 파일 콘텐츠를 모두 검색합니다. 파일 경로가 아닌 파일의 콘텐츠와 엄격하게 일치하도록 검색을 제한하려면 `content:` 한정자를 사용합니다. 예시:\n\n```text\ncontent:README.md\n```\n\n이 쿼리는 `README.md` 용어가 포함된 파일만 일치하며, `README.md`이라는 이름의 파일과는 일치하지 않습니다.\n\n### Is 한정자\n\n리포지토리 속성을 기준으로 필터링하려면 `is:` 한정자를 사용할 수 있습니다.\n`is:`는 다음 값을 지원합니다.\n\n* ```\n          `archived`: 보관된 리포지토리로 검색 범위를 제한합니다.\n  ```\n* ```\n          `fork`: 포크된 리포지토리로 검색 범위를 제한합니다.\n  ```\n* ```\n          `vendored`: 벤더링된 것으로 검색된 콘텐츠로 검색 범위를 제한합니다.\n  ```\n* ```\n          `generated`: 생성된 것으로 검색된 콘텐츠로 검색 범위를 제한합니다.\n  ```\n\n예시:\n\n```text\npath:/^MIT.txt$/ is:archived\n```\n\n```\n          `is:` 한정자는 `NOT` 연산자를 사용하여 반전할 수 있습니다. 보관되지 않은 저장소를 다음과 같이 검색할 수 있습니다.\n```\n\n```text\nlog4j NOT is:archived\n```\n\n결과에서 포크를 제외하려면 다음을 검색할 수 있습니다.\n\n```text\nlog4j NOT is:fork\n```\n\n## 정규식 사용\n\n코드 검색은 코드에서 패턴을 검색하는 정규식을 지원합니다. 정규 표현식을 슬래시로 둘러싸서 기본 검색 용어뿐만 아니라 많은 한정자 내에서도 정규 표현식을 사용할 수 있습니다.\n\n예를 들어 `sparse.*index` 정규식을 검색하려면 다음을 사용합니다.\n\n```text\n/sparse.*index/\n```\n\n정규 표현식 내에 포함된 슬래시를 이스케이프해 처리해야 함에 유의하십시오. 예를 들어 `App/src` 디렉터리 내에서 파일을 검색하려면 다음을 사용합니다.\n\n```text\n/^App\\/src\\//\n```\n\n정규식 내에서 `\\n`은(는) 줄 바꿈 문자를 의미하고 `\\t`은(는) 탭을 의미하며 `\\x{hhhh}`은(는) 유니코드 문자를 이스케이프하는 데 사용할 수 있습니다. 즉, 정규식을 사용하여 검색 창에 입력할 수 없는 문자가 포함된 정확한 문자열을 검색할 수 있습니다.\n\n일반적인 정규식 기능들은 코드 검색에서 작동합니다. 하지만 \"look-around\" 어설션은 지원되지 않습니다.\n\n## 검색어 구분\n\n검색 용어, 정확한 문자열, 정규식, 한정자, 괄호, 부울 키워드 `AND`, `OR` 및 `NOT` 등, 검색의 모든 부분을 공백으로 서로 구분해야 합니다. 한 가지 예외는 괄호 안의 항목이 괄호 `(`, `)`와(과) 분리될 필요가 없다는 것입니다.\n\n공백으로 구분되지 않은 여러 구성 요소 또는 위에 나열된 규칙을 따르지 않는 다른 텍스트가 검색에 포함된 경우 코드 검색은 사용자의 의도를 추측하려고 합니다. 쿼리의 해당 구성 요소를 검색할 정확한 텍스트로 취급하는 것을 포기하는 경우가 많습니다. 예를 들어, 다음과 같은 쿼리가 있습니다.\n\n```text\nprintf(\"hello world\\n\");\n```\n\n코드 검색은 괄호와 따옴표를 특수 문자로 해석하지 않고 대신 정확한 코드가 포함된 파일을 검색합니다.\n\n코드 검색에서 잘못 추측하는 경우, 언제든 따옴표와 공백을 사용하여 원하는 검색을 가져와 의미를 명확하게 할 수 있습니다.\n\n## 대/소문자 구분\n\n기본적으로 코드 검색은 대/소문자를 구분하지 않으며 결과에는 대문자와 소문자 결과가 모두 포함됩니다. 대/소문자를 구별하는 검색을 하려면, 대/소문자를 구분하지 않는 옵션을 끄고 정규식을 사용해야 합니다. 예를 들어 \"True\"라는 문자열을 검색하려면 다음을 사용합니다.\n\n```text\n/(?-i)True/\n```"}