오피스ㆍ협업

'스프레드시트에 무한자유를' MS 그래프 API로 엑셀 확장하기

Simon Bisson | InfoWorld 2021.12.15
엑셀은 마이크로소프트의 가장 인기 있는 개발자 툴이다. 엑셀에 내장된 함수형 프로그래밍 언어는 람다와 변수까지 지원한다. 업무 전반에서 대량의 데이터를 관리하고 탐색할 때 엑셀을 사용한다. 대형 은행에서 스프레드시트 기반의 예측 모델을 사용한다는 점을 고려하면 글로벌 경제의 상당 부분이 엑셀에 의존한다 해도 과언이 아니다.
 
ⓒ Microsoft

그러나 엑셀 애플리케이션에는 한 가지 큰 문제가 있다. 사용하기가 어렵고 다른 애플리케이션에 집어넣기도 어렵다는 점이다. 몇 개월에 걸쳐 만든 복잡한 시뮬레이션은 업무용 애플리케이션에 이상적일 수 있지만 이 시뮬레이션은 독립적인 애플리케이션이다. 즉, 다른 코드에서 활용할 수 있는 서비스로 설계되지 않았다. 스프레드시트는 예측이나 분석의 자동화와는 거리가 멀고 여전히 수동 워크플로우에 속한다.
 

마이크로소프트 그래프를 이용한 엑셀 확장

마이크로소프트는 오피스 애플리케이션을 사용한 작업을 웹 기반 접근 방식으로 전환했는데, 이를 기점으로 엑셀을 사용한 작업 측면에서 새로운 기회가 열렸다. 즉, 자바스크립트 API를 사용해 맞춤형 엑셀 추가 기능을 업무용 시스템에 연결하거나 마이크로소프트 그래프 엔드포인트를 사용해 승인된 애플리케이션에서 엑셀 기능을 호출할 수 있다. 특히 후자가 흥미롭다. 기업용 원드라이브에 저장된 엑셀 스프레드시트를 헤드리스 애플리케이션(headless application)으로 실행할 수 있기 때문이다.

그래프 API를 사용하는 방법은 간단하다. 그래프 API는 모든 호출에 대한 공통된 구조가 있는 REST API 집합이다. 이를 통해 원드라이브에 액세스하는 URL을 신속하게 만들 수 있는데, 스프레드시트나 워크북을 사용한 작업에서는 그래프 API만으로 충분하다. 단, 개인용 원드라이브 계정은 사용할 수 없다. 애저 액티브 디렉터리에 의해 제어되는 셰어포인트 기반 비즈니스 계정이 필요하다.

빠르게 그래프 API를 활용하고 싶다면 무료 90일 개발자 테넌트를 쓰면 된다(횟수에 제한 없이 갱신 가능). 개발자 테넌트에는 마이크로소프트 그래프 애플리케이션 구축을 시작하는 데 필요한 모든 툴이 포함된다.
 

REST를 통한 엑셀 활용

먼저 애저 액티브 디렉터리 API를 사용해 애플리케이션에 적절한 권한을 부여한다. 그래야 이 API가 마이크로소프트 그래프에 대한 REST 호출을 전달하는 액세스 토큰을 생성할 수 있다. 애플리케이션에서 엑셀을 어떻게 사용할지에 따라 애플리케이션에 읽기 전용 또는 읽기/쓰기 액세스 권한이 필요하다. 작업 관리자에 의해 업데이트되는 워크북에서 데이터를 추출하는 애플리케이션이라면 읽기 전용이 적절하고, 들어오는 데이터에 함수를 적용하고 외부 데이터 소스를 다루는 워크북에는 읽기/쓰기 액세스 권한이 적합하다.

엑셀 API를 다룰 때 또 한가지 생각할 점은 액세스하는 워크북을 사용하는 방법이다. 모든 쓰기가 다른 세션에서 액세스가 가능한, 데이터베이스와 비슷한 영구 데이터 저장소인가? 아니면 세션이 종료될 때 모든 변경도 손실되는 비영구적 저장소인가? 2가지 접근 방법 모두 각자의 용도가 있다.

비영구 방식은 분석 애플리케이션, 함수 또는 엑셀의 차트 툴을 사용한 작업에 적합하다. 세션이 없는(sessionless) 옵션도 있다. 이 경우 코드는 워크북이 필요할 때마다 로드되기를 기다려야 한다. 느리고 비효율적일 수 있지만 호출이 상호 완전히 독립적이므로 호출 간에 데이터가 유출될 가능성이 없다는 장점이 있다. 

마이크로소프트 그래프 탐색기(Graph Explorer)나 포스트맨(Postman)과 같은 툴은 이러한 API를 다룰 때 중요하다. 이 툴을 사용해 REST 호출을 작성, 테스트하고 API URL과 관련된 헤더와 본문을 검사할 수 있다. 먼저 이 툴을 사용해 원드라이브를 탐색해 엑셀 스프레드시트에 액세스할 수 있는지, 그리고 원하는 REST API를 통해 코드에 사용하기 위한 올바른 URL과 본문 구조를 갖고 있는지를 확인하는 것이 좋다. 
 

엑셀 그래프 쿼리 시작하기 

스프레드시트 액세스는 파일 이름부터 시작해서 이후 액세스하려는 워크북 이름, 워크시트 이름 순이다. 모든 마이크로소프트 그래프 API가 그렇듯, 관련된 매개변수와 함께 원하는 작업을 추가하려면 먼저 워크시트에 대한 완전한 URL을 구성해야 한다. 

예를 들어 다음 REST API는 원드라이브의 스프레드시트 폴더에 있는 스프레드시트를 연 다음 특정 워크시트의 표에서 일련의 행에 저장된 값을 가져온다. 
 
https://graph.microsoft.com/v1.0/me/drive/root/sheetfolder/sheetname.xlsx/workbook/worksheets/tablename/Range(address=’Sheet1!A1:D24’) 

이와 같은 호출을 사용해 엑셀 애플리케이션에서 데이터를 가져올 수 있다. 그 외의 호출에서는 표를 업데이트하고 클라우드에 호스팅되는 엑셀 계산 엔진을 사용해 워크시트를 실행할 수도 있다. 일반적인 애플리케이션 흐름이라면 그 다음 엑셀 세션을 만들고 표의 소스 데이터를 업데이트하고 시트를 재계산한 다음 표에서 결과를 읽을 것이다. 엑셀을 독립적인 애플리케이션으로 다룰 때의 방법과 거의 비슷하지만, 클라우드 스토리지의 파일을 다룰 때는 계산 작업을 명시적으로 호출하지 않고는 결과를 볼 수 없다. 끝으로, 필요한 데이터를 구했다면 세션을 종료하면 된다. 

최선의 방법은 서버리스 애플리케이션을 다룰 때와 같이 엑셀 호출을 비동기 함수로 다루는 것이다. 원드라이브와 작업 위치 사이의 지연 외에, 계산을 수행한다면 계산 엔진을 구동하기까지 걸리는 시간도 적절히 허용하도록 코드를 작성해야 한다. 자바스크립트 호출은 프로미스(promise)를 다룰 수 있고 C#은 마이크로소프트 그래프 SDK와 함께 async/await을 사용할 수 있다. 
 

엑셀에서 차트 생성하기 

엑셀 API에서 유용한 한 가지는 모든 애플리케이션에서 엑셀 차트를 사용할 수 있다는 것이다. 워크북에서 사용 가능한 모든 차트 개체가 하나의 컬렉션에 저장된다. 반환된 정보를 사용해 특정 차트 이름에 대한 결과 차트 이미지를 얻을 수 있다. 이때 이름을 식별자로 사용하고 차트 높이, 너비, 피팅을 요청 JSON 본문의 매개변수로 사용한다. 요청에 대한 응답에는 base64로 인코딩된 이미지가 포함되므로 애플리케이션에서 바로 표시할 수 있다. 이렇게 하면 애플리케이션에서 부가적인 차트 구성요소를 사용할 필요 없이 원드라이브에 저장된 엑셀 스프레드시트만 있으면 된다. 

스프레드시트는 수십년 전부터 업무에 사용했고 이와 같은 함수와 계산에는 방대한 기업 지식이 저장돼 있다. 이를 서비스처럼 취급하고 애플리케이션에서 사용하지 않을 이유가 없다. 여기서 소개한 방법으로 며칠, 길게는 몇 개월의 개발 시간을 절약할 수 있다. 소수의 REST 호출로 달성 가능하다는 점을 감안하면 상당한 장점이 있다. editor@itworld.co.kr

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.