처음 보는 코드베이스 빠르게 파악하기 - AI 시대의 온보딩
새 회사 첫 출근. 레포 클론하고 코드를 연다. 10만 줄. 폴더 50개. 문서는 2년 전에 멈춤.
“일단 코드 좀 보세요”라는 말과 함께 방치된다.
예전엔 2주가 기본이었다. 지금은 다르다. AI 도구를 제대로 쓰면 하루 안에 코드베이스의 큰 그림을 잡을 수 있다.
왜 코드 파악이 어려운가
| 장애물 | 설명 |
|---|---|
| 암묵지 | 코드에 안 적힌 “왜 이렇게 했는지” |
| 레거시 | 더 이상 안 쓰는데 남아있는 코드 |
| 일관성 부재 | 사람마다, 시기마다 다른 스타일 |
| 부실한 문서 | 있어도 outdated, 없으면 없는 대로 |
전통적 방법: 시니어 붙잡고 물어보기, 코드 따라가기, 디버거로 추적하기.
효과는 있지만 느리다.
5분 안에 할 것: 전체 구조 파악
1. 디렉토리 구조 훑기
# 1단계 깊이만
ls -la
# 2단계까지
find . -maxdepth 2 -type d | head -50
# tree가 있으면
tree -L 2 -d
핵심 파일부터 찾는다:
# 설정 파일
ls -la *.json *.yaml *.toml 2>/dev/null
# 진입점
ls -la src/index.* src/main.* app.* main.* 2>/dev/null
2. 의존성 확인
# Node.js
cat package.json | head -50
# Python
cat requirements.txt 2>/dev/null || cat pyproject.toml 2>/dev/null
# Java/Kotlin
cat build.gradle 2>/dev/null || cat pom.xml 2>/dev/null | head -100
의존성 목록만 봐도 뭘 하는 프로젝트인지 대략 보인다:
express,fastify→ 웹 서버prisma,typeorm→ DB 있음react,vue→ 프론트엔드jest,vitest→ 테스트 있음
3. Git 히스토리 훑기
# 최근 활동
git log --oneline -20
# 누가 많이 커밋했나
git shortlog -sn --no-merges | head -10
# 최근 많이 수정된 파일
git log --pretty=format: --name-only -50 | sort | uniq -c | sort -rn | head -20
자주 수정되는 파일 = 핵심 파일.
AI로 코드베이스 질문하기
여기서부터 속도가 붙는다.
Claude Code
# 터미널에서 바로
claude "이 프로젝트가 뭐하는 프로젝트인지 설명해줘"
claude "src 폴더 구조 분석해줘. 각 폴더가 뭘 담당하는지"
claude "이 프로젝트의 데이터 흐름 설명해줘. 요청이 들어와서 응답 나가기까지"
Cursor
Cmd+Shift+P→ “Cursor: New Composer”@Codebase태그로 전체 코드베이스 참조- 질문:
@Codebase 이 프로젝트의 아키텍처를 설명해줘.
주요 모듈과 그 관계를 알려줘.
효과적인 질문 패턴
레벨 1: 전체 구조
- 이 프로젝트가 뭐하는 프로젝트야?
- 메인 기술 스택이 뭐야?
- 핵심 모듈/패키지가 뭐야?
레벨 2: 흐름 이해
- 사용자 로그인 흐름 따라가줘
- API 요청이 들어오면 어디서 처리돼?
- 데이터베이스 스키마 구조 알려줘
레벨 3: 특정 기능
- 결제 로직이 어디 있어?
- 에러 핸들링 어떻게 하고 있어?
- 인증/인가 어떤 방식이야?
핵심 파일 빠르게 찾기
패턴으로 찾기
# 라우터/컨트롤러
find . -name "*router*" -o -name "*controller*" -o -name "*handler*" | grep -v node_modules
# 서비스 레이어
find . -name "*service*" -o -name "*usecase*" | grep -v node_modules
# 모델/엔티티
find . -name "*model*" -o -name "*entity*" -o -name "*schema*" | grep -v node_modules
# 설정
find . -name "*config*" | grep -v node_modules
내용으로 찾기
# 특정 API 엔드포인트 찾기
grep -r "POST.*\/api\/users" --include="*.ts" --include="*.js"
# 환경변수 사용 위치
grep -r "process.env\." --include="*.ts" | head -20
# 데이터베이스 쿼리
grep -r "SELECT\|INSERT\|UPDATE" --include="*.ts" --include="*.java" | head -20
AI에게 찾아달라고 하기
인증 관련 코드 어디 있어? 파일 경로랑 핵심 함수 알려줘.
이게 더 빠르다.
실행해보기
코드만 보는 것보다 실행이 낫다.
1. 로컬 실행
# README 확인
cat README.md
# 없으면 AI한테 물어보기
claude "이 프로젝트 로컬에서 실행하려면 어떻게 해?"
2. 테스트 실행
# 테스트 있는지 확인
ls -la test/ tests/ __tests__/ spec/ 2>/dev/null
# 테스트 실행
npm test
# 또는
pytest
# 또는
./gradlew test
테스트 코드는 사용 예시 문서다. 이 함수가 어떻게 쓰이는지 보여준다.
3. 디버거로 따라가기
가장 확실한 방법. 진입점에 브레이크포인트 걸고 요청 보내면서 따라간다.
30분 온보딩 플레이북
| 시간 | 할 일 |
|---|---|
| 0-5분 | 디렉토리 구조, package.json/build.gradle 확인 |
| 5-10분 | AI에게 “프로젝트 개요 설명해줘” 질문 |
| 10-15분 | 핵심 파일 찾기 (라우터, 서비스, 모델) |
| 15-20분 | 로컬 실행 시도 |
| 20-25분 | 특정 기능 하나 선택해서 흐름 따라가기 |
| 25-30분 | 모르는 것 정리, 질문 목록 만들기 |
30분이면 “뭘 모르는지”를 알게 된다. 그게 시작이다.
CLAUDE.md / CURSOR.md 읽기
프로젝트에 AI 설정 파일이 있으면 꼭 읽는다.
cat CLAUDE.md 2>/dev/null
cat .cursorrules 2>/dev/null
cat .cursor/rules/*.md 2>/dev/null
팀이 AI에게 어떤 컨텍스트를 주고 있는지 보면 프로젝트 컨벤션을 빠르게 파악할 수 있다.
없으면? 직접 만든다. 파악한 내용을 정리하면서.
질문하는 법
시니어한테 물어볼 때도 요령이 있다.
안 좋은 질문:
이 코드 뭐예요?
좋은 질문:
OrderService.createOrder 보고 있는데,
여기서 재고 차감이 Product 엔티티에서 하는 게 아니라
서비스에서 직접 하고 있더라고요.
의도적으로 이렇게 한 건가요, 아니면 리팩토링 대상인가요?
핵심:
- 먼저 코드를 봤다
- 구체적인 위치를 말한다
- 내 이해/가설을 밝힌다
- 맞는지 확인한다
시니어 시간 아끼면서 정확한 답을 얻는다.
모르는 게 당연하다
10만 줄 코드베이스를 하루에 다 이해할 수는 없다. 목표는 전문가가 되는 것이 아니라:
- 프로젝트가 뭘 하는지 안다
- 어디서 뭘 찾아야 하는지 안다
- 모르면 어떻게 알아내는지 안다
첫 PR을 올릴 수 있으면 된다. 나머지는 일하면서 쌓인다.
정리
| 단계 | 방법 |
|---|---|
| 구조 파악 | tree -L 2, 의존성 파일, git log |
| 전체 이해 | AI에게 질문 (프로젝트 개요, 아키텍처) |
| 핵심 찾기 | 패턴 검색, AI 질문 |
| 검증 | 로컬 실행, 테스트 실행, 디버거 |
| 정리 | CLAUDE.md 작성, 질문 목록 |
예전엔 코드 읽는 게 기술이었다. 지금은 질문하는 게 기술이다.
AI한테 “이 코드 설명해줘”라고 하면 설명해준다. 2년차도 10년차 수준의 코드 파악 속도를 낼 수 있다.
단, 설명을 검증하는 건 본인 몫이다. AI가 틀릴 수 있다. 실행하고, 테스트 돌리고, 디버거로 확인한다.
도구가 바뀌면 일하는 방식도 바뀐다. 코드 파악도 마찬가지다.