- 2024.10.14 ~ 2024.11.19 (6์ฃผ)
| ์ด์๋ฏผ | ์ด์คํ | ๊น๋ฏผ์ฃผ | ์ ์ฌ๊ด | ์ ๋ฏผ๊ฒฝ | ์ฃผํ๋ฏผ |
|---|---|---|---|---|---|
| Leader, BE | BE | Infra, BE | BE | FE | AI |
"E.D.I.T.H" ๋ ๊ฐ๋ฐ์๋ค์ด GitLab์ ํ์ฉํ ํ์ ๊ณผ์ ์์ ๋ฐ์ํ๋ ์ฝ๋๋ฆฌ๋ทฐ์ ๋ถ๋ด์ ์ค์ด๊ณ , ๊ฐ ๊ธฐ์ฌ์๊ฐ ๋ฌด์์ ์ด๋ป๊ฒ ๊ธฐ์ฌํ๋์ง๋ฅผ ๋ช ํํ๊ฒ ์ ๋ฆฌํด์ฃผ๋ ํฌํธํด๋ฆฌ์ค๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๊ณ ์์ต๋๋ค. ๋ํ ์น์บ ์ ํ์ฉํ ์ผ๊ตด์ธ์ ๊ธฐ๋ฅ์ ํตํด ํ ๋ด ์์ ์๋ค์ด ๋น๋ฐ๋ฒํธ ์์ด ์์ ํ๊ฒ ๋ก๊ทธ์ธํ๊ณ ํ๋ก์ ํธ์ ์ ๊ทผํ ์ ์๊ฒ ํฉ๋๋ค.
| Front | Back | AI | |
|---|---|---|---|
| Language | JavaScript(ES6+), TypeScript | Java17 | python |
| IDE | Visual Studio Code | IntelliJ | Pycharm |
| Framework | React, Vite | Spring Boot | Pytorch, Tensorflow fastAPI, flask |
| Library | zustand, gitgraph, tailwind | transformers, langchain, treesitter, openai |
| DB | Infra | Monitoring | Tools |
|---|---|---|---|
| MySQL, Redis, Qdrant, ChromaDB | EKS, ECR, Jenkins, ArgoCD, Nginx, Docker, Mattermost | Grafana, Grafana-Loki, promtail | GitLab, Jira, Notion, MatterMost |
๐ API
๐ ๊ธฐ๋ฅ ์ ์์
- ํ์๊ฐ์
, ๋ก๊ทธ์ธ ์ ๊ณต
- ์ด๋ฉ์ผ ๋ก๊ทธ์ธ, ์ผ๊ตด์ธ์ ๋ก๊ทธ์ธ ์ ํ
- ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ, Git Personal Access Token ์ ๋ ฅ
- ์ฌ์ฉ์์ ํ๋ก์ ํธ, ์ฌ์ฉ์ ๋น์ผ ์ปค๋ฐ ์, ์ฌ์ฉ์ ๋น์ผ MR ์์ฒญ ์ ์ ๊ณต
- GitLab repository์ project ID, ํ๋ก์ ํธ ์ด๋ฆ, ์ฝ๋๋ฆฌ๋ทฐ ๋์ branch, ์ค๋ช ์ ์ ๋ ฅํ์ฌ ์งํ์ค์ธ ํ๋ก์ ํธ๋ฅผ ๋ฑ๋ก
- ๋ฑ๋ก์ ์ฑ๊ณตํ ๊ฒฝ์ฐ ํด๋น gitlab repository์ webhook ์๋ ์์ฑ
- ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ MR ๋ฑ๋ก์ ํ์ ๋, ์ผ์ ์๊ฐ ํ AI ์ฝ๋๋ฆฌ๋ทฐ ๋ฑ๋ก
- ํ๋ก์ ํธ์ ๋ํ ์ ์ฒด์ ์ธ ์ ๋ณด ์ ๊ณต
- ๋์ ํฌํธํด๋ฆฌ์ค ์์ฑ ๋ฒํผ์ ๋๋ฅผ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ AI ๊ธฐ๋ฐ์ ๊ฐ์ธ ๋ง์ถคํ ํฌํธํด๋ฆฌ์ค ์ ๊ณต
- ๊ธฐ๋ฅ ์ค๋ช
:
- GitLab ์ปค๋ฐ ๊ฐ์ง: GitLab API๋ฅผ ํตํด ์ ์ปค๋ฐ์ด (์น ํ ์ผ๋ก ๊ฐ์ง)๋ฐ์ํ ๋๋ง๋ค LLM์ด ํด๋น ์ปค๋ฐ์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ๋ถ์ํฉ๋๋ค. ์ปค๋ฐ ๋ฉ์์ง์ ํจ๊ป ๋ณ๊ฒฝ๋ ํ์ผ ๋ชฉ๋ก์ ํ์ธํ๊ณ , ๋ณ๊ฒฝ๋ ์ฝ๋์ ๋ํ ๋ฆฌ๋ทฐ๋ฅผ ์์ฑํฉ๋๋ค.
- RAG ํ์ฉ: ํ๋ก์ ํธ ์ ์ฒด ์ฝ๋๋ฅผ ๋ฉ์๋ ๋ณ๋ก chunking ํ๊ณ , CodeGraphBert ๋ชจ๋ธ๋ก ์๋ฒ ๋ฉํ์ฌ vector DB์ ์ ์ฅํฉ๋๋ค. LLM์ vector ํํ๋ก ์ ์ฅ๋ ์ฝ๋๋ฅผ ๋ฆฌ๋ทฐ ๋์ ์ฝ๋์์ ์ฐ๊ด์ฑ์ ํ๋จํ๋๋ฐ ์ฌ์ฉํฉ๋๋ค.
- LLM ๋ถ์: ์ฝ๋ ์คํ์ผ, ์ค๋ฅ ๊ฐ๋ฅ์ฑ, ์ฑ๋ฅ ๊ฐ์ ๊ฐ๋ฅ์ฑ ๋ฑ์ ๋ถ์ํ๋ AI ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋ฆฌ๋ทฐ๋ฅผ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ชป๋ ๋ณ์๋ช , ๋ถํ์ํ ๋ณต์ก์ฑ, ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ์ฑ ๋ฑ์ด ๊ฐ์ง๋๋ฉด ์๋์ผ๋ก ์์ ์ ์์ ํฌํจํ ๋ฆฌ๋ทฐ๋ฅผ ์์ฑํฉ๋๋ค.
- ์ฝ๋ ๋ฆฌ๋ทฐ ์์ฑ: LLM์ ์ปค๋ฐ๋ ์ฝ๋๋ฅผ ๋ถ์ํ ํ ํด๋น ์ฝ๋์ ๋ํด ๊ฐ์ ์ฌํญ์ด๋ ๊ถ์ฅ ์ฌํญ์ ์์ฑํฉ๋๋ค. ๋ฆฌ๋ทฐ ๋ด์ฉ์ ๋ณ๊ฒฝ๋ ์ฝ๋ ๋ธ๋ก๊ณผ ํจ๊ป ํ์๋์ด, ์ฝ๋ ๋ฆฌ๋ทฐ๊ฐ ๋ช ํํ๊ฒ ์ด๋ฃจ์ด์ง ์ ์๋๋ก ์ง์ํฉ๋๋ค.
- ๊ธฐ๋ฅ ์ค๋ช
:
- ์๋ ๋ถ์: ๊ฐ ์ปค๋ฐ์ ๋ํ ์ฝ๋ ๋ฆฌ๋ทฐ ๊ธฐ๋ก์ ๋ฐํ์ผ๋ก, ๊ธฐ์ฌ์๊ฐ ํ๋ก์ ํธ์ ์ด๋ค ์ํฅ์ ๋ฏธ์ณค๋์ง๋ฅผ ์๋์ผ๋ก ๋ถ์ํฉ๋๋ค. ํธ๋ฌ๋ธ์ํ , ์ถ๊ฐ๋ ๊ธฐ๋ฅ, ์ฝ๋ ๊ฐ์ ์ฌํญ ๋ฑ์ ์ ๋ฆฌํ์ฌ ํฌํธํด๋ฆฌ์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- ํธ๋ฌ๋ธ์ํ ๊ธฐ๋ก: ๊ธฐ์ฌ์๊ฐ ํด๊ฒฐํ ๋ฌธ์ ์ ๋ํ ๋ก๊ทธ๋ฅผ ์๋์ผ๋ก ์ถ์ ํ๊ณ , ์ด๋ฅผ ์์ธํ๊ฒ ๊ธฐ๋กํ์ฌ ํฌํธํด๋ฆฌ์ค์ ๋ฌธ์ ํด๊ฒฐ ์น์ ์ ํฌํจ์ํต๋๋ค.
- ํต์ฌ ๊ธฐ๋ฅ ๋ถ์: ๊ธฐ์ฌ์๊ฐ ํ๋ก์ ํธ์์ ๊ฐ๋ฐํ ์ฃผ์ ๊ธฐ๋ฅ์ ์๋ณํ์ฌ, ํฌํธํด๋ฆฌ์ค์ ํด๋น ๊ธฐ์ฌ์๊ฐ ๋งก์ ๊ธฐ๋ฅ๊ณผ ์ฑ๊ณผ๋ฅผ ๋ช ํํ๊ฒ ํ์ํฉ๋๋ค.
- ๊ธฐ์ฌ์๋ณ ๋ถ๋ฅ: ๊ฐ ๊ธฐ์ฌ์๊ฐ ๋ด๋นํ ์ฝ๋์ ๋ชจ๋์ ๋ถ๋ฅํ๊ณ , ํ ํ๋ก์ ํธ์์์ ๊ธฐ์ฌ๋์ ์ญํ ์ ์ ๋ฆฌํ์ฌ ํฌํธํด๋ฆฌ์ค์ ๋ฐ์ํฉ๋๋ค.
- ํฌํธํด๋ฆฌ์ค ๊ตฌ์ฑ ์์:
- ํธ๋ฌ๋ธ์ํ ๊ธฐ๋ก: ํ๋ก์ ํธ ์ค ๋ฐ์ํ ๋ฌธ์ ์ ๊ณผ ๊ทธ ํด๊ฒฐ ๊ณผ์ .
- ํต์ฌ ๊ธฐ๋ฅ: ๊ธฐ์ฌ์๊ฐ ๊ฐ๋ฐํ ์ฃผ์ ๊ธฐ๋ฅ ๋ฐ ๊ธฐ์ฌํ ์ฝ๋ ์์ญ.
- ๊ธฐ์ฌ์๋ณ ๋ด๋น ๊ธฐ๋ฅ: ํ๋ก์ ํธ์์ ๊ฐ ๊ธฐ์ฌ์๊ฐ ๋ด๋นํ ๋ชจ๋, ๊ธฐ๋ฅ ๋ฑ์ ๋ถ๋ฅํ์ฌ ์ ๋ฆฌ.
-
๋ณด์: ์ผ๊ตด ์ธ์ ๋ฐ์ดํฐ๋ ์์ ํ๊ฒ ์ฒ๋ฆฌ๋๊ณ ์ ์ฅ๋ฉ๋๋ค. ์ค์๊ฐ์ผ๋ก ์ธ์์ ์ํํ์ฌ ํธ๋ฆฌํ๋ฉด์๋ ๋ณด์์ฑ์ด ๋์ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. ์ผ๊ตด ๋ฒกํฐ ๋ฐ์ดํฐ๋ Qdrant๋ฅผ ํ์ฉํด ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๊ณ , Anti-Spoofing ๊ธฐ์ ์ ์ ์ฉํ์ฌ ๋ณด์์ฑ์ ๊ฐํํ์ต๋๋ค.
-
๊ธฐ๋ฅ ์ค๋ช : ์น์บ ์ ์ด์ฉํ ์ผ๊ตด ์ธ์ ์์คํ ์ ํตํด ์ฌ์ฉ์๋ค์ด ๋น๋ฐ๋ฒํธ ์์ด ์์ ํ๊ฒ ํ๋ก์ ํธ ์์คํ ์ ๋ก๊ทธ์ธ/๋ก๊ทธ์์ ํ ์ ์์ต๋๋ค.
- ์ผ๊ตด ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ผ๊ตด ์ด๋ฏธ์ง๋ฅผ ํด๋ผ์ด์ธํธ(React)์์ ์ ์ฒ๋ฆฌ ํ, ๋ฒกํฐ ๋ฐ์ดํฐ๋ก ๋ณํ. ๋ณํ๋ ๋ฒกํฐ ๋ฐ์ดํฐ๋ง ์๋ฒ๋ก ์ ์กํ์ฌ ๊ฐ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธ.
- Anti-Spoofing ๊ธฐ์ ์ ์ฉ ์ฌ์ฉ์๊ฐ ์ ๋ก๋ํ ์ผ๊ตด ์ด๋ฏธ์ง๋ฅผ ๋ถ์ํด ์ค์ ์ฌ์ฉ์์์ ์ผ์น ์ฌ๋ถ๋ฅผ ํ๋จ. ์ฌ์ง์ด๋ ๋์์ ๋ฑ์ผ๋ก ๋ก๊ทธ์ธ ์๋๋ฅผ ๋ฐฉ์งํ์ฌ ๋ณด์ ๊ฐํ.
- ๋ฒกํฐ ๋ฐ์ดํฐ ๋น๊ต (Qdrant ์ฌ์ฉ) Qdrant์ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ์ผ๊ตด ๋ฒกํฐ์ ๊ธฐ์กด ๋ฐ์ดํฐ ๊ฐ ์ ์ฌ๋๋ฅผ ๊ณ์ฐ. ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ ๊ณ์ฐ(Euclidean Distance) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ฒกํฐ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ๊ณ , ์ฌ์ ์ ์๋ ์๊ณ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ธ์ฆ ์ฌ๋ถ ๊ฒฐ์ .
















