๐ arXiv ์ต์ ๋
ผ๋ฌธ ํธ๋ํน ์๋ํ ๋ฐ ๊ฒ์ ์์คํ
๊ตฌ์ถํ๊ณ ๋ฐฐํฌํ๊ธฐ
์ต์ ๋
ผ๋ฌธ์ ์ข ๋ ์ค๋งํธํ๊ฒ ํธ๋ํนํด๋ณด์
๋จผ์ , ๋ฐ๋ชจ
ํ์์ฑ
- arxiv ๋
ผ๋ฌธ์ ์๋ ๋ค์ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ก์
ํ๊ณ ์์๋ค: RSS (e.g., http://export.arxiv.org/rss/cs/RO)๋ฅผ slack์ด๋ jandi ๊ฐ์ ๋ฉ์ ์ ์ฑ์ ๋ฌผ๋ ค์ ๋ณธ๋ค. ๊ทธ๋ฐ๋ฐ ๊ฒ์์ด ๋๋ฆฌ๊ฑฐ๋ ์ฉ์ดํ์ง ์์์ (๋ฉํฐ ํค์๋ ๊ฒ์ ๋ฑ) ์ง์ ๋ง๋ค์ด ๋ณด๊ธฐ๋ก ํ๋ค.
- ๋์ถฉ ์ด๋ ๊ฒ ์ ๋ ๊ฒ ํ๊ณ ์ถ์ด ๋ผ๊ณ ์ค๋ช
ํ๋๊น ChatGPT๊ฐ ๋ง๋ค์ด์ฃผ์๋ค. ์ด ํฌ์คํธ๋ ๊ทธ ๊ณผ์ ์ ๋ํ ๊ธฐ๋ก!
๊ตฌ์ถ ๊ณผ์
- ํ์ด์ฌ์ sqlite3 API๋ฅผ ์ฌ์ฉํ๋ฉด db ์ ์ํตํ ๋ python์ผ๋ก ํ ์ ์๋ค. ๋ณ๋์ ๋ฌธ๋ฒ์ด ์๋ ๊ฒ์ ์๋๊ณ SQL ๊ตฌ๋ฌธ์ ๊ทธ๋ฅ execute ํด์ฃผ๋ ๊ตฌ์กฐ์ด๋ค.
- ์์ code
- ํ์ฑํ ๊ฒฐ๊ณผ๋ฅผ ํ์ผ ๊ธฐ๋ฐ์ DB์ธ sqlite๋ก ์ ์ฅํ๋ค. ๊ทธ๋์ ํ์ฌ๋ github repository ์์ db ๋ฅผ ํ์ผ๋ก ์ง์ ๊ฐ์ง๊ณ ์๋ ๊ตฌ์กฐ์ด๋ค.
๋จ๊ณ 2: ์ด ๊ณผ์ ์ Github Action์ด ์๋์ผ๋ก ์ฃผ๊ธฐ์ ์ผ๋ก ์ํํ๋๋ก ํ๊ธฐ
- ํ์์ฑ: RSS๋ ๋งค์ผ ์์ด๋๋ฐ, ๋งค์ผ ๋ด๊ฐ ์ง์
python3 arxiv_saver_to_db.py
ํ๊ณ ๋ค์ commit ํ๊ณ โฆ ์ด ๊ณผ์ ์ ์ํํ๋ ๊ฒ์ ํผ๊ณคํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊น๋จน๊ณ ๋ฉฐ์น ๋์ ๋ชปํ ์๋ ์๊ณ . ๊ทธ๋์ ์ด ์์
์ด ์ฃผ๊ธฐ์ ์ผ๋ก ์๋์ผ๋ก ์ํ๋๋๋ก ํ๊ฒ ํ์.
- GitHub Action์ ํ์ฉํ์๋ค. .github/workflows ์ ๋ง๋ค๊ณ ๊ทธ ์๋์ yml ํ์ผ ๊ท๊ฒฉ์ ๋ฐ๋ผ์ ํ์ํ ์ ์ฐจ๋ฅผ ๊ธฐ๋กํด๋๋ฉด ๋๋ค.
- ์์ code
- ๊ฐ name ๋ค์ด ๊ฐ๊ฐ์ subtask๋ผ๊ณ ๋ณด๋ฉด๋๋ค.
- cron์ ์ผ๋ง ์ฃผ๊ธฐ๋ก ์คํ๋ ๊ฒ์ธ์ง ๊ธฐ์
ํ๋ ๋ฌธ๋ฒ์ด๋ค. ์ ๋ฌธ๋ฒ์ ๊ตณ์ด ๊ณต๋ถํ๊ธฐ๋ ์ด๋ ค์ฐ๋+์ค์ํ ์ฌ์ง๊ฐ ์์ผ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํด์ฃผ๋ ์ฌ์ดํธ ๋ค์์ ์์ฑํด์ ๊ธฐ์
ํด๋๋ฉด ๋๋ค.
workflow_dispatch:
๋ฅผ ์ ์ด๋๋ฉด action ์ ์ง์ ํธ๋ฆฌ๊ฑฐ ํด์ ์คํ์์ผ๋ณผ ์ ์๋ค.
- ์ค์ ๋ก ์์ ๋ฃจํด์ด ์ํ๋๊ธฐ ์ํด์๋ github-actions bot ์ด ๋ด ๋์ pushํ ๊ถํ์ ๊ฐ์ ธ์ผ ํ๋ค.
- ๊ทธ๋์ Settings/Secrets\ and\ variables/Actions ๋ฑ์์ ๋น๋ฒ(ํ ํฐ)์ด ์ ํ ํ๊ฒฝ๋ณ์๋ ๋ง๋ค๊ณ , read ๊ถํ ์ธ์ write ๊ถํ๋ ์ฃผ์ด์ผ ํ๋ค.
- ์์ธํ ์ค๋ช
์ ์๋ตํ๋คโฆ
- ๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฃผ๊ธฐ์ ์ผ๋ก ์ํ๋๊ณ , ์๋ฆผ๋ ๋ฌ๋ค.
๋จ๊ณ 3: ๊ฒ์์๋ฒ ๋ง๋ค๊ธฐ
- ์ด์ db๊ฐ ์์ผ๋ app์ ๋ง๋ค์ด์ผ ํ๋ค.
- ์ฌ์ฉ์๋ก๋ถํฐ ๊ฒ์ํค์๋๋ฅผ ๋ฐ์ผ๋ฉด, DB๋ก๋ถํฐ ํด๋นํ๋ ๊ฒฐ๊ณผ๋ฅผ json์ผ๋ก ๋๋ ค์ฃผ๋ ์๋ฒ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
- fastapi๋ฅผ ์ธ๊ฑฐ๊ณ , db์๋ ์ด๋ค ํ์์ table๋ค์ด ์๊ณ , api route ๋ ์ด๋ ์ผ๋ฉด ์ข๊ฒ ์ด, ๋ผ๊ณ ํ๋๊น ChatGPT๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ค์ด ์ฃผ์๋ค.
IP:port/{table_name}/keywords/OR/{keywords}
์ด๋ฐ์์ผ๋ก API๋ฅผ ๋ฐ๋๋ก ํ์๋ค.
- ๊ทธ๋ฌ๋ฉด
python3 app/search_server.py
ํด์ ์๋ฒ๋ฅผ ์ผ๊ณ , ๋ธ๋ผ์ฐ์ ์ ์๋ฅผ ๋ค์ด 127.0.0.1:8000/RO/keywords/AND/slam,lidar
์ ๊ฐ์ด ์
๋ ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ฒฐ๊ณผ๊ฐ ์ถ์ถ๋๋ค. ํ์ด์ดํญ์ค์์์ ์์:
- ps. ํํธ, ํฌ๋กฌ์ raw json text ๋ฅผ ์๊ฐํํด์ค์, ์ด ์ํ๋ก๋ ๋ณด๊ธฐ๊ฐ ์ข ์ด๋ ค์ ๋ค.
๋จ๊ณ 4: Web UI ๋ง๋ค๊ธฐ
- ์์ json์ ๋ฐ๋ก ๋ฐ์ผ๋ฉด ๋ณด๊ธฐ๊ฐ ์ข ์ด๋ ค์ฐ๋ web UI๋ฅผ ๋ง๋ค์ด๋ณด์.
- Streamlit ์ ์ด์ฉํ์๋ค. ์ญ์ ChatGPT์๊ฒ ํด์ค ๋ผ๊ณ ํ์๋ค. ์ดํ ๋ฆฌํฉํ ๋ง๋ง ์ข ์งํํ์๋ค.
- ์์ code
๋จ๊ณ 5: ๋ฐฐํฌํ๊ธฐ
- ์๋๋ Heroku ๋ฅผ ์ฐ๋ ค๊ณ ํ๋๋ฐ 22๋
ํ๋ฐ๊ธฐ๋ถํฐ free tier ๊ฐ ์ฌ๋ผ์ง ๋ฏํ๋ค.
- ๊ทธ๋์ ๋์ฒด์ฌ๋ก render.com ์ ์ฌ์ฉํ์๋ค. ๊ทธ ์ธ์ https://fly.io/, https://www.cyclic.sh/, https://railway.app/ ๋ฑ๋ ์๋ค๊ณ ํ๋ค.
- ํด๋ณด๋ ์คํ๋ ค heroku๋ณด๋ค ๋๋์ฌ์ ๋ค.
- requirements.txt ๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ (๊นํ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฃจํธ์ ์์น),
- ์๋ ์บก์ฒํ๋ฉด์ฒ๋ผ ์ฅ์ฅ ํ๋ฉด ๋ฐฐํฌ ์ค๋น ๋. ์นธ์ ๋ช๊ฐ๋ง ์ฑ์ฐ๋ฉด ๋์ด๋ค. ๊ทธ๋ฌ๋ฉด ์๋์ผ๋ก github ํน์ (์ฌ๊ธฐ์๋ main) branch ๋ฅผ ๋์ด์์, ๊ฑฐ๊ธฐ์ ๊ธฐ์
๋ requirements.txt๋๋ก ํ๊ฒฝ์ ๋น๋ํ๊ณ , start command ๋ฅผ ์คํํ๋ค.
- ์ด ์ฑ์ ๊ฒฝ์ฐ server์ web app ๋๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋์์ผ ํด์ shell ํ์ผ๋ก ๊ตฌ์ฑํ์๊ณ run_app.sh ๋ฅผ ์คํํ๊ฒ ํด์ฃผ๋ฉด ๋๋ค.
- ํ๋ฆฌํฐ์ด๋ ํ๋ฌ ๋์ 750 ์ธ์คํด์ค ์๊ฐ์ด ๋ฌด๋ฃ์ด๋ค. ์ฆ, ํ๋์ ๋
ธ๋๋ฅผ ๋๋ฆฌ๋ ๊ฒฝ์ฐ, ํ๋ฌ ์ ์ฒด free์ด๊ณ , ๋คํธ์ํฌ๋ 100G๊น์ง ๋ฌด๋ฃ์ด๋ค.
- ๊ทธ๋ฆฌ๊ณ 15๋ถ์ด์ ์ฑ ์ฌ์ฉ์ด ์์ ์์ ์ ์๊ธฐ์ ๋ค์ด๊ฐ๊ณ ๊ทธ ์ดํ์ ์ ๊ทผ ์ ์จ์ดํฌ์
ํ์์ด 30์ด๊น์ง๋ ๊ฑธ๋ฆด ์ ์๋ค๊ณ ํ๋ค. ํ์ง๋ง ์ฒด๊ฐ์ 30์ด๊น์ง๋ ์๋์๊ณ 5์ด ์ ๋ ๊ฑธ๋ฆฌ๋ ๋ฏ ํ๋ค.
๊ฒฐ๋ก
- ์ต์ ๋
ผ๋ฌธ๋ค์ ์ฝ๊ณ ํค์๋๋ฅผ ํ์
ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ค์ด๊ณ ์ดํด๋ฅผ ๋๋ ํด๋ค์ ๋ง๋ค์ด ๋ณด์๋ค.
TODO
- GitHub repository์์ ์
๋ก๋ ๊ฐ๋ฅํ ํ์ผ ํ๋์ ์ฌ์ด์ฆ ์ํ์ด 100MB์ด๋ค. ์ดํ์ DB์ ๋
ผ๋ฌธ๋ค ๋ด์ฉ์ด ๋ง์์ ธ์ 100MB๋ฅผ ์ด๊ณผํ๋ฉด ์ด๋ป๊ฒ ๊ด๋ฆฌํ ์ง ๊ณ ๋ฏผํด๋ณด์.
- arxiv ์ธ์ ์ ๋๋ค์ RSS๋ ์ถ๊ฐํด๋ณด์