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๊ฐ ์ด์์ ๋ฌธ์ ๋งค์น
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๊ณ ์์ฃผ ์ฌ์ฉ๋๋ ์์ผ๋์นด๋์ ๋๋ค.
| ํจํด | ๋งค์น๋จ | ๋งค์น ์๋จ |
|---|---|---|
*.txt | file.txt, test.txt, README.txt | file.md, .txt |
test* | test, test1, testing | mytest, atest |
*test* | test, mytest, testing | tes, tst |
์ฃผ์: *๋ ๊ฒฝ๋ก ๊ตฌ๋ถ์(/)๋ฅผ ๋งค์นํ์ง ์์ต๋๋ค.
src/*.js # src/file.js (O), src/utils/file.js (X)2. ** - ์ฌ๊ท์ ๋๋ ํ ๋ฆฌ ๋งค์นญ
0๊ฐ ์ด์์ ๋๋ ํ ๋ฆฌ ๊ณ์ธต์ ๋งค์นํฉ๋๋ค.
| ํจํด | ๋งค์น๋จ | ๋งค์น ์๋จ |
|---|---|---|
**/*.js | file.js, src/file.js, src/utils/file.js | file.txt |
src/**/*.test.js | src/file.test.js, src/utils/file.test.js | src/file.js |
* vs ** ์ฐจ์ด:
src/*.js # src/file.js๋ง (1๋จ๊ณ)
src/**/*.js # src์ ๋ชจ๋ ํ์ ๋๋ ํ ๋ฆฌ์ .js ํ์ผ (๋ชจ๋ ๋จ๊ณ)3. [...] - ๋ฌธ์ ์งํฉ/๋ฒ์ ๋งค์น
๊ดํธ ์์ ๋ฌธ์ ์ค ํ๋๋ฅผ ๋งค์นํฉ๋๋ค.
| ํจํด | ๋งค์น๋จ | ๋งค์น ์๋จ |
|---|---|---|
[CB]at | Cat, Bat | cat, bat |
file[0-9].txt | file0.txt, file9.txt | file10.txt, fileA.txt |
[!0-9]* | test.txt, file.js | 1test.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 anyBrace 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