오늘의 개발자툴 소개 2화
ripgrep(rg)은 grep보다 훨씬 빠르고 똑똑한 텍스트 검색 도구임. 기본적으로 .gitignore 에 등록된 파일을 제외하고 컬러 출력에 정규식까지 완벽 지원함.
== 왜 이렇게 빠른가? ==
• Rust로 작성: 메모리 안전성 + 제로 코스트 추상화
• 병렬 처리: 멀티코어 CPU 활용해서 동시에 여러 파일 검색
• 메모리 맵 사용: 파일을 메모리에 직접 매핑해서 I/O 오버헤드 최소화
• SIMD 최적화: CPU의 벡터 연산 활용해서 패턴 매칭 가속화
• 스마트 필터링: .gitignore, 바이너리 파일 자동 제외로 불필요한 작업 생략
== 왜 grep보다 나은가? ==
• 기본값이 똑똑함: .gitignore 자동 적용, 컬러 출력, 바이너리 파일 제외
• 유니코드 지원: UTF-8 완벽 지원으로 다국어 검색 문제없음
• 압축 파일 지원: gzip, bzip2 등 압축된 파일도 바로 검색
• 더 나은 UX: 에러 메시지 친절하고 옵션명도 직관적
• 타입 필터: --type으로 언어별 파일만 쉽게 필터링
== 내부 동작 원리 ==
1. 파일 발견: 디렉토리 트리 순회하면서 검색 대상 파일 수집
2. 필터링: .gitignore, 바이너리 파일, 타입 필터 적용
3. 병렬 검색: 워커 스레드들이 각각 다른 파일들 동시 처리
4. 패턴 매칭: 정규식 엔진으로 각 라인에서 패턴 찾기
5. 결과 수집: 매칭된 결과들을 모아서 정렬된 순서로 출력
== 기본 사용법 ==
# 기본 검색
rg "function" // 현재 디렉토리에서 "function" 검색
rg -i "TODO" // 대소문자 무시
rg "UserService" src/ // 특정 디렉토리에서만
# 파일 타입 지정
rg "class" -t java // Java 파일만
rg "function" -t js // 파일만
== 실전 예시 ==
# 개발할 때
rg "TODO" -n // 라인 번호와 함께
rg "password" -i -C 3 // 대소문자 무시 + 앞뒤 3줄
rg "function\s+\w+" --only-matching // 매칭된 부분만 출력
# 파일 관리
rg "config" -l // 파일명만 출력
rg "test" --files-without-match // 해당 문자열 없는 파일들
# 정규식 활용
rg "user\d+" -i // user123, USER456 등
rg "(class|interface)\s+\w+" // 클래스나 인터페이스 정의
== 성능 비교가 중요한 이유 ==
# 큰 프로젝트에서
grep -r "pattern" . // 단일 스레드, 모든 파일 뒤짐
rg "pattern" // 멀티 스레드, .gitignore 적용
실제 차이:
- grep: 3-10초 (프로젝트 크기에 따라)
- rg: 0.1-0.5초 (같은 조건)
== 왜 기본값이 중요한가? ==
grep: 바이너리 파일까지 뒤져서 터미널 깨짐, node_modules 같은 폴더도 검색
rg: .gitignore 자동 적용, 바이너리 파일 제외, 컬러 출력으로 가독성 좋음
== 유용한 옵션들 ==
alias rgi='rg -i' // 대소문자 무시
alias rgl='rg -A 3 -B 3' // 앞뒤 3줄씩
alias rgf='rg --files-with-matches' // 파일명만
grep의 모든 기능 + 속도 + 편의성 +가독성. 한번 쓰면 grep으로 못 돌아감. 성능, 편의성 차이가 체감될 정도로 큼.
- dc official App
GPT가 글씀? gitignore 필터 얘기는 무한반복하네
각 챕터별로 필여한 내용이기 때문
담엔 요약해서 들고옴
vsc검색이 이거씀
몰랏던 사실이네 vsc를 안써서
직접 쓰기에도 좋고 의존성으로도 엄청 쓰이지
존나편한듯
해당 댓글은 삭제되었습니다.
예아~
rip ㅋㅋㅋ
삼고빔
3화어딨노