본문으로 건너뛰기

Glob 경로 매칭 마스터하기: 구문 기초와 실전 응용

· 약 3분
AIMDX 편집

소프트웨어 개발 및 시스템 관리에서는 대량의 파일을 일괄 처리하거나 특정 경로를 검색해야 하는 경우가 자주 발생합니다. 이럴 때 'Glob 경로 매칭(Globbing)'은 없어서는 안 될 실용적인 기술이 됩니다. Linux 터미널 조작, .gitignore 파일 설정, 또는 CI/CD 파이프라인에서 빌드 범위를 지정할 때 등 Glob 구문은 곳곳에서 활용됩니다.

본 문서에서는 Glob의 기본 구문과 일반적인 적용 사례를 소개하여 파일 필터링 및 매칭의 정확도와 효율성을 향상시킵니다.

Glob 패턴 매칭 개념

Glob이란 무엇인가?

Glob은 와일드카드(Wildcard)를 기반으로 한 패턴 매칭(Pattern Matching) 기술의 일종입니다. 이 이름은 초기 Unix 버전에 존재했던 glob(global의 약자)이라는 명령어 프로그램에서 유래했습니다. 정규 표현식(Regular Expression)과 유사하게 문자열 매칭에 사용할 수 있지만, Glob의 구문은 더 간단하고 직관적이며 파일 및 경로명 매칭을 위해 특별히 설계되었습니다.

핵심 Glob 구문 가이드

다음의 핵심 기호들을 숙지하면 대부분의 경로 매칭 요구 사항을 처리할 수 있습니다:

1. 별표 * (단일 디렉토리 매칭)

별표는 Glob에서 가장 많이 사용되는 기호입니다. 임의의 길이의 문자(0개 문자 포함)와 매칭되지만, 디렉토리 계층을 넘어설 수는 없습니다.

  • *.txt: 현재 디렉토리에 있는 확장자가 txt인 모든 파일과 매칭됩니다(예: readme.txt, data.txt).
  • app_*: 현재 디렉토리에서 app_으로 시작하는 모든 파일 또는 폴더와 매칭됩니다(예: app_web, app_config.json).

2. 이중 별표 ** (여러 디렉토리를 넘나드는 매칭)

이중 별표는 강력한 재귀적 매칭 기호입니다. 임의의 계층의 디렉토리 구조와 매칭될 수 있습니다.

  • **/*.js: 모든 폴더 및 하위 폴더에 있는 JavaScript 파일과 매칭됩니다. 이는 프론트엔드 프로젝트를 빌드하거나 Linter를 설정할 때 매우 유용합니다.
  • src/**/test/: src 디렉토리 아래의 모든 깊이에 있는 test라는 이름의 폴더와 매칭됩니다.

3. 물음표 ? (단일 문자 매칭)

물음표는 단일 문자에 정확히 매칭하는 데 사용됩니다.

  • file_?.txt: file_1.txt, file_A.txt와는 매칭되지만 file_12.txt와는 매칭되지 않습니다.

4. 대괄호 [] (문자 집합 매칭)

대괄호는 문자 집합이나 범위를 정의할 수 있게 해줍니다. 문자열의 해당 위치가 집합 내의 어떤 문자와도 일치하면 매칭에 성공한 것으로 간주합니다.

  • [abc].md: a.md, b.md, c.md와 매칭됩니다.
  • image-[0-9].jpg: image-0.jpg부터 image-9.jpg까지 매칭됩니다.
  • [!a-c].txt 또는 [^a-c].txt: ! 또는 ^를 사용하여 부정 매칭을 나타내며, a, b, c 이외의 문자로 시작하는 텍스트 파일과 매칭됩니다.

5. 중괄호 {} (다중 패턴 매칭)

중괄호는 다양한 매칭 패턴 옵션을 제공하여 여러 규칙을 하나로 결합하는 데 사용됩니다.

  • *.{jpg,png,gif}: 모든 jpg, png 또는 gif 이미지 파일과 매칭됩니다.
  • src/{components,utils}/*.js: src/componentssrc/utils 디렉토리에 있는 모든 .js 파일과 매칭됩니다.

실무 적용 사례

기본 구문을 숙지한 후, 일상적인 개발에서 Glob이 사용되는 대표적인 용도는 다음과 같습니다:

.gitignore 설정

Git 버전 관리에서는 추적할 필요가 없는 파일을 제외하기 위해 Glob을 자주 사용합니다:

# 모든 node_modules 디렉토리 무시
node_modules/

# 모든 .log 파일 무시
*.log

# build 디렉토리 내의 모든 파일 무시
build/**

CI/CD 및 자동화 스크립트

GitHub Actions나 GitLab CI 설정 파일을 작성할 때, 어떤 파일의 변경이 배포를 트리거할지 정의합니다:

on:
push:
paths:
- 'src/**/*.ts'
- 'src/**/*.tsx'
- '!src/**/*.test.ts' # 테스트 파일 제외

프론트엔드 개발 도구 및 번들러

Webpack, Vite 또는 ESLint 등의 개발 도구에서 컴파일하거나 검사할 대상 범위를 지정하기 위해 Glob이 자주 사용됩니다.

// ESLint 설정 예시
module.exports = {
ignorePatterns: ["dist/**/*.js", "node_modules/"],
};

요약

Glob은 파일을 필터링하고 검색하는 우아하고 효율적인 방법을 제공합니다. 복잡한 루프 판단이나 문자열 비교에 비해, 올바른 Glob 패턴을 활용하면 개발 워크플로, 설정 및 스크립트가 훨씬 간결해지고 유지 보수가 쉬워집니다. Glob 패턴을 능숙하게 활용하면 개발 및 유지 보수 작업의 효율성이 크게 향상될 것입니다.