ENDING_SCREEN DATA_SOURCES - zero1ne-26/doc GitHub Wiki
์์ฑ์ผ: 2026-10-01 ยท ์ํ: ยง2 AยทB ๊ตฌํ ์๋ฃ (2026-10-02, ๋ง์ด๊ทธ๋ ์ด์ 138) โ ํ ํฝ ๋ช ์ธ๋
MQTT_SCHEMA-ORCHESTRATION_SERVERยง5-2. ยง1 ์ฐจ๋ 3ํ๋๋ 147 ๋ก ๋๋ค(2026-10-03). ยง2 CยทD ยท ยง4 ๊ฒฐ์ ์ฌํญ์ ์์ง์ด๋ค. ํ๋ฉด โ ํ๋ ๋งคํ์ ยง0-1.์ ๋ ฅ ์๋ฃ: ๊ธฐํ
์๋ฉ ๊ฐ์ด๋_261001.pptx(14์ฅ). ์์ฒญ์ ๋์ด๋ค โ โ ์ธ์ ์ฌ์ฉ์ ์ ๋ณด์ ์ฐจ๋ 3ํ๋ ์ถ๊ฐ(๊ฒฌ์ ยท์์์ถฉ์ ยท์ถ๊ณ ํ์ธ ํ๋ฉด์ ์ฐจ์ข ๋ถ์ผ์น ํด์), โก ์ธ์ ์ข ๋ฃ ์ ๋ณด์ฌ ์ค ์๋ฉ ํ๋ฉด 5์ข .์ด ๋ฌธ์๋ ๊ทธ ํ๋ฉด๋ค์ด ์๊ตฌํ๋ ๊ฐ์ ์ง๊ธ ์๋ฒ๊ฐ ์ค ์ ์๋์ง๋ง ๋ฐ์ง ๊ฒ์ด๋ค. ์ฝ๋๋
orchestration-server26313db๊ธฐ์ค์ผ๋ก ์ฝ์๊ณ , ์ถ์ธกํ ๊ฒ์ ์ ์ง ์์๋ค.
| ํญ๋ชฉ | ์ด๋์ |
|---|---|
์๋ฉ ํ ํฝ orchestration/{sessionId}/ending (retained, ์ข
๋ฃ ์ 1ํ) |
internal/mqttx/session_ending.go, ๋ช
์ธ ยง5-2
|
| ยง2-A ์ ๋ถ โ ์ด๋ฆยท๋๋ฐ์ยท์ธ์ ์๊ฐยท์ฑํฅ ์นฉ(์์ด)ยท์ฌ์ ยทAI ๋ฐฐ๋ คยทํ์คํฌ ์ง๊ณยท์ธํยทํ์ ยท๊ตฌ๋งค | ๊ฐ์ ํ์ผ. /context ๋น๋ ์ฌ์ฌ์ฉ |
| ยง2-B ์ ๋ถ โ ๋ฐํ ์ฅ์ยท์ฐจ ๋ชจ๋ ๊ตฌ๋ถยท์๊ธฐ์๊ฐ ์ ์ฅยท์ธ์ ๋ณ ๋ช ๋ น ๋ก๊ทธ ์ฟผ๋ฆฌ | ๋ง์ด๊ทธ๋ ์ด์
138 (ai_messages.sourceยทlocation_id) |
๋ฐํ ์์ โ ended_at โ ์๋ฉ โ /context ์ญ์ |
internal/mqttx/end_session.go ๋ ๊ฒฝ๋ก ๋ชจ๋ |
| ์ด๋๋ฏผ ๋ฏธ๋ฆฌ๋ณด๊ธฐยท์ฌ๋ฐํ |
GET/POST /api/admin/users/:id/ending[/publish], ์ธ์
์์ธ "์๋ฉ" ํญ |
| ์ฐจ๋ ๋ง์คํฐ โ ๋ธ๋๋ยท๋ชจ๋ธยทํธ๋ฆผยท์ด๋ฏธ์งยท์ค๋ช (๋ฉํ์ ๋ณด) (2026-10-02) | ๋ง์ด๊ทธ๋ ์ด์
139ยท140 vehicles, GET/POST/PUT/DELETE /api/admin/vehicles, ๋ฐฑ์คํผ์ค "์คํ ์ด์ ๋ฏธ๋์ฐจ โบ ์ฐจ๋". ์์ยทํค/๊ฐ ๋ฉํยทํ์ ์์๋ ์ฐ์ง ์๊ธฐ๋ก ํจ |
์๋ฉ ๋ฉํธ ending_line (2026-10-02) |
145. ์ฑ ์ค์ ending_line_prompt, ์ข
๋ฃ ์งํ ๋ฐ์ดํฐ ๋ฐํ โ LLM ๋ฉํธ ์ค๋ฉด ๊ฐ์ ํ ํฝ์ ์ฑ์ 2์ฐจ ๋ฐํ (ยง5-2) |
์ถ์ฒ ์ฐจ ์ง์ โ ๊ฒฌ์ ๋ธ๋ฆฌํ LLM ์ด {{vehicle_list}} ๋ฅผ ์ฝ๊ณ ํ ๋ ๊ณ ๋ฆ โ user_vehicles(role=recommended)
|
140. ๋์๋ณด๋ quote_briefingยทvehicle_ready ํ์คํฌ์ vehicle ํ๋, ์๋ฉ vehicles, ์ด๋๋ฏผ GET/PUT/DELETE /api/admin/users/:id/vehicles/:role
|
์ฐจ๋ 3ํ๋ ์๋ ์ฑ์ + /me (2026-10-03, 147) |
current = ์ธ์
์์ฑ ์ ์ฑ ์ค์ session_current_vehicle_id(๊ธฐ๋ณธ ๋ฅ์, ๋น์ฐ๋ฉด ์์) ยท recommended ํ์ = ๊ฒฌ์ ๋ธ๋ฆฌํ ํ์คํฌ ์๋ฃ(confirmed_at) ยท delivered = ์ถ๊ณ ์ค๋น(vehicle_ready) ํ์คํฌ ์๋ฃ ์ ์ถ์ฒ ์ฐจ ๋ณต์ฌ. ์
๋ค orchestration/{sessionId}/me ์ vehicles ๋ก ๋ด๋ ค๊ฐ๊ณ ๋ฐ๋๋ฉด ์ฌ๋ฐํ (ยง7) |
| ํ์ ยท์ถ๊ณ ์ด๋ฒคํธ (2026-10-03, 147) | ์ ํ ํฝ ์์ด ๊ธฐ์กด ์ ํธ์ ๊ฑธ์๋ค โ ๊ฒฌ์ "์ฃผ๋ฌธํ๊ธฐ" = ๊ฒฌ์ ๋ธ๋ฆฌํ ํ์คํฌ task/complete, 18:15 ์ถ๊ณ ํ์ธ = ์ถ๊ณ ์ค๋น ํ์คํฌ task/complete. FE ๊ฐ ์ด๋ฏธ ๋ณด๋ด๋ ๊ฒ. ์ด๋๋ฏผ ๊ฐ์ ์๋ฃ๋ ๊ฐ์ ๊ธธ |
| AI ๊ฐ ์ค๋ ํ ๋ง ์ ์ฒด (2026-10-03, 147) |
user_narratives โ ai/summary ๋ฐํ๋ง๋ค ์ ์ฅ. ์๋ฉ narratives[] ๊ฐ ์ ์ฒด(์ฅ์ยท์๊ฐ ํฌํจ)๋ฅผ ์ฃ๊ณ ์ฌ๋ฐํ๋ณธ์๋ ๊ทธ๋๋ก (ยง5-2) |
| ๋ฏธ๋์ฐจ ์ฃผํ ์ด๋ ฅ (2026-10-03, 147) |
user_vehicle_steps โ future-car/response route/state ์์ ๋ง๋ค ์ ์ฅ. ์๋ฉ vehicle_history[]
|
| # | ํญ๋ชฉ | ์ง๊ธ ์ํ | ๋งํ ์ด์ / ํ์ํ ๊ฒ |
|---|---|---|---|
| 1 |
vehicle.current / recommended / delivered |
์
๋ค ์ฝ๋๊ฐ ์ฑ์ฐ๊ณ /me ์ ์ค๋ฆฐ๋ค |
๋จ์ ๊ฒ์ ์ถ์ฒ ๊ท์นํ(2๋ฒ) โ ์ง๊ธ ์ถ์ฒ์ LLM ์ด ๊ณ ๋ฅธ๋ค |
| 2 | ์ถ์ฒ ๊ท์นํ (์์ดโ์นด๋๋ฐ / ๋ถ๋ชจ๋โํฐ๋ฆฌ์ธ์ด๋ / ๋ฐ๋ ค๋๋ฌผยท์บ ํโ์ผํํยทEV9 / ์์ผ๋ฉด ์์ด์ค๋6) | ์
๋ ฅ๊ฐ ์ค ์๋
๋ง ์ปฌ๋ผ. ๋ถ๋ชจ๋ ๋๊ฑฐยท๋ฐ๋ ค๋๋ฌผ์ users.description ์์ ํ
์คํธ |
ยง4-1 ๊ฒฐ์ ํ์ โ ์ค๋ฌธ ๋ฌธํญ ๊ณ ์ + ์ปฌ๋ผ ์ถ๊ฐ(๊ถํจ) / LLM ์ถ์ถ / ์ค๋ฌธ ํค ๊ณ ์ |
| 3 |
|
๊ฒฌ์ ๋ธ๋ฆฌํยท์ถ๊ณ ์ค๋น ํ์คํฌ์ task/complete ์ ๊ฑธ์๋ค |
FE ๋ "์ฃผ๋ฌธํ๊ธฐ"/"์ถ๊ณ ํ์ธ" ๋ฒํผ์ด ํด๋น ํ์คํฌ๋ฅผ ์๋ฃ ์ฒ๋ฆฌํ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ๋ณ๋ ํ ํฝ์ด ๊ผญ ํ์ํ๋ฉด ๊ทธ๋ ์ถ๊ฐ |
| 4 |
|
vehicles.image_url / video_url ์ ์ด๋๋ฏผ์ด ์ฌ๋ฆฐ๋ค |
๋จ์ ๊ฒ์ FE ๊ฐ vehicle.*.model ๋์ vehicles.id ๋ก ์์
์ ์ฐพ๊ฒ ํ๋ ๊ฒ โ 1๋ฒ๊ณผ ๊ฐ์ด |
| 5 |
|
์ฑ ์ค์ ending_line_prompt, 2๋จ๊ณ ๋ฐํ(๋ฐ์ดํฐ ๋จผ์ โ ๋ฉํธ ์ฑ์ ์ฌ๋ฐํ) |
๊ธธ์ด๋ 20์ ์๊ตฌยท30์ ์ํ. ํ๋กฌํํธ ์๋ณด๊ธฐ๋ ์ฑ ์ค์ ์์ |
| 6 |
์ฐ๋๋ณ ์นด๋ (1ยท2ยท3๋
ํ โ ์ด๋ฒคํธยท์ํฉยทAI ํ๋ยท๋ชจ๋ 5์ข
, ์ฒ์ ๋ง๋ ๋ ์ moments[]) |
โ
2026-10-09 โ ์๋ฉ years[] (LLM ์์ฑ, 158ยท159), ๋ฐฐ๊ฒฝ์ years[].theme_key. ๋ชจ๋๋ ๋ฐฑ์คํผ์ค "์ผ์ด ๋ชจ๋"(care_modes, theme_keyยทdescription_prompt) |
์๋ฃ โ LLM ์์ฑ์ผ๋ก ๊ฒฐ์ . ๋ชจ๋๋ ์ด๋๋ฏผ ๊ด๋ฆฌ |
| 7 | N๋ ํ ๋์ kmยท๋ ์ง ๋๋ฏธ | ์์ | ยง4-4 ๊ฒฐ์ ํ์ โ ์์ฑ ๊ท์น์ ๊ธฐํ์ด ์ค์ผ ํจ |
| 8 |
|
user_narratives, ์๋ฉ narratives[] ์ ์ฒด |
147 ์ด์ ์ธ์ ์ ์๊ธ ์ ๋จ(๋ฉ๋ชจ๋ฆฌ ์ต๊ทผ 5๊ฐ) |
| 9 |
|
user_vehicle_steps, ์๋ฉ vehicle_history[]
|
147 ์ด์ ์ธ์ ์ ์๊ธ ์ ๋จ |
| 10 | ์ฑํฅ ์นฉ ๋ถ๋ชจ๋ยท๋ฐ๋ ค๋๋ฌผ | โ
2026-10-09 โ ์ธ์
์์ฑ ๋ LLM ํ๋ณ(157) โ traits[] ์ lives_with_parentsยทhas_pet
|
์๋ฃ (์ถ์ฒ ๊ท์นํ 2๋ฒ์ ์์ง โ ํ๋ณ๊ฐ์ user_traits ์ ์์ด ๊ท์นํ ์
๋ ฅ์ผ๋ก ์ธ ์ ์๋ค) |
138 ์ด์ ์ ๋ง๋ค์ด์ง ์ธ์ ์ ์๊ธ๋์ง ์๋๋ค โ ๋ฐํ๊ฐ
source=chatยท์ฅ์ ์์์ผ๋ก ๋ณด์ด๊ณ ์๊ธฐ์๊ฐ๋ ์๋ค.
๋จ์ ๊ฒ์ ์ ๋ถ ๊ธฐํ ๊ฒฐ์ ์ด ํ์ํ ๊ฒ์ด๋ค โ 2(์ถ์ฒ ๊ท์นํ ์
๋ ฅ๊ฐ)ยท10(์ฑํฅ ์นฉ)์ ยง4-1, 6(์ฐ๋๋ณ ์นด๋)์ ยง4-3, 7(km ๋๋ฏธ)์ ยง4-4. ์๋ฒ๋ง์ผ๋ก ํ ์ ์๋ ๊ฒ์ 2026-10-03 ๊ธฐ์ค ๋ค ํ๋ค. 4๋ฒ์ FE ์ชฝ(์์
์ vehicles.id ๋ก ์ฐพ๊ธฐ)์ FE ๋ชซ.
"์๋ฉ ๊ฐ์ด๋_261001.pptx" ์ ํ๋ฉด ๋ฒํธ(์ฌ๋ผ์ด๋์ ์ฐํ โ โกโขโฆ)๋ฅผ orchestration/{sessionId}/ending ํ์ด๋ก๋ ํ๋์ ํ๋์ฉ ๋ถ์๋ค.
ํ๋ ํ์
ยท์ค๋ช
์ ยง5-2. ์๊ฐ์ ์ ๋ถ RFC3339 KST ๋ผ ํ๋ฉด ํ๊ธฐ(2026.09.30 22:16, 13m 05s)๋ FE ๊ฐ ํฌ๋งทํ๋ค.
| # | ํ๋ฉด ์์ | ์์ | ํ๋ | ๋น๊ณ |
|---|---|---|---|---|
| โ | ์ฌ์ฉ์ ์ด๋ฆ ยท AI ํ๋ฅด์๋ | ์ฌํ์๋ ยท ๋๋ํ ๋น์ |
user.username ยท companion.title
|
์๋ฐํ companion.avatar_url, ์ฌ์ฉ์ ์ฌ์ง user.user_images[type=default]
|
| โ | ์ฑํฅ ์นฉ (์ฐ์๋จ) |
๋ถ๋ชจ๋๊ณผ ์์ด ๋ฐ๋ ค๋๋ฌผ
|
traits[] |
ํ๋ฉด ์์๋ก ์จ๋ค: lives_with_parentsโ๋ถ๋ชจ๋๊ณผ, has_childrenโ์์ด, has_petโ๋ฐ๋ ค๋๋ฌผ. ์์ด๋ DB ์ปฌ๋ผ, ๋๋จธ์ง๋ ์ธ์
์์ฑ ๋ LLM ์ด ๋ฉํ ๋ต + ์๊ธฐ์๊ฐ๋ก ํ๋ณ(157) |
| โก | ์ฒ์ ๋ง๋ ๋ ยท ์๊ฐ | 2026.09.30 22:16 ยท ์ฒ์ ๋ง๋ ๋ |
session.started_at |
ํ๋จ SINCE 2026.09.30 ์ session.since_date (์ด๋ฏธ YYYY.MM.DD) |
| โข | TOGETHER ์ด ์ธ์ ์๊ฐ | 13m 05s |
session.duration_sec |
785 โ 13m 05s. session.ended_at ๋ ์์ |
| โฃ | VEHICLE ์ฐจ๋ ๊ณ๋ณด |
๋ฅ์ โ ํฌ์ผ, ํฌ์ผ ยท ์ค๋ ์ถ๊ณ
|
vehicles.current.model โ vehicles.delivered.model
|
delivered ์์ผ๋ฉด vehicles.recommended.model (์ถ๊ณ ์ฐจ = ์ถ์ฒ ์ฐจ). "์ค๋ ์ถ๊ณ " ๋ ์ง๋ vehicles.delivered.set_at. ์ด๋ฏธ์ง vehicles.<role>.image_url, ๋ธ๋๋ brand. ์ค๋์ 0 km ๋ ๋๋ฏธ โ ์๋ฒ๊ฐ ๊ฑฐ๋ฆฌ๋ฅผ ๋ชจ๋ฅธ๋ค. ๊ตณ์ด ์ฐ๋ ค๋ฉด vehicle_history[] ๊ธธ์ด(์คํ
์) |
| โค | ๋ฐํ 3์ค [์๋ฆฌ] "๋งํ ๋ด์ฉ"
|
์ฐจ์์ "์กฐ์ฉํ", ์ฒ์์ "๋ถ๋ชจ๋๊ณผ ์ด์์"
|
moments[] โ place + text
|
2026-10-09 ๋ถํฐ ํ ํฝ utterances[] ๋ ์ฐจ์์ ํ ๋ง๋ง ์จ๋ค โ ์ ์ฒด ๋ฐํ๋ moments[]. ์ต๊ทผ 3๊ฐ = ๋ฐฐ์ด ๋ค์์ 3๊ฐ(์๊ฐ์). ์๋ฌธ ์๋ฆฌ๋ source(intro|car|chat)ยทlocation_name
|
| โฅ |
โ AI ๊ฐ ํ ๋ฐฐ๋ ค ํ ์ค |
์ง์ ์ค๋ ๋ก๋ด์ด ๋ง์์ด ๊ณต๊ธฐ๋ง ๋ฐ๊ฟ๋์ด์ |
moments[] โ response
|
2026-10-09 ๋ถํฐ care[] ๋ ํ ํฝ์์ ๋น ์ก๋ค. ๊ทธ ๋ง์ ๊ท์น ์ง ์์ฌ๋ฃ๋ moments[].care[]
|
| โค+โฅ | ๋ฐํ โ ๋ฐฐ๋ ค ์ง | ํ ์ค์ "์กฐ์ฉํ" โ ๊ณต๊ธฐ๋ง ๋ฐ๊ฟ๋์ด์
|
moments[] โ place + text โ response (2026-10-09) |
์๋ฒ๊ฐ ์ง์ ๋ง์ถ๋ค. ์ต๊ทผ ๋ฐํ ์ต๋ 6๊ฐ(์๊ฐ์, ํ๋ฉด์ ๋ค 3๊ฐ)๋ง๋ค response ํ ๋ฌธ์ฅ. LLM ์ด ์๊ฑฐ๋ ์คํจํ๋ฉด ๊ท์น ์ง(response_source: "rule" โ ๊ทธ ๋ง ๋ค ~ ๋ค์ ๋ง ์ ๊น์ง ํ ์ผ์ ์ฒซ ๋ฌธ์ฅ), ๋ณดํต์ ๋ฐํ ์ ์ LLM ์ด ๋ฐํยทํด ์ค ์ผ ์ ์ฒด๋ฅผ ๋ณด๊ณ ์ด ๋ฌธ์ฅ("llm", ์ฑ ์ค์ ending_moment_prompt)์ด ๋ค์ด๊ฐ๋ค โ ์๋ฉ์ LLM ๋ณด๊ฐ ๋ค ํ ๋ฒ๋ง ๋ฐํ๋๋ค(2026-10-10). ๋ง๋ ๊ฒ ์์ผ๋ฉด "". ๊ท์น ์ง ์์ฌ๋ฃ๋ moments[].care[]. |
| # | ํ๋ฉด ์์ | ์์ | ํ๋ | ๋น๊ณ |
|---|---|---|---|---|
| โ | N YEARS LATER |
3 YEARS LATER |
์์ (FE ๊ณ ์ 1โ2โ3) | โ |
| โก | ๋์ km ยท ์ฐจ์ข
ยท n๋
|
24,318 km, ํฌ์ผ ยท 3๋
|
km: ์์ (ยง4-4 ๋๋ฏธ ๊ท์น ๋๊ธฐ) ยท ์ฐจ์ข
: vehicles.delivered.model
|
โ |
| โข |
n years ยท nnnn์ผ์งธ
|
3 years, 1,095์ผ์งธ
|
์์ (FE: nร365) |
SINCE ๋ session.since_date
|
| # | ํ๋ฉด ์์ | ์์ | ํ๋ | ๋น๊ณ |
|---|---|---|---|---|
| โ | 1 YEAR LATER |
์์ (FE ๊ณ ์ ) | ||
| โก | ์ผ์ ์ด๋ฒคํธ ์ ๋ชฉ | ์ฒซ ๊ฐ์กฑ ์ฌํ |
์์ โ ยง4-3 ๊ฒฐ์ ๋๊ธฐ (์ด๋๋ฏผ ํ ํ๋ฆฟ ๊ถํจ vs LLM) | ์ฑํฅ ์นฉ(traits[])ยท์ฐจ(vehicles)ยท๋ฐํ(utterances)๊ฐ ์
๋ ฅ์ด ๋ ์ ์๋ค |
| โข | ์ํฉ | ๋ท์ข์์ ์์ด๊ฐ ์ ๋ ์ ๋
|
์์ (โก์ ๊ฐ์ด) | |
| โฃ | AI ๊ฐ ํ ํ๋ | ์ ๋ค๋ฉด ์์
์ ๋ฎ์ถฐ์. |
years[].action (2026-10-09) |
์ค๋ ํ ์ผ(์๋ฒ ์์ ๋ฐฐ๋ ค ๊ธฐ๋ก)์ LLM ์ด ์ด์ด์ ์ด๋ค |
| โค | ๋ชจ๋(๋ฐฐ๊ฒฝ์) 5์ข | ์ฆ๊ฑฐ์ด ์๊ฐ / ์ฐ์ธํจ / ๊ธด์ฅ / ์์ / ์ผ์ด | ์์ (โก์ ๊ฐ์ด) | ๊ฐ์ฅ ๊ฐ๊น์ด ๊ธฐ์กด ๊ฐ์ emotions.dominant(๊ด๋๊ฐ ํ์ ์ต๋น๊ฐ joy|surprise|neutral|anger) โ ๋ชจ๋์ 1:1 ์ ์๋๋ค |
| ํ๋ฉด ์์ | ํ๋ |
|---|---|
๋ ์ง ยท ์ฐ๋ฆฌ์ ์ฒซ ๋ฒ์งธ ํ๋ฃจ ยท ์๊ฐ
|
session.since_date ยท session.ended_at
|
๊ทธ๋ ์ฐจ์์ ์ฒ์ ํ์ ๋ง โ "์กฐ์ฉํ" |
utterances[0].text โ ํ ํฝ utterances[] ๋ ์ฐจ์์ ํ ๋ง(source == "car")๋ง ์จ๋ค (2026-10-09) |
AI ์ผ๊ธฐ์์ ์ค๋ ๋ค์ ๋ณด๊ธฐ |
narratives[] (AI ๊ฐ ์ค๋ ํ ๋ง ์ ์ฒด, ์๊ฐ์, 147) |
| # | ํ๋ฉด ์์ | ํ๋ | ๋น๊ณ |
|---|---|---|---|
| โ | ์๋ฉ ๋ฉํธ 20์ | ending_line |
2์ฐจ ๋ฐํ์ผ๋ก ์จ๋ค โ ์ข
๋ฃ ์งํ 1์ฐจ๋ "", LLM ์ด ์ฐ๋ฉด ๊ฐ์ ํ ํฝ(retained)์ ์ฑ์ ๋ค์. FE ๋ ending_line ์ด ๋น์ด ์์ผ๋ฉด ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ฐ๋๋ฉด ๊ทธ๋ฆฐ๋ค. ํ๋กฌํํธ๋ ์ฑ ์ค์ ending_line_prompt
|
ํ์ฌ ์ฐจ / ์ถ์ฒ ์ฐจ์ ์ด์ / ์ถ๊ณ ์ํ ์ธ ์ค โ orchestration/{sessionId}/me ์ vehicles.current ยท vehicles.recommended(reason, confirmed_at=์ฃผ๋ฌธํ๊ธฐ ํ์ ) ยท vehicles.delivered(ยง7, 147). ์ฐจ๋์ด ๋ฐ๋๋ฉด ์ฌ๋ฐํ.
task_counts(์๋ฃ/๊ฑด๋๋/์งํ/๋๊ธฐ ์) ยท journey[](์ฅ์ ์์ยทํ์คํฌ ๊ฒฐ๊ณผยท์ด๋ฒคํธ ์ฒ๋ฆฌ) ยท emotions ยท vehicle(๋ฏธ๋์ฐจ ๋ง์ง๋ง ์คํ
) ยท intro_message(์๊ธฐ์๊ฐ ์๋ฌธ) ยท user.description/gender. ์ฐ๋๋ณ ์นด๋๋ ๋ฉํธ๋ฅผ ๋ง๋ค ๋ ์ฌ๋ฃ๋ก ์ฐ๋ผ๊ณ ๋ฃ์ด ๋๋ค. (care[]ยทdevice_commands[]ยทdevice_log_countsยทpurchases[] ๋ 2026-10-09 ํ ํฝ์์ ๋บ๊ณ , utterances[] ๋ ์ฐจ์์ ํ ๋ง๋ง ๋จ๊ฒผ๋ค.)
๊ธฐํ ์ง์ : ์ง๊ธ ์ฌ์ฉ์ ์ ๋ณด์ "ํ์ฌ ์ฐจ"์ "์ถ์ฒ ์ฐจ"๊ฐ ์์ด ํ๋ฉด๋ง๋ค ๋ค๋ฅธ ์ฐจ๊ฐ ๋ฌ๋ค. ๊ฒฌ์ ํ๋ฉด ํ์ด๋ก๋ ์๋ฐ๋ผ, ๊ฐ์ ์์น์ EV9, ์ถ๊ณ ํ์ธ์ ํ๋ ์ธํ ๋ฆฌ์ด์ ๊ธฐ์ ์์์ด๋ค. ์์ ์ถฉ์ ํ๋ฉด์ ๋ฅ์๋ ์ถ์ฒ๊ฐ ์๋ค.
์๊ตฌ๊ฐ:
| ํ๋ | ๋ด์ฉ |
|---|---|
vehicle.current |
์๋๋ฆฌ์ค ์์ ๋ฅ์ (08:00 ์์ ์ถฉ์ ํ์คํฌ๊ฐ ์์ด ์ค๋ฌธ์ผ๋ก ๊ณ ๋ฅด์ง ์์) |
vehicle.recommended |
{model, trim, reason, at} |
vehicle.delivered |
{model, at}, model ์ recommended ์ ๋์ผ |
์ถ์ฒ ๊ท์น (LLM ์๋, ์ฝ๋):
| ์กฐ๊ฑด | ์ถ์ฒ |
|---|---|
| ์์ด ์์ | ์นด๋๋ฐ |
| ๋ถ๋ชจ๋ ๋๊ฑฐ | ํฐ๋ฆฌ์ธ์ด๋ |
| ๋ฐ๋ ค๋๋ฌผยท์บ ํ | ์ผํํ ๋๋ EV9 |
| ํด๋น ์์ | ์์ด์ค๋ 6 |
์กฐํฉ ์ ์ฐ์ ์์๋ ์์ด > ๋ถ๋ชจ๋ > ๋ฐ๋ ค๋๋ฌผ. ๊ฒฐ๊ณผ๊ฐ current ์ ๊ฐ์ผ๋ฉด ๋ค์ ํ๋ณด๋ก.
๋ฐ์์ผ ํ ์ด๋ฒคํธ ๋: ๊ฒฌ์ ํ๋ฉด "์ฃผ๋ฌธํ๊ธฐ" โ recommended ํ์ , 18:15 ์ถ๊ณ ํ์ธ โ delivered.
users ํ
์ด๋ธ์ ์ฐจ๋ ํ๋๊ฐ ์๋ค. ์ ์ฅ์ ์ ์ฒด์์ car_modelยทvehicle_model ๋ฅ ์๋ณ์๋ ์๋ค.
์ธ์
์ ๋ถ๋ "์ฐจ" ๋น์ทํ ๋ฐ์ดํฐ๋ ํ์คํฌ ๋จ์ LLM ์บ์ ๋๋ฟ์ด๊ณ (user_task_vehicle_ready,
user_task_vehicle_options) ์ฐจ์ข
ยท์ด๋ฏธ์ง๊ฐ ๋ค์ด ์์ง ์๋ค.
์ฌ์ฉ์ ์ ๋ณด๋ orchestration/{sessionId}/me (retained) ๋ก ๋๊ฐ๋ค. ์ค๋ฆฌ๋ ๊ฐ์ ์ด๋ฆ, ์ฑ๋ณ,
์๋
์ ๋ฌด, AI ๋๋ฐ์, ์ฌ์ฉ์ ์ฌ์ง, ํ์ฌ ํ์ ์ด๋ค. ์ฐจ๋ ์๋ฆฌ๋ ์๋ค.
๋งํ๋ ๊ฒ โ ์ถ์ฒ ๊ท์น์ ์
๋ ฅ๊ฐ์ด ๋ชจ์๋๋ค. ์ธ ์กฐ๊ฑด ์ค ์๋
์ ๋ฌด๋ง ์ ๋๋ก ๋ ์ปฌ๋ผ์ด๊ณ
(users.has_children), ๋ถ๋ชจ๋ ๋๊ฑฐ์ ๋ฐ๋ ค๋๋ฌผยท์บ ํ์ ์ค๋ฌธ ๋ต์ด users.description ์์
ํ
์คํธ์ ์์ฌ ๋ค์ด๊ฐ ๋ฟ์ด๋ค. ์ค๋ฌธ ๋ฌธํญ ํ
์ด๋ธ(user_meta_prompts.effect)์ด has_children
ํ๋๋ง ํ์ฉํ๋๋ก CHECK ์ ์ฝ์ด ๊ฑธ๋ ค ์๋ค.
์ ํ์ง ์ :
-
์ ์ฝ์ ํ๊ณ ์ปฌ๋ผ์ ๋ ๋๋ค (
lives_with_parents,has_pet๋ฑ) โ ๊ถํจ - ์์ ํ ์คํธ๋ฅผ LLM ์ผ๋ก ๋ฝ๋๋ค โ ๊ธฐํ์ด "LLM ์๋, ์ฝ๋"๋ผ๊ณ ๋ชป๋ฐ์
- ์ค๋ฌธ ๋ฌธํญ์ ๊ณ ์ ํค๋ก ๋ฐ๊พผ๋ค
1๋ฒ์ ํ๋ ค๋ฉด "์ค๋ฌธ ๋ฌธํญ 3๊ฐ๋ ๊ณ ์ "์ด๋ผ๋ ํฉ์๊ฐ ํ์ํ๋ค.
์ฐจ์ข ๋ณ ์์ ๋ ์๋ค. ์ถ์ฒ ๊ฒฐ๊ณผ๊ฐ ์นด๋๋ฐยทํฐ๋ฆฌ์ธ์ด๋ยท์ผํํยทEV9ยท์์ด์ค๋6 ์ค ํ๋์ธ๋ฐ, ๊ทธ ์ฐจ์ข ์ ์ด๋ฏธ์งยท์์์ ์ด๋์ ๋๋์ง๊ฐ ์ ํด์ ธ ์์ง ์๋ค. ๊ธฐํ์ด "ํ๋/๊ธฐ์ ๋ณ๋ก ์์์ด ๋ถ๋ฆฌ๋์ด์ผ ํ ๊ฒ ๊ฐ๋ค"๊ณ ์ ์ ๊ฒ์ด ์ด ๋ฌธ์ ๋ค.
| ํ๋ฉด | ๋ด๊ธฐ๋ ๊ฒ |
|---|---|
| ์ฒซ ํ๋ฉด | ์ด๋ฆยทํ๋ฅด์๋, ์ฑํฅ ์นฉ, ์ฒ์ ๋ง๋ ๋ ยท์๊ฐ, VEHICLE {km} + ์ฐจ์ข
ยท์ถ๊ณ , ํ์ฌ์ฐจ โ ์ถ๊ณ ์ฐจ, TOGETHER {๊ฒฝ๊ณผ์๊ฐ}, ๋ฐํ 3์ค [์ฅ์] "๋งํ ๋ด์ฉ" โ AI ๊ฐ ํ ๋ฐฐ๋ ค
|
| N๋ ํ |
N YEARS LATER, ๋์ km, ์ฐจ์ข
ยท n๋
, n years, nnnn์ผ์งธ
|
| ์ฐ๋๋ณ ์นด๋ |
1 YEAR LATER, ์ด๋ฒคํธ ์ ๋ชฉ(์ฒซ ๊ฐ์กฑ ์ฌํ), ์ํฉ(๋ท์ข์์ ์์ด๊ฐ ์ ๋ ์ ๋
), AI ๊ฐ ํ ํ๋ ํ ์ค(์ ๋ค๋ฉด ์์
์ ๋ฎ์ถฐ์), ๋ฐฐ๊ฒฝ์ = ๋ชจ๋ |
| ์ข ๋ฃ ํ๋ฉด | ๋ ์ง, ์ฐ๋ฆฌ์ ์ฒซ ๋ฒ์งธ ํ๋ฃจ ยท ์๊ฐ, ๊ทธ๋ ์ฐจ์์ ์ฒ์ ํ์ ๋ง โ "์กฐ์ฉํ", ๋งบ์ ๋ฌธ์ฅ, AI ์ผ๊ธฐ์์ ์ค๋ ๋ค์ ๋ณด๊ธฐ
|
| ๋ง์ง๋ง | LLM ์๋ฉ ๋ฉํธ 20์ ์ด๋ด ("์ ์ฐจ๋ ์ฒ์์ด์ง๋ง, ์ฐ๋ฆฌ๋ ์ฒ์์ด ์๋๋๊น.") |
๋ชจ๋ 5์ข : ์ฆ๊ฑฐ์ด ์๊ฐ์ ํจ๊ป ๋๋ / ์ฐ์ธํจ์ ๋ฌ๋์ค / ๊ธด์ฅ์ ํ์ด์ค / ์์ํด์ค / ๋ ๋ ํ๊ฒ ์ผ์ดํด์ค.
์ธ์ ID ํ๋๋ก ๋ฝ๋ ์ฟผ๋ฆฌ๊ฐ ์ด๋ฏธ ์ ๋ถ ์๋ค.
| ์๋ฉ ํญ๋ชฉ | ์ถ์ฒ |
|---|---|
| ์ด๋ฆ ยท AI ํ๋ฅด์๋ |
users.username, personas
|
| ์ฒ์ ๋ง๋ ๋ ยท ์๊ฐ | users.created_at |
| ์ด ๊ฒฝ๊ณผ ์๊ฐ |
users.created_at โ ended_at
|
| ์ฑํฅ ์นฉ (์์ด) | users.has_children |
| ๋ฐฉ๋ฌธ ์ฅ์์ ์์ |
user_location_history, user_locations.visit_order
|
| AI ๊ฐ ํ ๋ฐฐ๋ ค ํ ์ค |
taskResults.forTask โ ๊ณ ๋ฅธ ์ ํ์ง + ๋ก๋ด ๋ช
๋ น ๊ฒฐ๊ณผ + ์๋ํ ๊ฒฐ๊ณผ๋ฅผ ํ ์ค๋ก ํฉ์ณ ์ฃผ๋ ์ฝ๋๊ฐ ์ด๋ฏธ ์๋ค (internal/mqttx/journey_narrative.go) |
| ํ์คํฌ ์๋ฃยท๊ฑด๋๋ ์ง๊ณ |
bucketTaskReportItems (internal/mqttx/task_report.go) |
| ์ฌ์ฉ์ ์ธํยท์ฑ๋ณยท์ฌ์ง |
users.description, users.gender, users.asset_id โ user_assets
|
| ํ์ ์ถ์ธ | user_emotion_history |
| ๊ตฌ๋งค ๋ด์ญ | store_purchases |
orchestration/{sessionId}/context (retained) ๊ฐ ์ด๋ฏธ ์ธ์
์ ์ฒด ์ค๋
์ท์ด๋ค. ์ฅ์๋ณ ํ์คํฌ์
๊ทธ ๊ฒฐ๊ณผ ํ ์ค, ์ด๋ฒคํธ ์ ํ, ์ฐจ๋ ์คํ
, ์ต๊ทผ ๋ด๋ ์ด์
๊น์ง ๋ค์ด ์๋ค. ์ฌ๋ฃ ์์ง ํจ์
(buildJourneyContext)์ ๊ตฌ์กฐํ ๋ณํ(toSessionContextPayload)์ ๊ทธ๋๋ก ์ฌ์ฌ์ฉํ ์ ์์ด,
์๋ฉ ์ง๊ณ๋ฅผ ์ฒ์๋ถํฐ ์งค ํ์๊ฐ ์๋ค.
| ํญ๋ชฉ | ๋งํ๋ ์ง์ | ํ ์ผ |
|---|---|---|
| ๋ฐํ ๋ด์ฉ | ์ ์ฅ๋จ (ai_messages, STT ํฌํจ) |
๊ทธ๋๋ก |
| ๋ฐํํ ์ฅ์ | ๋ฐํ ํ์ ์ฅ์ ์ปฌ๋ผ์ด ์๋ค | ์ปฌ๋ผ ์ถ๊ฐ ๋๋ created_at โ user_location_history.changed_at ๋์กฐ |
| "์ฐจ์์" ํ ๋ง | ์ฐจ ๋ชจ๋ ๋ฐํ์ธ์ง ๊ตฌ๋ถ์๊ฐ ์ ๋จ๋๋ค (type ์ voice/text ๋ฟ) |
์ปฌ๋ผ ํ๋ |
| ์๊ธฐ์๊ฐ ์๋ฌธ |
๋ฒ๋ฆฐ๋ค. intro_message ์์ ์ด๋ฆ๋ง LLM ์ถ์ถํ๊ณ ๋ฌธ์ฅ์ ์ ์ฅํ์ง ์๋๋ค |
์ ์ฅ ์ฝ๋ ์ถ๊ฐ |
| ๋๋ฐ์ด์ค ๋ช ๋ น ์ ์ฒด |
device_command_logs.session_id ์ปฌ๋ผ์ ์๋๋ฐ ๊ทธ๊ฑธ๋ก ๋ฝ๋ ์ฟผ๋ฆฌ๊ฐ ์๋ค |
์ฟผ๋ฆฌ ํ ์ค |
์๊ธฐ์๊ฐ ์๋ฌธ์ด ์ ์ผ ์ํ๋ค. ์ฒซ ํ๋ฉด์ ์ฒ์์ "๋ถ๋ชจ๋๊ณผ ์ด์์" ์ ์ข
๋ฃ ํ๋ฉด์
๊ทธ๋ ์ฐจ์์ ์ฒ์ ํ์ ๋ง ์ด ๋ ๋ค ์ด ๊ฐ์ ์ด๋ค.
| ํญ๋ชฉ | ํํฉ |
|---|---|
| ํ์ฌ์ฐจ ยท ์ถ์ฒ์ฐจ ยท ์ถ๊ณ ์ฐจ | ๊ฐ๋ ์์ฒด๊ฐ ์๋ฒ์ ์๋ค (ยง1) |
| ์ฐจ์ข ๋ณ ์ด๋ฏธ์งยท์์ | ์๋ค |
| ์ถ์ฒ ๊ท์น ์ ๋ ฅ๊ฐ | ์๋ ๋ง ์ปฌ๋ผ, ๋๋จธ์ง๋ ์์ ํ ์คํธ (ยง1) |
| AI ๊ฐ ์ค๋ ํ ๋ง | ๋ด๋ฌํฐ๋ธ ๋ณธ๋ฌธ์ด ๋ฉ๋ชจ๋ฆฌ์๋ง ์ฐ๋ค (narrativeHist, ์ต๋ 10๊ฐ). ์ข
๋ฃ ์ ์ญ์ ๋ผ ๋์ค์ ๋ชป ๊บผ๋ธ๋ค |
| ๋ฏธ๋์ฐจ ์ฃผํ ์ด๋ ฅ | ๋ง์ง๋ง ์คํ
1๊ฑด๋ง ๋ฉ๋ชจ๋ฆฌ(VehicleStep). route/state ์ด๋ ฅ์ด DB ์ ์ ๋จ๋๋ค |
- ์ฐ๋๋ณ ์นด๋ ์ ๋ถ. ์ด๋ฒคํธ(๊ฐ์กฑ์ฌํยท์น์งยท์์ด ์ถ์ยท๋ฉ๋ฏธยท์ฌ๊ณ ), ๊ทธ๋ ์ํฉ, AI ๊ฐ ํ ํ๋, ๋ชจ๋ 5์ข . ์ธ์ ์์ ๋์ฌ ์ ์๋ ๊ฐ์ด ์๋๋ค.
- N๋ ํ ๋์ km ์ ๋ ์ง. ๊ธฐํ์ด ๋๋ฏธ๋ผ๊ณ ์ ์๋ค. ์๋ฒ๊ฐ ์ฐ์ด ๋ด๋ฆฌ๋ฉด ๋๋๋ฐ ๊ท์น์ ๋ฐ์์ผ ํ๋ค.
- "1๋ ์งธ๋ ํญ์ ๊ณ ์ " ๊ฐ์ ๊ณ ์ ๊ฐ.
์ฐ๋๋ณ ์นด๋๋ ์ด๋๋ฏผ์์ ๊ด๋ฆฌํ๋ ํ ํ๋ฆฟ์ผ๋ก ๋๊ธฐ๋ฅผ ๊ถํ๋ค. ์ธ์ ์ฑํฅ(์์ดยท๋ถ๋ชจ๋ยท๋ฐ๋ ค๋๋ฌผ)๋ณ๋ก ์นด๋ ๋ฌถ์์ ๋ง๋ค์ด ๋๊ณ ์๋ฉ์์ ํด๋น ๋ฌถ์์ ๊ณ ๋ฅด๋ ์์ด๋ค. LLM ์ ๋งก๊ธฐ๋ฉด ๋งค๋ฒ ๋ฌ๋ผ์ ธ ์ ์ ํ์ง์ด ํ๋ค๋ฆฐ๋ค. LLM ์ ๋ง์ง๋ง 20์ ๋ฉํธ ํ๋๋ก ํ์ ํ๋ ํธ์ด ์์ ํ๋ค.
๊ตฌํ๋จ (2026-10-02):
orchestration/{sessionId}/endingretained,ended_atโ ์๋ฉ ๋ฐํ โ/context์ญ์ ์์. B ์ ๋ค ๊ฐ์ง(๋ฐํ ์ฅ์ยท์ฐจ ๋ชจ๋ ๊ตฌ๋ถยท์๊ธฐ์๊ฐ ์ ์ฅยท์ธ์ ๋ณ ๋ช ๋ น ๋ก๊ทธ ์ฟผ๋ฆฌ)๋ 138 ์์ ์ฒ๋ฆฌํ๋ค. ์๋๋ ๋น์ ์ ์ ์๋ฌธ์ด๋ค.
orchestration/{sessionId}/ending (retained, ์ธ์
์ข
๋ฃ ์ 1ํ)
retained ๋ฅผ ๊ถํ๋ค. ์๋ฉ ํ๋ฉด์ด ๋ฆ๊ฒ ๋ถ์ด๋ ๋ฐ์ ์ ์๊ณ ๋ค์ ๋์ธ ๋ ์ฌ์์ฒญ์ด ํ์ ์๋ค. ์กฐํํ์ด ๋ง์ผ๋ฉด ํ์คํฌ ๋ฆฌํฌํธ์ฒ๋ผ Request-Reply ๋ก ํด๋ ๋๋ค โ ๊ทธ ํจํด๋ ์ด๋ฏธ ์๋ค.
LLM ๋ฉํธ๊ฐ ๋ช ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๋ด๋ฆฌ๊ณ ๋ฉํธ๋ ๋ค์ด์ด ๊ฐฑ์ ๋ฐํํ๋ ํธ์ด ํ๋ฉด์ด ๋ ๊ธฐ๋ค๋ฆฐ๋ค.
์ธ์
์ข
๋ฃ ์ฒ๋ฆฌ(internal/mqttx/end_session.go)์ clearSessionRuntime ์ด
/context retained ๋ฅผ ๋น ํ์ด๋ก๋๋ก ์ง์ด๋ค. ์๋ฉ ๋ฐํ์ ๋ฐ๋์ ๊ทธ ์์ ๋ผ์์ผ ํ๋ค.
๋ค์ ๋๋ฉด ์ฌ๋ฃ๊ฐ ์ฌ๋ผ์ง ๋ค์ ์ง๊ณํ๊ฒ ๋๋ค.
๋ง์ง๋ง ์ฅ์์ ํ์คํฌ๊ฐ ์ ๋ถ ๋๋๋ฉด ai/summary ๋ก ๋ง๋ฌด๋ฆฌ ๋ฌธ์ฅ์ด ํ๋ ๋๊ฐ๋ค
(source=journey_complete, internal/mqttx/milestone_summary.go). ๋์ด ๋ชจ์๋ผ๋ค.
- ๊ด๋๊ฐ์ด ์ค๊ฐ์ signout ํ๋ฉด ์ ๋๊ฐ๋ค
- ๊ฒฐ๊ณผ๊ฐ ๋ฌธ์ฅ ํ๋๋ผ ์๋ฉ ํ๋ฉด์ด ์ธ ๊ตฌ์กฐ๊ฐ ์๋๋ค
ํ์คํฌ ๋ฆฌํฌํธ(task/report/request)๋ FE ๊ฐ ์์ฒญํ ๋๋ง ์๋ตํ๋ค. ์๋ฒ๊ฐ ์๋ฐ์ ์ผ๋ก ๋ฐํํ์ง ์๋๋ค.
| # | ๊ฒฐ์ ์ฌํญ | ์ ํด ์ค ์ชฝ |
|---|---|---|
| 1 | ์ถ์ฒ ๊ท์น ์ ๋ ฅ๊ฐ์ ์ค๋ฌธ ๊ณ ์ ๋ฌธํญ + ์ปฌ๋ผ์ผ๋ก ๋ ๊ฒ์ธ๊ฐ | ๊ธฐํ |
| 2 | ์ฐจ์ข ๋ณ ์ด๋ฏธ์งยท์์์ ์ด๋์ ๋ ๊ฒ์ธ๊ฐ (์ด๋๋ฏผ ์ ๋ก๋ / ์ ์ ๊ฒฝ๋ก) | ๊ธฐํยทFE |
| 3 | ์ฐ๋๋ณ ์นด๋๋ฅผ ์ด๋๋ฏผ ํ ํ๋ฆฟ์ผ๋ก ๋ ๊ฒ์ธ๊ฐ, LLM ์ด ์ง์ ๊ฒ์ธ๊ฐ | ๊ธฐํ |
| 4 | N๋ ํ kmยท๋ ์ง ์์ฑ ๊ท์น | ๊ธฐํ |
| 5 | ์๋ฉ์ retained ๋ก ๋ด๋ฆด ๊ฒ์ธ๊ฐ Request-Reply ๋ก ํ ๊ฒ์ธ๊ฐ | FE |
| 6 | ํ๋ ์ด๋ฆ์ ๊ธฐ์กด ์ฌ์ฉ์ ๋ชจ๋ธ ๊ท์น์ ๋ง์ถฐ ๋ฐ๊ฟ ๊ฒ์ธ๊ฐ (๊ธฐํ์ด "๋ฐ๊พธ๋ฉด ์๋ฉ ๋ช ์ธ๋ ๋ง์ถ๊ฒ ๋ค"๊ณ ํจ) | ๋ฐฑ์๋ |
๊ธฐํ์ด ์ ์ ์์๋ "๋ฐฑ์๋ 1ยท4 โ ํ๋ก ํธ 1ยท3 โ ๋๋จธ์ง" ๋ค. ๊ทธ๋๋ก ๊ฐ๋ ํ๋๋ฅผ ๋ผ์ด๋ค.
- ์ฐจ๋ 3ํ๋ + ์ฌ์ฉ์ ์ ๋ณด์ ์ฃ๊ธฐ (๊ธฐํ์ ๋ฐฑ์๋ 1ยท4)
- ์๊ธฐ์๊ฐ ๋ฐํ ์ ์ฅ โ ํ ์ค์ง๋ฆฌ ๋ณ๊ฒฝ์ธ๋ฐ, ์ ํ๋ฉด ์๋ฉ ์ฒซ ํ๋ฉด๊ณผ ์ข ๋ฃ ํ๋ฉด์ด ๋น์ด ๋ณด์ธ๋ค
- ์ถ์ฒ ๊ท์น ์ ๋ ฅ๊ฐ ๊ฒฐ์ (ยง4-1) ํ ๊ท์นํ ๊ตฌํ
- ํ์ ยท์ถ๊ณ ์ด๋ฒคํธ ์์
- ์๋ฉ ์ง๊ณ + ํ ํฝ
- ์ฐ๋๋ณ ์นด๋ (์ถ์ฒ๋ฅผ ์ ํ ๋ค)