Glob (global์˜ ์•ฝ์ž)์€ ํŒŒ์ผ์‹œ์Šคํ…œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ํŒŒ์ผ ์ด๋ฆ„์— ๋Œ€ํ•œ ํŒจํ„ด ๋งค์นญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„ ํŒจํ„ด์„ ํ•ด๋‹น ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋Š” ์ด๋ฆ„ ๋ชฉ๋ก์œผ๋กœ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜๋Š” ํŒŒ์ผ์‹œ์Šคํ…œ ์ด๋ฆ„ ํ™•์žฅ์„ ์˜๋ฏธํ–ˆ์ง€๋งŒ, ํ˜„์žฌ๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ glob ์Šคํƒ€์ผ ํŒจํ„ด ๋งค์นญ์„ ์˜๋ฏธํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

Glob์€ 1970๋…„๋Œ€ ์ดˆ Bell Labs์—์„œ AT&T UNIX์™€ ํ•จ๊ป˜ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ, Unix ๋ช…๋ น์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ๋ฌธ๋ฒ•์— ๊ทผ๋ณธ์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์ณค์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ๊ฐœ๋…์ด ํ•„์š”ํ•œ ์ด์œ 

  • ํšจ์œจ์ ์ธ ํŒŒ์ผ ์„ ํƒ: ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ํŒจํ„ด์œผ๋กœ ์ผ๊ด„ ์„ ํƒ
  • ์œ ์—ฐํ•œ ๋งค์นญ: ์ •๊ทœํ‘œํ˜„์‹๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ๊ฐ•๋ ฅํ•œ ํŒŒ์ผ ์ด๋ฆ„ ๋งค์นญ
  • Shell ํ†ตํ•ฉ: Unix shell์—์„œ ๊ธฐ๋ณธ ์ œ๊ณต๋˜์–ด ๋ช…๋ น์ค„์—์„œ ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ง€์›: ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—์„œ glob ํŒจํ„ด์„ ์ง€์›ํ•˜์—ฌ ํŒŒ์ผ ์ฒ˜๋ฆฌ ๊ฐ„ํŽธํ™”

AS-IS

ํŒŒ์ผ์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‚˜์—ดํ•˜๊ฑฐ๋‚˜ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# ๋ชจ๋“  .js ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด
cat file1.js
cat file2.js
cat file3.js
cat utils.js
cat helper.js
# ... ํŒŒ์ผ์ด ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•„์š”

TO-BE

Glob ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ๋ชจ๋“  .js ํŒŒ์ผ์„ ํ•œ ๋ฒˆ์—
cat *.js
 
# src ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  .js ํŒŒ์ผ
cat src/**/*.js
 
# test๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ํŒŒ์ผ
cat test*.js

๊ธฐ๋ณธ ๋ฌธ๋ฒ•

1. * - 0๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž ๋งค์น˜

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๊ณ  ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์™€์ผ๋“œ์นด๋“œ์ž…๋‹ˆ๋‹ค.

ํŒจํ„ด๋งค์น˜๋จ๋งค์น˜ ์•ˆ๋จ
*.txtfile.txt, test.txt, README.txtfile.md, .txt
test*test, test1, testingmytest, atest
*test*test, mytest, testingtes, tst

์ฃผ์˜: *๋Š” ๊ฒฝ๋กœ ๊ตฌ๋ถ„์ž(/)๋ฅผ ๋งค์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

src/*.js        # src/file.js (O), src/utils/file.js (X)

2. ** - ์žฌ๊ท€์  ๋””๋ ‰ํ† ๋ฆฌ ๋งค์นญ

0๊ฐœ ์ด์ƒ์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ณ„์ธต์„ ๋งค์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ„ด๋งค์น˜๋จ๋งค์น˜ ์•ˆ๋จ
**/*.jsfile.js, src/file.js, src/utils/file.jsfile.txt
src/**/*.test.jssrc/file.test.js, src/utils/file.test.jssrc/file.js

* vs ** ์ฐจ์ด:

src/*.js        # src/file.js๋งŒ (1๋‹จ๊ณ„)
src/**/*.js     # src์™€ ๋ชจ๋“  ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์˜ .js ํŒŒ์ผ (๋ชจ๋“  ๋‹จ๊ณ„)

3. [...] - ๋ฌธ์ž ์ง‘ํ•ฉ/๋ฒ”์œ„ ๋งค์น˜

๊ด„ํ˜ธ ์•ˆ์˜ ๋ฌธ์ž ์ค‘ ํ•˜๋‚˜๋ฅผ ๋งค์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ„ด๋งค์น˜๋จ๋งค์น˜ ์•ˆ๋จ
[CB]atCat, Batcat, bat
file[0-9].txtfile0.txt, file9.txtfile10.txt, fileA.txt
[!0-9]*test.txt, file.js1test.txt, 9file.js

๋ฒ”์œ„ ํ‘œํ˜„:

[0-9]           # ์ˆซ์ž ํ•˜๋‚˜
[a-z]           # ์†Œ๋ฌธ์ž ํ•˜๋‚˜
[A-Z]           # ๋Œ€๋ฌธ์ž ํ•˜๋‚˜
[a-zA-Z]        # ์•ŒํŒŒ๋ฒณ ํ•˜๋‚˜
[!0-9]          # ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒƒ

์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ

Claude Code - Project Rules

Claude Code์˜ .claude/rules/ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ path-specific rules๋ฅผ ์ •์˜ํ•  ๋•Œ glob ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

---
paths:
  - "src/**/*.ts"          # src ์•„๋ž˜ ๋ชจ๋“  TypeScript ํŒŒ์ผ
  - "lib/**/*.ts"          # lib ์•„๋ž˜ ๋ชจ๋“  TypeScript ํŒŒ์ผ
  - "tests/**/*.test.ts"   # tests ์•„๋ž˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ํŒŒ์ผ
---
 
# TypeScript Rules
- Use strict type checking
- No implicit any

Brace expansion์„ ์‚ฌ์šฉํ•œ ์—ฌ๋Ÿฌ ํ™•์žฅ์ž:

---
paths:
  - "src/**/*.{ts,tsx}"    # TypeScript์™€ TSX ํŒŒ์ผ
---
 
# TypeScript/React Rules

์—ฌ๋Ÿฌ ๋””๋ ‰ํ† ๋ฆฌ:

---
paths:
  - "{src,lib}/**/*.ts"    # src์™€ lib์˜ TypeScript ํŒŒ์ผ
---
 
# Shared TypeScript Rules

.gitignore ํŒŒ์ผ

Git์˜ .gitignore ํŒŒ์ผ๋„ glob ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

# ๋ชจ๋“  .log ํŒŒ์ผ ๋ฌด์‹œ
*.log
 
# node_modules ๋””๋ ‰ํ† ๋ฆฌ ๋ฌด์‹œ (๋ชจ๋“  ์œ„์น˜)
**/node_modules/
 
# ๋ฃจํŠธ์˜ build ๋””๋ ‰ํ† ๋ฆฌ๋งŒ ๋ฌด์‹œ
/build/
 
# dist ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ๊ฒƒ ์ œ์™ธํ•˜๊ณ  .gitkeep์€ ํฌํ•จ
dist/*
!dist/.gitkeep
 
# .env๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ํŒŒ์ผ ๋ฌด์‹œ
.env*
 
# ๋ชจ๋“  .txt ํŒŒ์ผ ๋ฌด์‹œํ•˜๋˜ README.txt๋Š” ํฌํ•จ
*.txt
!README.txt

์ฐธ๊ณ  ๋ฌธ์„œ