PubMed ๋ ผ๋ฌธ์ ์ฐพ๊ณ , ๋ชจ์ผ๊ณ , ์ฝ๊ณ , ๊ทผ๊ฑฐ๋ฅผ ํ์ธํ๋ฉฐ AI์ ๋ํํ๋ ์ฐ๊ตฌ ์ํฌ์คํ์ด์ค
์๋น์ค ๋ฐ๋ก๊ฐ๊ธฐ ยท ๋ฐฐํฌ ๊ฐ์ด๋ ยท ๋ฆฌ๋ด์ผ ์ํคํ ์ฒ
Publium์ ์ฌ๋ฌ ์ฌ์ดํธ์ PDF๋ฅผ ์ค๊ฐ๋ฉฐ ๋ ผ๋ฌธ์ ์ ๋ฆฌํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ ์ค์ด๊ธฐ ์ํด ๋ง๋ ์๋น์ค์ ๋๋ค. PubMed ๋ ผ๋ฌธ ๊ฒ์๋ถํฐ ์ด๋กยท๊ณต๊ฐ ์ ๋ฌธ ์์ง, ๋ ผ๋ฌธ๋ณ ์ฑํ ๋ฐฉ, ์ฌ๋ฌ ๋ ผ๋ฌธ ์ข ํฉ ๋ถ์, ๊ด๊ณ ์ค์ฌ์ Graph RAG ํ์๊น์ง ํ ํ๋ฉด์์ ์ฒ๋ฆฌํฉ๋๋ค.
AI๊ฐ ์๊ณ ์๋ ์ผ๋ฐ ์ง์์๋ง ์์กดํ์ง ์์ต๋๋ค. ์ ํํ ๋ ผ๋ฌธ์ ์ด๋ก์ด๋ ์ ๋ฌธ์์ ๊ด๋ จ ๊ทผ๊ฑฐ๋ฅผ ์ฐพ์ ๋ต๋ณํ๋ ๋ ผ๋ฌธ ๊ธฐ๋ฐ RAG ์ฑ๋ด์ ๋๋ค.
| ๊ตฌ๋ถ | ๋ด์ฉ |
|---|---|
| ํด๊ฒฐํ๋ ค๋ ๋ฌธ์ | ๋ ผ๋ฌธ ๊ฒ์, ์๋ฌธ ํ์ธ, ๋ฉ๋ชจ์ AI ๋ํ๊ฐ ์๋ก ๋ค๋ฅธ ๋๊ตฌ์ ํฉ์ด์ง๋ ๋ฌธ์ |
| ํต์ฌ ํ๋ฆ | PubMed ๊ฒ์ โ ์ด๋กยท์ ๋ฌธ ์ ์ฅ โ ๋ ผ๋ฌธ ์ ํ โ ๊ทผ๊ฑฐ ๊ฒ์ โ AI ๋ํ |
| ์ฐจ๋ณ์ | ๋ต๋ณ๊ณผ ์๋ฌธ์ ํจ๊ป ๋ณด๊ณ , ์ค์ ๊ทผ๊ฑฐ ๋ฌธ์ฅ์ ํ์ธํ๋ฉฐ, ๋ ผ๋ฌธ ๊ด๊ณ๋ฅผ ๊ทธ๋ํ๋ก ํ์ |
| ๊ตฌํ ๋ฒ์ | ๊ธฐํ, UI, React ํ๋ก ํธ์๋, Express API, DBยทRLS, RAG, Vercel ๋ฐฐํฌ |
| ์ด์ ์ฃผ์ | https://team-pubmed.vercel.app/ |
| ๋ฐฐํฌ ๋ฐฉ์ | deploy_vercel ๋ธ๋์น์ ๋ฐ์๋ ๋๋ง Vercel Production ๋ฐฐํฌ |
- ๊ฒ์ํ ๋ ผ๋ฌธ์ ์ด๋ก์ ์ฆ์ ์ ์ฅํด ๊ฐ์ ์๋ฃ๋ฅผ ๋งค ์ง๋ฌธ๋ง๋ค ๋ค์ ์์ฒญํ์ง ์์ต๋๋ค.
- ๊ณต๊ฐ ์ ๋ฌธ๊ณผ ์ฌ์ฉ์ PDF๋ฅผ ์ฒญํนยท์๋ฒ ๋ฉํ๊ณ
pgvector์์ ๊ด๋ จ ๋ฌธ๋จ๋ง ๊ฒ์ํฉ๋๋ค. - Paper Reader์์ ์๋ฌธ๊ณผ ์ฑํ ์ ๋๋ํ ์ด๊ณ ๋ต๋ณ์ ๊ทผ๊ฑฐ ๋ฒ์๋ฅผ ๊ฐ์กฐํฉ๋๋ค.
- ์ฌ๋ฌ ๋ ผ๋ฌธ์ ํ ์ฑํ ๋ฐฉ์ ์ฐ๊ฒฐํด ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ ํจ๊ป ์ง๋ฌธํ ์ ์์ต๋๋ค.
- Research Galaxy๋ ๋ ผ๋ฌธยท์ฃผ์ ยทํต์ฌ ๊ฐ๋ ยท๋ด์ฉ ์ ์ฌ๋๋ฅผ 2Dยท3D ๊ทธ๋ํ๋ก ํ์ํฉ๋๋ค.
- ์ฌ์ฉ์ ์ปฌ๋ ์
ยท์ฑํ
ยท์
๋ก๋ PDF๋
user_id, RLS, ์๋ฒ ๊ฒ์ฆ์ผ๋ก ๊ฒฉ๋ฆฌํฉ๋๋ค.
- ๊ด์ฌ ์ฃผ์ ์ ์ต์ PubMed ๋ ผ๋ฌธ์ ๋น ๋ฅด๊ฒ ๋ชจ์ผ๊ณ ์ถ์ ์ฐ๊ตฌ์
- ์ฌ๋ฌ ๋ ผ๋ฌธ์ ์ฐ๊ตฌ ๋ชฉ์ ยท๋ฐฉ๋ฒยท๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ๊ณ ์ถ์ ํ์
- ๊ธด ๋ ผ๋ฌธ์์ ์ง๋ฌธ๊ณผ ๊ด๋ จ๋ ๋ฌธ๋จ์ ๋ฐ๋ก ์ฐพ๊ณ ์ถ์ ์ฌ์ฉ์
- ๋ต๋ณ๋ง ๋ณด๋ ๊ฒ์ด ์๋๋ผ ์ค์ ๊ทผ๊ฑฐ ๋ฌธ์ฅ๊น์ง ํ์ธํ๊ณ ์ถ์ ์ฌ์ฉ์
Publium์ ๋ ผ๋ฌธ ํ์๊ณผ ์ฐ๊ตฌ ๋ณด์กฐ ๋๊ตฌ์ ๋๋ค. ๊ฐ์ธ์ ์ฆ์์ ์ง๋จํ๊ฑฐ๋ ์ฝ๋ฌผยท๋ณต์ฉ๋ฒ์ ์๋ดํ๋ ์๋ฃ ์กฐ์ธ ์๋น์ค๊ฐ ์๋๋๋ค.
| ๊ธฐ๋ฅ | ์ค๋ช |
|---|---|
| PubMed ๊ฒ์ยท์์ง | ํค์๋, ์์ยท์ข ๋ฃ ์ฐ๋, ์ต๋ ๊ฑด์๋ฅผ ์ง์ ํด ๋ ผ๋ฌธ์ ์์งํฉ๋๋ค. |
| ์ด๋ก ์๋ ์ ์ฅ | ๊ฒ์ํ ๋ ผ๋ฌธ์ ์ ๋ชฉ, ์ ์, ์ ๋, ์ด๋ก, DOI, PMCID๋ฅผ DB์ ์ ์ฅํฉ๋๋ค. |
| ์์ง ํํฉ ๋ถ์ | ์ฐ๋๋ณ ๋ ผ๋ฌธ ์์ ๋ง์ด ๋ฑ์ฅํ ์ ๋์ ๊ทธ๋ํ๋ก ํ์ธํฉ๋๋ค. |
| ๋ ผ๋ฌธ ๋ชฉ๋ก ๊ด๋ฆฌ | ์ ๋ชฉยท์ด๋กยท๊ฒ์์ดยท์ฐ๋ยท์ ๋๋ก ๊ฒ์ํ๊ณ ์ ๋ฌธ ์ฌ๋ถ์ ์ ๋ ฌ ๊ธฐ์ค์ ์ ํํฉ๋๋ค. |
| ๊ณต๊ฐ ์ ๋ฌธ ํ์ | PMC OA, PMC Open Data, BioC, Unpaywall, Crossref์์ ์๋ฌธ ํ๋ณด๋ฅผ ์ฐพ์ต๋๋ค. |
| PDF ์ ๋ก๋ | ์๋์ผ๋ก ๊ตฌํ์ง ๋ชปํ ๋ ผ๋ฌธ์ ์ฌ์ฉ์๊ฐ PDF๋ฅผ ์ฌ๋ ค ๋ถ์ํ ์ ์์ต๋๋ค. |
| ์ฌ๋ฌ ๋ ผ๋ฌธ ๋ถ์ | ์ต๋ 5ํธ์ ํ ์ฑํ ๋ฐฉ์ ๋ฃ๊ณ ๊ณตํต์ ยท์ฐจ์ด์ ยท์ข ํฉ ๊ฒฐ๋ก ์ ์ง๋ฌธํฉ๋๋ค. |
| Paper Reader | ๋ ผ๋ฌธ ์๋ฌธ๊ณผ ์ฑํ ์ 50:50์ผ๋ก ์ด์ด ํจ๊ป ์ฝ์ต๋๋ค. |
| ๊ทผ๊ฑฐ ํ์ด๋ผ์ดํธ | ๋ต๋ณ์ ์ฌ์ฉ๋ ์ถ์ฒ ๋ฌธ์ฅ์ ํ์ํ๊ณ ์๋ฌธ ์์น๋ฅผ ๊ฐ์กฐํฉ๋๋ค. |
| Research Galaxy | ์ค์ PubMed ๋ ผ๋ฌธ 148ํธ์ ์ฃผ์ ยทํต์ฌ ๊ฐ๋ ยท์ ์ฌ ์ฐ๊ตฌ ๊ด๊ณ์ ๊ฒ์ ๊ฒฝ๋ก๋ฅผ ์๊ฐํํฉ๋๋ค. |
| ์คํธ๋ฆฌ๋ฐ ๋ต๋ณ | AI ๋ต๋ณ์ ์์ฑ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ค์๊ฐ์ผ๋ก ํ์ธํฉ๋๋ค. |
| ์ฌ์ฉ์๋ณ ๊ณต๊ฐ | Google ๋ก๊ทธ์ธ, Supabase RLS๋ก ๋ ผ๋ฌธ ๋ชฉ๋ก๊ณผ ์ฑํ ์ ์ฌ์ฉ์๋ณ๋ก ๋ถ๋ฆฌํฉ๋๋ค. |
์ผ์ชฝ ๊ฒ์ ์์ญ์์ ํค์๋์ ์ฐ๋ ๋ฒ์๋ฅผ ์ ๋ ฅํฉ๋๋ค. PubMed ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ฉํ๋ฐ์ดํฐ์ ์ด๋ก์ ๊ฒ์ ์์ ์ ์ ์ฅ๋๋ฏ๋ก, ์ดํ ์ง๋ฌธํ ๋ PubMed์์ ๊ฐ์ ์ด๋ก์ ๋งค๋ฒ ๋ค์ ๊ฐ์ ธ์ค์ง ์์ต๋๋ค.
๊ฐ์ ํ๋ฉด์์๋ ๋ค์ ์ ๋ณด๋ฅผ ๋ฐ๋ก ํ์ธํ ์ ์์ต๋๋ค.
- ํ์ฌ ์ ์ฅ๋ ์ ์ฒด ๋ ผ๋ฌธ ์
- ์ด๋ฒ ๊ฒ์์์ ์๋ก ๋ค์ด์จ ๋ ผ๋ฌธ๊ณผ ์ค๋ณต์ผ๋ก ๊ฑด๋๋ด ๋ ผ๋ฌธ ์
- ๊ฒ์ ๊ธฐ๊ฐ ์ ์ฒด์ ์ฐ๋๋ณ ๋ ผ๋ฌธ ๋ถํฌ
- ์์ง ๋ ผ๋ฌธ์์ ๋ง์ด ๋ฑ์ฅํ ์ ๋
๋ ผ๋ฌธ ์นด๋์์ ์ด๋ก, ์ ์, ์ ๋, ์ถํ ์ฐ๋, PMID๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. PubMedยท์ถํ์ฌ ์๋ฌธ์ผ๋ก ์ด๋ํ๊ฑฐ๋ PDF๋ฅผ ์ง์ ์ ๋ก๋ํ ์๋ ์์ต๋๋ค.
๋ชฉ๋ก์์๋ ๋ค์ ์กฐ๊ฑด์ ์กฐํฉํ ์ ์์ต๋๋ค.
- ์ ๋ชฉยท์ด๋กยท์์ง ๊ฒ์์ด
- ์์ยท์ข ๋ฃ ์ฐ๋
- ์ ๋๋ช
- ์ ์ฒด ๋ ผ๋ฌธ / ์ ๋ฌธ ๋ถ์ ๊ฐ๋ฅ / ์ด๋ก ๊ธฐ๋ฐ
- ์ต์ ์ / ์ค๋๋์ / ์ต๊ทผ ์์ง์ / ์ ๋ชฉ์
๋ถ์ํ ๋ ผ๋ฌธ์ ์ต๋ 5ํธ๊น์ง ์ ํํ ์ ์์ต๋๋ค. ์ ํํ ๋ ผ๋ฌธ์ ์ฑ๋ด์ผ๋ก ๋ณด๋ด๋ฉด ํด๋น ๋ ผ๋ฌธ ์กฐํฉ์ ์ํ ๋ณ๋์ ์ฑํ ๋ฐฉ์ด ์์ฑ๋ฉ๋๋ค.
์ฑ๋ด์ ์ฑํ ๋ฐฉ์ ์ฐ๊ฒฐ๋ ๋ ผ๋ฌธ๋ง ๊ทผ๊ฑฐ๋ก ๋ต๋ณํฉ๋๋ค. ์ฌ๋ฌ ๋ ผ๋ฌธ์ ์ ํํ๋ค๋ฉด ๊ฐ ๋ ผ๋ฌธ์ ๊ฐ์์ ๊ด๋ จ ๋ฌธ๋จ์ ํจ๊ป ๊ฒ์ํด ์ข ํฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์ง๋ฌธํ ์ ์์ต๋๋ค.
- ์ด ๋ ผ๋ฌธ์ ์ฐ๊ตฌ ๋ชฉ์ ๊ณผ ๊ฒฐ๋ก ์ ๊ฐ๋จํ ์ ๋ฆฌํด์ค.
- ์ฐ๊ตฌ ๋์๊ณผ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ์ค๋ช ํด์ค.
- ์ ํํ ์ธ ๋ ผ๋ฌธ์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ ๋น๊ตํด์ค.
- ๊ฒฐ๊ณผ๋ฅผ ๋ท๋ฐ์นจํ๋ ์ค์ ๊ทผ๊ฑฐ ๋ฌธ์ฅ์ ๋ณด์ฌ์ค.
- ์ฐ๊ตฌ์ ํ๊ณ์ ํ์ ์ฐ๊ตฌ ์์ด๋์ด๋ฅผ ์ ๋ฆฌํด์ค.
๋ ผ๋ฌธ ์์ด ์ผ๋ฐ ์ฑํ ๋ฐฉ์ ๋ง๋ค ์๋ ์์ง๋ง, ๋ ผ๋ฌธ ๊ทผ๊ฑฐ๊ฐ ํ์ํ ์ง๋ฌธ์ ๋ฐ๋์ ๋ ผ๋ฌธ์ ์ฐ๊ฒฐํ ์ฑํ ๋ฐฉ์์ ์งํํด์ผ ํฉ๋๋ค.
์๋ฌธ ๋ณด๊ธฐ๋ฅผ ๋๋ฅด๋ฉด Paper Reader๊ฐ ์ผ์ชฝ, ์ฑํ
์ด ์ค๋ฅธ์ชฝ์ ์ด๋ฆฝ๋๋ค.
PDF์ ์ถ์ถ ๋ณธ๋ฌธ์ ์ ํํ๋ฉด์ ๋ต๋ณ์ ์ฌ์ฉ๋ ๊ทผ๊ฑฐ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ธ๋ถ ์๋ฌธ์ PMCยทDOIยท์ถํ์ฌ ํ์ด์ง๋ฅผ ์ ์ฐฝ์ผ๋ก ์ฝ๋๋ค. ์ธ๋ถ ํ์ด์ง๋
์๋น์ค๊ฐ ์ ์ดํ ์ ์์ผ๋ฏ๋ก Publium์ ๊ทผ๊ฑฐ ํ์ด๋ผ์ดํธ๋ Paper Reader์
์ ์ฅ๋ ๋ณธ๋ฌธ์์ ์ ๊ณตํฉ๋๋ค.
์ง์ ๊ทธ๋ํ ๋ฉ๋ด๋ ๋
๋ฆฝ๋ ์ ์ฒด ํ๋ฉด์์ ์ค์ PubMed ๋
ผ๋ฌธ 148ํธ์
๊ด๊ณ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ ์ ๋ฐ์๋ฃ, ์ฌํ๊ด ๊ฑด๊ฐ, ๋ยท์ ๊ฒฝ๊ณผํ,
๋์ฌยท๋น๋จ, ์ ์ ๊ฑด๊ฐ, ๊ณต์ค๋ณด๊ฑด์ ์ฌ์ฏ ๋ถ์ผ๋ก ๊ตฌ์ฑํ์ต๋๋ค.
| ๊ตฌ์ฑ ์์ | ์๋ฏธ |
|---|---|
| ์ฐ๊ตฌ ์ฃผ์ ๋ ธ๋ | ์ ์ ๋ฐ์๋ฃ, ์ฌํ๊ด ๊ฑด๊ฐ ๋ฑ 6๊ฐ ์ฐ๊ตฌ ๋ถ์ผ์ ์ค์ฌ์ |
| ๋ ผ๋ฌธ ๋ ธ๋ | ์ค์ PubMed ๋
ผ๋ฌธ 148ํธ. ํ๋ฉด์๋ P001 ๊ฐ์ ์๋ณ์๋ก ๊ฐ๊ฒฐํ๊ฒ ํ์ |
| ํต์ฌ ๊ฐ๋ ๋ ธ๋ | ์งํ, ์น๋ฃ๋ฒ, ๋ฐ์ด์ค๋ง์ปค, ์ฐ๊ตฌ ๋ฐฉ๋ฒ์ฒ๋ผ ์ฌ๋ฌ ๋ ผ๋ฌธ์์ ๋ฐ๋ณต๋๋ ๊ฐ๋ |
| ์ฃผ์ ์ฐ๊ฒฐ | ๋ ผ๋ฌธ์ด ์ด๋ค ์ฐ๊ตฌ ๋ถ์ผ์ ์ํ๋์ง ํ์ |
| ๊ฐ๋ ์ฐ๊ฒฐ | ์ ๋ชฉ๊ณผ ์ด๋ก์์ ๋ฐ๊ฒฌํ ํต์ฌ ๊ฐ๋ ์ด ์ด๋ค ๋ ผ๋ฌธ๊ณผ ์ฐ๊ฒฐ๋๋์ง ํ์ |
| ์ ์ฌ ๋ ผ๋ฌธ ์ฐ๊ฒฐ | ๊ฐ์ ๋ถ์ผ์์ ์ ๋ชฉยท์ด๋ก์ ์ฃผ์ ์ฉ์ด๊ฐ ๊ฐ๊น์ด ๋ ผ๋ฌธ์ ์ฐ๊ฒฐ |
- ์ฌ์ฉ์๊ฐ ๊ฐ์ด๋ฐ ๊ฒ์์ฐฝ์ ์์ฐ์ด ์ฐ๊ตฌ ์ง๋ฌธ์ ์ ๋ ฅํฉ๋๋ค.
- ์ง๋ฌธ์ ์ฃผ์ ์ฉ์ด๋ฅผ ๋ ผ๋ฌธ ์ ๋ชฉยท์ด๋กยทํ๊ตญ์ด ์์ฝ๊ณผ ๋น๊ตํด ๊ด๋ จ ๋ ผ๋ฌธ์ ์ฐพ์ต๋๋ค.
- ๊ฒ์๋ ๋ ผ๋ฌธ๋ฟ ์๋๋ผ ์ฐ๊ฒฐ๋ ์ฐ๊ตฌ ์ฃผ์ ์ ํต์ฌ ๊ฐ๋ , ์ ์ฌ ๋ ผ๋ฌธ ์ด์๊น์ง ํ์ฅํฉ๋๋ค.
- ๊ด๋ จ ๋ ธ๋์ ์ฐ๊ฒฐ์ ์ ๊ฐ์กฐํ๊ณ ์ผ์ชฝ ํจ๋์ ๊ด๋ จ ๋ ผ๋ฌธ ๋ชฉ๋ก์ ํ์ํฉ๋๋ค.
- ๋ ผ๋ฌธ์ ์ ํํ๋ฉด ์ค๋ฅธ์ชฝ ํจ๋์์ ์๋ฌธ ์ ๋ชฉ, ์ ์, ์ ๋, PMID, ์ด๋ก ๊ธฐ๋ฐ ์์ฝ๊ณผ ์ฐ๊ฒฐ ์ด์ ๋ฅผ ํ์ธํฉ๋๋ค.
- ๋ ๋ ผ๋ฌธ์ ์ง์ ํ๋ฉด ์ค๊ฐ์ ์ฃผ์ ยท๊ฐ๋ ๋ ธ๋๋ฅผ ํฌํจํ ์ต๋จ ์ฐ๊ฒฐ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ๋ ผ๋ฌธ, ์ฐ๊ตฌ ์ฃผ์ , ์งํยท์น๋ฃยท์ฐ๊ตฌ ๋ฐฉ๋ฒยท๋ฐ์ด์ค๋ง์ปค ๊ฐ๋ ์ ์๋ก ๋ค๋ฅธ ๋ ธ๋๋ก ํ์
- ํค๋์
2D / 3D๋ฒํผ์ผ๋ก ํ๋ฉด ํ์๊ณผ ํ์ ๊ฐ๋ฅํ ๊ณต๊ฐ ๊ทธ๋ํ๋ฅผ ์ ํ - ์ผ์ชฝ
๋ ผ๋ฌธ ๋ ธ๋ ์ฐพ๊ธฐ์์ ๊ทธ๋ํ ์๋ณ์, PMID, ์๋ฌธ ์ ๋ชฉ, ์ ์, ์ ๋๋ก ํน์ ๋ ผ๋ฌธ์ ๋ฐ๋ก ์ ํ - ๊ฐ์ ๋ถ์ผ์์ ์ ๋ชฉยท์ด๋ก ์ฉ์ด๊ฐ ์ ์ฌํ ๋ ผ๋ฌธ ์ฐ๊ฒฐ
- ์ ์ฒดยท๋ ผ๋ฌธ ์ค์ฌยท์ ๋ฌธ ๊ฐ๋ฅยท๊ทผ๊ฑฐ ๊ฒฝ๋ก ๋ ์ฆ
- ์ํํยทํด๋ฌ์คํฐํ ๋ฐฐ์น ์ ํ
- ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ ๋ ธ๋ ์์ง์๊ณผ ์ฃผ๋ณ ๊ด๊ณ๊ฐ ํจ๊ป ๋ฐ์ํ๋ ๋๋๊ทธ
- ํ๋ยท์ถ์ยท์ด๋, ์์ง์ ์ผ์์ ์ง์ 1ยท2๋จ๊ณ ๊ด๊ณ ๊ฐ์กฐ
- ๋ ๋ ผ๋ฌธ ์ฌ์ด์ ์ต๋จ ์ฐ๊ฒฐ ๊ฒฝ๋ก ํ์
- ์์ฐ์ด ์ง๋ฌธ์ ๊ด๋ จ ๋ ผ๋ฌธ์ ์ฐพ๊ณ ์ฃผ์ ยทํต์ฌ ๊ฐ๋ ยท์ ์ฌ ์ฐ๊ตฌ ์ด์๊น์ง ํ์ฅ
- ๊ทธ๋ํ์ ๋
ผ๋ฌธ ๋
ธ๋๋
P001๊ฐ์ ์งง์ ์๋ณ์๋ก ํ์ํ๊ณ , ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๋ฉด ์๋ฌธ ์ ๋ชฉยท์ฐ๋ยท์ฐ๊ตฌ ๋ถ์ผยท๊ฐ์ฅ ๊ฐํ ์ฐ๊ฒฐ ๊ทผ๊ฑฐ ์ ๊ณต - ์ข์ฐ ํจ๋์์๋ ๋ ผ๋ฌธ ์ ๋ชฉ์ ์๋ฌธ ๊ทธ๋๋ก ๋ชจ๋ ํ์
- ์ ํ ๋ ผ๋ฌธ์ ํ์ค ์์ฝ, ์ฐ๊ตฌ ๋ชฉ์ ยท๋ฐฉ๋ฒยท๊ฒฐ๊ณผ๋ ์ด๋ก์ ๊ทผ๊ฑฐ๋ก ํ๊ตญ์ด๋ก ์ ๊ณตํ๊ณ ๊ด๋ จ ๋ ผ๋ฌธ๋ณ ์ฐ๊ฒฐ ์ด์ ๋ ํจ๊ป ํ์
ํ์ฌ ๊ตฌํ์ Graph Retrieval + Visualization ๋จ๊ณ์ ๋๋ค. ์ง๋ฌธ๊ณผ ๊ด๋ จ๋ ๋ ผ๋ฌธ์ ๊ฒ์ํ ๋ค ๊ทธ๋ํ ์ด์์ ํ์ฅํด ๊ทผ๊ฑฐ๊ฐ ์ด๋ค ์ฐ๊ตฌ ์ฃผ์ ์ ๊ฐ๋ ์ ํตํด ์ฐ๊ฒฐ๋๋์ง ๋ณด์ฌ์ฃผ๋ฏ๋ก Graph RAG์ ๊ฒ์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ค๋ง ์ผ๋ฐ์ ์ธ Graph RAG์ ๋ง์ง๋ง ๋จ๊ณ์ฒ๋ผ ๊ฒ์๋ ์๋ธ๊ทธ๋ํ๋ฅผ LLM์
์ ๋ฌํด ์๋ก์ด ๋ต๋ณ์ ์์ฑํ์ง๋ ์์ต๋๋ค. AI ์ฑ๋ด ํญ์ ์ด์ DB์
pgvector๋ฅผ ์ด์ฉํ ๋ฒกํฐ RAG์ด๊ณ , ์ง์ ๊ทธ๋ํ ํญ์ ๋ณ๋์ ๊ณ ์ ์ฝํผ์ค๋ก
๊ด๊ณ์ ๊ฒ์ ๊ฒฝ๋ก๋ฅผ ์ค๋ช
ํฉ๋๋ค.
์ง์ ๊ทธ๋ํ ํญ
์ง๋ฌธ โ ๊ด๋ จ ๋
ผ๋ฌธ ๊ฒ์ โ ์ฃผ์ ยท๊ฐ๋
ยท์ ์ฌ ๋
ผ๋ฌธ ํ์ฅ โ ๊ด๊ณ ๊ฒฝ๋ก ์๊ฐํ
AI ์ฑ๋ด ํญ
์ง๋ฌธ โ ์๋ฒ ๋ฉ ์์ฑ โ pgvector ์ฒญํฌ ๊ฒ์ โ ๊ด๋ จ ๋ฌธ๋จ์ LLM์ ์ ๋ฌ โ ๋ต๋ณ ์์ฑ
์ด ๊ตฌ์กฐ๋ฅผ ๋ถ๋ฆฌํ ์ด์ ๋ ํฌํธํด๋ฆฌ์ค์ฉ ๊ทธ๋ํ ์ฝํผ์ค๊ฐ ์ฌ์ฉ์์ ๊ฐ์ธ ๋ ผ๋ฌธ, ์ฑํ , ์ ๋ก๋ PDF์ ์์ด์ง ์๊ฒ ํ๊ณ ๊ธฐ๋ฅ๋ณ ๋์์ ๋ช ํํ๊ฒ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์์ ๋๋ค. ์ดํ์๋ ์ ํํ ์๋ธ๊ทธ๋ํ์ ์ฐ๊ฒฐ ์ด์ ๋ฅผ ์ฑ๋ด ์ปจํ ์คํธ์ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์์ ํ Graph RAG ๋ต๋ณ ์์ฑ ๋จ๊ณ๊น์ง ํ์ฅํ ์ ์์ต๋๋ค.
Publium์ ๊ถ๋ฆฌ๊ฐ ํ์ธ๋์ง ์์ ์ ๋ฃ ์ถํ์ฌ ๋ณธ๋ฌธ์ ๋ฌด๋จ์ผ๋ก ํฌ๋กค๋งํ์ง ์์ต๋๋ค. ์ค์ ๋ถ์์ ์ฌ์ฉํ ์ ์๋ ๋ณธ๋ฌธ์ ๋ค์ ์์๋ก ํ๋ณดํฉ๋๋ค.
| ๊ฒฝ๋ก | ์ญํ | ์๋ ๋ถ์ ์ฌ๋ถ |
|---|---|---|
| PMC Open Data | ๊ณต๊ฐ JATS XMLยทPDFยทํ ์คํธ ํ์ | ๊ณต๊ฐ ๋ผ์ด์ ์ค ํ์ธ ํ ๋ถ์ |
| NCBI EFetch | PMCID๋ก PMC XML ์์ฒญ | ๊ณต๊ฐ ๋ผ์ด์ ์ค ํ์ธ ํ ๋ถ์ |
| BioC | PMC ๋ณธ๋ฌธ์ ๊ตฌ์กฐํ๋ JSON์ผ๋ก ์์ฒญ | PMC ๋ผ์ด์ ์ค ํ์ธ ํ ๋ถ์ |
| Unpaywall | DOI์ ํฉ๋ฒ์ ์ธ ๊ณต๊ฐ ์๋ฌธ ์์น ํ์ | ๋งํฌยทPDF ํ๋ณด ์ ์ฅ |
| Crossref | DOIยท์ถํ์ฌ ์๋ฌธ ํ๋ณด ํ์ | ๋งํฌ ํ๋ณด๋ง ์ ์ฅ |
| ์ฌ์ฉ์ PDF | ์ฌ์ฉ์๊ฐ ๋ณด์ ํ PDF ์ ๋ก๋ | ์ฌ์ฉ์ ์ ์ฉ์ผ๋ก ๋ถ์ |
| PubMed ์ด๋ก | ์ ๋ฌธ์ ๊ตฌํ์ง ๋ชปํ์ ๋์ ๋ง์ง๋ง ๊ทผ๊ฑฐ | ์ด๋ก ๋ฒ์์์ ๋ต๋ณ |
์ค์ ๊ทผ๊ฑฐ ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฌ์ฉ์ ์
๋ก๋ PDF
โ DB์ ์ ์ฅ๋ PMC ๊ณต๊ฐ ์ ๋ฌธ
โ PMC XML
โ BioC ๋ณธ๋ฌธ
โ PubMed ์ด๋ก
์ค์ํ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
- ์๋ฌธ ๋งํฌ ๋ฐ๊ฒฌ: ์ฝ์ ์ ์๋ ์ธ๋ถ ์์น๋ฅผ ์ฐพ์ ์ํ
- ์ ๋ฌธ ๋ถ์ ์๋ฃ: ๋ณธ๋ฌธ์ ์ถ์ถํ๊ณ ์ฒญํนยท์๋ฒ ๋ฉํ์ฌ DB์ ์ ์ฅํ ์ํ
Unpaywall์ด๋ Crossref์์ ๋งํฌ๋ฅผ ์ฐพ์๋ค๋ ์ด์ ๋ง์ผ๋ก ๊ทธ PDF๋ฅผ ์๋ ๋ค์ด๋ก๋ํ๊ฑฐ๋ ์๋ฒ ๋ฉํ์ง ์์ต๋๋ค. PMC XMLยทBioC ๋ณธ๋ฌธ ๋๋ ์ฌ์ฉ์๊ฐ ์ ๋ก๋ํ PDF์ฒ๋ผ ์ค์ ํ ์คํธ๋ฅผ ํ๋ณดํ ๊ฒฝ์ฐ์๋ง ์ ๋ฌธ RAG๊ฐ ์ค๋น๋ฉ๋๋ค.
- ํ์ผ ํ์: PDF
- ์ต๋ ํฌ๊ธฐ: 25MB
- ์ต๋ ํ์ด์ง: 2,000ํ์ด์ง
- ์ต๋ ์ถ์ถ ํ ์คํธ: 3,500,000์
- ์ ์ฅ ์์น: Supabase ๋น๊ณต๊ฐ
paper-pdfsbucket - ์ ๊ทผ ๋ฒ์: ์ ๋ก๋ํ ์ฌ์ฉ์ ๋ณธ์ธ
ํ์ฌ OCR์ ์ง์ํ์ง ์์ต๋๋ค. ๊ธ์๋ฅผ ๋๋๊ทธํ ์ ์๋ ์ค์บ ์ด๋ฏธ์ง PDF๋ ํ ์คํธ๋ฅผ ์ถ์ถํ ์ ์์ด ๋ถ์ ๋์์ด ๋์ง ์์ต๋๋ค.
RAG๋ AI๊ฐ ๋ ผ๋ฌธ ์ ์ฒด๋ฅผ ์ธ์ฐ๊ฒ ๋ง๋๋ ๋ฐฉ์์ด ์๋๋๋ค. ์ง๋ฌธ์ด ๋ค์ด์ฌ ๋ DB์์ ๊ด๋ จ ๋ฌธ๋จ์ ์ฐพ์ AI์๊ฒ ์ฐธ๊ณ ์๋ฃ๋ก ์ ๋ฌํ๋ ๋ฐฉ์์ ๋๋ค.
๋
ผ๋ฌธ ์ ๋ฌธ ํ๋ณด
โ ์น์
๋ณ ๋ณธ๋ฌธ ์ ๋ฆฌ
โ ์์ ์ฒญํฌ๋ก ๋ถ๋ฆฌ
โ ์ฒญํฌ ์๋ฒ ๋ฉ ์์ฑ
โ PostgreSQL + pgvector ์ ์ฅ
์ฌ์ฉ์ ์ง๋ฌธ
โ ์ง๋ฌธ ์๋ฒ ๋ฉ ์์ฑ
โ ์๋ฏธ๊ฐ ๊ฐ๊น์ด ๋
ผ๋ฌธ ์ฒญํฌ ๊ฒ์
โ ๋
ผ๋ฌธ ๊ฐ์ + ๊ฒ์๋ ๊ทผ๊ฑฐ๋ฅผ AI์ ์ ๋ฌ
โ LangGraph ์
๋ ฅ ๊ฐ๋ โ LangChain ๋ต๋ณ ์์ฑ โ ์ถ๋ ฅ ๊ฐ๋
โ ๊ฒ์ฆ๋ ๋ต๋ณ์ SSE๋ก ์ ๋ฌ
โ ์ถ์ฒ ๋ฌธ์ฅ๊ณผ ํ์ด๋ผ์ดํธ ํ์
์ฝ๊ฒ ๋งํ๋ฉด ๋ ผ๋ฌธ๋ง๋ค ์๋ฏธ ๊ธฐ๋ฐ ์์ธ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๊ณ , ์ง๋ฌธํ ๋ ํ์ํ ๋ถ๋ถ๋ง ๋น ๋ฅด๊ฒ ํผ์ณ ๋ณด๋ ๊ตฌ์กฐ์ ๋๋ค.
- ์ฒญํฌ ํฌ๊ธฐ: ์ต๋ ์ฝ 4,200์
- ์ฒญํฌ ์ค๋ณต: ์ฝ 400์
- ์๋ฒ ๋ฉ ๋ชจ๋ธ:
text-embedding-3-small - ๋ฒกํฐ ํฌ๊ธฐ: 1,536์ฐจ์
- ๋ฒกํฐ ์ ์ฅ์: Supabase PostgreSQL์
pgvector - ๊ฑฐ๋ฆฌ ๊ธฐ์ค: ์ฝ์ฌ์ธ ๊ฑฐ๋ฆฌ
- ๊ฒ์ ์ธ๋ฑ์ค: HNSW
- ๊ธฐ๋ณธ ๊ฒ์๋: ๋ ผ๋ฌธ๋ณ ์ต๋ 2๊ฐ, ์ ์ฒด ์ฝ 10๊ฐ ์ฒญํฌ
๋ณ๋์ Pinecone ๊ฐ์ ๋ฒกํฐ DB๋ฅผ ์ด์ํ์ง ์์ต๋๋ค. PostgreSQL ์์์ ์ผ๋ฐ ๋ฐ์ดํฐ์ ๋ฒกํฐ๋ฅผ ํจ๊ป ๊ด๋ฆฌํฉ๋๋ค.
| ๋ฌธ์ ์ข ๋ฅ | ์๋ฌธ ํ ์ด๋ธ | ์ฒญํฌยท๋ฒกํฐ ํ ์ด๋ธ | ๋ฐ์ดํฐ ๋ฒ์ |
|---|---|---|---|
| PMC ๊ณต๊ฐ ์ ๋ฌธ | paper_documents |
paper_chunks |
์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์ฌ์ฌ์ฉํ๋ ๊ณต์ฉ ์บ์ |
| ์ฌ์ฉ์ PDF | user_paper_documents |
user_paper_chunks |
์ ๋ก๋ํ ์ฌ์ฉ์ ์ ์ฉ |
์ง๋ฌธ์ ์๋ฒ ๋ฉํ ์ ์๊ฑฐ๋ pgvector ๊ฒ์์ด ์คํจํด๋ ์ฑํ ์ ์ฒด๋ฅผ ์ค๋จํ์ง ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ ผ๋ฌธ๋ณ ์์ชฝ ์ฒญํฌ๋ฅผ ์์๋๋ก ๊ฐ์ ธ์ค๋ ๊ฒฐ์ ์ fallback์ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ง ์๋ฏธ ์ ์ฌ๋ ๊ฒ์๋ณด๋ค ๊ทผ๊ฑฐ ์ ํ ์ ํ๋๊ฐ ๋ฎ์ ์ ์์ต๋๋ค.
์ ๋ฌธ์ด ์๋ ๋ ผ๋ฌธ์ ์ ๋ชฉยท์ ๋ยท์ถํ ์ฐ๋ยท์ด๋ก์ ๋ ผ๋ฌธ ๊ฐ์๋ก AI์ ์ง์ ์ ๋ฌํฉ๋๋ค. ์ด๋ก์ ํ์ฌ ์ ๋ฌธ์ฒ๋ผ ๋ฒกํฐ ์ฒญํนํ์ง ์์ผ๋ฏ๋ก, ์ด๋ก์ ์๋ ์ธ๋ถ ๋ฐฉ๋ฒ์ด๋ ๊ฒฐ๊ณผ๊น์ง ๋ตํ ์๋ ์์ต๋๋ค.
flowchart LR
U[์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ] --> F[React / Vite]
F -->|Google ๋ก๊ทธ์ธ| A[Supabase Auth]
F -->|/api| B[Express Vercel Function]
B --> P[PubMed / PMC / BioC]
B --> O[Unpaywall / Crossref]
B --> G[LangGraph Guardrails]
G --> AI[LangChain / OpenAI Chat]
B --> AI2[OpenAI Embeddings]
B --> DB[(Supabase PostgreSQL + pgvector)]
F --> S[Supabase ๋น๊ณต๊ฐ PDF Storage]
B --> S
| ์์ญ | ๊ธฐ์ | ์คํ ํ๊ฒฝ |
|---|---|---|
| Frontend | React 19, Vite | Vercel Static Build |
| Backend | Node.js 22, Express | Vercel Function |
| Auth | Supabase Auth, Google OAuth | Supabase |
| Database | PostgreSQL, pgvector, RLS | Supabase |
| PDF Storage | Supabase Storage | ๋น๊ณต๊ฐ bucket |
| ๋ ผ๋ฌธ ๋ฐ์ดํฐ | PubMed E-utilities, PMC, BioC | NCBI |
| ์๋ฌธ ํ์ | PMC OA, Unpaywall, Crossref | ์ธ๋ถ API |
| AI | LangChain.js, LangGraph.js, OpenAI ChatยทEmbeddings, SSE | Vercel Function |
์ฑ๋ด์ LangGraph ์ํ ๊ทธ๋ํ๋ก ์ ๋ ฅ ๊ฒ์ฌ, ์ปจํ ์คํธ ์ค๋น, LangChain ๋ชจ๋ธ ํธ์ถ, ์ถ๋ ฅ ๊ฒ์ฌ๋ฅผ ์์๋๋ก ์คํํฉ๋๋ค. ๊ฐ์ธ ์๋ฃ ์กฐ์ธ๊ณผ ํ๋กฌํํธ ํ์ทจ ์์ฒญ์ ๊ฒ์ยท๋ชจ๋ธ ํธ์ถ ์ ์ ์ฐจ๋จํ๊ณ , ์ด๋ฉ์ผยท์ ํ๋ฒํธยทAPI ํคยทํ ํฐ์ ๋ชจ๋ธ์ ์ ๋ฌํ๊ธฐ ์ ์ ๋ง์คํนํฉ๋๋ค. ๋ชจ๋ธ์ ์ ์ฒด ๋ต๋ณ๋ ๋ค์ ๊ฒ์ฌํ ๋ค ์์ ํ ์๋ต๋ง SSE๋ก ์ ๋ฌํฉ๋๋ค.
| ๊ฒฐ์ | ์ด์ |
|---|---|
PostgreSQL๊ณผ pgvector๋ฅผ ํจ๊ป ์ฌ์ฉ |
์ผ๋ฐ ๋ฐ์ดํฐ์ ๋ฒกํฐ๋ฅผ ํ DB์์ ๊ด๋ฆฌํด ๊ถํ๊ณผ ๋ฐฑ์ ๊ตฌ์กฐ๋ฅผ ๋จ์ํ |
| ๊ณต๊ฐ ์ ๋ฌธ๊ณผ ์ฌ์ฉ์ PDF ๋ถ๋ฆฌ | PMC ๊ณต๊ฐ ๋ฌธ์๋ ๊ณต์ฉ ์บ์๋ก ์ฌ์ฌ์ฉํ๊ณ , ์ ๋ก๋ PDF๋ ์์ ์๋ง ์ ๊ทผ |
| ์ด๋ก์ ๊ฒ์ ์์ ์ ์ ์ฅ | PubMed ์ฌํธ์ถ์ ์ค์ด๊ณ ์ ๋ฌธ์ด ์์ ๋๋ ์ต์ํ์ ๋ ผ๋ฌธ ๊ทผ๊ฑฐ๋ฅผ ์ ์ง |
| ๋ฌธ์ ์ ์ฒด ๋์ ๊ด๋ จ ์ฒญํฌ ์ ๋ฌ | ์ง๋ฌธ๋ง๋ค ๊ธด ์๋ฌธ์ ๋ค์ ์ฝ๋ ๋น์ฉ์ ์ค์ด๊ณ ๊ทผ๊ฑฐ ์์น๋ฅผ ์ถ์ |
| ๊ฒ์ฆ ํ SSE ์๋ต | ์ ์ฒด ๋ต๋ณ์ ์์ ์ฑ์ ๊ฒ์ฌํ ๋ค ๊ธฐ์กด SSE ๊ณ์ฝ์ผ๋ก ํ๋ฉด์ ์ ๋ฌ |
is_del ์ํํธ ์ญ์ |
์ฌ์ฉ์ ์ด๊ธฐํ์ ์ฑํ ์ญ์ ๊ธฐ๋ก์ ๋ณต๊ตฌ ๊ฐ๋ฅํ ์ํ๋ก ๋ณด์กด |
| Graph RAG ์ฝํผ์ค ๋ถ๋ฆฌ | ์ด์ ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ์์ฐ์ฉ ์ฐ๊ตฌ ๊ทธ๋ํ๋ฅผ ์์ง ์๊ณ ์์ ์ ์ผ๋ก ์ ๊ณต |
| Vercel same-origin API | ํ๋ก ํธ์๋์ API๋ฅผ ํ ๋๋ฉ์ธ์์ ์ ๊ณตํด CORS์ ๋ฐฐํฌ ๊ตฌ์ฑ์ ๋จ์ํ |
Research Galaxy๋ ํ์ฌ ๊ณ ์ ์ฝํผ์ค์ ๊ด๊ณ ํ์๊ณผ ๊ฒ์ ๊ฒฝ๋ก ์๊ฐํ์ ์ง์คํฉ๋๋ค. ์ค์ ๋ ผ๋ฌธ ์ฑํ ์ ์ด์ DB์ ๋ฒกํฐ RAG๊ฐ ๋ด๋นํ๋ฉฐ, ๊ทธ๋ํ์์ ์ฐพ์ ๊ด๊ณ๋ฅผ LLM ๋ต๋ณ ์์ฑ์ ์ง์ ์ฃผ์ ํ๋ ๋จ๊ณ๋ ์์ง ์ฐ๊ฒฐํ์ง ์์์ต๋๋ค.
team-pubmed/
โโโ api/
โ โโโ index.js # Vercel Function ์ง์
์
โโโ client/
โ โโโ src/ # React ํ๋ฉด, Research Galaxy, API ํด๋ผ์ด์ธํธ
โ โ โโโ data/ # Graph RAG ๋ฐ๋ชจ์ฉ PubMed ์ฝํผ์ค
โ โโโ public/ # ์ ์ ์์ฐ
โ โโโ .env.example # ๋ธ๋ผ์ฐ์ ๊ณต๊ฐ ํ๊ฒฝ๋ณ์ ์์
โโโ server/
โ โโโ src/ # Express, ์ธ์ฆ, PubMed, RAG, OpenAI
โ โโโ test/ # Node ๋จ์ยทAPI ํ
์คํธ
โ โโโ .env.example # ์๋ฒ ์ ์ฉ ํ๊ฒฝ๋ณ์ ์์
โโโ supabase/
โ โโโ schema.sql # ํ
์ด๋ธ, RLS, pgvector, Storage ์ ์ฑ
โโโ docs/
โ โโโ images/ # README ํ๋ฉด ์บก์ฒ
โ โโโ renewal-architecture.md
โ โโโ deployment-renewal.md
โโโ scripts/ # DB ์ ์ฉยท๊ฒ์ฆยท๊ทธ๋ํ ์ฝํผ์ค ์์ฑ ์คํฌ๋ฆฝํธ
โโโ templates/ # ๊ธฐ์กด Jinja ํ๋ฉด ๋น๊ต ๊ธฐ์ค
โโโ static/ # ๊ธฐ์กด CSSยทJavaScript ๋น๊ต ๊ธฐ์ค
โโโ tests/ # ๊ธฐ์กด FastAPI ํ๊ท ํ
์คํธ
โโโ package.json # npm workspace์ ๊ณตํต ๋ช
๋ น
โโโ vercel.json # Vercel ๋น๋ยท๋ผ์ฐํ
ยท๋ฐฐํฌ ๋ธ๋์น
๊ธฐ์กด FastAPI/Jinja ๊ตฌํ์ ๋์์ธ๊ณผ ๋์ ๋น๊ต ๊ธฐ์ค์ผ๋ก ๋ณด์กดํฉ๋๋ค. ํ์ฌ
Vercel ๋ฐฐํฌ ์ ํ๋ฆฌ์ผ์ด์
์ client/, server/, api/๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Node.js 22
- npm
- Supabase ํ๋ก์ ํธ
- OpenAI API key
์ ์ฅ์๋ฅผ ๋ฐ์ ๋ค ๋ฃจํธ์์ ์คํํฉ๋๋ค.
npm install
Copy-Item client\.env.example client\.env
Copy-Item server\.env.example server\.env๋ฃจํธ .env.example์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ํ๊ฒฝ๋ณ์ ๊ฒฝ๊ณ๋ฅผ ์ค๋ช
ํ๋ ์๋ด
ํ์ผ์
๋๋ค. ์ค์ ์ ํ๋ฆฌ์ผ์ด์
์ client/.env์ server/.env๋ฅผ ์ฝ์ต๋๋ค.
Supabase Dashboard์ SQL Editor์์
supabase/schema.sql์ ์คํํฉ๋๋ค.
๋ค์ ํญ๋ชฉ์ด ํจ๊ป ์์ฑ๋ฉ๋๋ค.
- ์ฌ์ฉ์ ํ๋กํ๊ณผ ๊ฒ์ยท๋ ผ๋ฌธ ์ปฌ๋ ์
- ๋ ผ๋ฌธ ๋ฉํ๋ฐ์ดํฐยท์ด๋ก
- PMC ๊ณต์ฉ ๋ฌธ์์ ๋ฒกํฐ ์ฒญํฌ
- ์ฌ์ฉ์ PDF ๋ฌธ์์ ๋ฒกํฐ ์ฒญํฌ
- ์ฑํ ๋ฐฉยท๋ฉ์์งยท๋ ผ๋ฌธ ์ฐ๊ฒฐ
- pgvector์ HNSW ์ธ๋ฑ์ค
- ์ฌ์ฉ์๋ณ RLS ์ ์ฑ
- ๋น๊ณต๊ฐ
paper-pdfsStorage bucket ์ ์ฑ
client/.env.example์ ๋ณต์ฌํด ์ฌ์ฉํฉ๋๋ค.
VITE_API_URL=
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-or-publishable-keyVITE_API_URL์ ๋ก์ปฌ๊ณผ Vercel์์ ๋น์ ๋๋ ๊ฒ์ด ๊ธฐ๋ณธ์
๋๋ค.
- ๋ก์ปฌ: Vite proxy๊ฐ
/api๋ฅผhttp://127.0.0.1:4000์ผ๋ก ์ ๋ฌ - Vercel: ๊ฐ์ ๋ฐฐํฌ์
/apiFunction ํธ์ถ
VITE_* ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ฒ๋ค์ ํฌํจ๋ฉ๋๋ค. service-role key, DB ๋น๋ฐ๋ฒํธ,
OpenAI key ๊ฐ์ ๋น๋ฐ๊ฐ์ ๋ฃ์ผ๋ฉด ์ ๋ฉ๋๋ค.
server/.env.example์ ๋ณต์ฌํด ์ฌ์ฉํฉ๋๋ค.
| ๋ณ์ | ํ์ | ์ค๋ช |
|---|---|---|
NODE_ENV |
์ | ๋ก์ปฌ์ development, ์ด์์ Vercel ์ค์ ์ฌ์ฉ |
PORT |
์ | ๋ก์ปฌ Express ํฌํธ, ๊ธฐ๋ณธ๊ฐ 4000 |
CLIENT_ORIGIN |
์ | ํ์ฉํ ๋ธ๋ผ์ฐ์ origin, ์ฌ๋ฌ ๊ฐ๋ฉด ์ผํ๋ก ๊ตฌ๋ถ |
DATABASE_URL |
์ | Supabase PostgreSQL ์ฐ๊ฒฐ ๋ฌธ์์ด |
DATABASE_SSL |
์ | Supabase ์ฐ๊ฒฐ ์ true |
SUPABASE_URL |
์ | Supabase Project URL |
SUPABASE_SERVICE_ROLE_KEY |
์ | ์๋ฒ ์ ์ฉ service-role/secret key |
OPENAI_API_KEY |
AI ์ฌ์ฉ ์ | ์ฑํ ๊ณผ ์๋ฒ ๋ฉ ํธ์ถ์ฉ |
OPENAI_CHAT_MODEL |
์ | ์ฑํ ๋ชจ๋ธ |
OPENAI_EMBEDDING_MODEL |
์ | ๊ธฐ๋ณธ๊ฐ text-embedding-3-small |
NCBI_EMAIL |
๊ถ์ฅ | NCBI ์์ฒญ ์๋ณ์ฉ ์ด๋ฉ์ผ |
NCBI_API_KEY |
์ ํ | NCBI ํธ์ถ ํ๋ ํ์ฅ |
NCBI_TOOL |
์ | NCBI ์์ฒญ ๋๊ตฌ๋ช
, ๊ธฐ๋ณธ๊ฐ publium |
UNPAYWALL_EMAIL |
๊ถ์ฅ | Unpaywall API ์ฐ๋ฝ ์ด๋ฉ์ผ |
DEV_USER_ID |
๋ก์ปฌ ์ ํ | Google ๋ก๊ทธ์ธ ์๋ ์ ์ฉ ๋ก์ปฌ ํ ์คํธ ๊ณ์ UUID |
Vercel์์๋ ์ฐ๊ฒฐ ์๊ฐ ์ ํ๋ direct DB ์ฃผ์๋ณด๋ค Supabase transaction pooler URL์ ๊ถ์ฅํฉ๋๋ค. DB ๋น๋ฐ๋ฒํธ์ ํน์๋ฌธ์๊ฐ ์์ผ๋ฉด URL encoding๋ ์ฐ๊ฒฐ ๋ฌธ์์ด์ ์ฌ์ฉํฉ๋๋ค.
npm run dev- Frontend: http://localhost:5173
- API health: http://localhost:4000/api/health
์ ์์ด๋ผ๋ฉด health endpoint๊ฐ ๋ค์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
{"status":"ok"}- Supabase Authentication์
local-dev@publium.local์ฌ์ฉ์๋ฅผ ๋ง๋ญ๋๋ค. - ์์ฑ๋ ์ฌ์ฉ์ UUID๋ฅผ
server/.env์DEV_USER_ID์ ์ ๋ ฅํฉ๋๋ค. - ์๋ฒ๋ฅผ ๋ค์ ์์ํฉ๋๋ค.
- http://localhost:5173/?dev=1๋ก ์ ์ํฉ๋๋ค.
๋ก์ปฌ ์ธ์ฆ ์ฐํ๋ NODE_ENV=development์ด๋ฉด์ Vercel์ด ์๋ ๋๋ง
์๋ํฉ๋๋ค. ์ด์ ๊ณ์ UUID๋ฅผ DEV_USER_ID๋ก ์ฌ์ฉํ๋ฉด ์ ๋ฉ๋๋ค.
Supabase์์ Google provider๋ฅผ ํ์ฑํํ๊ณ ์๋ URL์ ๋ฑ๋กํฉ๋๋ค.
Supabase Site URL:
https://<VERCEL_PRODUCTION_DOMAIN>
Supabase Redirect URLs:
http://localhost:5173/**
https://<VERCEL_PRODUCTION_DOMAIN>/**
Google OAuth Authorized redirect URI:
https://<SUPABASE_PROJECT_REF>.supabase.co/auth/v1/callback
Google Cloud์๋ Vercel ์ฃผ์๊ฐ ์๋๋ผ Supabase callback URL์ Authorized redirect URI๋ก ๋ฑ๋กํฉ๋๋ค. ๋ก๊ทธ์ธ ์๋ฃ ํ ์ฌ์ฉ์๋ฅผ ๋๋ ค๋ณด๋ผ ์ต์ข ์ฃผ์๋ Supabase์ Site URL๊ณผ Redirect URLs์์ ๊ด๋ฆฌํฉ๋๋ค.
| ๋ช ๋ น | ์ญํ |
|---|---|
npm run dev |
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋์ ์คํ |
npm run dev:client |
Vite ํด๋ผ์ด์ธํธ๋ง ์คํ |
npm run dev:server |
Express ์๋ฒ๋ง ์คํ |
npm run build |
React ํ๋ก๋์ ๋น๋ |
npm run test |
์๋ฒ ํ ์คํธ |
npm run check |
์๋ฒ ํ ์คํธ์ ํด๋ผ์ด์ธํธ ๋น๋ ์ ์ฒด ๊ฒ์ฆ |
npm run start |
Express ์๋ฒ ์คํ |
node scripts/generate-research-graph.mjs |
PubMed์์ Research Galaxy ๋ฐ๋ชจ ์ฝํผ์ค ์ฌ์์ฑ |
node scripts/generate-research-graph-summaries.mjs |
์ฝํผ์ค ์ด๋ก์ ๊ทผ๊ฑฐ๋ก Research Galaxy ํ๊ตญ์ด ์์ฝ ์์ฑ |
- ์ฌ์ฉ์๋ณ ๋ ผ๋ฌธ ์ปฌ๋ ์ ยท์ฑํ ยท์ ๋ก๋ PDF๋ฅผ ์ธ์ฆ๋ ์ฌ์ฉ์ ID๋ก ์ ํํฉ๋๋ค.
- Supabase RLS๋ก ๋ธ๋ผ์ฐ์ ์ ๋ค๋ฅธ ์ฌ์ฉ์ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ฐจ๋จํฉ๋๋ค.
- PDF ์๋ณธ์ ๊ณต๊ฐ URL์ด ์๋ ๋ง๋ฃ๋๋ signed URL๋ก ์ ๊ณตํฉ๋๋ค.
- ์๋ฒ ๋น๋ฐ๊ฐ์ Vercel Function์์๋ง ์ฌ์ฉํฉ๋๋ค.
DATABASE_URL,SUPABASE_SERVICE_ROLE_KEY,OPENAI_API_KEY,NCBI_API_KEY์๋ ์ ๋๋กVITE_์ ๋์ด๋ฅผ ๋ถ์ด์ง ์์ต๋๋ค.- ์ฌ์ฉ์ยท์
๋ฌด ๋ฐ์ดํฐ ์ด๊ธฐํ๋
is_del๊ธฐ๋ฐ ์ํํธ ์ญ์ ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํฉ๋๋ค. - ๋ผ์ด์ ์ค๊ฐ ํ์ธ๋์ง ์์ ์ถํ์ฌ ๋ณธ๋ฌธ์ ์๋ฒ์ ์ ์ฅํ์ง ์์ต๋๋ค.
- ์ค์บ ์ด๋ฏธ์ง PDF OCR ๋ฏธ์ง์
- ์ ๋ฃ ์ถํ์ฌ PDF ์๋ ๋ค์ด๋ก๋ ๋ฏธ์ง์
- UnpaywallยทCrossref PDF ํ๋ณด์ ์๋ ํ์ฑยท์๋ฒ ๋ฉ ๋ฏธ์ง์
- ์ด๋ก ๊ธฐ๋ฐ ๋ ผ๋ฌธ์ ์ด๋ก์ ์๋ ์ธ๋ถ ๋ด์ฉ์ ๋ตํ ์ ์์
- ์ธ๋ถ ์๋ฌธ ํ์ด์ง ์์ ์ง์ ํ์ด๋ผ์ดํธ ๋ฏธ์ง์
- Research Galaxy๋ ๊ณ ์ ๋ 148ํธ์ ์์ฐ ์ฝํผ์ค์ด๋ฉฐ ์ด์ ๋ ผ๋ฌธ ์ ์ฒด๋ฅผ ๋ฐ์ํ์ง ์์
- Research Galaxy๋ ๊ฒ์ ๊ฒฝ๋ก ์๊ฐํ ๋จ๊ณ์ด๋ฉฐ ๊ทธ๋ํ ๊ธฐ๋ฐ LLM ๋ต๋ณ ์์ฑ์ ๋ฏธ์ฐ๊ฒฐ
- AI ๋ต๋ณ์ ๋ ผ๋ฌธ ํด์ ๋ณด์กฐ์ฉ์ด๋ฉฐ ์ฐ๊ตฌ์์ ์๋ฌธ ๊ฒํ ๋ฅผ ๋์ฒดํ์ง ์์
npm run checkํ์ฌ ๊ฒ์ฆ ํญ๋ชฉ์๋ ๋ค์ ๋ด์ฉ์ด ํฌํจ๋ฉ๋๋ค.
- ์ธ์ฆ๊ณผ ๋ก์ปฌ ํ ์คํธ ๊ณ์ ์ ํ
- CORS์ Vercel same-origin ์์ฒญ
- PubMed XML ํ์ฑ
- PMC/BioC ๋ณธ๋ฌธ ํ์ฑ
- ์ฒญํน๊ณผ ์ฌ๋ฌ ๋ ผ๋ฌธ์ ๊ทผ๊ฑฐ ๊ท ํ
- ์ถ์ฒ ๋ฌธ์ฅ ์ ํ๊ณผ ํ์ด๋ผ์ดํธ ๋ฒ์
- LangGraph ์ ๋ ฅยท์ถ๋ ฅ ๊ฐ๋์ ๋ฏผ๊ฐ์ ๋ณด ๋ง์คํน
- ์ฌ์ฉ์๋ณ ์ด๊ธฐํ์ ์ํํธ ์ญ์
- React ํ๋ก๋์ ๋น๋
| ์ค์ | ๊ฐ |
|---|---|
| Framework Preset | Vite |
| Root Directory | . |
| Install Command | npm install |
| Build Command | npm run build |
| Output Directory | client/dist |
| Production Branch | deploy_vercel |
| Function entry | api/index.js |
| Node.js | 22.x |
๋ธ๋์น ํ๋ฆ:
renewal โ main โ deploy_vercel โ Vercel Production
vercel.json์์ deploy_vercel ์ด์ธ ๋ธ๋์น์ Git ์๋ ๋ฐฐํฌ๋ฅผ
์ฐจ๋จํฉ๋๋ค. ๋ฐ๋ผ์ renewal๊ณผ main์ ํธ์ํด๋ ์ด์ ๋ฐฐํฌ๋ ๋ฐ์ํ์ง
์์ผ๋ฉฐ, ๊ฒ์ฆ๋ main์ deploy_vercel์ ๋ฐ์ํ ๋๋ง ๋ฐฐํฌ๋ฉ๋๋ค.
ํ๊ฒฝ๋ณ์, OAuth, ๋ฐฐํฌ ํ์ธ๊ณผ ๋กค๋ฐฑ ์ ์ฐจ๋
docs/deployment-renewal.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.




