From 9ea40568a0cb57fcfd14a483701aa6e071056353 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Wed, 17 Sep 2025 20:00:09 +0900 Subject: [PATCH] Add new idea documents: FastAPI concepts, automation agents, Slack emoji reactions --- ...²„μ›μŠ€_μΊ˜λ¦°λ”_API_연동_κ°€μ΄λ“œ.md | 154 +++++++++--------- ...PI_ꡬ쑰와_객체지ν–₯_κ°œλ…_정리.md | 97 +++++++++++ ...Š¬λž™_이λͺ¨ν‹°μ½˜_λ°˜μ‘_κΈ°λŠ₯_κ΅¬ν˜„.md | 50 ++++++ ...ν˜•_μžλ™ν™”μ™€_AI_μ—μ΄μ „νŠΈ_κ³ μ°°.md | 62 +++++++ 4 files changed, 290 insertions(+), 73 deletions(-) create mode 100644 ideas/250917_FastAPI_ꡬ쑰와_객체지ν–₯_κ°œλ…_정리.md create mode 100644 ideas/250917_λ‘œλΉ™_μŠ¬λž™_이λͺ¨ν‹°μ½˜_λ°˜μ‘_κΈ°λŠ₯_κ΅¬ν˜„.md create mode 100644 ideas/250917_μ μ‘ν˜•_μžλ™ν™”μ™€_AI_μ—μ΄μ „νŠΈ_κ³ μ°°.md diff --git a/ideas/250916_λ„€μ΄λ²„μ›μŠ€_μΊ˜λ¦°λ”_API_연동_κ°€μ΄λ“œ.md b/ideas/250916_λ„€μ΄λ²„μ›μŠ€_μΊ˜λ¦°λ”_API_연동_κ°€μ΄λ“œ.md index e4bcb01..80a5702 100644 --- a/ideas/250916_λ„€μ΄λ²„μ›μŠ€_μΊ˜λ¦°λ”_API_연동_κ°€μ΄λ“œ.md +++ b/ideas/250916_λ„€μ΄λ²„μ›μŠ€_μΊ˜λ¦°λ”_API_연동_κ°€μ΄λ“œ.md @@ -1,104 +1,112 @@ -# λ„€μ΄λ²„μ›μŠ€ μΊ˜λ¦°λ” API 연동 κ°€μ΄λ“œ +# λ„€μ΄λ²„μ›μŠ€ API 연동 κ°€μ΄λ“œ -## 핡심 μš”μ•½ - -> λ„€μ΄λ²„μ›μŠ€ μΊ˜λ¦°λ”λŠ” λ³„λ„μ˜ 'μ—μ΄μ „νŠΈ' κ°œλ…λ³΄λ‹€λŠ” **API(Application Programming Interface)**λ₯Ό 톡해 μ™ΈλΆ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‚˜ 봇이 μΊ˜λ¦°λ” 데이터λ₯Ό 읽고 μˆ˜μ •ν•˜λ„λ‘ ν—ˆμš©ν•©λ‹ˆλ‹€. 즉, μ—μ΄μ „νŠΈ 역할을 ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄ 이 APIλ₯Ό ν˜ΈμΆœν•˜μ—¬ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κ²Œ λ©λ‹ˆλ‹€. - -**[ν˜„μž¬ ν”„λ‘œμ νŠΈ μƒνƒœ]** λ„€μ΄λ²„μ›μŠ€ μΊ˜λ¦°λ” API 연동 λ―Έκ΅¬ν˜„ (OAuth2 토큰 관리 둜직 μ—†μŒ, skill-calendar μ„œλΉ„μŠ€ 미쑴재, auth-server에 Works API 인증 λ―Ένƒ‘μž¬). +**[ν˜„μž¬ ν”„λ‘œμ νŠΈ μƒνƒœ]** λ„€μ΄λ²„μ›μŠ€ API 연동 λ―Έκ΅¬ν˜„ (OAuth2 토큰 관리 둜직 μ—†μŒ, κ΄€λ ¨ skill μ„œλΉ„μŠ€ 미쑴재, auth-server에 Works API 인증 λ―Ένƒ‘μž¬). --- -## 1. λ„€μ΄λ²„μ›μŠ€ μΊ˜λ¦°λ” API κ°œμš” +## 1. λ‘œλΉ™(RO-BEING) μ•± μ„€μ • ν˜„ν™© -λ„€μ΄λ²„μ›μŠ€(NAVER WORKS)λŠ” κ°œλ°œμžκ°€ μžμ‚¬μ˜ λ‹€μ–‘ν•œ κΈ°λŠ₯κ³Ό λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ **NAVER WORKS API**λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μΊ˜λ¦°λ” κΈ°λŠ₯ μ—­μ‹œ 이 API에 ν¬ν•¨λ˜μ–΄ 있으며, λ‹€μŒ κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. +- **μ•± 이름**: Ro-being +- **μ†Œμ†**: company-x.partners (155032) -* **일정 쑰회 (View):** νŠΉμ • μ‚¬μš©μžμ˜ κΈ°λ³Έ μΊ˜λ¦°λ”λ‚˜ 곡유 μΊ˜λ¦°λ”μ˜ 일정을 μ‘°νšŒν•©λ‹ˆλ‹€. -* **일정 생성 (Create):** μƒˆλ‘œμš΄ 일정을 μƒμ„±ν•˜κ³  μ°Έμ„μž, μ‹œκ°„, μž₯μ†Œ 등을 μ„€μ •ν•©λ‹ˆλ‹€. -* **일정 μˆ˜μ • (Modify):** κΈ°μ‘΄ μΌμ •μ˜ 정보λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. -* **일정 μ‚­μ œ (Delete):** 일정을 μ‚­μ œν•©λ‹ˆλ‹€. -* **μΊ˜λ¦°λ” 관리 (Manage):** μΊ˜λ¦°λ” 자체λ₯Ό 생성, μˆ˜μ •, μ‚­μ œν•˜κ³  곡유 속성을 κ΄€λ¦¬ν•©λ‹ˆλ‹€. +### 1.1. 인증 정보 -## 2. μ—μ΄μ „νŠΈ(봇) κ΅¬ν˜„μ„ μœ„ν•œ ν•„μˆ˜ 절차 +- **Client ID**: `kFJu_ajl6tb8pBiPEEnS` +- **Client Secret**: `xIz5G0v4wn` + - > **⚠️ κ²½κ³ : 이 값은 외뢀에 λ…ΈμΆœλ˜μ–΄μ„œλŠ” μ•ˆ 되며, Git λ“± 버전 관리 μ‹œμŠ€ν…œμ— ν¬ν•¨ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€. Vault λ˜λŠ” μ•”ν˜Έν™”λœ ν™˜κ²½ λ³€μˆ˜λ₯Ό 톡해 μ•ˆμ „ν•˜κ²Œ 관리해야 ν•©λ‹ˆλ‹€.** +- **Service Account**: `86rye.serviceaccount@company-x.partners` -μ—μ΄μ „νŠΈ(봇)κ°€ μΊ˜λ¦°λ” APIλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ λ‹€μŒ 절차λ₯Ό 따라야 ν•©λ‹ˆλ‹€. +### 1.2. 토큰 μ„€μ • -1. **개발자 μ½˜μ†”μ—μ„œ μ•± 생성:** [λ„€μ΄λ²„μ›μŠ€ 개발자 μ½˜μ†”](https://dev.worksmobile.com)에 κ΄€λ¦¬μž κ³„μ •μœΌλ‘œ λ‘œκ·ΈμΈν•˜μ—¬ μΊ˜λ¦°λ” APIλ₯Ό μ‚¬μš©ν•  앱을 생성해야 ν•©λ‹ˆλ‹€. -2. **Access Token λ°œκΈ‰:** API ν˜ΈμΆœμ„ μœ„ν•΄μ„œλŠ” 인증(Authentication) 절차λ₯Ό 거쳐 `Access Token`을 λ°œκΈ‰λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€. 이 토큰은 API μš”μ²­μ— λŒ€ν•œ κΆŒν•œμ„ λΆ€μ—¬ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. -3. **API μŠ€μ½”ν”„(Scope) μ„€μ •:** 앱이 μΊ˜λ¦°λ”μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ API κΆŒν•œ κ΄€λ¦¬μ—μ„œ `calendar` λ˜λŠ” `calendar.read`와 같은 μŠ€μ½”ν”„λ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. - * `calendar.read`: 읽기 μ „μš© κΆŒν•œ - * `calendar`: 읽기, μ“°κΈ°, μˆ˜μ •, μ‚­μ œ λ“± λͺ¨λ“  κΆŒν•œ -4. **API 호좜:** λ°œκΈ‰λ°›μ€ `Access Token`을 μ‚¬μš©ν•˜μ—¬ HTTP μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€. API 호좜 방식은 일반적으둜 RESTful API ν˜•νƒœλ‘œ 제곡되며, `GET`, `POST`, `PUT`, `DELETE` λ“±μ˜ HTTP λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. +- **Access Token μœ νš¨κΈ°κ°„**: 1μ‹œκ°„ +- **Refresh Token Rotation**: On (λ³΄μ•ˆ κ°•ν™”) -## 3. API μ‚¬μš© μ˜ˆμ‹œ (영문 λ¬Έμ„œ 기반) +### 1.3. OAuth μ„€μ • -λ„€μ΄λ²„μ›μŠ€ 개발자 λ¬Έμ„œλŠ” μ˜μ–΄λ‘œλ„ 제곡되며, λ‹€μŒμ€ μ£Όμš” API 호좜 μ˜ˆμ‹œμž…λ‹ˆλ‹€. +- **Redirect URL**: `https://auth.robeing.com/oauth/naverworks/callback` +- **ν™œμ„±ν™”λœ Scopes**: + - `openid`, `profile`, `email` (OIDC μ‚¬μš©μž μ‹λ³„μš©) + - `calendar` (μΊ˜λ¦°λ” 읽기/μ“°κΈ°) + - `contact` (μ£Όμ†Œλ‘ 읽기/μ“°κΈ°) + - `file` (λ“œλΌμ΄λΈŒ 파일 μ ‘κ·Ό) + - `mail` (메일 읽기/보내기) + - `task` (업무 관리) + - `user` (쑰직 λ‚΄ μ‚¬μš©μž 정보 쑰회) -### A. 일정 λͺ©λ‘ 쑰회 (GET) +--- -νŠΉμ • μ‚¬μš©μžμ˜ κΈ°λ³Έ μΊ˜λ¦°λ” 일정을 μ‘°νšŒν•˜λŠ” APIμž…λ‹ˆλ‹€. +## 2. 인증 방식 -* **HTTP Request:** `GET /users/{userId}/calendar/events` -* **Description:** Retrieves a list of events from the default calendar of the target user. -* **Authorization:** `Bearer {token}` (μš”μ²­ 헀더에 Access Token 포함) +λ„€μ΄λ²„μ›μŠ€ APIλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € **Access Token**을 λ°œκΈ‰λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€. ν˜„μž¬ μ•± 섀정에 따라 μ•„λž˜ 두 κ°€μ§€ 방식 λͺ¨λ‘ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€. -### B. 일정 생성 (POST) +1. **ꡬ성원 κ³„μ •μœΌλ‘œ 인증 (OAuth 2.0 / OIDC)**: μ‚¬μš©μžκ°€ 직접 λ‘œκ·ΈμΈν•˜μ—¬ μžμ‹ μ˜ 데이터에 λŒ€ν•œ 접근을 ν—ˆμš©ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. (예: "λ‚΄ μΊ˜λ¦°λ” 일정 쑰회") +2. **μ„œλΉ„μŠ€ κ³„μ •μœΌλ‘œ 인증 (JWT)**: μ‚¬μš©μž 둜그인 없이, μ‹œμŠ€ν…œ(λ‘œλΉ™)이 쑰직 μ „μ²΄μ˜ 데이터에 μ ‘κ·Όν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. (예: 주기적인 데이터 동기화) -μ‚¬μš©μžμ˜ κΈ°λ³Έ μΊ˜λ¦°λ”μ— μƒˆλ‘œμš΄ 일정을 μƒμ„±ν•˜λŠ” APIμž…λ‹ˆλ‹€. +## 3. API μ‚¬μš© μ˜ˆμ‹œ 및 μ£Όμš” μ—”λ“œν¬μΈνŠΈ -* **HTTP Request:** `POST /users/{userId}/calendar/events` -* **Description:** Creates a new event in the target user's default calendar. -* **Request Body (JSON):** μΌμ •μ˜ 제λͺ©, μ‹œμž‘/μ’…λ£Œ μ‹œκ°„, μ°Έμ„μž λ“± 상세 정보λ₯Ό JSON ν˜•μ‹μœΌλ‘œ λ‹΄μ•„ λ³΄λƒ…λ‹ˆλ‹€. +### 3.1. μΊ˜λ¦°λ” (Calendar API) -**Request URL:** -`POST https://www.worksapis.com/v1.0/users/{userId}/calendar/events` +- **μŠ€μ½”ν”„**: `calendar` +- **μ£Όμš” μ—”λ“œν¬μΈνŠΈ**: + - `GET /v1.0/users/{userId}/calendar/events`: νŠΉμ • μ‚¬μš©μžμ˜ 일정 λͺ©λ‘ 쑰회 + - `POST /v1.0/users/{userId}/calendar/events`: μƒˆ 일정 생성 + - `PUT /v1.0/users/{userId}/calendar/events/{eventId}`: κΈ°μ‘΄ 일정 μˆ˜μ • -**JSON Example:** -```json -{ - "subject": "Team Meeting", - "start": { - "date": "2025-09-12", - "time": "10:00:00" - }, - "end": { - "date": "2025-09-12", - "time": "11:00:00" - }, - "attendees": [ +- **μš”μ²­ μ˜ˆμ‹œ: μƒˆ 일정 생성** + `POST https://www.worksapis.com/v1.0/users/{userId}/calendar/events` + ```json { - "email": "member1@example.com", - "isOptional": false + "subject": "Team Meeting", + "start": { + "date": "2025-09-18", + "time": "10:00:00" + }, + "end": { + "date": "2025-09-18", + "time": "11:00:00" + }, + "attendees": [ + { + "email": "member1@example.com", + "isOptional": false + } + ] } - ] -} -``` + ``` -### C. 일정 μˆ˜μ • (PUT) +### 3.2. μ£Όμ†Œλ‘ (Contact API) -κΈ°μ‘΄ μΌμ •μ˜ λ‚΄μš©μ„ μˆ˜μ •ν•˜λŠ” APIμž…λ‹ˆλ‹€. +- **μŠ€μ½”ν”„**: `contact`, `user` +- **μ£Όμš” μ—”λ“œν¬μΈνŠΈ**: + - `GET /v1.0/contacts`: 고객/거래처 μ—°λ½μ²˜ λͺ©λ‘ 쑰회 + - `POST /v1.0/contacts`: μƒˆ μ—°λ½μ²˜ 생성 + - `GET /v1.0/users/{userId}`: 쑰직 λ‚΄ μ‚¬μš©μž 정보 쑰회 -* **HTTP Request:** `PUT /users/{userId}/calendar/events/{eventId}` -* **Description:** Updates an event in the target user's default calendar. -* **Authorization:** `Bearer {token}` -* **Request Body (JSON):** μˆ˜μ •ν•  λ‚΄μš©μ΄ ν¬ν•¨λœ JSON 데이터λ₯Ό λ³΄λƒ…λ‹ˆλ‹€. +### 3.3. 메일 (Mail API) -## 4. μ—μ΄μ „νŠΈ κ΅¬ν˜„ μ‹œ 고렀사항 +- **μŠ€μ½”ν”„**: `mail` +- **μ£Όμš” μ—”λ“œν¬μΈνŠΈ**: + - `POST /v1.0/users/{userId}/mail`: 메일 λ°œμ†‘ + - `GET /v1.0/users/{userId}/mail/messages/{messageId}`: νŠΉμ • 메일 상세 쑰회 -* **인증 (OAuth 2.0):** λ„€μ΄λ²„μ›μŠ€ APIλŠ” OAuth 2.0 기반 인증을 μ‚¬μš©ν•©λ‹ˆλ‹€. μ—μ΄μ „νŠΈλŠ” 이 인증 흐름을 μ΄ν•΄ν•˜κ³  Access Token을 관리해야 ν•©λ‹ˆλ‹€. -* **κΆŒν•œ (Scope):** μ—μ΄μ „νŠΈμ˜ 역할에 따라 ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ κΆŒν•œ(예: 읽기 μ „μš©)을 μ„€μ •ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€. -* **μ‚¬μš©μž 관리:** 봇이 νŠΉμ • μ‚¬μš©μžμ˜ μΊ˜λ¦°λ”μ— μ ‘κ·Όν•˜λ €λ©΄ ν•΄λ‹Ή μ‚¬μš©μžμ˜ `userId`λ₯Ό μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. -* **였λ₯˜ 처리:** API 호좜 μ‹œ λ°œμƒν•  수 μžˆλŠ” 였λ₯˜(예: `403 Forbidden`, `404 Not Found`)λ₯Ό 적절히 μ²˜λ¦¬ν•˜λ„λ‘ λ‘œμ§μ„ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€. +## 4. λ‘œλΉ™ 연동 μ•„ν‚€ν…μ²˜ -## 5. μ°Έκ³  자료 및 κ²°λ‘  +### 4.1. μ‹œν¬λ¦Ώ 관리 (μ˜¨ν”„λ ˆλ―ΈμŠ€ 2μ„œλ²„ ν™˜κ²½) -λ„€μ΄λ²„μ›μŠ€ μΊ˜λ¦°λ” APIλŠ” 주둜 κΈ°μ—… λ‚΄λΆ€ μ‹œμŠ€ν…œ ν†΅ν•©μ΄λ‚˜ 업무 μžλ™ν™” 봇 κ°œλ°œμ— μ‚¬μš©λ˜λ―€λ‘œ, 일반 넀이버 μΊ˜λ¦°λ” API와 달리 λŒ€μ™Έμ μœΌλ‘œ 곡개된 μ˜μƒμ΄λ‚˜ λΈ”λ‘œκ·Έ νŠœν† λ¦¬μ–Όμ΄ λ§Žμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. +- **원칙**: 영ꡬ μ‹œν¬λ¦Ώ(Client Secret, Private Key)은 **κ²Œμ΄νŠΈμ›¨μ΄ μ„œλ²„**μ—λ§Œ 쀑앙 μ§‘μ€‘μ‹μœΌλ‘œ λ³΄κ΄€ν•©λ‹ˆλ‹€. +- **κ΅¬ν˜„**: κ²Œμ΄νŠΈμ›¨μ΄ μ„œλ²„μ—μ„œ HashiCorp Vault λ˜λŠ” μ•”ν˜Έν™”λœ 파일 μ‹œμŠ€ν…œ(`600` κΆŒν•œ)을 μ‚¬μš©ν•˜μ—¬ Client ID/Secret을 κ΄€λ¦¬ν•˜κ³ , μ»¨ν…Œμ΄λ„ˆμ—λŠ” 읽기 μ „μš©(`:ro`)으둜 λ§ˆμš΄νŠΈν•©λ‹ˆλ‹€. +- **λ‘œλΉ™/μŠ€ν‚¬ μ„œλ²„**: κ²Œμ΄νŠΈμ›¨μ΄λ₯Ό 톡해 λ°œκΈ‰λœ 단기 Access Token만 λ°›μ•„ μ‚¬μš©ν•˜λ©°, 영ꡬ μ‹œν¬λ¦Ώμ„ λ³΄κ΄€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. -λ”°λΌμ„œ μΊ˜λ¦°λ” μ œμ–΄ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€κ³ μž ν•œλ‹€λ©΄, μ•„λž˜ 곡식 개발자 λ¬Έμ„œλ₯Ό μ€‘μ‹¬μœΌλ‘œ ν•™μŠ΅ν•˜λŠ” 것이 κ°€μž₯ μ •ν™•ν•˜κ³  효율적인 λ°©λ²•μž…λ‹ˆλ‹€. +### 4.2. 인증 흐름 및 토큰 관리 -* **λ„€μ΄λ²„μ›μŠ€ 개발자 μ„Όν„° (곡식 λ¬Έμ„œ):** [developers.worksmobile.com](https://developers.worksmobile.com) - * [ν•œκ΅­μ–΄ μΊ˜λ¦°λ” API λ¬Έμ„œ](https://developers.worksmobile.com/kr/document/10070?lang=ko) - * [영문 μΊ˜λ¦°λ” API λ¬Έμ„œ](https://developers.worksmobile.com/document/10070?lang=en) -* **넀이버 개발자 포럼:** API κ΄€λ ¨ μ‹€μ œ μ§ˆμ˜μ‘λ‹΅μ„ μ°Έκ³ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. -* **유튜브 νŠœν† λ¦¬μ–Ό:** "λ„€μ΄λ²„μ›μŠ€ 봇 개발"둜 κ²€μƒ‰ν•˜λ©΄ API μ‚¬μš©μ˜ 기본적인 흐름과 인증 μ ˆμ°¨μ— λŒ€ν•œ 이해λ₯Ό λ•λŠ” μ˜μƒμ„ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. +- **JWT ν‚€ 관리 (JWKS)**: κ²Œμ΄νŠΈμ›¨μ΄λŠ” JWT μ„œλͺ…에 μ‚¬μš©ν•˜λŠ” κ³΅κ°œν‚€ λͺ©λ‘μ„ `/.well-known/jwks.json` μ—”λ“œν¬μΈνŠΈλ₯Ό 톡해 λ…ΈμΆœν•˜μ—¬, λ‹€λ₯Έ μ„œλΉ„μŠ€λ“€μ΄ 토큰을 μ•ˆμ „ν•˜κ²Œ κ²€μ¦ν•˜κ³  ν‚€ ꡐ체에 λŒ€μ‘ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. +- **토큰 흐름**: λ‘œλΉ™/μŠ€ν‚¬ μ„œλ²„λŠ” μ™ΈλΆ€ APIλ₯Ό 직접 ν˜ΈμΆœν•˜λŠ” λŒ€μ‹ , κ²Œμ΄νŠΈμ›¨μ΄μ— API ν˜ΈμΆœμ„ μœ„μž„ν•˜κ³  ν•„μš”ν•œ 단기 토큰을 λ°›μ•„ μ‚¬μš©ν•©λ‹ˆλ‹€. -> **κ²°λ‘ :** 곡식 λ¬Έμ„œμ˜ 예제 μ½”λ“œλ₯Ό 기반으둜 직접 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©° κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 것을 μΆ”μ²œν•©λ‹ˆλ‹€. +## 5. μ°Έκ³  자료 + +- **λ„€μ΄λ²„μ›μŠ€ 개발자 μ„Όν„° (곡식 λ¬Έμ„œ):** [developers.worksmobile.com](https://developers.worksmobile.com) + - [인증 κ°€μ΄λ“œ](https://developers.worksmobile.com/kr/docs/auth) + - [μΊ˜λ¦°λ” API](https://developers.worksmobile.com/kr/document/10070?lang=ko) + - [μ£Όμ†Œλ‘ API](https://developers.worksmobile.com/kr/docs/contact) + - [메일 API](https://developers.worksmobile.com/kr/docs/mail) +- **넀이버 개발자 포럼:** API κ΄€λ ¨ μ‹€μ œ μ§ˆμ˜μ‘λ‹΅μ„ μ°Έκ³ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. diff --git a/ideas/250917_FastAPI_ꡬ쑰와_객체지ν–₯_κ°œλ…_정리.md b/ideas/250917_FastAPI_ꡬ쑰와_객체지ν–₯_κ°œλ…_정리.md new file mode 100644 index 0000000..6d76250 --- /dev/null +++ b/ideas/250917_FastAPI_ꡬ쑰와_객체지ν–₯_κ°œλ…_정리.md @@ -0,0 +1,97 @@ +--- +tags: [FastAPI, Architecture, OOP, Python, Analogy] +date: 2025-09-17 +modified: 2025-09-17 +--- + +# FastAPI ν”„λ‘œμ νŠΈ ꡬ쑰와 객체지ν–₯ κ°œλ… 정리 (식당 λΉ„μœ ) + +이 λ¬Έμ„œλŠ” FastAPI의 κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜μ™€ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심 μš©μ–΄λ“€μ„ '식당/ν‘Έλ“œμ½”νŠΈ' λΉ„μœ λ₯Ό 톡해 μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. + +## 1. FastAPI ν”„λ‘œμ νŠΈ ꡬ쑰: ν‘Έλ“œμ½”νŠΈμ™€ κ°œλ³„ 식당 + +λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜λŠ” ν•˜λ‚˜μ˜ 큰 식당이 μ•„λ‹Œ, μ—¬λŸ¬ μ „λ¬Έ 식당이 λͺ¨μΈ 'ν‘Έλ“œμ½”νŠΈ'와 κ°™μŠ΅λ‹ˆλ‹€. + +- **API κ²Œμ΄νŠΈμ›¨μ΄**: ν‘Έλ“œμ½”νŠΈ μ •λ¬Έ μ•ˆλ‚΄ 데슀크. λͺ¨λ“  μ†λ‹˜μ€ μ—¬κΈ°λ‘œλ§Œ λ“€μ–΄μ˜€λ©°, 곡톡 인증, 경둜 μ•ˆλ‚΄ 등을 λ‹΄λ‹Ή. +- **κ°œλ³„ μ„œλΉ„μŠ€**: ν‘Έλ“œμ½”νŠΈ λ‚΄μ˜ 각 식당 (ν•œμ‹ μ½”λ„ˆ, 쀑식 μ½”λ„ˆ λ“±). 각자 λ…λ¦½λœ μ£Όλ°©κ³Ό μ°½κ³ λ₯Ό 가짐. +- **λ©”μ‹œμ§€ λ²„μŠ€**: ν‘Έλ“œμ½”νŠΈ 전체에 μšΈλ¦¬λŠ” 호좜 벨. κ°€κ²Œ κ°„ 직접 톡신이 μ•„λ‹Œ, 이벀트(μ£Όλ¬Έ μ™„λ£Œ λ“±)λ₯Ό μ•Œλ¦¬λŠ” μ—­ν• . + +### 1.1. κ°œλ³„ 식당(μ„œλΉ„μŠ€)의 λ‚΄λΆ€ ꡬ쑰 + +| 파일/폴더 | μ—­ν•  (간단 μ„€λͺ…) | 식당 λΉ„μœ  | +|---|---|---| +| `main.py` | μ•± μ‹€ν–‰, λΌμš°ν„° 등둝 | κ°€κ²Œ μ •λ¬Έ μŠ€μœ„μΉ˜, λ©”λ‰΄νŒ κ±°λŠ” κ³³ | +| `api/routers/*.py` | HTTP μš”μ²­ 처리, μ„œλΉ„μŠ€ 호좜 | 홀 μ„œλΉ™ 직원 | +| `services/*.py` | λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 κ΅¬ν˜„ | μ£Όλ°©μž₯ | +| `repositories/*.py` | λ°μ΄ν„°λ² μ΄μŠ€ μ ‘κ·Ό 둜직 | μ°½κ³  관리 직원 | +| `db/session.py` | DB μ—°κ²° 및 μ„Έμ…˜ 관리 | μ°½κ³  관리인, μ°½κ³  μΆœμž…λ¬Έ | +| `models/*.py` | DB ν…Œμ΄λΈ” ꡬ쑰 μ •μ˜ (ORM) | μ°½κ³  μ„ λ°˜ 섀계도 (λ‚΄λΆ€μš©) | +| `schemas/*.py` | 데이터 μž…μΆœλ ₯ ν˜•μ‹ μ •μ˜ (Pydantic) | μ†λ‹˜ μ£Όλ¬Έμ„œ 양식 (μ™ΈλΆ€μš©) | +| `core/*.py` | μ„€μ •, λ³΄μ•ˆ, λ‘œκΉ… λ“± 곡톡 κ·œμΉ™ | κ°€κ²Œ 사μž₯, 운영 κ·œμΉ™ μ±…μž | +| `tests/*.py` | μ½”λ“œ κΈ°λŠ₯ μžλ™ 검증 | μ‹œμ‹ μ½”λ„ˆ, ν’ˆμ§ˆ 검사 | +| `.env` | 민감 정보 보관 (λΉ„λ°€λ²ˆν˜Έ λ“±) | 금고 속 λΉ„λ°€ λ¬Έμ„œ | + +### 1.2. μ˜¬λ°”λ₯Έ μž‘μ—… 흐름 (μ£Όλ¬Έ ν”„λ‘œμ„ΈμŠ€) + +> **원칙: μž‘μ—… μ§€μ‹œμ„œ(API μš”μ²­) 없이 μž‘μ—…ν•˜μ§€ μ•ŠλŠ”λ‹€.** + +1. **μ†λ‹˜**, λ©”λ‰΄νŒμ„ 보고 **μ£Όλ¬Έ(API μš”μ²­)**을 ν•œλ‹€. +2. **홀 μ„œλΉ™ 직원(λΌμš°ν„°)**이 **μ£Όλ¬Έμ„œ 양식(μŠ€ν‚€λ§ˆ)**에 λ§žλŠ”μ§€ ν™•μΈν•˜κ³  주방에 μ „λ‹¬ν•œλ‹€. +3. **μ£Όλ°©μž₯(μ„œλΉ„μŠ€)**은 λ ˆμ‹œν”Ό(λΉ„μ¦ˆλ‹ˆμŠ€ 둜직)에 따라 μš”λ¦¬λ₯Ό μ‹œμž‘ν•œλ‹€. +4. **μ°½κ³  직원(리포지토리)**μ—κ²Œ **μ°½κ³  섀계도(λͺ¨λΈ)**λ₯Ό 보고 재료λ₯Ό κ°€μ Έμ˜€λΌκ³  μ‹œν‚¨λ‹€. +5. μš”λ¦¬κ°€ μ™„μ„±λ˜λ©΄ λ‹€μ‹œ 홀 μ„œλΉ™ 직원을 톡해 μ†λ‹˜μ—κ²Œ μ „λ‹¬λœλ‹€. + +> **핡심**: 홀 μ„œλΉ™ 직원이 직접 μš”λ¦¬ν•˜κ±°λ‚˜, μ£Όλ°©μž₯이 μ°½κ³ λ₯Ό λ’€μ§€λŠ” λ“± 역할을 μ„žμœΌλ©΄ κ°€κ²Œκ°€ 엉망이 λœλ‹€. 각자의 μ—­ν•  뢄리가 μ€‘μš”ν•˜λ‹€. + +## 2. 핡심 μš©μ–΄: μŠ€ν‚€λ§ˆ, λͺ¨λΈ, 객체, μΈμŠ€ν„΄μŠ€ + +이 μš©μ–΄λ“€μ€ ν—·κ°ˆλ¦¬κΈ° μ‰½μ§€λ§Œ, 본질과 ν‘œν˜„μ˜ κ΄€κ³„λ‘œ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. + +### 2.1. μŠ€ν‚€λ§ˆ (Schema) - 본질, μ‹€μ²΄μ˜ ꡬ쑰 + +- **의미**: 데이터가 μ–΄λ–€ λͺ¨μ–‘κ³Ό κ·œμΉ™μ„ κ°€μ Έμ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•œ 본질적인 ν‹€, 섀계. +- **λΉ„μœ **: + - **DB μŠ€ν‚€λ§ˆ**: μ•„λ§ˆμ‘΄ 창고의 μ‹€μ œ μ„ λ°˜ ꡬ쑰, ꡬ역 ꡬ뢄, 물리적 κ·œμΉ™. (싀체) + - **API μŠ€ν‚€λ§ˆ**: ν…Œμ΄λΈ” μ˜€λ” μ‹œμŠ€ν…œμ˜ μ „μž μ£Όλ¬Έμ„œ 양식. (κ·œμΉ™) +- **μ—­ν• **: 데이터가 μ œλ©‹λŒ€λ‘œ μ‘΄μž¬ν•˜μ§€ λͺ»ν•˜λ„둝 ν˜•μ‹μ„ κ°•μ œν•œλ‹€. + +### 2.2. λͺ¨λΈ (Model) - μ‚¬μ˜(ζŠ•ε½±), 껍데기 + +- **의미**: μŠ€ν‚€λ§ˆλΌλŠ” λ³Έμ§ˆμ„ μ½”λ“œ μ„Έκ³„μ—μ„œ 닀루기 μ‰½κ²Œ ν‘œν˜„ν•œ 것. +- **λΉ„μœ **: + - **DB λͺ¨λΈ(ORM λͺ¨λΈ)**: μ•„λ§ˆμ‘΄ μ°½κ³  ꡬ쑰λ₯Ό μ›κ²©μœΌλ‘œ λ³΄μ—¬μ£ΌλŠ” λŒ€μ‹œλ³΄λ“œ ν™”λ©΄. + - **API λͺ¨λΈ(Pydantic λͺ¨λΈ)**: μ „μž μ£Όλ¬Έμ„œ 양식을 μ½”λ“œλ‘œ ν‘œν˜„ν•œ 클래슀(ν‹€). +- **μ—­ν• **: κ°œλ°œμžκ°€ μ½”λ“œλ₯Ό 톡해 싀체(μŠ€ν‚€λ§ˆ)λ₯Ό λ‹€λ£° 수 있게 ν•΄μ£ΌλŠ” μΈν„°νŽ˜μ΄μŠ€. + +> **κ²°λ‘ **: μŠ€ν‚€λ§ˆλŠ” 본질, λͺ¨λΈμ€ κ·Έ λ³Έμ§ˆμ„ 닀루기 μœ„ν•œ μ½”λ“œ μƒμ˜ ν‘œν˜„(껍데기)이닀. ν˜„μ—…μ—μ„œλŠ” λ‘˜μ„ μ„žμ–΄ 쓰기도 ν•˜μ§€λ§Œ, 이 κ°œλ…μ„ κ΅¬λΆ„ν•˜λ©΄ ꡬ쑰λ₯Ό 더 깊이 이해할 수 μžˆλ‹€. + +### 2.3. 객체(Object)와 μΈμŠ€ν„΄μŠ€(Instance) + +- **의미**: 클래슀(섀계도)λ₯Ό λ°”νƒ•μœΌλ‘œ λ©”λͺ¨λ¦¬μ— μ‹€μ œλ‘œ λ§Œλ“€μ–΄μ§„ κ°œλ³„ 싀체. +- **어원**: `Instance`λŠ” '무리 속에 ν•¨κ»˜ μ„œ μžˆλŠ” ν•˜λ‚˜(one of them)', 즉 'ꡬ체적 사둀'λΌλŠ” 뜻. +- **λΉ„μœ **: + - **클래슀**: κΉ€λ°₯ λ ˆμ‹œν”Ό. + - **객체/μΈμŠ€ν„΄μŠ€**: κ·Έ λ ˆμ‹œν”Όλ‘œ μ‹€μ œλ‘œ λ§Œλ“  κΉ€λ°₯ ν•œ 쀄. +- **차이**: 거의 λ™μ˜μ–΄μ§€λ§Œ, **객체**λŠ” 쑴재 자체λ₯Ό, **μΈμŠ€ν„΄μŠ€**λŠ” 'μ–΄λ–€ 클래슀의 사둀'λΌλŠ” 관계λ₯Ό κ°•μ‘°ν•œλ‹€. + +## 3. 파이썬 ν΄λž˜μŠ€μ™€ 객체지ν–₯의 핡심 + +### 3.1. `self` - "λ‚˜ μžμ‹ (객체)" + +- **μ—­ν• **: 클래슀 λ©”μ„œλ“œ μ•ˆμ—μ„œ, "ν˜„μž¬ 이 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κ³  μžˆλŠ” 객체 μžμ‹ "을 가리킨닀. +- **ν•„μš”μ„±**: `self`κ°€ μ—†λ‹€λ©΄, 같은 클래슀둜 λ§Œλ“  μ—¬λŸ¬ 객체(κΉ€λ°₯ 100쀄) 쀑 μ–΄λŠ 객체(μ–΄λ–€ κΉ€λ°₯)의 속성을 λ°”κΏ”μ•Ό ν• μ§€ ꡬ뢄할 수 μ—†λ‹€. 객체의 'κ°œλ³„μ„±'을 보μž₯ν•˜κΈ° μœ„ν•΄ ν•„μˆ˜μ μ΄λ‹€. +- **λ™μž‘**: `u.greet()`처럼 ν˜ΈμΆœν•˜λ©΄, 파이썬이 μžλ™μœΌλ‘œ `User.greet(u)`처럼 `u`λ₯Ό `self` μžλ¦¬μ— λ„£μ–΄μ€€λ‹€. + +### 3.2. `cls` - "우리 κ°€κ²Œ(클래슀)" + +- **μ—­ν• **: `@classmethod` λ°μ½”λ ˆμ΄ν„°κ°€ 뢙은 λ©”μ„œλ“œ μ•ˆμ—μ„œ, "클래슀 μžμ‹ "을 가리킨닀. +- **λΉ„μœ **: κ°œλ³„ κΉ€λ°₯(`self`)이 μ•„λ‹Œ, κΉ€λ°₯ κ°€κ²Œ(`cls`) μ „μ²΄μ˜ 정보(e.g., 였늘 판 κΉ€λ°₯ 총개수)λ₯Ό λ‹€λ£° λ•Œ μ‚¬μš©ν•œλ‹€. + +### 3.3. ν΄λž˜μŠ€μ™€ λ©”νƒ€ν΄λž˜μŠ€ + +- **ν΄λž˜μŠ€λ„ 객체닀**: νŒŒμ΄μ¬μ—μ„œλŠ” `class User:` μžμ²΄λ„ ν•˜λ‚˜μ˜ 객체(`type` 클래슀의 μΈμŠ€ν„΄μŠ€)이닀. +- **λ©”νƒ€ν΄λž˜μŠ€(Metaclass)**: '클래슀λ₯Ό λ§Œλ“œλŠ” 클래슀'. 파이썬의 κΈ°λ³Έ λ©”νƒ€ν΄λž˜μŠ€λŠ” `type`이닀. +- **λΉ„μœ **: + - **μΈμŠ€ν„΄μŠ€**: κΉ€λ°₯ ν•œ 쀄 + - **클래슀**: κΉ€λ°₯ λ ˆμ‹œν”Ό + - **λ©”νƒ€ν΄λž˜μŠ€**: κ·Έ λ ˆμ‹œν”Όλ₯Ό μ°μ–΄λ‚΄λŠ” 곡μž₯ diff --git a/ideas/250917_λ‘œλΉ™_μŠ¬λž™_이λͺ¨ν‹°μ½˜_λ°˜μ‘_κΈ°λŠ₯_κ΅¬ν˜„.md b/ideas/250917_λ‘œλΉ™_μŠ¬λž™_이λͺ¨ν‹°μ½˜_λ°˜μ‘_κΈ°λŠ₯_κ΅¬ν˜„.md new file mode 100644 index 0000000..82f8e93 --- /dev/null +++ b/ideas/250917_λ‘œλΉ™_μŠ¬λž™_이λͺ¨ν‹°μ½˜_λ°˜μ‘_κΈ°λŠ₯_κ΅¬ν˜„.md @@ -0,0 +1,50 @@ +--- +tags: [Slack, API, Emoji, Reaction, Bot] +date: 2025-09-17 +modified: 2025-09-17 +--- + +# λ‘œλΉ™(RO-BEING)의 μŠ¬λž™ 이λͺ¨ν‹°μ½˜ λ°˜μ‘ κΈ°λŠ₯ κ΅¬ν˜„ λ°©μ•ˆ + +이 λ¬Έμ„œλŠ” λ‘œλΉ™ μ—μ΄μ „νŠΈκ°€ μŠ¬λž™ μ±„λ„μ˜ νŠΉμ • λ©”μ‹œμ§€μ— 이λͺ¨ν‹°μ½˜ λ°˜μ‘μ„ μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•˜λŠ” κΈ°λŠ₯의 κ΅¬ν˜„ 방법을 μ •λ¦¬ν•œ κ²ƒμž…λ‹ˆλ‹€. + +## 1. 핡심 μš”μ•½ + +결둠적으둜, λ‘œλΉ™μ€ μŠ¬λž™ μ›Ή API(Slack Web API)λ₯Ό 톡해 νŠΉμ • λ©”μ‹œμ§€μ— 이λͺ¨ν‹°μ½˜ λ°˜μ‘μ„ λ‹€λŠ” 것이 **κ°€λŠ₯ν•©λ‹ˆλ‹€.** + +## 2. ν•„μˆ˜ API 및 κΆŒν•œ + +### 2.1. μ£Όμš” API λ©”μ„œλ“œ + +- **`reactions.add`**: νŠΉμ • λ©”μ‹œμ§€μ— 이λͺ¨ν‹°μ½˜ λ°˜μ‘μ„ μΆ”κ°€ν•©λ‹ˆλ‹€. + - **ν•„μˆ˜ νŒŒλΌλ―Έν„°**: `channel` (채널 ID), `timestamp` (λ©”μ‹œμ§€μ˜ νƒ€μž„μŠ€νƒ¬ν”„), `name` (이λͺ¨ν‹°μ½˜ 이름, 예: `thumbsup`) + +- **`reactions.remove`**: λ‘œλΉ™μ΄ μΆ”κ°€ν–ˆλ˜ 이λͺ¨ν‹°μ½˜ λ°˜μ‘μ„ μ œκ±°ν•©λ‹ˆλ‹€. + - **ν•„μˆ˜ νŒŒλΌλ―Έν„°**: `channel`, `timestamp`, `name` + +> **μ°Έκ³ **: 과거에 μ‚¬μš©λ˜λ˜ `file`, `file_comment` 기반의 λ°˜μ‘ μΆ”κ°€ 방식은 ν˜„μž¬ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. + +### 2.2. ν•„μš” κΆŒν•œ (Bot Token Scopes) + +- **`reactions:write`**: 이λͺ¨ν‹°μ½˜ λ°˜μ‘μ„ μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•˜κΈ° μœ„ν•œ ν•„μˆ˜ κΆŒν•œμž…λ‹ˆλ‹€. +- **`reactions:read`**: νŠΉμ • λ©”μ‹œμ§€μ— 달린 λ°˜μ‘ ν˜„ν™©μ„ μ‘°νšŒν•˜κ±°λ‚˜, λ°˜μ‘ κ΄€λ ¨ 이벀트λ₯Ό μˆ˜μ‹ ν•  λ•Œ ν•„μš”ν•©λ‹ˆλ‹€. + +## 3. μ£Όμš” κ΅¬ν˜„ μ‹œλ‚˜λ¦¬μ˜€ + +μžλ™ν™” μ‹œλ‚˜λ¦¬μ˜€λŠ” 크게 두 κ°€μ§€ λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. + +### μ‹œλ‚˜λ¦¬μ˜€ 1: 직접 트리거 방식 (Direct Trigger) + +- **λ™μž‘ 방식**: μ‚¬μš©μžκ°€ νŠΉμ • μŠ¬λž˜μ‹œ(`/`) λͺ…령을 μž…λ ₯ν•˜κ±°λ‚˜ λ©”μ‹œμ§€μ— μ²¨λΆ€λœ λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄, λ‘œλΉ™μ΄ ν•΄λ‹Ή λ©”μ‹œμ§€μ˜ `channel`κ³Ό `timestamp`λ₯Ό μ¦‰μ‹œ νŒŒμ•…ν•˜μ—¬ `reactions.add` APIλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. +- **μž₯점**: μ‚¬μš©μžμ˜ λͺ…μ‹œμ μΈ μš”μ²­μ— 따라 μ¦‰κ°μ μœΌλ‘œ λ°˜μ‘ν•˜λ―€λ‘œ μ§κ΄€μ μž…λ‹ˆλ‹€. +- **μ˜ˆμ‹œ**: `/done` λͺ…령을 μž…λ ₯ν•˜λ©΄ ν•΄λ‹Ή λ©”μ‹œμ§€μ— `:white_check_mark:` 이λͺ¨ν‹°μ½˜μ„ μΆ”κ°€ν•©λ‹ˆλ‹€. + +### μ‹œλ‚˜λ¦¬μ˜€ 2: 이벀트 ꡬ독 방식 (Event-based Trigger) + +- **λ™μž‘ 방식**: μŠ¬λž™μ˜ Events APIμ—μ„œ `reaction_added` 이벀트λ₯Ό κ΅¬λ…ν•©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ νŠΉμ • λ©”μ‹œμ§€μ— μ •ν•΄μ§„ 이λͺ¨ν‹°μ½˜(예: `:robot_face:`)을 달면, λ‘œλΉ™μ΄ 이벀트λ₯Ό μˆ˜μ‹ ν•˜μ—¬ 후속 λ™μž‘(예: λ‹€λ₯Έ 이λͺ¨ν‹°μ½˜ μΆ”κ°€, μŠ€λ ˆλ“œμ— λ‹΅λ³€ λ“±)을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. +- **μž₯점**: μ‚¬μš©μžμ˜ μžμ—°μŠ€λŸ¬μš΄ 이λͺ¨ν‹°μ½˜ λ°˜μ‘μ„ κ°μ§€ν•˜μ—¬ λŠ₯λ™μ μœΌλ‘œ λ™μž‘μ„ κ°œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. +- **μ˜ˆμ‹œ**: μ‚¬μš©μžκ°€ μ–΄λ–€ λ©”μ‹œμ§€μ— `:question:` 이λͺ¨ν‹°μ½˜μ„ 달면, λ‘œλΉ™μ΄ ν•΄λ‹Ή μŠ€λ ˆλ“œμ— "무엇을 λ„μ™€λ“œλ¦΄κΉŒμš”?"라고 닡변을 λ‚¨κΉλ‹ˆλ‹€. + +## 4. λ‹€μŒ 단계 + +ꡬ체적인 κ΅¬ν˜„μ— μ•žμ„œ, μ–΄λ–€ μ‹œλ‚˜λ¦¬μ˜€(κ·œμΉ™ 기반 μžλ™ λ°˜μ‘ vs. μ‚¬μš©μž μˆ˜λ™ 트리거)λ₯Ό μš°μ„ μ μœΌλ‘œ κ°œλ°œν• μ§€ κ²°μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 결정에 따라 ν•„μš”ν•œ μ„ΈλΆ€ κ΅¬ν˜„ 지침이 λ‹¬λΌμ§‘λ‹ˆλ‹€. diff --git a/ideas/250917_μ μ‘ν˜•_μžλ™ν™”μ™€_AI_μ—μ΄μ „νŠΈ_κ³ μ°°.md b/ideas/250917_μ μ‘ν˜•_μžλ™ν™”μ™€_AI_μ—μ΄μ „νŠΈ_κ³ μ°°.md new file mode 100644 index 0000000..e570c55 --- /dev/null +++ b/ideas/250917_μ μ‘ν˜•_μžλ™ν™”μ™€_AI_μ—μ΄μ „νŠΈ_κ³ μ°°.md @@ -0,0 +1,62 @@ +--- +tags: [AI, Agent, Automation, AdaptiveAutomation, CognitiveAutomation, NLP] +date: 2025-09-17 +modified: 2025-09-17 +--- + +# AI μ—μ΄μ „νŠΈ, μ μ‘ν˜• μžλ™ν™”, 그리고 λΉ„μ¦ˆλ‹ˆμŠ€ λͺ¨λΈμ— λŒ€ν•œ κ³ μ°° + +이 λ¬Έμ„œλŠ” AI μ—μ΄μ „νŠΈμ˜ μ§€μ‹œλ¬Έ, μ½”λ“œμ˜ μ—­ν•  λ³€ν™”, 그리고 μƒˆλ‘œμš΄ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μΈ 'μ μ‘ν˜• μžλ™ν™”'에 λŒ€ν•œ λŒ€ν™” λ‚΄μš©μ„ μ •λ¦¬ν•œ κ²ƒμž…λ‹ˆλ‹€. + +## 1. λ¬Έμ„œ, μ½”λ“œ, 그리고 쑴재의 ν™•μž₯ + +- **λ¬Έμ„œμ˜ 근본적 λͺ©μ **: 인간이 λ¬Έμ„œλ₯Ό λ§Œλ“œλŠ” μ΄μœ λŠ” μžμ‹ μ˜ 생각, 지식, 감정, κ²½ν—˜μ„ κ³΅μœ ν•˜κ³ , μ‹œκ°„κ³Ό 곡간을 λ„˜μ–΄ λ‹€λ₯Έ 이듀과 μ†Œν†΅ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€. μ΄λŠ” μžμ‹ μ˜ 쑴재λ₯Ό λ‹€λ₯Έ μ‘΄μž¬μ—κ²Œ 영ν–₯을 미침으둜써 ν™•μž₯ν•˜λ €λŠ” 근본적인 μš•κ΅¬μ—μ„œ λΉ„λ‘―λ©λ‹ˆλ‹€. + - **μ„€λͺ…λ¬Έ**: 정보 전달, 지식 곡유 (예: κ΅κ³Όμ„œ, 백과사전) + - **λ…Όμ„€λ¬Έ**: μ£Όμž₯, 섀득 (예: 사섀, 칼럼) + - **μ„œμ‚¬λ¬Έ**: 이야기, κ²½ν—˜ 전달 (예: μ†Œμ„€, 일기) + - **μ°½μž‘λ¬Έ**: 예술적 ν‘œν˜„ (예: μ‹œ, 희곑) + +- **μ½”λ“œμ˜ 본질**: μ½”λ“œλŠ” 'μ»΄ν“¨ν„°μ—κ²Œ 절차λ₯Ό μ„€λͺ…ν•˜λŠ” 맀우 λͺ…ν™•ν•˜κ³  μ—„κ²©ν•œ μ„€λͺ…λ¬Έ'μž…λ‹ˆλ‹€. + - μžμ—°μ–΄μ˜ λͺ¨ν˜Έμ„±μ„ μ œκ±°ν•˜κ³ , 기계가 μ˜λ„λŒ€λ‘œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•˜λ„λ‘ 보μž₯ν•˜λŠ” 데 λͺ©μ μ΄ μžˆμŠ΅λ‹ˆλ‹€. + - μš”λ¦¬ λ ˆμ‹œν”Ό, 곡정 맀뉴얼, 쑰립 μ„€λͺ…μ„œμ²˜λŸΌ, λͺ…ν™•ν•œ κ²°κ³Όλ₯Ό μœ„ν•΄ ꡬ체적인 절차λ₯Ό λͺ…μ‹œν•˜λŠ” λ¬Έμ„œμ™€ μœ μ‚¬ν•œ λͺ©μ μ„ κ°€μ§‘λ‹ˆλ‹€. + +## 2. AI μ—μ΄μ „νŠΈμ™€ μ½”λ“œμ˜ μ§„ν™”: μ μ‘ν˜• μžλ™ν™” + +- **μ§€μ‹œλ¬Έμ˜ λ³€ν™”**: κΈ°μ‘΄ ν”„λ‘œκ·Έλž˜λ°μ΄ 'μ—„κ²©ν•œ μ½”λ“œ'λ₯Ό μš”κ΅¬ν–ˆλ‹€λ©΄, AI μ—μ΄μ „νŠΈμ—κ²ŒλŠ” 'λͺ¨ν˜Έν•œ μžμ—°μ–΄'둜 μ§€μ‹œλ₯Ό λ‚΄λ¦½λ‹ˆλ‹€. μ΄λŠ” 마치 유λŠ₯ν•œ μ§μ›μ—κ²Œ μ§€μ‹œν•˜λŠ” 것과 μœ μ‚¬ν•©λ‹ˆλ‹€. + +- **μ—μ΄μ „νŠΈμ˜ μ—­ν• **: μ—μ΄μ „νŠΈλŠ” λͺ¨ν˜Έν•œ μ§€μ‹œμ˜ 'μ˜λ„'λ₯Ό νŒŒμ•…ν•˜κ³ , λ³€ν™”ν•˜λŠ” ν™˜κ²½μ— '적응'ν•˜μ—¬ 과업을 μ™„μˆ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. + +- **μ½”λ“œμ˜ μœ μ—°μ„±**: λ”°λΌμ„œ μ—μ΄μ „νŠΈκ°€ μ‚¬μš©ν•˜λŠ” μ½”λ“œλŠ” κ³ μ •λœ 절차λ₯Ό λ”°λ₯΄λŠ” 것이 μ•„λ‹ˆλΌ, μ˜λ„μ— 따라 μœ μ—°ν•˜κ²Œ μˆ˜μ •λ˜κ³  μ μ‘ν•˜λŠ” ν˜•νƒœκ°€ λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. + - **μ˜ˆμ‹œ**: "넀이버 λ‘œκ·ΈμΈν•΄"λΌλŠ” μ§€μ‹œλ₯Ό λ°›μ•˜μ„ λ•Œ, 둜그인 λ²„νŠΌμ˜ UI μš”μ†Œ(클래슀λͺ…, μœ„μΉ˜ λ“±)κ°€ λ³€κ²½λ˜λ”λΌλ„, '둜그인'μ΄λΌλŠ” λͺ©μ μ„ λ‹¬μ„±ν•˜κΈ° μœ„ν•΄ 슀슀둜 λŒ€μƒμ„ μ°Ύμ•„ μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. + +- **μƒˆλ‘œμš΄ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„**: μ΄λŠ” ν˜„μž¬μ˜ Python, C++ 같은 μ–Έμ–΄λ§ŒμœΌλ‘œλŠ” μ™„λ²½νžˆ κ΅¬ν˜„ν•˜κΈ° μ–΄λ €μš΄ μƒˆλ‘œμš΄ κ°œλ…μ΄λ©°, λ‹€μŒκ³Ό 같은 μš©μ–΄λ“€λ‘œ λ…Όμ˜λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. + - **μ μ‘ν˜• μžλ™ν™” (Adaptive Automation)** + - **μžμ—°μ–΄ μΈν„°νŽ˜μ΄μŠ€ 기반 ν”„λ‘œκ·Έλž˜λ° (Natural Language Interface-based Programming)** + - **인지적 μžλ™ν™” (Cognitive Automation)** + +## 3. κ΄€λ ¨ 연ꡬ 동ν–₯ + +- **μ μ‘ν˜• μžλ™ν™” (Adaptive Automation)**: μ‹œμŠ€ν…œ μƒνƒœ, μΈκ°„μ˜ 인지 λΆ€ν•˜, μž‘μ—… ν™˜κ²½ 등을 λ°”νƒ•μœΌλ‘œ μžλ™ν™” μˆ˜μ€€(Level of Automation, LOA)을 λ™μ μœΌλ‘œ μ‘°μ •ν•˜λŠ” 섀계 원칙을 λ‹€λ£Ήλ‹ˆλ‹€. (Bernabei et al., 2024) + +- **κ°•ν™”ν•™μŠ΅ 기반 인지 μžλ™ν™”**: 전톡적인 κ·œμΉ™ 기반 RPA(Robotic Process Automation)의 ν•œκ³„λ₯Ό λ„˜μ–΄, κ°•ν™”ν•™μŠ΅(RL)을 톡해 UI λ³€κ²½, μž…λ ₯ 였λ₯˜ λ“± λ³€ν™”ν•˜λŠ” ν™˜κ²½μ— μžλ™ν™” ν”„λ‘œμ„ΈμŠ€κ°€ μ μ‘ν•˜λ„λ‘ λ§Œλ“œλŠ” μ—°κ΅¬μž…λ‹ˆλ‹€. (Debbadi & Boateng et al., 2025) + +- **μžμ—°μ–΄-μ½”λ“œ λ³€ν™˜ (NL-to-Code)**: 데이터 κ³Όν•™ λ…ΈνŠΈλΆ ν™˜κ²½μ—μ„œ μ‚¬μš©μžμ˜ μžμ—°μ–΄ μ˜λ„μ™€ 이전 μ…€μ˜ λ§₯락을 νŒŒμ•…ν•˜μ—¬ μ½”λ“œλ₯Ό μƒμ„±ν•˜λŠ” 연ꡬ(ARCADE, PACHINCO)λŠ” μžμ—°μ–΄ μ§€μ‹œμ˜ μœ μ—°ν•œ μ½”λ“œ λ³€ν™˜ κ°€λŠ₯성을 λ³΄μ—¬μ€λ‹ˆλ‹€. (Google Research, 2023) + +- **핡심 κ°œλ…**: + - **μžλ™ν™” μˆ˜μ€€ (LOA)**: κ³ μ •λœ μžλ™ν™”κ°€ μ•„λ‹Œ, 상황에 따라 λ™μ μœΌλ‘œ μˆ˜μ€€μ„ μ‘°μ ˆν•˜λŠ” λŠ₯λ ₯. + - **μ˜ˆμ™Έ 처리 / λŒ€μ²΄ 경둜 (Exception Handling / Fallback)**: νŠΉμ • μš”μ†Œ μ‹€νŒ¨ μ‹œ, λŒ€μ²΄ 경둜λ₯Ό νƒμƒ‰ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜. + - **인간 μ°Έμ—¬ 루프 (Human-in-the-loop)**: μžλ™ν™”κ°€ λͺ¨ν˜Έμ„±μ„ ν•΄κ²°ν•˜κ±°λ‚˜ 쀑간 κ²°κ³Όλ₯Ό μŠΉμΈλ°›κΈ° μœ„ν•΄ 인간과 μƒν˜Έμž‘μš©ν•˜λŠ” ꡬ쑰. + - **λ¬Έλ§₯ 인식 (Contextual Awareness)**: μžμ—°μ–΄ μ§€μ‹œμ™€ ν•¨κ»˜ UI μƒνƒœ, 이전 행동 λ“± μ£Όλ³€ ν™˜κ²½μ„ ν•¨κ»˜ κ³ λ €ν•˜λŠ” 섀계. + - **μ„€λͺ… κ°€λŠ₯μ„± (Explainability)**: μžλ™ν™” μ‹œμŠ€ν…œμ΄ μ™œ κ·Έλ ‡κ²Œ ν–‰λ™ν–ˆλŠ”μ§€ μ‚¬μš©μžμ—κ²Œ μ„€λͺ…ν•˜μ—¬ μ‹ λ’°λ₯Ό μœ μ§€ν•˜λŠ” λŠ₯λ ₯. + +## 4. μ‹€μš©μ  적용: 유튜브λ₯Ό ν†΅ν•œ ν•™μŠ΅κ³Ό λΉ„μ¦ˆλ‹ˆμŠ€ λͺ¨λΈ + +- **유튜브λ₯Ό ν†΅ν•œ ν”„λ‘œκ·Έλž¨ ν•™μŠ΅**: AI μ—μ΄μ „νŠΈλŠ” 유튜브 μ˜μƒμ„ 톡해 ν”„λ‘œκ·Έλž¨ μ‚¬μš©λ²•μ„ ν•™μŠ΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. + - **νŒŒμ΄ν”„λΌμΈ**: μ˜μƒ 검색 β†’ μžλ§‰/μŒμ„±μœΌλ‘œ 전사(transcript) 확보 β†’ LLM으둜 절차 μΆ”μΆœ β†’ νƒ€μž„μŠ€νƒ¬ν”„μ™€ μ—°κ²°ν•˜μ—¬ 단계별 ν•™μŠ΅ μ½”μŠ€ ꡬ성. + - **μ—μ΄μ „νŠΈ κ²°ν•©**: μ‚¬μš©μžμ˜ ν˜„μž¬ ν™”λ©΄/였λ₯˜λ₯Ό μΈμ§€ν•˜μ—¬ ν•„μš”ν•œ μ˜μƒ ꡬ간을 μΆ”μ²œν•˜κ³ , ν…μŠ€νŠΈ 절차λ₯Ό ν•¨κ»˜ μ œκ³΅ν•˜λŠ” 'μ½”μΉ˜ λͺ¨λ“œ'둜 μž‘λ™ κ°€λŠ₯. + +- **RO-BEING ν”„λ‘œμ νŠΈμ˜ μˆ˜μ΅μ„±**: λŒ€ν™”μ—μ„œ μ–ΈκΈ‰λœ 'λ‘œλΉ™' ν”„λ‘œμ νŠΈλŠ” λ‹€μŒκ³Ό 같은 μΈ‘λ©΄μ—μ„œ μΆ©λΆ„ν•œ 사업적 κ°€μΉ˜λ₯Ό κ°€μ§‘λ‹ˆλ‹€. + - **B2B κ°€μΉ˜**: μŠ€νƒ€νŠΈμ—… λŒ€ν‘œ λ“± κΈ°μ—… μ‚¬μš©μžμ˜ 생산성 ν–₯상, 리슀크 κ°μ†Œ, μ‹ μ†ν•œ μ˜μ‚¬κ²°μ • 지원을 톡해 λͺ…ν™•ν•œ κ°€μΉ˜λ₯Ό 제곡. + - **프리미엄 κΈ°λŠ₯**: κΈ΄κΈ‰ μž₯μ•  λŒ€μ‘, M&A 뢄석 등은 높은 λΉ„μš©μ„ μ§€λΆˆν•  λ§Œν•œ 차별화 μš”μ†Œ. + - **ν”Œλž«νΌ ν™•μž₯μ„±**: μŠ€ν‚¬ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€μ™€ 토큰 κ²½μ œλŠ” μž₯기적인 ν”Œλž«νΌ 수읡 λͺ¨λΈλ‘œ λ°œμ „ κ°€λŠ₯. + - **μ—”ν„°ν”„λΌμ΄μ¦ˆ μ‹œμž₯**: μ •κ΅ν•œ 윀리/μ•ˆμ „ ν”„λ ˆμž„μ›Œν¬λŠ” B2B 및 μ •λΆ€ κΈ°κ΄€ λŒ€μƒ νŒλ§€μ— μœ λ¦¬ν•œ μš”μ†Œ.