# 알아두면 좋은 개발 개념 최소 지식

> AI 코딩 도구를 더 잘 활용하기 위해 비개발자가 알아야 할 핵심 개념들

## Tier 1: 반드시 알아야 할 것

### 파일과 디렉토리
- **파일 경로**: `/Users/me/project/src/index.js` - 파일의 주소
- **디렉토리 구조**: 폴더와 파일의 계층 구조. 프로젝트의 지도 역할
- **확장자**: `.js`(JavaScript), `.py`(Python), `.md`(Markdown) 등 파일 유형 표시

### Git (버전 관리)
- **커밋 (Commit)**: 코드의 스냅샷. "저장" 버튼과 비슷하지만 되돌릴 수 있음
- **브랜치 (Branch)**: 독립된 작업 공간. "복사본에서 작업하기"와 비슷
- **머지 (Merge)**: 두 브랜치의 변경사항을 합치기
- **Pull/Push**: 원격 저장소에서 가져오기/올리기

### 에러 메시지 읽기
에러 메시지의 핵심 구조:
```
에러 종류: 무엇이 잘못되었는지
  at 파일명:줄번호     ← 어디서 문제가 생겼는지
```

자주 보는 에러 유형:
| 에러 | 의미 | 비유 |
|------|------|------|
| `SyntaxError` | 코드 문법 실수 | 맞춤법 틀림 |
| `TypeError` | 잘못된 타입 사용 | 숫자에 곱하기를 했는데 문자가 들어옴 |
| `ReferenceError` | 존재하지 않는 것 참조 | 없는 사람 이름을 부름 |
| `404 Not Found` | 요청한 주소가 없음 | 잘못된 주소로 택배 보냄 |
| `500 Server Error` | 서버 내부 오류 | 가게 안에서 문제 발생 |

---

## Tier 2: 알면 소통이 좋아지는 것

### 프론트엔드 vs 백엔드
- **프론트엔드**: 사용자가 보는 화면 (HTML, CSS, JavaScript, React)
- **백엔드**: 서버에서 처리하는 로직 (API, 데이터베이스, 인증)
- **비유**: 식당의 홀(프론트) vs 주방(백엔드)

### API (Application Programming Interface)
- 프로그램끼리 대화하는 방법
- **비유**: 식당 메뉴판. 주문(요청)하면 음식(데이터)이 나옴
- **REST API**: 주소(URL)로 요청하는 가장 흔한 방식
- **요청 방법**: GET(조회), POST(생성), PUT(수정), DELETE(삭제)

### 데이터베이스
- 데이터를 저장하는 곳
- **테이블**: 엑셀 시트와 비슷. 행(레코드)과 열(필드)
- **스키마**: 테이블 구조 설계도
- **쿼리**: 데이터를 찾거나 수정하는 명령어 (SQL)

### 환경 변수 (Environment Variables)
- 비밀번호, API 키 등 민감한 정보를 코드 밖에 저장
- `.env` 파일에 보관
- **절대** 공개 저장소에 올리면 안 됨

---

## Tier 3: 이해하면 AI에게 더 좋은 요청을 할 수 있는 것

### 아키텍처 패턴
- **MVC**: Model(데이터) - View(화면) - Controller(로직) 분리
- **컴포넌트 기반**: UI를 독립적 블록으로 나누어 조립 (React, Vue)
- **마이크로서비스**: 큰 서비스를 작은 독립 서비스로 분리

### 테스트
- **유닛 테스트**: 작은 함수 하나가 제대로 동작하는지 확인
- **통합 테스트**: 여러 부분이 함께 잘 동작하는지 확인
- **E2E 테스트**: 사용자 입장에서 전체 흐름이 되는지 확인
- **비유**: 부품 검사 → 조립 검사 → 완성품 검사

### 리팩토링
- 기능은 그대로, 코드 구조를 개선
- **비유**: 방 정리. 물건은 그대로지만 정돈하면 찾기 쉬움
- 왜 필요한가: 코드가 복잡해지면 수정이 어려워짐

### 의존성 (Dependencies)
- 다른 사람이 만든 코드를 가져다 쓰는 것 (라이브러리, 패키지)
- `package.json` (Node.js) / `requirements.txt` (Python)에 목록
- **비유**: 요리할 때 직접 키운 재료 vs 사온 재료

### 타입 시스템
- 데이터의 종류를 미리 정하는 것 (TypeScript)
- `string` (문자), `number` (숫자), `boolean` (참/거짓)
- **비유**: 서류의 칸마다 "이름(한글)", "나이(숫자)" 형식을 정하는 것

---

## 용어 사전 (Quick Reference)

| 용어 | 한줄 설명 |
|------|-----------|
| **빌드 (Build)** | 소스 코드를 실행 가능한 형태로 변환 |
| **배포 (Deploy)** | 만든 것을 실제 서버에 올려 사용자가 쓸 수 있게 함 |
| **CI/CD** | 코드를 자동으로 테스트하고 배포하는 파이프라인 |
| **린트 (Lint)** | 코드 스타일과 오류를 자동 검사 |
| **미들웨어** | 요청과 응답 사이에 끼워넣는 처리 로직 |
| **캐시 (Cache)** | 자주 쓰는 데이터를 임시 저장하여 속도 향상 |
| **콜백 (Callback)** | "이거 끝나면 이걸 해줘"라는 약속 |
| **비동기 (Async)** | 기다리지 않고 다음 작업을 먼저 하기 |
| **토큰** | AI 모델이 텍스트를 처리하는 단위 (~4글자 = 1토큰) |
| **컨텍스트 윈도우** | AI가 한 번에 기억할 수 있는 양 |
