본문 바로가기
주전공/캡스톤디자인과창업프로젝트

그로쓰 기록(1) : 마켓 기능 구축 및 장바구니 & 찜하기 확장

by 희띠띠 2025. 10. 2.

🎯 오늘 진행한 작업 기록

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 백엔드 구현 완료