실습 ②: Excel 을 “데이터 저장소” 로 — CRUD 3가지 길
| 시간 | 소요 | 수강생 역할 |
|---|---|---|
| 14:40 | 25분 | 🟢 직접 실습 |
목차
- 이 실습의 목표
- “지식” 과 “데이터 저장소” — 같은 파일, 다른 시선
- Excel 외 대안 — 짧게 짚고 가기
- Excel 데이터를 CRUD 하는 3가지 길
- ① Excel 커넥터 — 도구로 바로 등록
- ② 에이전트 흐름 + Excel 커넥터 — 로우코드 데이터 가공
- ③ 에이전트 흐름 + Office Script — 가장 안정적
- 3가지 길 — 한눈에 비교
- 의사결정 가이드 — 짧게
- Excel 졸업 — 한계가 보이면
- 정리 — 두 실습 합치면
이 실습의 목표
- Excel 을 지식 (Knowledge) 이 아니라 데이터 저장소 (Data Store) 로 보는 관점 전환
- 에이전트가 Excel 데이터를 읽고 쓰는 3가지 길 비교
- 가장 안정적인 길 — 에이전트 흐름 + Office Script 의 장점·단점·제한사항 정직하게 정리
이 실습의 핵심 관점 전환 — 같은 Excel 파일이라도 읽기만 한다면 실습 ① 의 “지식” 으로 보면 되지만, 읽고 쓴다 면 그것은 더 이상 “지식” 이 아니라 “데이터 저장소” 입니다. 데이터 저장소 관점에서는 정확성·갱신·쓰기·성능이 모두 중요해지고, 자연스럽게 흐름·스크립트 영역으로 옮겨갑니다.
“지식” 과 “데이터 저장소” — 같은 파일, 다른 시선
| 지식 (실습 ①) | 데이터 저장소 (이번 실습 ②) | |
|---|---|---|
| 목적 | 읽고 답변 | 읽기 + 쓰기 (CRUD) |
| 원리 | AI 가 문서를 읽고 해석 | 흐름이 데이터를 정확히 조회·수정 |
| 비유 | 사서가 책을 읽어주는 것 | 직원이 데이터베이스를 조작하는 것 |
| 갱신 | 인덱싱 지연 | 실시간 반영 |
| 정확도 | 의미 검색 (유사 답변) | 결정적 결과 |
| 쓰기 | 불가 | 가능 |
| 구축 비용 | 5~10분 | 30분~1시간 |
"운영 환경 Linux 서버 목록 알려줘"
지식 (의미 검색): "운영 환경에는 여러 Linux 서버가 있으며..." ← 누락·환각 가능
데이터 저장소 : Env=LIVE AND OSType=Linux 필터 → 정확히 17건 반환
Excel 외 대안 — 짧게 짚고 가기
“데이터 저장소” 관점에서 Excel 만이 정답은 아닙니다. 사내 시나리오에 따라 다음도 좋은 선택지입니다.
| 대안 | 특징 | 언제 쓰나 |
|---|---|---|
| SharePoint 목록 | 정형 데이터를 위한 가장 자연스러운 사내 저장소. 권한·뷰·자동화 트리거 풍부 | 협업이 잦고, 스키마가 안정적이며, 사용자가 SharePoint 환경에 익숙할 때 |
| JSON 파일 in SharePoint 문서 라이브러리 | 가벼운 스키마, 흐름에서 직접 파싱 | 키-값 매핑·환경 설정·간단한 마스터 데이터 |
| Excel | 사용자가 가장 익숙. 시트·테이블·수식 그대로 쓸 수 있음 | 업무 담당자가 이미 Excel 로 일하고 있는 경우 — 사내 현실에서 가장 흔한 시나리오 |
이 실습은 “사용자가 이미 Excel 로 일하고 있는 현실” 에 집중합니다. SharePoint 목록·JSON 도 같은 CRUD 패턴이 적용되니, 한 번 익혀두면 전이가 쉽습니다.
Excel 데이터를 CRUD 하는 3가지 길
단순 ──────────────────────────── 복잡·강력
┌─────────────────┐ ┌────────────────────────────┐ ┌─────────────────────────────┐
│ ① Excel 커넥터 │ │ ② 에이전트 흐름 │ │ ③ 에이전트 흐름 │
│ (도구로 직접) │ │ + Excel 커넥터 │ │ + Office Script │
├─────────────────┤ ├────────────────────────────┤ ├─────────────────────────────┤
│ 가장 간단 │ │ 더 다양한 로직 처리 │ │ 가장 안정적 / 대용량 │
│ 기본과정 M12 체험 │ │ 로우코드 데이터 가공 │ │ 프로코드 (TypeScript) │
│ │ │ 행 수 ↑ 시 성능 한계 │ │ Excel Copilot 도움 │
└─────────────────┘ └────────────────────────────┘ └─────────────────────────────┘
① Excel 커넥터 — 도구로 바로 등록
가장 간단한 길. Copilot Studio 의 도구 에서 Excel Online 커넥터를 직접 등록합니다.
기본과정에서 이미 체험
기본과정 M12 — 커넥터 에서 Excel 테이블에 행 추가 를 손에 익혔습니다. 같은 커넥터로 다음 4가지 모두 가능합니다.
| CRUD | Excel 커넥터 액션 |
|---|---|
| Create | 테이블에 행 추가 |
| Read | 테이블에 있는 행 나열 / 키-값으로 행 가져오기 |
| Update | 키-값으로 행 업데이트 |
| Delete | 키-값으로 행 삭제 |
특징
| 항목 | 내용 |
|---|---|
| 구축 시간 | 5~10분 (도구 등록 + 입력 변수 설명) |
| 흐름 필요 | 불필요 (도구만으로 끝) |
| 적합한 시나리오 | 단일 액션, 단순 필터, 단건 추가/수정 |
| 한계 | 다단계 로직 (조회 → 가공 → 다른 액션) 불가 |
“회의 일정 등록 / 직원 정보 조회” 처럼 단일 액션 으로 떨어지면 ① 만으로 충분합니다. 흐름까지 갈 필요 없음.
권장 패턴 — 도구 설명·입력 변수에 한국어 설명
| 입력 변수 | 라벨·설명 |
|---|---|
| Location (사이트) | OneDrive 또는 SharePoint 사이트 URL |
| File (파일) | 대상 Excel 파일 경로 |
| Table (테이블) | 테이블 이름 (예: AssetTable) |
Filter ($filter) |
OData 조건식 (예: Env eq 'LIVE') — 선택 |
② 에이전트 흐름 + Excel 커넥터 — 로우코드 데이터 가공
같은 Excel 커넥터를 에이전트 흐름 안에서 호출합니다. 흐름으로 들어왔으니 다단계 로직이 가능해집니다.
무엇이 더 되나
| 가능해지는 것 | 예시 |
|---|---|
| 다단계 처리 | “조회 → 다른 시트와 매칭 → 결과 정리 → 응답” |
| 조건 분기 | 결과 0건이면 “없음” 응답, 1건이면 상세, N건이면 요약 |
| 데이터 가공 | “CSV 테이블 만들기” / “필터 배열” / “선택” 액션 |
| 다른 커넥터와 결합 | Outlook 메일 발송·Teams 알림 등 |
아키텍처
👤 질문
↓
🤖 에이전트 → 흐름 호출
↓
⚡ Excel 커넥터 — "테이블 행 나열" / "행 추가" / "행 업데이트"
↓
🔄 데이터 조작 액션 — 필터 / 매핑 / CSV 변환 / AI 프롬프트
↓
📋 응답 (테이블 / 요약 / 카드)
결정적 단점 — 성능
| 항목 | 내용 |
|---|---|
| 구간 | 행 나열 액션이 OData 페이징 으로 데이터를 가져옴 |
| 한계 | 행 수가 수백 건 이상이면 흐름 실행 시간이 급격히 증가 |
| 체감 | “왜 이렇게 느리지?” 가 발생하는 가장 흔한 지점 |
| 가공 단계 | “필터 배열·선택” 액션도 행 수에 비례해 느려짐 |
흐름 안에서 Excel 커넥터로 수백~수천 건을 다루면 응답 시간이 사용자 인내심을 넘는 경우가 많습니다. 이 시점에서 ③ Office Script 로 옮기는 것이 정답.
잘 맞는 시나리오
- 행 수 적음 (수십~수백 건) + 다단계 로직 필요
- 매주 1회 같이 빈도 낮은 운영 작업 (성능보다 만들기 쉬움이 우선)
- 데이터 가공 일부는 AI 프롬프트로 위임 (요약·분류)
③ 에이전트 흐름 + Office Script — 가장 안정적
오전 S2 — 엑셀 업로드 활용 실습 에서 이미 체험했습니다. 같은 도구 군을 CRUD 데이터 저장소 시나리오로 다시 옮겨 씁니다.
무엇이 본질적으로 다른가
| ② 흐름 + 커넥터 | ③ 흐름 + Office Script | |
|---|---|---|
| 데이터 처리 위치 | 흐름 (Power Automate 런타임) | Excel 자체 (Excel Online 런타임) |
| 처리 단위 | 한 번에 한 행씩 액션 호출 | 시트 전체를 한 번에 TypeScript 로 가공 |
| 행 수 ↑ 시 성능 | 급격히 느려짐 | 거의 일정 (한 번 호출에 처리) |
| 정밀 제어 | 커넥터 액션이 제공하는 만큼 | 셀·범위·서식·테이블·차트 모두 |
아키텍처
👤 질문
↓
🤖 에이전트 → 흐름 호출 (queryJson 전달)
↓
⚡ "Run script" 액션 호출
↓
🐍 Office Script (TypeScript)
- 워크북 열고
- 테이블/시트에서 정확히 필터·집계·CRUD
- JSON 으로 결과 반환
↓
📋 응답
Office Script 의 장점
| 장점 | 설명 |
|---|---|
| 성능 | 한 번 호출에 수천 행 처리 가능. 흐름 액션 N번 호출보다 압도적으로 빠름 |
| 정밀 제어 | 셀·범위·테이블·서식·차트까지 모두 제어. 결정적 (LLM 환각 없음) |
| CRUD 완전 지원 | 추가·수정·삭제·읽기 모두 자연스럽게 |
| Excel Copilot 으로 작성 | Excel 의 Copilot 패널에서 자연어 → Office Script 생성 가능 → 코딩 부담 감소 |
| 스크립트 재사용 | 한 번 만들어두면 여러 흐름·여러 에이전트에서 호출 |
Office Script 의 단점·제한사항
| 항목 | 내용 |
|---|---|
| 언어 | TypeScript — 프로코드 영역 살짝 진입. JavaScript 경험 없으면 학습 곡선 |
| 실행 환경 | Excel for the Web (브라우저), Excel for Windows 일부 환경. Excel for Mac · 모바일 미지원 |
| 실행 시간 | 단일 실행 약 5분 한도 |
| 외부 호출 | fetch 가능하지만 인증·CORS 제약 있음. 사내 API 호출은 흐름 단계에서 처리 권장 |
| 입출력 형식 | “Run script” 액션의 입출력은 문자열·기본형 위주. 복잡 객체는 JSON 직렬화 우회 |
| 라이선스/플랜 | Microsoft 365 Business Standard 이상에서 사용 가능. 테넌트 정책으로 비활성화될 수 있음 |
| 공유 | 스크립트는 OneDrive 또는 SharePoint 사이트에서 공유 — 권한 관리 필요 |
장단점 한 줄 요약
“코딩 부담 약간 + 라이선스·환경 제약 약간” 을 받아들이면 성능·정확성·확장성을 한 번에 얻습니다. Excel 시나리오에서 운영급으로 가는 길은 사실상 이것이 정답 입니다.
권장 골격 (참고)
function main(
workbook: ExcelScript.Workbook,
queryJson: string // 에이전트가 LLM 으로 만든 쿼리 JSON
): string {
const query = JSON.parse(queryJson);
const table = workbook.getTable("AssetTable");
const headers = table.getHeaderRowRange().getValues()[0] as string[];
const rows = table.getRangeBetweenHeaderAndTotal().getValues();
// 정확한 필터 — 결정적
const filtered = rows.filter(row => {
let ok = true;
if (query.env) ok = ok && String(row[headers.indexOf("Env")]) === query.env;
if (query.osType) ok = ok && String(row[headers.indexOf("OSType")]) === query.osType;
if (query.keyword) ok = ok && row.map(String).join(",").includes(query.keyword);
return ok;
});
// 결과 30건 제한 + JSON 으로 반환
const data = filtered.slice(0, 30).map(row => {
const obj: Record<string, string> = {};
headers.forEach((h, i) => obj[h] = String(row[i]));
return obj;
});
return JSON.stringify({
totalCount: filtered.length,
truncated: filtered.length > 30,
data
});
}
쓰기 (Update / Delete / Create) 도 같은 골격에 table.addRow / row.delete 등을 더하면 됩니다.
Excel Copilot 으로 작성하기 — 코딩 부담 줄이기
- Excel 웹에서 자동화 → 새 스크립트 → Copilot 에게 묻기
- 자연어로 요구 작성:
AssetTable 에서 Env 가 "LIVE" 이고 OSType 이 "Linux" 인 행을 JSON 으로 반환하는 함수. main 함수의 인자는 queryJson 문자열로 받고 안에서 JSON.parse 해서 env, osType 키를 사용해. - 생성된 코드를 검토·다듬기 (변수명·예외 처리)
- Power Automate 의 “Run script” 에서 호출
Excel Copilot 이 만들어주는 코드는 컴파일 가능한 출발점 입니다. 90% 정도는 그대로 쓸 수 있고, 나머지는 입출력 시그니처 (
function main(workbook, ...)) 와 반환 타입을 다듬는 정도면 충분합니다.
3가지 길 — 한눈에 비교
| ① Excel 커넥터 (도구) | ② 흐름 + Excel 커넥터 | ③ 흐름 + Office Script | |
|---|---|---|---|
| 난이도 | ★☆☆ | ★★☆ | ★★★ |
| 흐름 필요 | ✗ | ✓ | ✓ |
| 다단계 로직 | ✗ | ✓ | ✓ |
| 데이터 규모 | 작음 (~수십 건) | 중간 (~수백 건, 단 성능 한계) | 큼 (~수천 건) |
| 성능 안정성 | 보통 | 불안정 (행 수 비례) | 매우 안정 |
| CRUD | ✓ | ✓ | ✓ (가장 자연스러움) |
| 코딩 부담 | 없음 | 거의 없음 (액션 클릭) | TypeScript 약간 (Excel Copilot 도움) |
| 라이선스 제약 | 일반 Microsoft 365 | 일반 Microsoft 365 | Business Standard 이상 |
의사결정 가이드 — 짧게
Excel 을 데이터 저장소로 쓰고 싶다
│
├─ 단일 액션? (단순 조회·추가·수정)
│ └─→ ① Excel 커넥터를 도구로 등록
│
├─ 다단계 로직 필요 + 행 수 적음 (~수백)?
│ └─→ ② 에이전트 흐름 + Excel 커넥터
│
├─ 행 수 많음 (~수천) 또는 성능 안정성 중요?
│ └─→ ③ 에이전트 흐름 + Office Script
│
└─ Excel 자체가 한계? (협업·공유·대용량)
└─→ Excel 졸업 (다음 섹션)
Excel 졸업 — 한계가 보이면
데이터가 더 커지거나, 여러 에이전트·앱에서 공유해야 하면 저장소 자체를 옮길 수도 있습니다.
| 옵션 | 특징 |
|---|---|
| SharePoint 리스트 | Excel 에서 테이블 → 리스트로 내보내기. 뷰·필터·권한·트리거 풍부. CRUD 는 거의 동일한 흐름 + SP 커넥터로 전이 가능 |
| Dataverse | 관계형 DB · 보안 역할 · ALM · 대용량. 엔터프라이즈급 시나리오에 적합 |
SP 리스트 / Dataverse 로 옮겨도 에이전트에서 보는 패턴 (도구 / 흐름) 은 동일합니다. 바뀌는 건 커넥터·테이블 정의뿐이라 전이 비용이 낮습니다.
정리 — 두 실습 합치면
| 실습 ① — 지식 4가지 | 실습 ② — 데이터 저장소 3가지 | |
|---|---|---|
| 목적 | 읽고 답하기 | 읽기 + 쓰기 (CRUD) |
| 결론 | “②(직접 업로드) 또는 ④(커스텀 KS) 만 살아남음” | “단일 액션 → ① / 다단계 → ② / 운영급 → ③” |
| 시나리오 | 직원 명단 조회 등 | 자산 대장·이슈 트래킹·운영 데이터 입출력 |
S6 의 결론 — Excel 을 만나면 먼저 “읽기만 인가, 읽고 쓰기 인가” 를 묻고, 후자라면 흐름 + Office Script 로 가는 길이 운영 안정성을 가장 잘 보장합니다.
다음 모듈: S7. 입력 구조화 — 엔티티 + AI 프롬프트