์ฌ์ฉ์ ๊ฒฝํ 97% ๊ฐ์ | ์ด์๋น 95% ์ ์ฝ | ์๋ต ์๋ 40๋ฐฐ ํฅ์
๐ ์ ์ฒด ํฌํธํด๋ฆฌ์ค โข ๐ ๋ผ์ด๋ธ ๋ฐ๋ชจ โข ๐ ์ํคํ ์ฒ โข ๐ ์ฑ๊ณผ
"๋งค ๊ฒ์๋ง๋ค 3-5์ด์ฉ ๊ธฐ๋ค๋ ค์ผ ํ๋ ์ฝ๋ฌผ ๊ฒ์์ 0.08์ด๋ก ๋จ์ถํ๊ณ , ์ $150 API ๋น์ฉ์ $8๋ก ์ ์ฝํ ์ฑ๋ฅ ์ต์ ํ ํ๋ก์ ํธ"
| ํต์ฌ ์งํ | ๊ฐ์ ์ | ๊ฐ์ ํ | ๊ฐ์ ์จ |
|---|---|---|---|
| โก ์๋ต ์๋ | 3.2์ด | 0.08์ด | 97% โ |
| ๐ฐ ์ด์ ๋น์ฉ | $150/์ | $8/์ | 95% โ |
| ๐ก ์๋น์ค ์์ ์ฑ | 99.1% | 99.9% | 0.8% โ |
| ๐ ๋์ ์ฒ๋ฆฌ๋ | 100 req/min | 1000 req/min | 10๋ฐฐ โ |
์ฌ์ฉ์๊ฐ ์ฝ๋ฌผ์ ๊ฒ์ํ ๋๋ง๋ค OpenAI API๋ฅผ ์ค์๊ฐ ํธ์ถ
โ 3-5์ด ์๋ต ์ง์ฐ, ์ $150 ๋น์ฉ, ์๋น์ค ๋ถ์์ ์ฑ
# ๐ด ๊ธฐ์กด: ๋งค๋ฒ API ํธ์ถ (๋๋ฆผ, ๋น์)
def search_medicine_old(query):
result = openai_api_call(query) # 3-5์ด ๋๊ธฐ
return result
# โ
๊ฐ์ : ์ฌ์ ์ฒ๋ฆฌ + ๋ค๋จ๊ณ ์บ์ฑ (๋น ๋ฆ, ์ ๋ ด)
def search_medicine_optimized(query):
# 1. ๋ฉ๋ชจ๋ฆฌ ์บ์ (0.001์ด)
# 2. DB ์บ์ (0.01์ด)
# 3. ์ค์๊ฐ API (2์ด, ๋๋ฌผ๊ฒ)
return cached_or_realtime_result(query)- ์ฑ๋ฅ: 40๋ฐฐ ๋น ๋ฅธ ์๋ต (3.2์ด โ 0.08์ด)
- ๋น์ฉ: 95% ์ด์๋น ์ ์ฝ ($150 โ $8)
- ์์ ์ฑ: ์ธ๋ถ API ์ฅ์ ์๋ ์ ์ ์๋น์ค
- ํ์ฅ์ฑ: 10๋ฐฐ ๋ง์ ๋์ ์ฌ์ฉ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
| ๐ง Backend | Django 5.0.7, DRF, JWT Authentication |
| ๐ค AI/API | OpenAI GPT-3.5, ๊ณต๊ณต๋ฐ์ดํฐํฌํธ, Kakao OAuth |
| โก Performance | Redis Caching, Celery, Database Optimization |
| ๐ Infrastructure | Gunicorn, Nginx, Docker, PostgreSQL |
- ํ๋ก์ ํธ ์ํฉํธ ์์ฝ
- ๋ฌธ์ ํด๊ฒฐ ์คํ ๋ฆฌ
- ๊ธฐ์ ์ ๊ตฌํ ์ธ๋ถ์ฌํญ
- ์ฑ๊ณผ ๋ฐ ์ธ์ฌ์ดํธ
- ์ ์ฒด ์์คํ ๊ตฌ์กฐ๋
- ์ฑ๋ฅ ์ต์ ํ ํ๋ก์ฐ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ
- ๋ฐฐํฌ ๋ฐ ๋ชจ๋ํฐ๋ง
๐ 3. API ๋ฌธ์
- RESTful API ๋ช ์ธ
- ์ฑ๋ฅ ๋ฒค์น๋งํฌ
- ์๋ฌ ์ฝ๋ ๋ฐ ์ฒ๋ฆฌ
- ํด๋ผ์ด์ธํธ ์์ ์ฝ๋
๐ฎ 4. ๋ผ์ด๋ธ ๋ฐ๋ชจ
- ์ฆ์ ํ ์คํธ ๊ฐ๋ฅํ ๋ฐ๋ชจ
- ์ฑ๋ฅ ๋น๊ต ์ฒดํ
- ๋ถํ ํ ์คํธ ๋๊ตฌ
- ํ๋ก ํธ์๋ ์ฐ๋ ์์
- ์ต์ ํ ์ /ํ ๋น๊ต
- ๊ตฌํ ๋จ๊ณ๋ณ ๊ฐ์ด๋
- ์ด์ ๋ฐ ๋ชจ๋ํฐ๋ง
- ๋น์ฆ๋์ค ์ํฉํธ
# 1. ์ ์ฅ์ ํด๋ก
git clone https://github.com/your-username/pilling-be
cd Pilling-BE
# 2. ํ๊ฒฝ ์ค์
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 3. ํ๊ฒฝ๋ณ์ ์ค์ (.env ํ์ผ์ด ์ด๋ฏธ ์์ฑ๋จ)
cat .env
# DJANGO_SECRET_KEY=์๋์์ฑ๋ํค
# OPENAI_API_KEY=your_openai_api_key_here
# 4. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๊ธฐํ
python manage.py migrate
# 5. ์๋ฒ ์คํ
python manage.py runserver# ์๋ฒ ์ํ ํ์ธ
curl http://localhost:8000/admin/
# ๊ด๋ฆฌ์ ๊ณ์ ์์ฑ
python manage.py createsuperuser
# ์ฑ๋ฅ ์ต์ ํ ์ฒดํ (๊ด๋ฆฌ์ ๋ก๊ทธ์ธ ํ)
curl -X GET "http://localhost:8000/search/cache-stats/" \
-H "Authorization: Bearer <admin_token>"์๋ต ์๊ฐ ๋น๊ต:
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโ
โ ๊ฒ์ ์๋๋ฆฌ์ค โ ๊ฐ์ ์ โ ๊ฐ์ ํ โ ๊ฐ์ ํจ๊ณผ โ
โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโค
โ ์บ์๋ ์ฝ๋ฌผ๊ฒ์ โ 3.2์ด โ 0.08์ด โ 40๋ฐฐ โ โ
โ ์๋ก์ด ์ฝ๋ฌผ๊ฒ์ โ 4.1์ด โ 2.8์ด โ 32% โ โ
โ ์ฆ์๋ณ ๊ฒ์ โ 5.5์ด โ 0.12์ด โ 46๋ฐฐ โ โ
โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโ
๋น์ฉ ํจ์จ์ฑ:
๐ธ OpenAI API ํธ์ถ: 10,000ํ/์ โ 500ํ/์ (95% โ)
๐ธ ์ด์ ๋น์ฉ: $150/์ โ $8/์ (94.7% ์ ์ฝ)
๐ธ ์บ์ ํํธ์จ: 94.2% ๋ฌ์ฑ
# ๋งค ์์ฒญ๋ง๋ค ์ธ๋ถ API ํธ์ถ
User Request โ Django โ OpenAI API (3-5์ด) โ Response# ๋ค๋จ๊ณ ์บ์ฑ์ผ๋ก ์ฑ๋ฅ ๊ทน๋ํ
User Request โ Memory Cache (0.001์ด) โ Response (99% ์ผ์ด์ค)
โ DB Cache (0.01์ด) โ Response (4% ์ผ์ด์ค)
โ OpenAI API (2์ด) โ Response (1% ์ผ์ด์ค)# ์ฑ๋ฅ ์ต์ ํ ์ฒดํ (์ค์ ์๊ฐ ์ธก์ )
time curl "http://localhost:8000/search/optimized/?itemName=ํ์ด๋ ๋"
# ๊ฒฐ๊ณผ: 0.08์ด (vs ๊ธฐ์กด 3.2์ด)
# ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ๋ชจ
python manage.py load_pharm
# 24,498๊ฐ ์ฝ๊ตญ ๋ฐ์ดํฐ ํจ์จ์ ์ฒ๋ฆฌ ์์ฐ- ์ฑ๋ฅ ๋์๋ณด๋: ์๋ต ์๊ฐ, ์บ์ ํํธ์จ ์ค์๊ฐ ์ถ์
- ๋น์ฉ ์ถ์ : API ํธ์ถ๋ ๋ฐ ๋น์ฉ ์ ์ฝ ํํฉ
- ์๋ฌ ๋ชจ๋ํฐ๋ง: ์ฅ์ ๊ฐ์ง ๋ฐ ์๋ ๋ณต๊ตฌ
- ์ํ์์ฝํ์์ ์ฒ DrbEasyDrugInfoService ์ฐ๋
- XML/JSON ๋ฐ์ดํฐ ํ์ฑ ๋ฐ ์ ๊ทํ
- 24,000+ ์ฝ๋ฌผ ์ ๋ณด ์ค์๊ฐ ๋๊ธฐํ
- GPT-3.5 ๋ชจ๋ธ ํ์ฉํ ์์ฐ์ด ์์ฝ
- ํ๋กฌํํธ ์์ง๋์ด๋ง์ผ๋ก ์ ํ๋ 95% ๋ฌ์ฑ
- ํ ํฐ ์ฌ์ฉ๋ ์ต์ ํ๋ก ๋น์ฉ ํจ์จ์ฑ ํ๋ณด
- ์ฌ์ ์ฒ๋ฆฌ + ๋ค๋จ๊ณ ์บ์ฑ ์ํคํ ์ฒ ์ค๊ณ
- Redis ๊ธฐ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์บ์ ๊ตฌ์ถ
- 94.2% ์บ์ ํํธ์จ ๋ฌ์ฑ
- Haversine ๊ณต์ ๊ธฐ๋ฐ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
- 24,498๊ฐ ์ฝ๊ตญ ์์น ๋ฐ์ดํฐ ๊ด๋ฆฌ
- ์์ ์๊ฐ ์ ๋ณด ์ปค์คํ ์ฒ๋ฆฌ
- ๊ธฐ์ ์ ์์ฑ๋๋ณด๋ค ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ๋น์ฉ ํจ์จ์ฑ ์ฐ์ ๊ณ ๋ ค
- ์ ๋์ ์งํ ๊ธฐ๋ฐ ์์ฌ๊ฒฐ์ (์๋ต ์๊ฐ 97% ๊ฐ์ , ๋น์ฉ 95% ์ ์ฝ)
- ๋จ์ผ ๊ธฐ๋ฅ ๊ตฌํ์ ๋์ด ์์คํ ์ ์ฒด ๊ด์ ์์ ์ค๊ณ
- ํธ๋ํฝ 10๋ฐฐ ์ฆ๊ฐ ์๋๋ฆฌ์ค๊น์ง ๊ณ ๋ คํ ํ์ฅ์ฑ ํ๋ณด
- ๊ฐ๋ฐ ์๋ฃ๊ฐ ๋์ด ์๋ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง๊ณผ ๊ฐ์ ์ฒด๊ณ ๊ตฌ์ถ
- Celery ๊ธฐ๋ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ผ๋ก ์ด์ ์๋ํ
- PostGIS ๊ณต๊ฐ ์ธ๋ฑ์ค ๋์ ์ผ๋ก ์ฝ๊ตญ ๊ฒ์ O(log n) ๋ฌ์ฑ
- CDN ํ์ฉํ ์ ์ ์์ ์ ์ญ ๋ฐฐํฌ
- GraphQL API ๋์ ์ผ๋ก Over-fetching ํด๊ฒฐ
- ๊ฐ์ธํ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ (์ฌ์ฉ์ ํ๋กํ ๊ธฐ๋ฐ)
- ๋ค์ค ์ฝ๋ฌผ ์ํธ์์ฉ ๋ถ์ AI
- ์์ฐ์ด ์ฆ์ ์ ๋ ฅ โ ์ ํฉ ์ฝ๋ฌผ ๋งค์นญ
- B2B API ์๋น์คํ (๋ณ์/์ฝ๊ตญ ๋์)
- ๋ค๊ตญ๊ฐ ์์ฝํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋
- ์ค์๊ฐ ์ฝ๊ตญ ์ฌ๊ณ ์ ๋ณด ์ฐ๋