๋ฐ์ดํฐ ๋ฐฑ์๋
IronFlock์ TimescaleDB๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ํ๋ก์ ํธ์ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ๋ก๋น์ ๋ํฉ๋๋ค. ์ฑ์ด ๋ฐ์ดํฐ ์คํค๋ง๋ฅผ ์ ์ํ๋ฉด IronFlock์ด ํ ์ด๋ธ์ ์์ฑํ๊ณ ๋๋ฐ์ด์ค๊ฐ ์ฑ์ ์ถ๊ฐ๋๋ ์๊ฐ๋ถํฐ ๋ฐ์ดํฐ ์์ง์ ์์ํฉ๋๋ค.
์๋ ๋ฐฉ์
.ironflock/data-template.yml์ ๋ฐ์ดํฐ ์คํค๋ง๋ฅผ ์ ์ํฉ๋๋ค.- IronFlock SDK๋ฅผ ์ฌ์ฉํ์ฌ ์ฃ์ง ์ฝ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
- IronFlock์ด ์ฑ์ด ์ค์น๋ ๊ฐ ํ๋ก์ ํธ์์ ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์ค์ ํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ ๋๋ฐ์ด์ค์์ ๋ฉ์์ง ์์คํ ์ ํตํด ํ๋ก์ ํธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ํ๋ฆ ๋๋ค.
๊ฐ ํ๋ก์ ํธ๋ ์์ฒด ๋ฌผ๋ฆฌ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ์ง๋๋ค โ ํ๋ก์ ํธ ๊ฐ ๋ฐ์ดํฐ ๊ณต์ ๋ ์์ต๋๋ค.
์ฌ์ฉ์๋ ์์ ์ ํ๋ก์ ํธ์์ ์ฑ์ด ์์งํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์ดํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ด ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์คํค๋ง ์ ์
.ironflock/ ๋๋ ํฐ๋ฆฌ์ data-template.yml ํ์ผ์ ์์ฑํฉ๋๋ค:
data:
tables:
- tablename: sensordata
columns:
- id: tsp
name: ํ์์คํฌํ
description: ์ธก์ ํ์์คํฌํ
path: args[0].timestamp
dataType: timestamp
- id: temperature
name: ์จ๋
description: ์ญ์จ ์จ๋ ์ธก์ ๊ฐ
path: args[0].temperature
dataType: numeric
- id: humidity
name: ์ต๋
description: ์๋ ์ต๋ ๋ฐฑ๋ถ์จ
path: args[0].humidity
dataType: numeric
- id: device_id
name: ๋๋ฐ์ด์ค ID
description: ์์ค ๋๋ฐ์ด์ค ์๋ณ์
path: args[0].device_id
dataType: string์ปฌ๋ผ ์ต์
| ํ๋ | ์ค๋ช |
|---|---|
id | ๋ด๋ถ ์ปฌ๋ผ ์๋ณ์ (ํ์์คํฌํ ์ปฌ๋ผ์๋ tsp ์ฌ์ฉ) |
name | ๋ณด๋์ ํ์๋๋ ์ฌ๋์ด ์ฝ์ ์ ์๋ ์ปฌ๋ผ ์ด๋ฆ |
description | ์ ํ์ ์ค๋ช |
path | ๋ฐํ๋ ๋ฐ์ดํฐ ๊ฐ์ฒด์์ ๊ฐ์ ๊ฒฝ๋ก (์: args[0].temperature) |
dataType | timestamp, numeric, string, boolean ์ค ํ๋ |
secret | ์ด ์ปฌ๋ผ์ ์ ์ฅ ์ ์ํธํํ๊ณ ์ผ๋ฐ ์ฝ๊ธฐ์์๋ ์ ๋ ํ๋ฌธ์ผ๋ก ๋ฐํํ์ง ์์ต๋๋ค โ ์๋ ๋น๋ฐ ์ปฌ๋ผ ์ฐธ๊ณ |
๋น๋ฐ ์ปฌ๋ผ
์ ์ฅ์ ํด์ผ ํ์ง๋ง ์ ๋ ํ์๋์ด์๋ ์ ๋๋ ๊ฐ์ด ์์ต๋๋ค. API ํ ํฐ, ๋๋ฐ์ด์ค ๋น๋ฐ๋ฒํธ, ๋ผ์ด์ ์ค ํค ๊ฐ์ ๊ฒ์
๋๋ค. ์ปฌ๋ผ์ secret: true๋ก ํ์ํ๋ฉด ๋ฐ์ดํฐ ๋ฐฑ์๋๊ฐ ์ฝ์
์์ ์ ์ด๋ฅผ ์ํธํํฉ๋๋ค:
- tablename: credentials
columns:
- id: tsp
dataType: timestamp
- id: device_id
dataType: string
- id: api_token
dataType: string
secret: true๊ทธ ์ดํ๋ก๋ ์ด๋ค ์ผ๋ฐ ์ฝ๊ธฐ๋ ํ๋ฌธ์ ๋ฐํํ์ง ์์ต๋๋ค โ ๊ทธ ๊ฐ์ ์์ฑํ ์ฑ์๊ฒ์กฐ์ฐจ ๋ฐํํ์ง ์์ต๋๋ค:
| ์ฝ๊ธฐ ๊ฒฝ๋ก | ๋๋ ค๋ฐ๋ ๊ฐ |
|---|---|
| ๋ณด๋, ์์ ฏ, ๊ทธ๋ฆฌ๊ณ ๋ฉ์์ง ๋ผ์ฐํฐ๋ฅผ ๊ฑฐ์น๋ ๊ทธ ๋ฐ์ ๋ชจ๋ ๊ฒ | ํ๋ ์ด์คํ๋ __secret__ |
| SQL ์ ๊ทผ (FleetDB Access์ Postgres ๋ก๊ทธ์ธ) | ์ ์ฅ๋ ์ํธ๋ฌธ, ifsec:1:โฆ |
| SDK์ ํ๋ฌธ ์กฐํ ํจ์ | ๋ณตํธํ๋ ๊ฐ |
NULL์ ๋ชจ๋ ๊ฒฝ๋ก์์ NULL ๊ทธ๋๋ก ์ ์ง๋๋ฏ๋ก, โ์ค์ ๋์์ง๋ง ์จ๊ฒจ์งโ๊ณผ โํ ๋ฒ๋ ์์ฑ๋์ง ์์โ์ ๊ณ์ ๊ตฌ๋ถ๋ฉ๋๋ค.
๋น๋ฐ ๊ฐ์ ํ๋ฌธ์ผ๋ก ๋ค์ ์ฝ๋ ๊ฒ์ ์ค์ง ์ฑ ์์ ์ ์ปจํ ์ด๋์์ SDK๋ฅผ ํตํด์๋ง ๊ฐ๋ฅํฉ๋๋ค โ SDK ์ฐธ์กฐ์ ๋น๋ฐ ์ปฌ๋ผ์ ์ฐธ์กฐํ์ญ์์ค. ๋ณด๋๋ ๋ค๋ฅธ ์ฑ์ ์ด๋ฅผ ์ ํ ์ป์ ์ ์์ผ๋ฉฐ, ๋ฐ๋ก ๊ทธ ์ ์ด โํ๋ฌธ์ผ๋ก ์ ๋ ํ์๋์ง ์์โ์ ๊ฒ์น๋ ๊ฐ ์๋ ์ฌ์ค๋ก ๋ง๋ญ๋๋ค.
๋น๋ฐ ๊ฐ์ ์์ง ์๊ณ ํ ์
๋ฐ์ดํธํ๊ธฐ. ์ํฐํฐ ํ
์ด๋ธ์์ ํ์ ํธ์งํ๋ ํด๋ผ์ด์ธํธ๋ ์ค์ ๋น๋ฐ ๊ฐ์ ๋๋๋ ค ๋ณด๋ผ ์๊ฐ ์์ต๋๋ค โ ์ฝ๊ธฐ๋ ์ธ์ ๋ ํ๋ ์ด์คํ๋๋ง ๋๋ ค์ฃผ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋์ ๋ฐ์ดํฐ ๋ฐฑ์๋๋ ์ฐ๊ธฐ ์์ ์ ํ๋ ์ด์คํ๋ __secret__(๊ทธ๋ฆฌ๊ณ ๋ณด๋๊ฐ ํ์ํ๋ โขโขโขโขโขโขโขโข ๋ง์คํฌ)๋ฅผ ์ด์ ๊ฐ ์ ์ง๋ก ์ทจ๊ธํ๋ฉฐ, ๋น๋ฐ ์ปฌ๋ผ์ ์๋ตํด๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ง๋ฉ๋๋ค. ๋ช
์์ ์ผ๋ก null์ ๋ณด๋ด๋ฉด ๋น๋ฐ ๊ฐ์ด ๋น์์ง๋๋ค. ๋ฐ๋ผ์ ๋ณด๋ ์์์์ ๊ธฐ๊ณ์ ์ค๋ช
์ ํธ์งํด๋ ๊ทธ ์ ๊ทผ ์ฝ๋๊ฐ ์ง์์ง๋ ์ผ์ ๊ฒฐ์ฝ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ ๊ฐ์ง ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋ผ ๋์ต๋๋ค: ๋ฌธ์์ด ๋ฆฌํฐ๋ด __secret__์ โขโขโขโขโขโขโขโข ์์ฒด๋ ๋น๋ฐ ๊ฐ์ผ๋ก ์ ์ฅํ ์ ์๊ณ (์์ ifsec:โฆ ์ํธ๋ฌธ๋ ์
๋ ฅ์ผ๋ก ๊ฑฐ๋ถ๋ฉ๋๋ค), ์ํฐํฐ ํค๊ฐ ์๋ ํ
์ด๋ธ์์๋ ํ๋ ์ด์คํ๋ ์ฐ๊ธฐ๊ฐ ๊ฑฐ๋ถ๋ฉ๋๋ค โ ์ ์งํ ์ด์ ํ์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ฏธ๋ฆฌ ๊ณ ๋ คํด ๋์ด์ผ ํ ์ธ ๊ฐ์ง ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค. ๊ถ๊ณ ์ฌํญ์ด ์๋๋ผ ๋์ด์ค ์ ์๋ ์ ํ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค:
- ๋น๋ฐ ์ปฌ๋ผ์ ๋ฌธ์์ด๋ง ๊ฐ๋ฅํฉ๋๋ค. ์ํธํ์ ์ฐ์ถ๋ฌผ์ ํ
์คํธ์ด๋ฏ๋ก
numeric,boolean,timestamp์ปฌ๋ผ์ ๋น๋ฐ๋ก ์ง์ ํ ์ ์์ต๋๋ค. ํ์ ์ปฌ๋ผ์ธtsp์ญ์ ๋น๋ฐ๋ก ์ง์ ํ ์ ์์ต๋๋ค. - ๋น๋ฐ ์ปฌ๋ผ์ผ๋ก๋ ํํฐ๋ง, ๊ทธ๋ฃนํ, ์ ๋ ฌ์ ํ ์ ์์ต๋๋ค. ๋ชจ๋ ํ์ด ๊ฐ์์ ๋ฌด์์ ๊ฐ์ผ๋ก ์ํธํ๋๋ฏ๋ก, ๋์ผํ ๋น๋ฐ ๊ฐ์ ๋ด์ ๋ ํ๋ ์๋ก ๋ค๋ฅธ ์ํธ๋ฌธ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ๋น๋ฐ ์ปฌ๋ผ์ ๋ํ ๋๋ฑ ํํฐ,
GROUP BY,ORDER BY,DISTINCT๋ ์ ์ด์ ๋์ํ ์ ์์ต๋๋ค. โ์ด ๊ฐ์ด ์ผ์นํฉ๋๊น?โ์ ๋ตํ๋ ค๋ฉด SDK์ ๊ฒ์ฆ ํจ์๋ฅผ ์ฌ์ฉํ์ญ์์ค. ์ด ํจ์๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฐํํ๋ ๋์ ๋ฐ์ดํฐ ๋ฐฑ์๋ ๋ด๋ถ์์ ๋น๊ต๋ฅผ ์ํํฉ๋๋ค. - ๋น๋ฐ ์ปฌ๋ผ์ ์ํฐํฐ ํค๊ฐ ๋ ์ ์์ต๋๋ค. ํ๋ง๋ค ์ํธ๋ฌธ์ด ๋ค๋ฅด๋ฏ๋ก ์ํฐํฐ๋ณ ์ต์ ์กฐํ๋ ๋ชจ๋ ํ์ ์ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ํฐํฐ๋ก ์ทจ๊ธํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์ ๋น๋ฐ ์ปฌ๋ผ์
maintainLatestFlagFor์ ์ง์ ํ๋ฉด ๊ทธ๋๋ก ๊ฑฐ๋ถ๋ฉ๋๋ค.
๋ค์ ๋ ์ ํ์ ๋ฐ์ดํฐ ํ ํ๋ฆฟ์ด ๊ฒ์ฆ๋ ๋ ํ์ธ๋๋ฏ๋ก, ์ด๋ฅผ ์ด๊ธฐ๋ ํ ์ด๋ธ์ ๋์ค์ ์ค์๋ํ๋ ๊ฒ์ด ์๋๋ผ ๋ฆด๋ฆฌ์ค ์์ ์ ์คํจํฉ๋๋ค.
ํ ์ด๋ธ ์ต์
columns ์ธ์๋ ํ
์ด๋ธ์ ์ด๋ป๊ฒ ์ค๋ช
ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ง๋ ์ค๋ ๋ณด๊ดํ ์ง ์ ์ดํ๋ ๋ช ๊ฐ์ง ์ ํ์ ํค๊ฐ ์์ต๋๋ค.
data:
tables:
- tablename: sensordata
description: ์์ฐ ํ์ฅ์ ํ๊ฒฝ ์ธก์ ๊ฐ
chunkTimeInterval: 1 hour
dropAfter: 30 days
columns:
# ...| ํ๋ | ์ค๋ช |
|---|---|
tablename | ํ ์ด๋ธ ์ด๋ฆ |
description | ์ ํ์ ์ค๋ช . UI์ ํ์๋๋ฉฐ AI ์์ด์ ํธ๊ฐ ํ ์ด๋ธ์ ์ดํดํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค |
chunkTimeInterval | ํ
์ด๋ธ์ด ๋๋๋ ์๊ฐ ํํฐ์
์ ํฌ๊ธฐ. ๊ธฐ๋ณธ๊ฐ์ 7 days |
dropAfter | ๋ณด์กด ๊ธฐ๊ฐ โ ์ด๋ณด๋ค ์ค๋๋ ํํฐ์ ์ ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค |
downsample | ๊ธด ์๊ฐ ์ฐฝ ์ฐจํธ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ ์ง๊ณ๋ ์ฌ๋ณธ์ ์ ์งํฉ๋๋ค โ ์๋ ์ฐ์ ๋ค์ด์ํ๋ง ์ฐธ๊ณ |
maintainLatestFlagFor | ๊ณ ์ ์ํฐํฐ๋ฅผ ์๋ณํ๋ ์ปฌ๋ผ โ ์๋ ์ํฐํฐ์ ์ต์ ์ํ ์ถ์ ์ฐธ๊ณ |
private | ์ด ํ ์ด๋ธ์ ๋ค๋ฅธ ์ฑ์์ ์จ๊น๋๋ค โ ์๋ ๋ค๋ฅธ ์ฑ๊ณผ ๋ฐ์ดํฐ ๊ณต์ ํ๊ธฐ ์ฐธ๊ณ |
**chunkTimeInterval**์ ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์์ ์ด๋ป๊ฒ ๋ถํ ํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ํํฐ์
ํ๋๊ฐ ํ ๋ฒ์ ์กฐํํ๋ ๋ฐ์ดํฐ๋๊ณผ ๋๋ต ์ผ์นํ๋๋ก ์ ํํ์ธ์. ๋งค์ด ์์ง๋๋ ๊ณ ๋น๋ ๋ฐ์ดํฐ๋ ์์ ์ฒญํฌ(๋ถ~์๊ฐ ๋จ์)๊ฐ, ์ฒ์ฒํ ๋ณํ๋ ๋ฐ์ดํฐ๋ ํฐ ์ฒญํฌ(์ฃผ ๋จ์)๊ฐ ์ ํฉํฉ๋๋ค. ์ด๋ ์ฑ์ ๊ธฐ๋ณธ๊ฐ์ผ ๋ฟ์ด๋ฉฐ, ํ๋ก์ ํธ ์์ ์๊ฐ ๋์ค์ ์์ ์ ๋ฐ์ดํฐ ๋ฐฑ์๋์์ ์กฐ์ ํ ์ ์์ต๋๋ค.
**dropAfter**๋ ํ
์ด๋ธ์ ๋กค๋ง ์๋์ฐ๋ก ๋ง๋ญ๋๋ค. ์ง์ ํ ๊ธฐ๊ฐ๋ณด๋ค ์ค๋๋ ํํฐ์
์ด ํต์งธ๋ก ์ญ์ ๋๋ฏ๋ก ๊ฐ๋ณ ํ์ ์ง์ฐ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์ ๋ ดํฉ๋๋ค. ์ ๋ฆฌ ์์
์ dropAfter / 4 ์ฃผ๊ธฐ๋ก ์คํ๋๋ฏ๋ก, ๋ ์ฝ๋๋ ํํฐ์
์ด ์ ๊ฑฐ๋๊ธฐ ์ ๊น์ง ๋ง๋ฃ ์์ ์ ์ต๋ ํด๋น ๊ธฐ๊ฐ์ 1/4๋งํผ ๋๊ฒจ ๋จ์ ์์ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ฌด๊ธฐํ ๋ณด๊ดํ๋ ค๋ฉด dropAfter๋ฅผ ์๋ตํ์ธ์.
๋ ๊ฐ ๋ชจ๋ PostgreSQL ์ธํฐ๋ฒ ๋ฌธ์์ด์ ๋ฐ์ต๋๋ค โ 30 minutes, 1 hour, 7 days, 6 months.
์ฐ์ ๋ค์ด์ํ๋ง
๋์๋ณด๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ ์ง๊ณ๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค โ ์๊ฐ๋ณ ํ๊ท , ์ผ๋ณ ํฉ๊ณ, ๊ธฐ๊ณ๋ณ ๊ฐ์ ๋ฑ. ์ด๋ฅผ ์์ ๋ ์ฝ๋์์ ๊ณ์ฐํ๋ ๊ฒ์ ํ๋ฃจ์น๋ผ๋ฉด ๊ด์ฐฎ์ง๋ง 1๋
์น๋ผ๋ฉด ๋น์ฉ์ด ํฝ๋๋ค. ํ
์ด๋ธ์ downsample์ ์ถ๊ฐํ๋ฉด ํ๋ซํผ์ด ์ง์์ ์ผ๋ก ๊ฐฑ์ ๋๋ ์ฌ์ ์ง๊ณ๋ ์ฌ๋ณธ์ ์ ์งํ๊ณ , ๊ธด ์๊ฐ ์ฐฝ ์ฟผ๋ฆฌ๋ฅผ ์์ ๋ฐ์ดํฐ ๋์ ๊ทธ ์ฌ๋ณธ์ผ๋ก ์๋ตํฉ๋๋ค:
data:
tables:
- tablename: sensordata
dropAfter: 30 days
downsample:
bucket: 1 minute
keepFor: 2 years
paths:
- payload.temperature
columns:
# ...| ํ๋ | ์ค๋ช |
|---|---|
bucket | ์ฌ์ ์ง๊ณ๋ ์ฌ๋ณธ์ ์ธ๋ถ์ฑ. ๊ธฐ๋ณธ๊ฐ์ 1 minute |
keepFor | ๋ค์ด์ํ๋ง๋ ์ด๋ ฅ์ ๋ณด๊ดํ ๊ธฐ๊ฐ. ์๋ตํ๋ฉด ๋ฌด๊ธฐํ ๋ณด๊ด |
paths | ํฌํจํ JSON ํ๋ ๊ฒฝ๋ก. ๋์๋ณด๋์์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ํ๊ธฐ๋ฒ |
**bucket**์ ์ฐจํธ์ ์ ๊ณตํ ์ ์๋ ๊ฐ์ฅ ๋ฏธ์ธํ ํด์๋์
๋๋ค โ ์ด๋ณด๋ค ํจ์ฌ ๋ฏธ์ธํ ๋ฒํท์ ์์ฒญํ๋ ์ฐจํธ๋ ๋์ ์์ ํ
์ด๋ธ์ ์ฝ์ต๋๋ค. ํ๋ฃจ๋ฅผ ๊ท ๋ฑํ๊ฒ ๋๋๋ 1 second๋ถํฐ 1 day๊น์ง์ ๊ณ ์ ํญ ์ธํฐ๋ฒ(1 minute, 5 minutes, 1 hour)์ ๋ฐ์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ธ 1 minute์ ์ฌ์ค์ ๋ชจ๋ ๋์๋ณด๋์ ์ ํฉํ๋ฉฐ, ๋ฒํท์ ๋ ํฌ๊ฒ ์ก์ผ๋ฉด ์คํ ๋ฆฌ์ง์ ์ฐ๊ธฐ ์ฒ๋ฆฌ๋์ด ์ค์ด๋ญ๋๋ค.
**keepFor**๋ ๊ธด ์ด๋ ฅ์ ์ ์ด์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ฐ์
๋๋ค. ์์ ๋ ์ฝ๋๋ dropAfter์ ๋ฐ๋ผ ์ฌ๋ผ์ง์ง๋ง ๋ค์ด์ํ๋ง๋ ์ฌ๋ณธ์ ์์ฒด ๋ณด์กด ๊ธฐ๊ฐ์ ๊ฐ์ง๋๋ค. ์์ ๋ฐ์ดํฐ๋ฅผ 30์ผ, ๋ค์ด์ํ๋ง๋ ๋ฐ์ดํฐ๋ฅผ 2๋
๋ณด๊ดํ๋ฉด, ๋ณด๋๋ ์คํ ๋ฆฌ์ง์ ์ผ๋ถ๋ง ์ฌ์ฉํ๊ณ ๋ 2๋
์น ์๊ฐ๋ณ ํ๊ท ์ ๊ณ์ ์ฐจํธ๋ก ๋ณด์ฌ์ค ์ ์์ต๋๋ค. dropAfter๋ณด๋ค ๊ธธ๊ฒ ์ค์ ํ์ธ์ โ ๊ทธ ๋ฐ๋๋ ํ๋ซํผ์ด ์๋ชป๋ ๊ตฌ์ฑ์ผ๋ก ๊ฐ์ฃผํ์ฌ ๊ฑฐ๋ถํฉ๋๋ค.
**paths**๋ ๋ค์ด์ํ๋ง์ JSON ์ปฌ๋ผ ๋ด๋ถ์ ๊ฐ๊น์ง ํ์ฅํฉ๋๋ค. ์ซ์ ์ปฌ๋ผ์ ์๋์ผ๋ก ํฌํจ๋์ง๋ง, JSON ์ปฌ๋ผ์๋ ๊ณ ์ ๋ ํค ์งํฉ์ด ์์ผ๋ฏ๋ก JSON ํ๋๋ ๋ช
์์ ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค. ์ ์ธํ์ง ์์ ํ๋๋ ๋์๋ณด๋์์ ๊ทธ๋๋ก ์๋ํฉ๋๋ค โ ๋จ์ง ์์ ํ
์ด๋ธ์์ ๊ณ์ฐ๋ ๋ฟ์
๋๋ค.
๊ทธ ๋ฐ์ ๋ชจ๋ ๊ฒ์ ์๋์
๋๋ค. ๋ชจ๋ ์ซ์ ์ปฌ๋ผ์ ๋ํด ํต๊ณ(ํ๊ท , ํฉ๊ณ, ์ต์๊ฐ, ์ต๋๊ฐ, ์ฒซ ๋ฒ์งธ ๊ฐ, ๋ง์ง๋ง ๊ฐ, ๋ ์ฝ๋ ์)๊ฐ ์ ์ง๋๋ฉฐ, ํ
์ด๋ธ์ ์ํฐํฐ ํค(maintainLatestFlagFor, ์์ผ๋ฉด ๋ฐํ ๋๋ฐ์ด์ค)๋ก ๊ทธ๋ฃนํ๋ฉ๋๋ค. ๋์๋ณด๋๋ ์๋ฌด๋ฐ ์ค์ ๋ ํ์ ์๊ณ ์ด ๊ธฐ๋ฅ์ ์ธ์งํ ํ์๋ ์์ต๋๋ค: ์์ ฏ์ ํ์์ฒ๋ผ ์ฟผ๋ฆฌํ๊ณ , ํ๋ซํผ์ด ์ฟผ๋ฆฌ๋ง๋ค ์ฌ์ ์ง๊ณ๋ ์ฌ๋ณธ์ผ๋ก ์๋ตํ ์ ์๋์ง ํ๋จํฉ๋๋ค โ ์๋ฅผ ๋ค์ด ์ฌ๋ณธ์ด ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ง ์๋ ์ปฌ๋ผ์ ํํฐ๊ฐ ์ฐธ์กฐํ๋ ๋ฑ ์๋ตํ ์ ์๋ ๊ฒฝ์ฐ์๋ ํฌ๋ช
ํ๊ฒ ์์ ํ
์ด๋ธ๋ก ๋๋์๊ฐ๋๋ค.
์คํค๋ง ๋ณ๊ฒฝ์ ์ฌ๋ณธ์ ์ฌ๊ตฌ์ถํฉ๋๋ค. ๋ค์ด์ํ๋ง๋ ํ ์ด๋ธ์ ์ปฌ๋ผ์ ์ถ๊ฐยท์ ๊ฑฐํ๊ฑฐ๋ ํ์ ์ ๋ฐ๊พธ๋ ๊ฒ โ ๋๋
downsample๋ธ๋ก ์์ฒด๋ฅผ ์์ ํ๋ ๊ฒ โ ์ ์์ ํ ์ด๋ธ์์ ์ฌ์ ์ง๊ณ๋ ์ฌ๋ณธ์ ์ฌ๊ตฌ์ถํฉ๋๋ค.dropAfter๋ณด๋ค ์ค๋๋ ๊ฒ์ ์ฌ๊ตฌ์ฑํ ์ ์์ผ๋ฏ๋ก ์์ค๋ฉ๋๋ค. ๊ฐ๋ฅํ๋ค๋ฉด ํ ์ด๋ธ์ ๋ง๋ค ๋ ์ด ๋ธ๋ก๋ ํจ๊ป ์ค์ ํ๊ณ , ์ค๋ ์ด์๋ ํ ์ด๋ธ์ ๋ํ ์ดํ์ ์คํค๋ง ๋ณ๊ฒฝ์ ์ ์คํ ๊ฒฐ์ ์ผ๋ก ๋ค๋ฃจ์ญ์์ค.
์ฃ์ง ์ฝ๋์์ ๋ฐ์ดํฐ ๋ฐํ
IronFlock SDK๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํฉ๋๋ค:
Python
from ironflock import IronFlock
flock = IronFlock()
flock.publish_to_table("sensordata", {
"timestamp": "2025-01-15T10:30:00Z",
"temperature": 23.5,
"humidity": 62.1,
"device_id": "sensor-001"
})๊ณ ๋น๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, ํ๋ง๋ค ํ ๋ฒ์ฉ ์๋ณตํ๋ ๋์ publish_rows_to_table / publishRowsToTable(fire-and-forget) ๋๋ append_rows_to_table / appendRowsToTable(์ฝ์
๊ฒฐ๊ณผ๋ฅผ ๋ฐํ)์ ์ฌ์ฉํ์ฌ ๋จ์ผ ๋ฉ์์ง๋ก ์ฌ๋ฌ ํ์ ์ ์กํ์ญ์์ค. ๊ฐ ๋ฐฐ์น๋ ์์์ ์ผ๋ก ์ฝ์
๋ฉ๋๋ค โ ์ ๋ถ ์๋๋ฉด ์ ๋ฌด์
๋๋ค. ์์ธํ ๋ด์ฉ์ SDK ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋ณํ ํ ์ด๋ธ
์์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ง๊ณํ๊ฑฐ๋ ์ฒ๋ฆฌํ๋ SQL ๋ณํ์ ์ ์ํ ์ ์์ต๋๋ค:
data:
tables:
- tablename: sensordata
columns:
# ... ์์ ๋ฐ์ดํฐ ์ปฌ๋ผ ...
transforms:
- tablename: hourly_averages
materialize: true
schedule: "0 * * * *"
sql: >
SELECT
time_bucket('1 hour', tsp) AS hour,
avg(temperature) AS avg_temp,
avg(humidity) AS avg_humidity
FROM sensordata
GROUP BY hour
columns:
- id: hour
name: ์๊ฐ
dataType: timestamp
- id: avg_temp
name: ํ๊ท ์จ๋
dataType: numeric
- id: avg_humidity
name: ํ๊ท ์ต๋
dataType: numeric| ํ๋ | ์ค๋ช |
|---|---|
tablename | ํ์ ํ ์ด๋ธ์ ์ด๋ฆ |
materialize | true์ด๋ฉด ๊ฒฐ๊ณผ๊ฐ ํ
์ด๋ธ๋ก ์ ์ฅ๋จ |
schedule | ๋ณํ์ด ์คํ๋๋ ํฌ๋ก ํํ์ |
sql | ๋ณํ์ ๊ณ์ฐํ๋ SQL ์ฟผ๋ฆฌ |
columns | ์ถ๋ ฅ์ ์ปฌ๋ผ ์ ์ |
๋ณํ ํ ์ด๋ธ์ ์ผ๋ฐ ํ ์ด๋ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณด๋ ๋ฐ SDK๋ฅผ ํตํด ์ ๊ทผํ ์ ์์ต๋๋ค.
๋ณํ์ ์์ ์ SQL์ด ๋ฐํํ๋ ๊ทธ๋๋ก ์ฝํ๋๋ค: ์์ ฏ์ ์๊ฐ ์ฐฝ, ์บ๋ฆฐ๋ ํํฐ, latest ๋ชจ๋๋ ํ
์ด๋ธ์ ์ ์ฉ๋๋ฉฐ ๋ณํ์์๋ ๋ฌด์๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ธ ๊ฐ์ง ๊ท์น์ด ๋ฐ๋ผ ๋์ต๋๋ค. ์๊ฐ ๋ฒ์๋ ์ฟผ๋ฆฌ ์์์ ์ ํํ๊ณ (WHERE tsp > now() - interval '7 days'), ์๊ณ์ด์ ์ต์ ์์ผ๋ก ์ ๋ ฌํ์ฌ(ORDER BY <time column> DESC) ํ ์ ํ์ด ๊ฑธ๋ ค๋ ์ต์ ํ์ด ๋จ๊ฒ ํ๋ฉฐ, ๋ณด๋์์ ๊ทธ๋ฆฌ๊ฑฐ๋ ํํฐ๋งํ ๋ชจ๋ ์ปฌ๋ผ์ ์ ํํ์ญ์์ค โ ๋ณํ์๋ ์๋ฌต์ ์ธ ํ์์คํฌํ ์ปฌ๋ผ์ด๋ ๋๋ฐ์ด์ค ์ปฌ๋ผ์ด ์์ต๋๋ค. ํ ๋ฒ์ ์ฝ๊ธฐ๋ ์ต๋ 3000ํ์ ๋ฐํํ๋ฏ๋ก ์ฟผ๋ฆฌ์์ ์ง๊ณํ์ญ์์ค.
๋ณํ์ ์ป๋ ๋ฐฉ๋ฒ์ด ์ฑ๊ณผ ํจ๊ป ๋ฐฐํฌํ๋ ๊ฒ๋ง ์๋ ๊ฒ์ ์๋๋๋ค: Data Access ๊ถํ์ด ์๋ ํ๋ก์ ํธ ๋ฉค๋ฒ๋ ์ฑ ์์ด๋ ํ๋ก์ ํธ์ ๋ฐ์ดํฐ ๋ทฐ์์ ๋์ผํ ์ข ๋ฅ์ ๋ณํ์ ์ ์ฅํ ์ ์์ผ๋ฉฐ, AI ์ด์์คํดํธ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ณํ์ ์ฐธ์กฐํ์ญ์์ค.
์ํฐํฐ์ ์ต์ ์ํ ์ถ์
์ค์ ์ํฐํฐ(๊ธฐ๊ณ, ์์ฐ, ์์ฐ ์ฃผ๋ฌธ)์ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ด๋ ํ ์ด๋ธ์ ๊ฒฝ์ฐ IronFlock์ **์ต์ ์ํ ์ถ์ (latest-state tracking)**์ด๋ผ๋ ํจํด์ ์ง์ํฉ๋๋ค.
๋ฌด์ธ๊ฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ํ์ ๋ฎ์ด์ฐ๋ ๋์ ํญ์ ์ ํ์ ์ถ๊ฐํฉ๋๋ค. ๊ณ ์ ํ ์ํฐํฐ๋ฅผ ์๋ณํ๋ ์ปฌ๋ผ์ ์ ์ธํด ๋๋ฉด, IronFlock์ด ํ ์ด๋ธ์ ์ฝ์ ๋๋ง๋ค ์ํฐํฐ๋ณ๋ก ๊ฐ์ฅ ์ต๊ทผ ํ์ ๋์ถํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ชจ๋ ๋ณ๊ฒฝ์ ์ ์ฒด ์ด๋ ฅ์ ๋ณด์ ํ๋ฉด์ ํ์ฌ ์ํ๋ง ์ฟผ๋ฆฌํ๋ ๊ฒ๋ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
maintainLatestFlagFor๋ก ํ
์ด๋ธ์์ ํ์ฑํํฉ๋๋ค:
- tablename: machineform
maintainLatestFlagFor: ['machinename']
columns:
- id: tsp
dataType: timestamp
- id: machinename
dataType: string
- id: machinetype
dataType: string
- id: active
dataType: boolean
- id: description
dataType: stringmaintainLatestFlagFor๋ ๊ณ ์ ํ ์ํฐํฐ๋ฅผ ํจ๊ป ์๋ณํ๋ ์ปฌ๋ผ ๋ชฉ๋ก์ ๋ฐ์ต๋๋ค. ํ ์์ฒด์๋ ์๋ฌด๊ฒ๋ ๊ธฐ๋ก๋์ง ์์ต๋๋ค. IronFlock์ ํด๋น ์ํฐํฐ ํค์ ํ์์คํฌํ๋ก ํ
์ด๋ธ์ ์ธ๋ฑ์ฑํ๊ณ , ์ฟผ๋ฆฌ ์์ ์ ์ํฐํฐ๋ณ๋ก ๊ฐ์ฅ ์ต๊ทผ ํ์ ์ ํํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฆ๊ฒ ๋์ฐฉํ๊ฑฐ๋ ์์๊ฐ ๋ค๋ฐ๋ ์ฑ ๋์ฐฉํ ํ์ด ์ค๋๋ ํ์๋ฅผ ๋จ๊ธฐ๋ ์ผ์ ๊ฒฐ์ฝ ๋ฐ์ํ์ง ์์ต๋๋ค.
๋ถ๋ถ ํ์ผ๋ก ์ํฐํฐ ์ ๋ฐ์ดํธํ๊ธฐ
์ํฐํฐ ํ ์ด๋ธ์ ์ถ๊ฐ๋๋ ํ์ ๊ทธ ์ํฐํฐ์ ์ ๋ฒ์ ์ ๋๋ค โ ๊ทธ๋ฆฌ๊ณ ๋ฐ๋์ ์์ ํ ํ์๋ ์์ต๋๋ค. ํ์ด ์ ๊ณตํ์ง ์๋ ์ปฌ๋ผ์ ํด๋น ์ํฐํฐ์ ์ง์ ์ต์ ํ์์ ๋ฌผ๋ ค๋ฐ์ผ๋ฏ๋ก, ํ๋ ํ๋๋ฅผ ์ ๋ฐ์ดํธํ๋ ค๋ฉด ์ํฐํฐ ํค, ํ์์คํฌํ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ํ๋๋ง ๋ฐํํ๋ฉด ๋ฉ๋๋ค:
| ์ ํ์ ์ปฌ๋ผ์ด | ์ ์ฅ๋ ๋ฒ์ ์ ๋ด๊ธฐ๋ ๊ฐ |
|---|---|
์ ๊ณต๋ ๊ฒฝ์ฐ (0, false, ""๋ ์ ๊ณต๋ ๊ฒ์ผ๋ก ์นฉ๋๋ค) | ์ ๊ณต๋ ๊ฐ |
๋ช
์์ ์ผ๋ก null์ธ ๊ฒฝ์ฐ | NULL โ ์ปฌ๋ผ์ด ๋น์์ง๋๋ค |
| ์๋ ๊ฒฝ์ฐ | ์ง์ ์ต์ ํ์ ๊ฐ |
์์ ๋๋ฉด ์ข์ ๋ ๊ฐ์ง ์ธ๋ถ ์ฌํญ์ด ์์ต๋๋ค:
- ๋ชจ๋ ์ปฌ๋ผ์ ์ ๊ณตํ๋ ํ์ ์ง์ ํ ์กฐํ๋ฅผ ์์ ๊ฑด๋๋ฐ๋ฏ๋ก, ์์ ํ ํ์ ์ง๊ธ๊น์ง์ ๋๊ฐ์ด ์ ๋ ดํฉ๋๋ค โ ๊ณ ๋น๋ ๊ฒฝ๋ก์์๋ ๊ณ์ ์์ ํ ํ์ ๋ณด๋ด์ญ์์ค.
- ์์์ ์๊ฐ ์์๋ฅผ ์กด์คํฉ๋๋ค. ๋ ์ค๋๋ ํ์์คํฌํ๋ฅผ ๋ฌ๊ณ ๋์ฐฉํ ํ(๋ฐฑํ)์ ์์ ์
tsp์ด์ ์ด๊ฑฐ๋ ๊ฐ์ ์์ ์ ํ์์๋ง ๋ฌผ๋ ค๋ฐ์ผ๋ฉฐ, ๋ ์๋ก์ด ํ์์๋ ๊ฒฐ์ฝ ๋ฌผ๋ ค๋ฐ์ง ์์ต๋๋ค.
maintainLatestFlagFor๊ฐ ์๋ ํ
์ด๋ธ์ ๋จ์ ์ถ๊ฐ ์๋ฏธ๋ก ์ ์ ์งํฉ๋๋ค: ํ์ด ์ ๊ณตํ์ง ์๋ ์ปฌ๋ผ์ NULL๋ก ์ ์ฅ๋ฉ๋๋ค.
ํ์ฌ ๊ธฐ๊ณ ์ํ๋ง ์ฟผ๋ฆฌํ๋ ค๋ฉด:
SELECT DISTINCT ON (machinename) *
FROM machineform
ORDER BY machinename, tsp DESCํน์ ๊ธฐ๊ณ์ ์ ์ฒด ์ด๋ ฅ์ ๋ณด๋ ค๋ฉด:
SELECT * FROM machineform WHERE machinename = 'Assembly-Line-01' ORDER BY tsp์ด ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ ์ผ์ ๊ฑฐ์ ์์ต๋๋ค. ์ด ํ
์ด๋ธ์ ์ฐ๊ฒฐ๋ ๋ณด๋์ ์์ ฏ์๋ ํํฐ ์ค์ ์ latest ํ ๊ธ์ด ์์ด ์ถ๊ฐ ์์
์์ด ์ฌ์ฉ์๊ฐ ํญ์ ํ์ฌ ๊ฐ์ ๋ณผ ์ ์์ต๋๋ค. SDK์์๋ filterAnd์ {"latest": true}๋ฅผ ์ถ๊ฐํ์ฌ ๋์ผํ ๋ชจ๋๋ฅผ ์์ฒญํฉ๋๋ค โ getHistory๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
latest_flag์์ ์ ๊ทธ๋ ์ด๋: ์ด์ ๋ฒ์ ์ IronFlock์latest_flag๋ผ๋ ๋ฌผ๋ฆฌ์ boolean ์ปฌ๋ผ์ ์ ์ฅํ์ต๋๋ค. ์ด ์ปฌ๋ผ์ ๋ ์ด์ ์กด์ฌํ์ง ์์ต๋๋ค โ ๋์ ํ์ฌ ์ํ๋ฅผ SQL์์ ๋์ถํ๋ฏ๋ก ํ์ด ์์์ ์ด๊ธ๋๊ฒ ๋์ฐฉํด๋ ๊ฒฐ๊ณผ๊ฐ ์ ํํ๊ฒ ์ ์ง๋ฉ๋๋ค.latest_flag = true๋ก ํํฐ๋งํ๋ ๊ธฐ์กด ๋ณด๋์ SDK ํธ์ถ์ ๊ณ์ ์๋ํฉ๋๋ค: IronFlock์ด ์ด๋ฅผ ์ธ์ํ์ฌ ์ต์ ์ํ ๋ชจ๋๋ฅผ ์ ์ฉํฉ๋๋ค. ์ ์ฝ๋์์๋ latest ํ ๊ธ ๋๋{"latest": true}ํํฐ ํญ๋ชฉ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ ์ฝ๋ ์ํํธ ์ญ์
IronFlock์ ์ถ๊ฐ ์ ์ฉ ๋ชจ๋ธ์์๋ ๋ ์ฝ๋๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ญ์ ๋์ง ์์ต๋๋ค. ๋์ deleted boolean ์ปฌ๋ผ์ ์ฌ์ฉํ์ฌ ๋ ์ฝ๋๋ฅผ ์ญ์ ๋ ๊ฒ์ผ๋ก ํ์ํฉ๋๋ค. ์ด๋ ์ ์ฒด ๊ฐ์ฌ ์ถ์ ์ ๋ณด์กดํ๋ฉด์ ์ญ์ ๋ ๋ ์ฝ๋๋ฅผ ๋์๋ณด๋์์ ์จ๊น๋๋ค.
๋ชจ๋ ์ํฐํฐ ํ
์ด๋ธ์ deleted ์ปฌ๋ผ์ ์ถ๊ฐํฉ๋๋ค:
- id: deleted
name: ์ญ์ ๋จ
dataType: boolean์ฌ์ฉ์๊ฐ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ ๋(์: ๋ณด๋์ ์์์ ํตํด) ์ฑ์ ํด๋น ์ํฐํฐ์ ๋ํด deleted: true๊ฐ ํฌํจ๋ ์ ํ์ ๋ฐํํฉ๋๋ค. maintainLatestFlagFor์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ด ์ ํ์ด ์ต์ ์ํ๊ฐ ๋ฉ๋๋ค. ์ดํ์ ๋ถ๋ถ ํ์ ๋ค๋ฅธ ์ปฌ๋ผ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก deleted ํ์๋ฅผ ๋ฌผ๋ ค๋ฐ์ผ๋ฏ๋ก, deleted๋ฅผ ์ธ๊ธํ์ง ์๋ ์
๋ฐ์ดํธ๊ฐ ์ํฐํฐ๋ฅผ ๋์ด๋ฆฌ์ง๋, ์จ๊ธฐ์ง๋ ์์ต๋๋ค.
ํ์ฑ(์ญ์ ๋์ง ์์) ํ์ฌ ๋ ์ฝ๋๋ง ์ฟผ๋ฆฌํ๋ ค๋ฉด:
SELECT * FROM (
SELECT DISTINCT ON (machinename) *
FROM machineform
ORDER BY machinename, tsp DESC
) latest
WHERE deleted IS NULL OR deleted = falsedeleted ๊ฒ์ฌ๋ ๊ธฐ๊ณ๋ณ ์ต์ ํ์ด ์ ํ๋ ๋ค์์ ์คํ๋ฉ๋๋ค. ์ด ์์๊ฐ ์ค์ํฉ๋๋ค: ์ญ์ ๋ ํ์ ๋จผ์ ๊ฑธ๋ฌ๋ด๋ฉด ์ด์ ์ ์ญ์ ๋์ง ์์ ํ์ด ํ์ฌ ์ํ๋ก ๋ค์ ๋ํ๋๊ฒ ๋ฉ๋๋ค.
๋ณด๋ ์์ ฏ๊ณผ SDK๋ ๋์ผํ ์์๋ฅผ ์๋์ผ๋ก ์ ์ฉํฉ๋๋ค โ latest ํ ๊ธ(๋๋ {"latest": true})์ deleted ํํฐ์ ์กฐํฉํ๋ฉด ์ ํํ ์ด ๋์์ด ๋ฉ๋๋ค. ์์ ์ ์ถ ์งํ ์ญ์ ๋ ๋ ์ฝ๋๊ฐ ๋์๋ณด๋์์ ์ฆ์ ์ฌ๋ผ์ง์ง๋ง, ์ด๋ ฅ ๋ฐ ๊ฐ์ฌ ๋ชฉ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๋จ์ ์์ต๋๋ค.
๋ค๋ฅธ ์ฑ๊ณผ ๋ฐ์ดํฐ ๊ณต์ ํ๊ธฐ
๋ฐ์ดํฐ ๋ฐฑ์๋๋ ์ฑ ์ ์ฉ์
๋๋ค. ํ๋ก์ ํธ์ ์ค์น๋ ๋ค๋ฅธ ์ด๋ค ์ฑ๋ ์ฌ๋ฌ๋ถ์ ํ
์ด๋ธ์ ๋ณผ ์ ์์ต๋๋ค. data-template.yml์ ์ ํ์ ํค ๋ ๊ฐ๊ฐ ์ด๋ฅผ ๋ฐ๊ฟ๋๋ค.
๋ค๋ฅธ ์ฑ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ ค๋ฉด, ์ฝ์ด์ฌ ์ฑ๋ค์ ์ต์์ consumes: ์น์
์ ๋์ดํฉ๋๋ค. data: ์์ด ์๋๋ผ ๊ทธ ์์ ๋ก๋๋ค.
consumes:
- app: machine-monitor
reason: "๋ชจ๋ํฐ์ ๊ธฐ๊ณ ์ํ ๋ฐ ์นด์ดํฐ ์คํธ๋ฆผ์์ OEE๋ฅผ ๊ณ์ฐํฉ๋๋ค"
data:
tables:
- tablename: oee_results
columns:
# ... ํ์์ ๊ฐ์ด ์ฑ ์์ฒด ํ
์ด๋ธapp์ ์ ๊ณต ์ฑ์ ๊ธฐ์ ์ด๋ฆ์ด๊ฑฐ๋, ํ๋ก์ ํธ ๋ด ๋ชจ๋ ์ฑ์ ์๋ฏธํ๋ "*"(๋ฐ์ดํ ํ์)์
๋๋ค. reason์ ๋์ ๋ํ์์์์ ์ฌ์ฉ์์๊ฒ ํ์๋ฉ๋๋ค. ์ ์ธ๋ง์ผ๋ก๋ ์๋ฌด๊ฒ๋ ํ์ฉ๋์ง ์์ผ๋ฉฐ ์ฌ์ฉ์์ ์น์ธ์ด ์์ด์ผ ํฉ๋๋ค.
๊ฐ๋ณ ํ
์ด๋ธ์ ๋น๊ณต๊ฐ๋ก ๋๋ ค๋ฉด private: true๋ก ํ์ํฉ๋๋ค. ์ ์ํ ๋ชจ๋ ๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณต์ ๊ฐ๋ฅํ์ง๋ง, ๋น๊ณต๊ฐ ํ
์ด๋ธ์ด๋ ํธ๋์คํผ์ ๋ค๋ฅธ ์ฑ์ด ๋ณด๋ ์นดํ๋ก๊ทธ์ ์ ํ ๋ํ๋์ง ์์ต๋๋ค.
data:
tables:
- tablename: measurements # ๊ณต์ ๋จ(๊ธฐ๋ณธ๊ฐ)
columns: [ ... ]
- tablename: calibration_state # ๋ด๋ถ์ฉ โ ๋ค๋ฅธ ์ฑ์๋ ์ ๋ ๋ณด์ด์ง ์์
private: true
columns: [ ... ]์ ๊ทผ ๊ถํ์ ์ฝ๊ธฐ ์ ์ฉ์ด๋ฉฐ, ํ๋ก์ ํธ๋ณ๋ก ์ฌ์ฉ์๊ฐ ๋ถ์ฌํ๊ณ ์ธ์ ๋ ์ง ์ฒ ํํ ์ ์์ต๋๋ค. ์ ์ฒด ๋ชจ๋ธ๊ณผ ์ ๊ณต ์ฑ์ ์ด๋ ฅยท๋ผ์ด๋ธ ์คํธ๋ฆผ์ ์ฝ๋ SDK ํธ์ถ์ ๋ค๋ฅธ ์ฑ์ ๋ฐ์ดํฐ ์ฌ์ฉ์ ์ฐธ๊ณ ํ์ธ์.