๐ฅ ์์ฝํ ์ ๋ณด ์ฑ๋ดยท๊ฒ์ ์๋น์ค์ Spring Boot ์๋ฒ์ ๋๋ค.
์ฌ์ฉ์๊ฐ ์ฝ์ ๊ฒ์ยท์ดฌ์ํด ์ ๋ณด๋ฅผ ํ์ธํ๊ณ , ์ฑ๋ด์ผ๋ก ๋ณต์ฝ ๊ด๋ จ ์ง์์๋ต, ๋ณต์ฝ ๋ง์ถค ๊ด๋ฆฌ ์๋น์ค ๋ฉ๋ํฌ๋ฏธ์ ๋ฐฑ์๋์ ๋๋ค. ์์ฝ์ฒยทopenFDA ๋ฑ ๊ณต๊ณต ๋ผ๋ฒจ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ์ฑ๋ด์ OpenAI ์์ RAG๋ฅผ ์น์ด ํ์ ์์ ๊ด์ ์ ๋ต๋ณ ํ์ง์ ๋์์ต๋๋ค.
- ์ฌ์ฉ์ ์ธ์ฆ โ JWT ๋ฐ๊ธยท์ฌ๋ฐ๊ธ(Redis ํ ํฐ ์ ์ฅ), SMS ๋ณธ์ธ ์ธ์ฆ(CoolSMS)
- ์์ฝํ ๊ฒ์ โ ์์ฝ์ฒ(e์ฝ์์)ยทopenFDAยทRxNorm ๋ค์ค ์์ค ํตํฉ ๊ฒ์
- ์์ฝํ ์นด๋ฉ๋ผ ์ธ์ โ Google Cloud Vision OCR ๋ก ์ฝ ์ด๋ฏธ์ง์์ ์ ๋ณด ์ถ์ถ
- ์ฝ๋ฌผ ์ํธ์์ฉ ์๋ด โ ํจ๊ป ๋ณต์ฉ ์ ์ฃผ์ ์ ๋ณด ์ ๊ณต
- ์ฑ๋ด Q&A โ OpenAI ๊ธฐ๋ฐ ์ง์์๋ต์ RAG ๋ผ๋ฒจ ์ปจํ ์คํธ๋ฅผ ์ฃผ์ (๊ฒ์ ์คํจ ์ ์ฝ ๋ฉํ๋ฐ์ดํฐ ์ต์ปค๋ง์ผ๋ก ํด๋ฐฑ)
- ์ด์ ๊ด์ธก โ Actuator + Micrometer(Prometheus) ํฌ์คยท๋ฉํธ๋ฆญ
- ์ธ์ดยทํ๋ ์์ํฌ โ Java 17, Spring Boot 3.3.2 (Web, Security, Data JPA, Validation)
- ๋ฐ์ดํฐ โ MySQL 8 (JPA/Hibernate), Redis
- ๋น๋ โ Gradle ๋ฉํฐ๋ชจ๋
- ๋ฌธ์ โ OpenAPI(Swagger) ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ API ๋ฌธ์
- ์ธ๋ถ ์ฐ๋ โ OpenAI, Google Cloud Vision, ์์ฝ์ฒ e์ฝ์์, openFDA, RxNorm, CoolSMS, RAG ๊ฒ์ ์๋น์ค(mediforme-chatbot-rag)
| ๋ชจ๋ | ์ค๋ช |
|---|---|
app |
๋ถํธ ์ํธ๋ฆฌ(MediformeApplication), ์ค์ ยทํ๋กํ์ผ ๋ณํฉ |
api |
์น ์ปจํธ๋กค๋ฌ + ๋๋ฉ์ธ ๋ก์ง |
common |
๊ณตํต ์๋ตยท์์ธ ๋ฑ |
lib:redis |
Redis ์ค์ ๋ชจ๋ |
api ๋๋ฉ์ธ ํจํค์ง: user(์ธ์ฆ) ยท medicine(๊ฒ์ยทOCRยท์ํธ์์ฉ) ยท search ยท chatbot(RAG) ยท admin ยท status ยท check ยท global(๋ณด์ยท๊ณตํต ์ค์ )
| ๊ฒฝ๋ก | ์ค๋ช |
|---|---|
database/ |
์คํค๋งยท์๋ SQL |
http/ |
IntelliJ HTTP Client ์์ฒญ ํ์ผ(์๋ API ํ ์คํธ) |
eval/chatbot-rag/ |
์ฑ๋ด RAG ํ๊ฐ ํ๋ค์ค(Python) โ Version A/B/C ๋น๊ต ์ธก์ |
์ฌ์ ์ค๋น: MySQL 8, Redis, ์๋ ํ๊ฒฝ๋ณ์
./gradlew :app:bootRun๊ธฐ๋ณธ ํ์ฑ ํ๋กํ์ผ์ local, redis ์
๋๋ค(local / dev / prod ์ค ์ ํ). ํ
์คํธ๋ ./gradlew test.
| ๋ณ์ | ์ฉ๋ |
|---|---|
DB_LOCAL_URL / DB_LOCAL_USERNAME / DB_LOCAL_PASSWORD |
MySQL ์ ์ (devยทprod ๋ DB_DEV_* / DB_PROD_*) |
REDIS_HOST / REDIS_PORT |
Redis ์ ์ |
JWT_SECRET_KEY / JWT_ACCESS_EXPIRATION / JWT_REFRESH_EXPIRATION |
JWT ์๋ช ยท๋ง๋ฃ |
MFDS_API_KEY |
์์ฝ์ฒ e์ฝ์์ API ํค |
GOOGLE_APPLICATION_CREDENTIALS |
Google Vision ์๋น์ค ๊ณ์ ํค ๊ฒฝ๋ก |
COOLSMS_API_KEY / COOLSMS_API_SECRET / COOLSMS_API_SENDER |
SMS ์ธ์ฆ |
RAG_SERVICE_URL |
RAG ๊ฒ์ ์๋น์ค ์ฃผ์ (๊ธฐ๋ณธ http://localhost:8000) |
์ฑ๋ด์ ์ฌ์ฉ์ ์ง๋ฌธ๊ณผ ์ฝ ์๋ณ์๋ฅผ RAG ๊ฒ์ ์๋น์ค(mediforme-chatbot-rag, FastAPI + BGE-M3 + FAISS)์ /retrieve ๋ก ๋ณด๋ด, ์ค์ ์์ฝํ ๋ผ๋ฒจ ์ฒญํฌ๋ฅผ ์ปจํ
์คํธ๋ก ๋ฐ์ ๋ต๋ณ์ ์์ฑํฉ๋๋ค. ๊ฒ์์ด ๋น๊ฑฐ๋ ์๋น์ค ์ฅ์ ์์๋ ์ฝ ๋ฉํ๋ฐ์ดํฐ ์ต์ปค๋ง์ผ๋ก ํด๋ฐฑํ๋ฏ๋ก ๊ธฐ์กด ๋์ ์ดํ๋ก ๋จ์ด์ง์ง ์์ต๋๋ค.
๋์
๊ทผ๊ฑฐ๋ ๋์ผ ๊ณจ๋ ์
ยทjudge ๋ก ์ธก์ ํ A/B/C ๋น๊ต์ ์์ต๋๋ค โ hallucination 65.9%(A ๋ฒ ์ด์ค๋ผ์ธ) โ 59.8%(B ์ต์ปค๋ง) โ 52.4%(C RAG), ํนํ ์ด๋ ค์ด ์ง๋ฌธ์์ ์ ํ๋๊ฐ ํฌ๊ฒ ๊ฐ์ ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ eval/chatbot-rag/reports/2026-05-21-A-vs-B-vs-C.md ๋ฅผ ์ฐธ๊ณ ํ์ธ์.