๐ KHub ร Asana ๊ธฐ์ ๋ฌธ์ ๋๊ธฐํ ์ ๋ต โ ๋ฐฉ์ C (ํ์ด๋ธ๋ฆฌ๋)
ํต์ฌ ์์ฝ
# ๐ Asana ๊ธฐ์ ๋ฌธ์ ์ด์ ํ์ค โ DESC + ์ด๋ ฅ๋๊ธ + .md Attachment
> v3.0 | 2026-03-30 | project_code: COMMON
> ๊ฒ์: khub_search("Asana ๊ธฐ์ ๋ฌธ์ ํ์ค", "COMMON") ๋๋ khub_search("KHub Asana ๋๊ธฐํ", "COMMON")
> ์ ์ฉ ๋์: Asana ๊ธฐ์ ์ํคํ ์ฒ ๋ฌธ์ ์ ์ฒด
> ๊ธฐ์กด: KHub ร Asana ๋๊ธฐํ ์ ๋ต ๋ฐฉ์ C โ v3.0์์ ์ด์ ํ์ค์ผ๋ก ํ์
---
1. 3์ข ๊ตฌ์กฐ (ํ์)
Asana์ ๊ธฐ์ ๋ฌธ์๋ฅผ ์์ฑํ ๋ ๋ฐ๋์ ์๋ 3๊ฐ์ง๋ฅผ ๋ชจ๋ ์ํํ๋ค.
[1] DESC (notes)
= ์ต์ ๋ณธ๋ฌธ ์ ์ฒด (plain text)
= ๋ค๋ฅธ AI/์ฌ๋์ด ํ์คํฌ๋ง ์ด๋ฉด ์ ์ฒด ๋ด์ฉ ํ์ธ ๊ฐ๋ฅ
= ํ๋จ์ KHub ๋ฉํ ๋ธ๋ก ํฌํจ
= REST API: PUT /tasks/{gid} (notes ํ๋)
[2] ๋๊ธ (stories) โ ์ด๋ ฅ ๋ก๊ทธ๋ง
= ๋ณ๊ฒฝ ์ด๋ ฅ๋ง ๊ธฐ๋ก. ๋ณธ๋ฌธ ๋ณต๋ถ ์ ๋ ๊ธ์ง.
= ํ์: [SYNC v{๋ฒ์ }] YYYY-MM-DD {๋ณ๊ฒฝ ์์ฝ}
= text ํ๋๋ง ์ฌ์ฉ (html_text ์ฌ์ฉ ๊ธ์ง โ ํ๊ทธ raw ๋
ธ์ถ)
= REST API: POST /tasks/{gid}/stories (text ํ๋)
[3] Attachments โ .md ํ์ผ ๋ฌผ๋ฆฌ์ ์ฒจ๋ถ
= DESC์ ๋์ผ ๋ด์ฉ์ .md ํ์ผ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์
๋ก๋
= ํ์ผ๋ช
: {์๋น์ค๋ช
}-Tech-Reference.md
= ๋ค์ด๋ก๋/์ธ๋ถ ๊ณต์ /Google Drive ์ฐ๋ ๊ฐ๋ฅ
= REST API: POST /tasks/{gid}/attachments (multipart/form-data)
2. ์คํ ์์ (Claude ์ฒดํฌ๋ฆฌ์คํธ)
์ ๊ท ์์ฑ ์
1. DB ์ค์ธก ์ฟผ๋ฆฌ (Supabase MCP / n8n relay)
2. .md ํ์ผ ์์ฑ (/mnt/user-data/outputs/{์๋น์ค๋ช
}-Tech-Reference.md)
3. Asana desc ๊ต์ฒด: PUT /tasks/{gid} notes=.md ๋ณธ๋ฌธ
4. Asana .md ์ฒจ๋ถ: POST /tasks/{gid}/attachments file=.md
5. Asana ์ด๋ ฅ ๋๊ธ: POST /tasks/{gid}/stories text="[SYNC v1.0] ..."
6. ๊ธฐ์กด ๋ณธ๋ฌธ๋ณต๋ถ ๋๊ธ ์ญ์ (์๋ค๋ฉด): DELETE /stories/{sid}
7. ์งํ์ํ = ์๋ฃ โ ์น์
์๋จ ์ฌ์ ๋ ฌ
8. Quick Memo ์
๋ฐ์ดํธ
PGE ๊ฒ์ฆ ํ ์ ๋ฐ์ดํธ ์
1. KHub ์
๋ฐ์ดํธ: khub_update_document(doc_id, new_content)
2. .md ํ์ผ ์ฌ์์ฑ (๋ฒ์ ์ฌ๋ฆผ)
3. Asana desc ๊ต์ฒด: PUT /tasks/{gid} notes=์ ๋ณธ๋ฌธ+๋ฉํ๋ธ๋ก
4. Asana ์ .md ์ฒจ๋ถ: POST /tasks/{gid}/attachments file=v{๋ฒ์ }.md
5. Asana ์ด๋ ฅ ๋๊ธ: "[SYNC v{๋ฒ์ }] {๋ณ๊ฒฝ ์์ฝ}"
6. desc ํ๋จ KHub ๋ฉํ ๋ธ๋ก ๋ฒ์ /๋ ์ง ๊ฐฑ์
3. DESC ํ๋จ KHub ๋ฉํ ๋ธ๋ก
๋ชจ๋ ๊ธฐ์ ๋ฌธ์ DESC ๋งจ ๋์ ์ด ๋ธ๋ก์ ๋ฃ๋๋ค:
--- KHub ๋๊ธฐํ ---
KHub ID: {full_uuid}
KHub ๋ฒ์ : v{๋ฒ์ }
์ต์ข
๋๊ธฐํ: {YYYY-MM-DD}
๋๊ธฐํ ๋ฐฉ๋ฒ: khub_get_document("{8์๋ฆฌ}")
project_code: {์ฝ๋}
4. ์ด๋ ฅ ๋๊ธ ํ์
[SYNC v1.0] 2026-03-30 ์ดํ ์์ฑ
- DB ์ค์ธก: {์์ค DB} ์ง์ ์ฟผ๋ฆฌ
- {ํต์ฌ ๋ด์ฉ 3-5์ค}
- ์ฒจ๋ถ: {ํ์ผ๋ช
}.md
[SYNC v2.0] 2026-04-15 ๊ฒ์ฆ ๋ฐ์
- PGE ๊ฒ์ฆ: {Pass/Fail ์ฌํญ}
- ๋ณ๊ฒฝ: {์์ ๋ ๋ด์ฉ}
- ์ฒจ๋ถ: {ํ์ผ๋ช
}-v2.0.md
5. Attachment ์ ๋ก๋ ๋ช ๋ น์ด
ASANA_PAT="$(get from de_admin_credentials)"
# .md ํ์ผ ์ฒจ๋ถ
curl -s -X POST "https://app.asana.com/api/1.0/tasks/{TASK_GID}/attachments" \
-H "Authorization: Bearer $ASANA_PAT" \
-F "file=@/mnt/user-data/outputs/{์๋น์ค๋ช
}-Tech-Reference.md;type=text/markdown" \
-F "name={์๋น์ค๋ช
}-Tech-Reference.md"
6. ๊ธ์ง ์ฌํญ
- ๋๊ธ์ ๋ณธ๋ฌธ ์ ์ฒด ๋ณต๋ถ ๊ธ์ง (์ด๋ ฅ ๋ก๊ทธ๋ง)
- ๋๊ธ์ html_text ํ๋ ์ฌ์ฉ ๊ธ์ง (ํ๊ทธ raw ๋ ธ์ถ)
- Asana์์ ์ง์ desc ์์ ๊ธ์ง (KHub โ Asana ๋จ๋ฐฉํฅ)
- .md ํ์ผ ์์ด desc๋ง ์์ฑ ๊ธ์ง (3์ข ๋ชจ๋ ํ์)
7. ์ปค์คํ ํ๋ ํ์ค
์์ ์๋ฃ ์ ๋ฐ๋์ ์ค์ :
- ์งํ์ํ(3): ์๋ฃ (GID: 1129966517477191)
- ์๋น์ค(์ํ): ํด๋น ์๋น์ค ์ ํ
- Quick Memo: ํต์ฌ ์์น ์์ฝ (์: "577T | 6,383์ปฌ๋ผ | de_data_catalog ํตํฉ")
- ์๋ฃ ํ์คํฌ๋ ์น์ ์๋จ์ผ๋ก ์ฌ์ ๋ ฌ
8. ํ์ฌ ์ ์ฉ ํํฉ
| ํ์คํฌ | DESC | ์ด๋ ฅ๋๊ธ | .md ์ฒจ๋ถ | ์ํ |
|---|---|---|---|---|
| [ARCH] ํตํฉ ์ค๊ณ์ v3.0 | โ | โ | โ bizspring-de-admin-design-v3.0.md | ์๋ฃ |
| [ARCH] Data Catalog | โ | โ | โ BizSpring-Data-Catalog-v1.1.md | ์๋ฃ |
| [GEOcareโข] | โ | โ | โ GEOcare-AI-Tech-Reference.md | ์๋ฃ |
| [TAMโข/DMP] | โ | โ | โ DMP-RunComm-Tech-Reference.md | ์๋ฃ |
| [DIGOโข] | โ | โ | โ DIGO-Influencer-Tech-Reference.md | ์๋ฃ |
| [FeedMakerโข] | โ | โ | โ FeedMaker-Tech-Reference.md | ์๋ฃ |
| [LIFTโข] | โ | โ | โ LIFT-Tracker-Tech-Reference.md | ์๋ฃ |
| [ARCH] GP MySQL ๊ณ์ | โ | โ | โณ ํฅํ | ์๋ฃ |
| [ARCH] GitHub ๋งคํ | โ | โ | โณ ํฅํ | ์๋ฃ |
| [VERIFY] DB ๊ฒ์ฆ | โ | โ | โณ ํฅํ | ์๋ฃ |
9. Asana ์ ๋ณด
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| ํ๋ก์ ํธ | ์ ํ/๊ธฐ๋ฅ ๊ธฐํ(PRODUCT OWNER) / GID: 1200220022474171 |
| ์น์ | ๊ธฐ์ ์ํคํ ์ฒ ๋ฌธ์ w/AI v202603 / GID: 1213858749160371 |
| PAT | de_admin_credentials service_name='ASANA_API_KEY' |
---
v3.0 2026-03-30 โ ์ด์ ํ์ค ํ์ . DESC+์ด๋ ฅ๋๊ธ+.md Attachment 3์ข ํ์. ๊ธ์ง์ฌํญ ๋ช ์.