# Cursor에서 TinyDB 작업 목록 관리하기

Python 3.10 이상과 Cursor를 사용합니다. PostgreSQL은 이론에서 다루며 설치하지 않습니다.
DB 서버·외부 계정·Docker·웹 서버는 필요하지 않습니다. 처음 패키지를 설치할 때는 인터넷이 필요합니다.

## 시작

압축을 풀고 app.py가 있는 tinydb-lab 폴더를 Cursor의 File → Open Folder로 여세요.
Terminal → New Terminal에서 위에서부터 한 줄씩 실행합니다.

```powershell
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe app.py
```

py가 없으면 python --version으로 확인하고 첫 명령의 py를 python으로 바꾸세요.
가상환경 활성화는 필요하지 않습니다. 재실행할 때는 마지막 명령만 사용합니다.
macOS/Linux에서는 python3 -m venv .venv 후 .venv/bin/python을 사용합니다.

## 무엇을 확인할까요?

1. sample.csv와 sample.json을 열어 동일한 3개 작업이 다른 모양으로 표현되는지 비교합니다.
2. 실행 후 메뉴 1을 선택하면 3개 작업이 나옵니다. 메뉴 2에서 mina를 입력하면 2개입니다.
3. 메뉴 3에서 job-004 / 결과 확인 / mina / 대기를 입력합니다.
4. data/db.json을 열어 새 작업을 확인합니다. 메뉴 4에서 job-004를 완료로 바꿉니다.
5. 메뉴 0으로 종료하고 다시 실행합니다. 총 4개이며 job-004의 상태는 완료입니다.
6. job-004를 다시 추가하면 중복 오류가 나고 기존 작업은 유지됩니다.
7. 메뉴 5에서 job-004를 선택합니다. yes 외의 답은 취소, yes는 삭제합니다.
8. 다시 실행하면 3개이며 삭제한 작업이 돌아오지 않습니다.

## 파일의 역할

- sample.csv: 행·열 비교용 원본. 자동 가져오기는 하지 않습니다.
- sample.json: 같은 작업 목록. DB가 처음 생성될 때만 가져옵니다.
- data/db.json: TinyDB가 관리하는 실제 저장 파일. 원본 sample.json과 내부 구조가 다릅니다.
- app.py: 메뉴, 입력 검사, 작업 ID 중복 검사, TinyDB 호출.

db.json의 `_default`는 기본 테이블 이름, 그 아래 "1"·"2"는 TinyDB 내부 문서 ID입니다.
업무용 job_id와 내부 문서 ID는 다릅니다. 파일을 읽어보되 실행 중에는 직접 수정하지 마세요.
프로그램은 하나만 실행합니다. 동시 실행·스레드 접근을 지원하는 실습이 아닙니다.
담당자 검색은 데이터 필터이며 W20의 로그인·권한 검사가 아닙니다.

TinyDB는 SQL·JOIN·고유 제약조건·ACID 트랜잭션을 제공하는 PostgreSQL의 대체품이 아닙니다.
이 앱의 중복 방지는 Python 코드로 구현했습니다. 파일 저장 오류에 대한 자동 복구도 제공하지 않습니다.

## 막혔을 때

- 파일이 없다면 Cursor에서 연 폴더와 터미널 위치를 확인합니다.
- tinydb 모듈을 못 찾으면 설치·실행 모두 .venv의 Python으로 했는지 확인합니다.
- sample.json을 바꿔도 DB가 그대로라면 정상입니다. 기존 DB는 자동으로 덮어쓰지 않습니다.
- JSON 오류는 파일을 자동 초기화하지 않고 종료합니다. 종료 후 파일을 별도로 백업하고 문제를 확인합니다.
- DB가 비어 있어도 기존 파일이면 샘플을 다시 넣지 않습니다.
- 새 실습을 시작하려면 프로그램을 종료하고 새 폴더에 ZIP을 다시 풀어 실행하세요.
- JSON 화면이 갱신되지 않으면 탭을 닫았다가 다시 엽니다. 읽기만 하고 저장하지 않습니다.

참고: https://tinydb.readthedocs.io/en/latest/
