🎯 오늘 진행한 작업 기록
1. 환경 준비
- BE 폴더로 이동 후 Python 환경 경로 지정
cd BE
export PYTHONPATH=$(pwd)
- pyenv 환경 확인 중 발생한 메시지:
pyenv: python: command not found
- pyenv PATH 등록 & init 시도:
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
(virtualenv-init은 설치 안 되어 있음)
- 최종적으로 로컬 venv 활성화 후 진행:
source .venv/bin/activate
2. 서버 실행 & 초기 점검
- uvicorn 실행:
uvicorn app.main:app --reload
- 브라우저에서 확인:
http://127.0.0.1:8000
http://127.0.0.1:8000/docs
- 실행 중 경고 메시지 (Pydantic v2):
UserWarning: Valid config keys have changed in V2:
* 'orm_mode' has been renamed to 'from_attributes'
* 'allow_population_by_field_name' has been renamed to 'validate_by_name'
3. Alembic 마이그레이션 / DB 확인
- DB 엔진 연결 및 URL 확인:
export PYTHONPATH=$(pwd)
python -c "from app.database import engine; print(engine.url)"
- Alembic 초기화 및 실행 기본 명령어:
alembic revision --autogenerate -m "init schema"
alembic upgrade head
4. Market API 스모크 테스트
(httpie 이용)
- 목록 조회:
http :8000/markets page==1 size==5
- 상품 목록:
http :8000/markets/products page==1 size==5
- 단건 상세:
http :8000/markets/products/1
- 생성:
http POST :8000/markets/products \
name=나비쌀_5kg price:=24900 stock:=30 market_id:=1 category_id:=1 status=ACTIVE
- 수정:
http PATCH :8000/markets/products/1 price:=25900
- 삭제:
http DELETE :8000/markets/products/1
-> CRUD 기능 정상 동작 확인 !
5. FE 연동 준비 (응답 구조 통일 확인)
- 목록 호출 후 응답 구조 확인:
http :8000/markets page==1 size==5
-> items, page, size, total 구조로 정상 출력 확인
6. 장바구니 & 찜하기 기능 확장
6-1. 모델링 및 마이그레이션
- CartItem, WishlistItem 모델 추가 후 마이그레이션
alembic revision --autogenerate -m "add cart & wishlist tables"
alembic upgrade head
- 테이블 확인
sqlite3 database.db ".tables"

-> 결과: cart_items, wishlist_items 정상 생성
6-2. 장바구니 API 테스트
- 상품 ID 확인
sqlite3 database.db "SELECT id, name FROM products;"
- 추가
http POST :8000/markets/cart user_id:=1 product_id:=2 quantity:=3
- 조회
http :8000/markets/cart user_id==1 page==1 size==10
- 수정
http PATCH :8000/markets/cart/1 quantity:=5
- 삭제 (단건)
http DELETE :8000/markets/cart/1
- 삭제 (전체)
http DELETE :8000/markets/cart user_id==1




-> 장바구니 추가/조회/수정/삭제 정상 동작
6-3. 찜하기 API 테스트
- 추가
http POST :8000/markets/wishlist user_id:=1 product_id:=2
- 조회
http :8000/markets/wishlist user_id==1 page==1 size==10
- 삭제
http DELETE :8000/markets/wishlist user_id==1 product_id==2


-> 찜하기 추가/조회/삭제 정상 동작
6-4. 문제 해결 (라우트 충돌)
- 문제: /markets/{market_id} 라우트가 /cart, /wishlist 경로를 가로채면서 422 Unprocessable Content 발생
- 해결: market_router.py에서 /cart, /wishlist 라우트를 /{market_id}보다 위쪽에 배치
6-5. 최종 확인
http :8000/markets/cart user_id==1 page==1 size==10
http :8000/markets/wishlist user_id==1 page==1 size==10

-> 정상 응답 (현재 데이터 없으면 "items": [] 반환)
✨ 결론 및 다음 계획
- 마켓 CRUD API 및 장바구니/찜하기 API 백엔드 구현 완료
- FE 연동을 위한 응답 구조 통일 검증 완료
- BE 서버 정상 실행 성공 (FastAPI + Uvicorn)
- Alembic 경로 확인 및 DB 연결 점검
- Market API CRUD (목록, 상세, 생성, 수정, 삭제) 스모크 테스트 완료
- 응답 구조 FE 연동에 적합한 형태로 통일 확인
- 장바구니/찜하기 API 백엔드 구현 완료