Skip to content

Latest commit

ย 

History

History
271 lines (206 loc) ยท 6.17 KB

File metadata and controls

271 lines (206 loc) ยท 6.17 KB

๐Ÿ”– ๋ถ๋งˆํฌ ์ €์žฅ ์‹œ์Šคํ…œ ์‹ค์ œ ํ…Œ์ŠคํŠธ ๊ฐ€์ด๋“œ

์ด ๊ฐ€์ด๋“œ๋Š” ๋ถ๋งˆํฌ ์ €์žฅ ์‹œ์Šคํ…œ์„ ์‹ค์ œ๋กœ ํ…Œ์ŠคํŠธํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

๋ฐฉ๋ฒ• 1: ์ž๋™ ์„ค์ • ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ

# ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ž๋™ ์„ค์ •
python scripts/setup_dev_environment.py

# ํ…Œ์ŠคํŠธ ์‹คํ–‰
python scripts/manual_bookmark_test.py

๋ฐฉ๋ฒ• 2: ์ˆ˜๋™ ์„ค์ • (๋‹จ๊ณ„๋ณ„)

1๋‹จ๊ณ„: ์ธํ”„๋ผ ์„œ๋น„์Šค ์‹œ์ž‘

# ํ…Œ์ŠคํŠธ์šฉ Docker ์„œ๋น„์Šค ์‹œ์ž‘
docker-compose -f docker-compose.test.yml up -d

# ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
docker-compose -f docker-compose.test.yml ps

2๋‹จ๊ณ„: ํ™˜๊ฒฝ ์„ค์ •

# ํ™˜๊ฒฝ ํŒŒ์ผ ๋ณต์‚ฌ
cp env.example .env

# .env ํŒŒ์ผ ํŽธ์ง‘ (ํ•„์š”ํ•œ API ํ‚ค๋“ค ์„ค์ •)
# - OPENAI_API_KEY (์ž„๋ฒ ๋”ฉ์šฉ)
# - AWS ์„ค์ • (S3 ์‚ฌ์šฉ์‹œ)

3๋‹จ๊ณ„: ์˜์กด์„ฑ ์„ค์น˜

# Python ์˜์กด์„ฑ ์„ค์น˜
pipenv install --dev

# ํ™˜๊ฒฝ ํ™œ์„ฑํ™”
pipenv shell

4๋‹จ๊ณ„: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™”

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ์ƒ์„ฑ
python scripts/init_database.py

5๋‹จ๊ณ„: ์„œ๋น„์Šค ์‹œ์ž‘ (๊ฐ๊ฐ ๋ณ„๋„ ํ„ฐ๋ฏธ๋„์—์„œ)

# ํ„ฐ๋ฏธ๋„ 1: Consumer ์‹œ์ž‘
pipenv run python -m app.consumers.bookmark_save_rmq

# ํ„ฐ๋ฏธ๋„ 2: Celery Worker ์‹œ์ž‘
pipenv run celery -A app.core.celery_worker worker --loglevel=info -Q embedding

# ํ„ฐ๋ฏธ๋„ 3: ํ…Œ์ŠคํŠธ ์‹คํ–‰
pipenv run python scripts/manual_bookmark_test.py

๐Ÿงช ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•๋“ค

1. ์ „์ฒด ํ”Œ๋กœ์šฐ ํ…Œ์ŠคํŠธ

python scripts/manual_bookmark_test.py

์„ ํƒ ์˜ต์…˜:

  1. RabbitMQ ๋ฉ”์‹œ์ง€ ์ „์†ก - ์‹ค์ œ ๋ฉ”์‹œ์ง€ ํ๋ฅผ ํ†ตํ•œ ์ „์ฒด ํ”Œ๋กœ์šฐ
  2. Consumer ๋‹จ๋… ํ…Œ์ŠคํŠธ - Consumer ๋กœ์ง๋งŒ ํ…Œ์ŠคํŠธ
  3. Task ์ง์ ‘ ์‹คํ–‰ - Celery Task ์ง์ ‘ ํ˜ธ์ถœ
  4. ๋ชจ๋“  ๋ฐฉ๋ฒ• ํ…Œ์ŠคํŠธ - ์œ„ ๋ชจ๋“  ๋ฐฉ๋ฒ• ์ˆœ์ฐจ ์‹คํ–‰

2. ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ

Consumer๋งŒ ํ…Œ์ŠคํŠธ

import asyncio
from app.consumers.bookmark_save_rmq import on_bookmark_save

# ํ…Œ์ŠคํŠธ ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ ๋ฐ ์ „์†ก
# (scripts/manual_bookmark_test.py ์ฐธ๊ณ )

Task๋งŒ ํ…Œ์ŠคํŠธ

from app.tasks.bookmark_save_task import save_bookmark_task

# ๋ถ๋งˆํฌ ๋ฐ์ดํ„ฐ๋กœ ์ง์ ‘ ํ˜ธ์ถœ
bookmark_data = {"userId": 123, ...}
result = save_bookmark_task(bookmark_data)

3. API๋ฅผ ํ†ตํ•œ ํ…Œ์ŠคํŠธ

FastAPI ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ผ๋ฉด:

curl -X POST "http://localhost:8000/api/v1/bookmark/save" \
  -H "Content-Type: application/json" \
  -d '{
    "userId": 123,
    "starId": "api_test_001",
    "title": "API ํ…Œ์ŠคํŠธ ๋ถ๋งˆํฌ",
    "url": "https://example.com/api-test",
    "keywords": ["API", "ํ…Œ์ŠคํŠธ"],
    "memo": "API๋ฅผ ํ†ตํ•œ ํ…Œ์ŠคํŠธ",
    "summary": "FastAPI๋ฅผ ํ†ตํ•œ ๋ถ๋งˆํฌ ์ €์žฅ ํ…Œ์ŠคํŠธ"
  }'

๐Ÿ” ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋””๋ฒ„๊น…

RabbitMQ ๊ด€๋ฆฌ ์›นUI

  • URL: http://localhost:15672
  • ๊ณ„์ •: guest/guest
  • ํ ์ƒํƒœ, ๋ฉ”์‹œ์ง€ ์ˆ˜ ํ™•์ธ ๊ฐ€๋Šฅ

Flower (Celery ๋ชจ๋‹ˆํ„ฐ๋ง)

# Flower ์‹œ์ž‘
docker-compose -f docker-compose.test.yml --profile monitoring up -d flower

# ์›นUI ์ ‘์†
# URL: http://localhost:5555

๋กœ๊ทธ ํ™•์ธ

# Consumer ๋กœ๊ทธ
pipenv run python -m app.consumers.bookmark_save_rmq

# Celery Worker ๋กœ๊ทธ
pipenv run celery -A app.core.celery_worker worker --loglevel=debug

# Docker ์„œ๋น„์Šค ๋กœ๊ทธ
docker-compose -f docker-compose.test.yml logs -f [์„œ๋น„์Šค๋ช…]

๐Ÿ› ๏ธ ๋ฌธ์ œ ํ•ด๊ฒฐ

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋“ค

1. RabbitMQ ์—ฐ๊ฒฐ ์‹คํŒจ

# ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
docker-compose -f docker-compose.test.yml ps

# ๋กœ๊ทธ ํ™•์ธ
docker-compose -f docker-compose.test.yml logs rabbitmq

# ์žฌ์‹œ์ž‘
docker-compose -f docker-compose.test.yml restart rabbitmq

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์‹คํŒจ

# PostgreSQL ์ƒํƒœ ํ™•์ธ
docker-compose -f docker-compose.test.yml logs postgres

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์žฌ์ดˆ๊ธฐํ™”
python scripts/init_database.py

3. S3 ๊ด€๋ จ ์˜ค๋ฅ˜

  • AWS ์ž๊ฒฉ ์ฆ๋ช… ํ™•์ธ
  • S3 ๋ฒ„ํ‚ท ์ ‘๊ทผ ๊ถŒํ•œ ํ™•์ธ
  • ๋กœ์ปฌ ํŒŒ์ผ๋กœ ํ…Œ์ŠคํŠธ (S3 ํ‚ค ๋Œ€์‹  ๋กœ์ปฌ ํŒŒ์ผ ๊ฒฝ๋กœ ์‚ฌ์šฉ)

4. ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ์˜ค๋ฅ˜

  • OpenAI API ํ‚ค ํ™•์ธ
  • ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ํ™•์ธ
  • ๋‹ค๋ฅธ ๋ชจ๋ธ๋กœ ๋ณ€๊ฒฝ ์‹œ๋„

๋กœ๊ทธ ๋ ˆ๋ฒจ ์กฐ์ •

# .env ํŒŒ์ผ์—์„œ
DEBUG=true
LOG_LEVEL=DEBUG

๐Ÿ“Š ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ

๋Œ€๋Ÿ‰ ๋ฉ”์‹œ์ง€ ํ…Œ์ŠคํŠธ

# scripts/manual_bookmark_test.py๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ
# ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ถ๋งˆํฌ๋ฅผ ๋™์‹œ์— ์ „์†ก
for i in range(10):
    bookmark_data = get_sample_bookmark_data()
    bookmark_data['starId'] = f'batch_test_{i}'
    await send_bookmark_message(bookmark_data)

์œ ์‚ฌ๋„ ๊ณ„์‚ฐ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ

# ํฐ ํ…์ŠคํŠธ๋กœ ํ…Œ์ŠคํŠธ
# ๋งŽ์€ ๊ธฐ์กด ๋ถ๋งˆํฌ๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ํ…Œ์ŠคํŠธ

๐ŸŽฏ ์‹ค์ œ ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค

์‹œ๋‚˜๋ฆฌ์˜ค 1: ์›น ํŽ˜์ด์ง€ ๋ถ๋งˆํฌ

  1. HTML ํŒŒ์ผ์„ S3์— ์—…๋กœ๋“œ
  2. ๋ถ๋งˆํฌ ๋ฉ”์‹œ์ง€ ์ „์†ก
  3. ํ…์ŠคํŠธ ์ถ”์ถœ ๋ฐ ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ
  4. ์œ ์‚ฌํ•œ ๋ถ๋งˆํฌ ์ฐพ๊ธฐ
  5. ๊ด€๊ณ„ ๋ฉ”์‹œ์ง€ ๋ฐœํ–‰

์‹œ๋‚˜๋ฆฌ์˜ค 2: ๋ฉ”๋ชจ๊ฐ€ ์žˆ๋Š” ๋ถ๋งˆํฌ

  1. ๋ถ๋งˆํฌ + ์‚ฌ์šฉ์ž ๋ฉ”๋ชจ
  2. ๋ฉ”๋ชจ๋„ ํ•จ๊ป˜ ๋ฒกํ„ฐํ™”
  3. ๊ด€๋ จ ๋ถ๋งˆํฌ ์ถ”์ฒœ

์‹œ๋‚˜๋ฆฌ์˜ค 3: ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ๋ถ๋งˆํฌ

  1. ์‚ฌ์ „ ์ •์˜๋œ ํ‚ค์›Œ๋“œ
  2. ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ๋ถ„๋ฅ˜
  3. ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๊ด€๊ณ„ ์ƒ์„ฑ

๐Ÿ“ ํ…Œ์ŠคํŠธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • ์ธํ”„๋ผ ์„œ๋น„์Šค ์ •์ƒ ์‹œ์ž‘
  • Consumer ๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ํ™•์ธ
  • Celery Task ์‹คํ–‰ ํ™•์ธ
  • S3 ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ํ™•์ธ
  • ํ…์ŠคํŠธ ์ถ”์ถœ ํ™•์ธ
  • ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ ํ™•์ธ
  • ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ ํ™•์ธ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ €์žฅ ํ™•์ธ
  • ๊ด€๊ณ„ ๋ฉ”์‹œ์ง€ ๋ฐœํ–‰ ํ™•์ธ
  • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ํ™•์ธ

๐Ÿ”ง ๊ณ ๊ธ‰ ์„ค์ •

์ปค์Šคํ…€ ์œ ์‚ฌ๋„ ์ž„๊ณ„๊ฐ’

# app/config.py์—์„œ
SIMILARITY_THRESHOLD = 0.8  # ๊ธฐ๋ณธ๊ฐ’ ์กฐ์ •

๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ํฌ๊ธฐ ์กฐ์ •

# Celery ์„ค์ •์—์„œ
CELERY_TASK_ROUTES = {
    'bookmark_save_task': {'queue': 'embedding', 'rate_limit': '10/m'}
}

๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •

# ChromaDB ์„ค์ •
CHROMA_COLLECTION_NAME = "bookmarks_test"
CHROMA_EMBEDDING_FUNCTION = "openai"  # ๋˜๋Š” "huggingface"

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด GitHub Issues์— ๋‹ค์Œ ์ •๋ณด์™€ ํ•จ๊ป˜ ๋ฌธ์˜ํ•ด์ฃผ์„ธ์š”:

  • ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€
  • ์‹คํ–‰ ํ™˜๊ฒฝ (OS, Python ๋ฒ„์ „)
  • ๋กœ๊ทธ ํŒŒ์ผ
  • ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค