๋ณด์ ์ข ๋ชฉ์ด ๊ธํ๊ฒ ์์ง์ด๋ฉด 60์ด ์์ "์"๋ฅผ ๊ทผ๊ฑฐ์ ํจ๊ป ๋ณด๋ด๊ณ , ๊ทธ ์ด์ ๋ฅผ ์ดํดํ ์ํผ์ผ๋ก ์ด์ด ์ฃผ๋ ํฌํธํด๋ฆฌ์ค ์ ๋ณด ์๋น์ค
์ฌ์ฉ์๋ ๋ณด์ ์ข ๋ชฉ๊ณผ ๋น์ค๋ง ์ ๋ ฅํฉ๋๋ค. ์๋ฒ๋ ์ฅ์ค ์ฒด๊ฒฐยท๊ณต์ยท๋ด์ค๋ฅผ ๊ณ์ ๋ฐ์ ๋ณด์ ์ข ๋ชฉ์ด ํ์์ ๋ค๋ฅด๊ฒ ์์ง์ด๋ ์๊ฐ์ ์ก๊ณ , ๊ทธ ์์ง์์ด ์์ฅ ๋๋ฌธ์ธ์งยทํ ๋ง ๋๋ฌธ์ธ์งยท์ข ๋ชฉ ๊ณ ์ ์ฌ๊ฑด ๋๋ฌธ์ธ์ง ๊ฐ๋ ค ๊ทผ๊ฑฐ ๋งํฌ์ ํจ๊ป ์๋ฆผ์ ๋ณด๋ ๋๋ค. ์๋ฆผ์ ๋๋ฅด๋ฉด ๊ทธ ์์ธ์ ์ค๋ช ํ๋ ์ํผ ํผ๋๋ก ์ด์ด์ง๋๋ค.
๋ณด์ ์ข
๋ชฉ ยท ๋น์ค ์
๋ ฅ (๊ณ์ข ์ฐ๋ ์์)
โ ์ฒด๊ฒฐ ยท ๊ณต์ ยท ๋ด์ค๋ฅผ Kafka๋ก ์์ง
โ ์ข
๋ชฉ๋ณ ํ์ ๋ณ๋ํญ์ ๋์ผ๋ฉด ๊ธ๋ณ์ผ๋ก ๊ฐ์ง
โ ์์ฅ / ํ
๋ง / ๊ณ ์ ์์ธ์ผ๋ก ๋ถํดํ ๋ค์๋ง ๊ทผ๊ฑฐ ๊ฒ์
โ ๊ทผ๊ฑฐ๊ฐ ์ฝํ๋ฉด "์์ธ ๋ฏธํ์ธ"์ผ๋ก ๋จผ์ ๋ณด๋ด๊ณ , ํ์ธ๋๋ฉด ๊ฐฑ์
โ ์๋ฆผ ํ ์ค์์ ๊ด๋ จ ์ํผ์ผ๋ก, ์์ฒญ ๋ฐ์์ ๋ค์ ์ถ์ฒ์ผ๋ก
์ค๊ณ ๋จ๊ณ ๋ฌธ์์ ๋๋ค. ์๋ ์์น๋ ์ธก์ ๊ฐ์ด ์๋๋ผ ๋ชฉํ์น์ด๋ฉฐ, ์ค์ธก ํ ๊ฐฑ์ ํฉ๋๋ค.
๊ฐ์ฅ ์งํ๋ ๋ณ๋์ฑ์ํ์ฅ์น ๋ฐ๋ ๋๋ ์๋ฐฑ ์ข ๋ชฉ์ด ํ๊บผ๋ฒ์ ์์ง์ด๊ณ , LLM ๋ฌธ์ฅ ์์ฑ์ ์ ์ด์ฉ ํ๋ค๋ฆฝ๋๋ค. ๊ฐ์ง์ ์์ฑ์ ํ ์ค๋ก ๋ฌถ์ผ๋ฉด ๋๋ฆฐ ์์ฑ์ด ๊ฐ์ง๊น์ง ๋ง์ต๋๋ค. ์์ง 2์ด, ๊ฐ์ง 5์ด, ๊ทผ๊ฑฐ ๊ฒ์ 1์ด, ์์ฑ 15์ด๋ก ์์ฐ์ ๋๋๊ณ , ๋จ๊ณ ์ฌ์ด๋ Kafka ํ ํฝ์ผ๋ก ๋์ด ์๋ ์ฐจ์ด๋ฅผ ํก์ํฉ๋๋ค. ์์ฑ ๋๊ธฐ์ด์ด ์์ฐ์ ๋์ผ๋ฉด ํ ํ๋ฆฟ ๋ฌธ์ฅ์ผ๋ก ๋จผ์ ๋ณด๋ด๊ณ ๋์ค์ ๋ค๋ฌ์ต๋๋ค. ์๋ฆผ๋ง๋ค ๋ฉฑ๋ฑ ํค๋ฅผ ๋ฌ ์ฌ์๋ํด๋ ํ ๋ฒ๋ง ๋ฐ์ต๋๋ค.
๊ธ๋ฑ๋ฝ์ ์๋น์๋ ๋๋ ทํ ์์ธ์ด ์์ต๋๋ค. ๊ฑฐ๋์ ์กฐํ๊ณต์ ๋ต๋ณ์๋ "ํน๋ณํ ์ฌ์ ์์"์ด ๋ง์ต๋๋ค. ๊ทธ๋์ ๋จผ์ ์์ฅ ๋ฏผ๊ฐ๋(ฮฒ)๋ก ์์ฅ ๋ชซ์ ๋นผ๊ณ , ๊ฐ์ ํ ๋ง ์ข ๋ชฉ์ ๋๋ฐ ์์ง์์ ๋ณธ ๋ค์๋ง ์ข ๋ชฉ ๊ณ ์ ๊ทผ๊ฑฐ๋ฅผ ์ฐพ์ต๋๋ค. ๋ฌธ์ฅ์ ๊ฒ์๋ ๊ณต์ยท๋ด์ค ์์์๋ง ์ฐ๊ณ ์๋ฌธ ๋งํฌ๋ฅผ ๋ต๋๋ค. ๊ด๋ จ๋๊ฐ ๊ธฐ์ค์ ๋ชป ๋ฏธ์น๋ฉด ๊ธฐ๊ถํฉ๋๋ค. ์ ํ๋๋ ์กฐํ๊ณต์ ๋ต๋ณ, ๊ณต์ ์ ํ ์ฌ๋ถ, ํ ๊ณจ๋์ ์ผ๋ก ๋ง๋ ์ ๋ต ๋ผ๋ฒจ์ ๋ํด VE60(60์ด ์์ ๋์ฐฉํ ์ ๋ต ์ค๋ช ๋น์จ)์ผ๋ก ์ฑ์ ํฉ๋๋ค.
ํ์ ํ๋ก์ ํธ๋ ์์ฒญ ๊ธฐ๋ก์ด ๊ฑฐ์ ์์ด ํ์ ํํฐ๋ง์ด ๋์ํ์ง ์์ต๋๋ค. ๋์ ๊ณต๊ฐ ์์ธยท๊ณต์๋ก ๋งค์ผ ๋ฐค ์ข ๋ชฉ ์ฐ๊ฒฐ ์ง๋๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์์ต๋ฅ ์๊ด์ด ๋์ ์ข ๋ชฉ์์ Union-Find๋ก ๋ฌถ์ด ํ ๋ง ๊ตฐ์ง์ ๋ง๋ค๊ณ , ๋ณ์นญ ์ฌ์ (์ผ์ = ์ผ์ฑ์ ์)์ ๊ฐฑ์ ํฉ๋๋ค. ํผ๋๋ ๋ณด์ ์ข ๋ชฉ์์ ์ด์ ์ข ๋ชฉ์ผ๋ก ํ๋ณด๋ฅผ ๋ํ๊ณ , ์นด๋ ์ ํ๋ณ ํฐ์จ ์ํ๋ง์ผ๋ก ์ ์ ๋ฐ์์์๋ ์ ํธ๋ฅผ ํ์ตํฉ๋๋ค. ๊ฐ์ ์ง๋๊ฐ ์ค์๊ฐ ๊ฐ์ง์ ํ ๋ง ํ์ ๊ธฐ์ค์ผ๋ก๋ ์ฐ์ ๋๋ค.
flowchart TB
SRC["KIS ์ฒด๊ฒฐ ยท OpenDART ๊ณต์ ยท ๋ค์ด๋ฒ ๋ด์ค"]
subgraph RT["์ค์๊ฐ ์ธต ยท lattae-alert"]
K[("Kafka ์์ฒ ํ ํฝ<br/>์๋ณธ ๋ณด์กด โ ํ๋ฃจ ํต์งธ ๋ฆฌํ๋ ์ด")]
D["Flink ๊ฐ์ง<br/>์ข
๋ชฉ๋ณ ๋ถ์์ ์๊ณ + ํ์คํ
๋ฆฌ์์ค"]
F["์์ธ ๋ถํด<br/>์์ฅ / ํ
๋ง / ๊ณ ์ "]
S["ES ๊ทผ๊ฑฐ ๊ฒ์<br/>์ต๊ทผ 30๋ถ ๊ณต์ยท๋ด์ค, percolator ํ๊น
"]
J{"์์ธ ํ์ "}
L["LLM 1~2๋ฌธ์ฅ<br/>์์ฐ ์ด๊ณผ ์ ํ
ํ๋ฆฟ"]
U["์์ธ ๋ฏธํ์ธ<br/>ํ์ธ ์ ๊ฐฑ์ ์๋ฆผ"]
P["๋ณด์ ์ ํฌ์์ ยท ๋ฉฑ๋ฑ ๋ฐ์ก"]
end
subgraph BT["๋ฐฐ์นยทํผ๋ ์ธต ยท lattae-feed"]
A["Airflow ์ผ๊ฐ DAG"]
SP["Spark ์ฌ๊ณ์ฐ"]
G["์ฐ๊ฒฐ ์ง๋ ยท ๊ธฐ์ค์ ยท ๋ณ์นญ<br/>Union-Find ํ
๋ง ๊ตฐ์ง"]
C["์ํผ ์นด๋ ์์ฑ ยท ES ์์ธ"]
R["ํผ๋ ์ถ์ฒ ยท ์๋น<br/>ํฐ์จ ์ํ๋ง"]
end
USER(["์ฌ์ฉ์ ยท lattae-app"])
SRC --> K --> D --> F --> S --> J
J -->|๊ทผ๊ฑฐ ์ถฉ๋ถ| L --> P
J -->|๊ทผ๊ฑฐ ๋ถ์กฑ| U --> P
P -->|ํธ์ ์๋ฆผ| USER
P -->|๋ณ๋ ์นด๋ ์ฝ์
| R
A --> SP --> G --> C --> R
G -.->|๋ธ๋ก๋์บ์คํธ ์ํ| D
R -->|ํผ๋| USER
USER -.->|์์ฒญ ยท ๋๊น ยท ์์ง| R
| ์ธต | ํ๋ ์ผ | ์งํค๋ ค๋ ๊ฒ |
|---|---|---|
| ์์ง | ์์ฒ๋ณ ์ด๋ํฐ, ์ข ๋ชฉ์ฝ๋ ํค, ํธ์ถ ํ๋ ์ค์ผ์ค๋ง | ๋ฒ์คํธ์ ๋๋ฆฐ ์๋น์๊ฐ ์๋ก๋ฅผ ๋ง์ง ์์ |
| ๊ฐ์ง | ์ด๋ฒคํธ ์๊ฐ ๊ธฐ์ค ๋ถ์์ ์๊ณ, ์์ฅยทํ ๋งยท๊ณ ์ ๋ถํด | ๊ฐ์ ๊ธ๋ณ์ ๋ฆ๊ฑฐ๋ ๋ ๋ฒ ๋ฐ์ํ์ง ์์ |
| ์ค๋ช | ๊ทผ๊ฑฐ ๊ฒ์ โ ์์ธ ๋ถ๋ฅ โ ๊ธฐ๊ถ ๋๋ ์์ฑ | ๊ทผ๊ฑฐ ์๋ ์ด์ ๋ฅผ ์ง์ด๋ด์ง ์์ |
| ๋ฐ์ก | ๋ณด์ ์ ํฌ์์, ๋ฉฑ๋ฑ ํค, ๊ฐฑ์ ์๋ฆผ | 60์ด ์์, ํ ๋ฒ๋ง ๋์ฐฉ |
| ๋ฐฐ์น | ์ฐ๊ฒฐ ์ง๋, ๊ธฐ์ค์ , ๋ณ์นญ, ์ํผ ์นด๋ | ์ค์๊ฐ ํ๋จ์ ๊ธฐ์ค์ด ๋ก์ง ์์ |
| ํผ๋ | ํฌํธํด๋ฆฌ์ค ๊ธฐ๋ฐ ํ๋ณด, ๋ฐด๋ง ์์ | ์ฌ์ฉ์๊ฐ ์ ์ด๋ ๊ฐ์ธํ๊ฐ ๋์ |
| ๋ ํฌ | ์ญํ |
|---|---|
lattae-alert |
์ค์๊ฐ ๊ฐ์งยท์์ธ ์ค๋ช ยท์๋ฆผ ๋ฐ์ก |
lattae-feed |
๋ฐฐ์น ํ์ดํ๋ผ์ธยท์ฐ๊ฒฐ ์ง๋ยทํผ๋ ์ถ์ฒ |
lattae-api |
์ธ์ฆ, ํฌํธํด๋ฆฌ์ค, ํธ์ ๊ตฌ๋ , ๋ ์๋น์ค ์๋ต ์กฐํฉ |
lattae-app |
Vue PWA โ HOME(๋ด ํฌํธํด๋ฆฌ์ค) ยท REELS(์ํผ ํผ๋) |
๋ชจ๋ ์์ฒ์ ๊ณต์ Open API์ ๊ณต๊ณต๋ฐ์ดํฐ, ์ฌ์ฉ์ ์ง์ ์ ๋ ฅ์ ๋๋ค. ๋ด์ค ๋ณธ๋ฌธ๊ณผ ์ปค๋ฎค๋ํฐ๋ ์์งํ์ง ์๊ณ ์ ๋ชฉยท์์ฝยท์๋ฌธ ๋งํฌ๋ง ์๋๋ค. ์ค์๊ฐ ์์ธ๋ ๊ธ๋ณ ๊ฐ์ง์๋ง ์ฐ๊ณ , ํ๋ฉด์ ๊ฐ๊ฒฉ๊ณผ ์ฐจํธ๋ ๊ณต๊ณต๋ฐ์ดํฐ์ ์ผ๋ณ ์์ธ๋ก ๊ทธ๋ฆฝ๋๋ค. ์ข ๋ชฉ ์ถ์ฒยท๋งค์ ์ ํธยท๋ชฉํ๊ฐ๋ฅผ ๋ด์ง ์์ผ๋ฉฐ, ํฌ์ ํ๋จ์ ๋์ ํ์ง ์๋ ์ ๋ณด ์๋น์ค์ ๋๋ค.