프로젝트 소개
프로젝트 소개 — Yaksok
알약이나 약 상자를 찍으면 무슨 약인지 알려 주고, AI "프로미"가 내 상황에 맞춰 먹는 법과 주의사항을 설명한다
핵심 소주제
1
비전 → 속성 → 낱알식별 파이프라인
식약처 낱알식별 DB는 이미지가 아니라 모양·색·각인·분할선 같은 텍스트 속성으로 검색된다. 그래서 Gemini Vision이 사진에서 속성을 뽑고, DB 후보를 가중치(각인 5.0 등)로 점수 매겨 돌려준다. 점수가 2.0 미만이면 재촬영을 요청한다.
2
포장 박스 제품명 인식
낱알이 아니라 약 상자를 찍으면 Vision이 제품명을 읽고, 속성 매칭 대신 이름 검색으로 바로 찾는다.
3
공식 데이터에 근거한 AI 복약 상담
상담 AI "프로미"는 사용자 건강정보(임신·수유·복용약·알레르기), 스캔 결과, e약은요의 효능·용법·주의사항, 현재 시각을 맥락으로 받아 답한다. 진단·처방은 하지 않는다.
4
개인정보를 서버에 두지 않는 구조
건강정보, 복약 목록, 인식 기록은 모두 브라우저 localStorage에 둔다. 촬영 이미지도 서버에 저장하지 않는다.
5
병렬 개발을 위한 헥사고날 구조
백엔드를 인식(pill)·상담(guidance) 도메인으로 나누고, 레이어 의존 규칙을 import-linter 계약 5개로 CI에서 강제했다. 백엔드는 4트랙(기반·데이터 매칭·Vision·상담)으로 나눠 동시에 개발하고 통합했다.
주요 기능
| 기능 | 설명 | 상태 |
|---|---|---|
| 알약 사진 인식 | POST /api/pill/identify — 속성 추출 → 후보 점수순 반환, 낮으면 needs_retry | 구현 |
| 포장 박스 인식 | 제품명이 읽히면 이름 검색으로 분기 | 구현 |
| 카메라 촬영 | 셔터 버튼, 1:1 촬영 후 바로 상담 화면으로 | 구현 |
| 알약사전 | 27,330건 검색·상세 조회 | 구현 |
| 프로미 복약 상담 | 대화방 생성, 메시지 전송·조회 | 구현 |
| 내 정보 | 건강정보 입력, 기기 내 저장 | 구현 |
| 내 기록 | 인식한 약 자동 저장, 최대 50건 | 구현 |
| 오늘의 약속 | 복용 시점·횟수·용량 수정·추가·삭제 | 구현 |
| 증상별 약 추천 | 일반의약품 한정 추천 (화면만, 더미 데이터) | 설계 |
| DUR 병용금기 | 함께 먹으면 안 되는 약 경고 (API 활용신청 대기) | 설계 |
| 회원 · 로그인 | 빈 스캐폴드 | 설계 |
기술 스택
FRONTENDReact 19 · Vite 5 · TypeScript · React Router 7 · CSS Modules
BACKENDPython 3.12 · FastAPI · SQLAlchemy 2 · Alembic · uv
AIGoogle Gemini 2.5 Flash (Vision · 상담)
DATA식약처 의약품 낱알식별 · e약은요 (data.go.kr)
INFRANeon PostgreSQL · Vercel · Cloudflare Tunnel · GitHub Actions
아키텍처
| 계층 | 기술 | 배포 |
|---|---|---|
| 프론트엔드 | React + Vite (13개 화면) | Vercel · yaksok.cloverky.cloud |
| API | FastAPI, 헥사고날 (pill · guidance) | Cloudflare Tunnel · yaksok-api.cloverky.cloud |
| DB | PostgreSQL (pills · conversations · messages) | Neon |
| AI | Gemini Vision · LLM (키 없으면 fake 어댑터) | Google API |
| CI | ruff · mypy · import-linter · pytest / tsc · lint · build | GitHub Actions |