멀티 테넌트 Microsoft 365 솔루션을 위한 관리자 동의 흐름 완전 정복
By Mirko Peters ·
블로그에 다시 오신 것을 환영합니다! 개발 테넌트에서 고객의 프로덕션 환경으로 사용자 지정 SharePoint Framework(SPFx) 솔루션을 배포하려고 해 본 적이 있다면, 문제가 조용히 발생할 때 느끼는 그 아찔함을 잘 아실 겁니다…
Automatically translated with AI from the original post. Read the English original
블로그에 다시 오신 것을 환영합니다! 개발 테넌트에서 고객의 프로덕션 환경으로 사용자 지정 SharePoint Framework(SPFx) 솔루션을 배포하려고 해 본 적이 있다면, 문제가 조용히 발생할 때 느끼는 그 아찔함을 잘 아실 겁니다. 멀티 테넌트 Microsoft 365 개발은 악명 높을 만큼 까다롭습니다. ID 경계, 보안 매개 변수, 테넌트별 사이트 아키텍처, 동의 장벽 때문에 일상적인 배포가 순식간에 악몽으로 바뀔 수 있습니다. 그래서 이번에는 멀티 테넌트 솔루션을 위한 관리자 동의 흐름을 깊이 있게 살펴봅니다. 오디오 대화를 더 자세히 듣고 싶다면, 이 시나리오들을 하나하나 분석한 관련 팟캐스트 에피소드 Fix Multi-Tenant SPFx Authentication도 꼭 확인해 보세요.
이번 글에서는 애플리케이션을 올바르게 구성하는 방법, 마찰 없이 고객의 테넌트 온보딩과 관리자 동의 과정을 안내하는 방법, 빈 데이터 집합을 피하기 위해 위임된 Microsoft Graph 범위를 처리하는 방법, 그리고 우아한 런타임 권한 배너와 오류 상태를 구현하는 방법을 자세히 다룹니다. 멀티 테넌트 개발을 예측 가능하고, 안전하며, 반복 가능하게 만들어 봅시다.
대상 독자
이 가이드는 여러 Microsoft 365 환경을 운영하면서 확장 가능한 안정적인 아키텍처가 필요한 전문가를 위해 작성되었습니다. 다음에 해당한다면 특히 도움이 될 것입니다.
- 여러 고객 테넌트에 사용자 지정 구성 요소를 배포하는 SPFx 개발자 및 Microsoft 365 컨설턴트
- 고객의 SharePoint Online 및 Entra ID 환경을 지원하는 IT 관리자 및 관리 서비스 공급자(MSP)
- 상용 배포를 위해 SPFx 웹 파트, 확장 및 추가 기능을 제품화하는 소프트웨어 파트너 및 독립 소프트웨어 공급업체(ISV)
인증은 보일러플레이트가 아닙니다: 멀티 테넌트 Entra ID 앱 설정하기
개발자들이 빠지기 쉬운 가장 위험한 함정 중 하나는 인증을 프로젝트마다 복사해서 붙여넣을 수 있는 단순한 보일러플레이트 코드로 취급하는 것입니다. 여러 조직에서 실행되도록 설계된 솔루션을 만들 때는 Entra ID(이전 명칭 Azure AD) 앱 등록을 멀티 테넌트용으로 명시적으로 구성해야 합니다.
앱 등록이 실수로 단일 테넌트로 남아 있으면, 홈 조직 외부의 사용자는 즉시 로그인 루프에 빠지거나 권한 오류를 겪게 됩니다. 이를 해결하려면 앱 등록의 지원되는 계정 유형을 임의의 조직 디렉터리의 계정(멀티 테넌트)으로 설정해야 합니다. 또한 최소 권한 원칙에 따라 솔루션에 필요한 위임된 Graph 범위를 정확히 정의하고, SharePoint Online 도메인과 로컬 개발 환경을 모두 고려한 정밀한 리디렉션 URI를 구성해야 합니다.
원활한 안내형 온보딩 및 관리자 동의 흐름 구축하기
일반 업무 사용자가 동의 프롬프트를 직접 처리하도록 기대하면 배포가 지연될 수 있습니다. 더 나쁜 것은, 고객사 IT 관리자가 안내 없는 프롬프트를 무조건 신뢰하기를 기대하면 설치가 차단되는 경우가 많다는 점입니다. 신뢰를 확보하고 도입을 원활하게 하려면 안내형 온보딩 페이지를 구축해야 합니다.
전문적인 온보딩 환경은 고객 관리자에게 필요한 범위에 대한 명확한 개요, 엔터프라이즈 애플리케이션 프로비저닝을 시작하는 정확한 관리자 동의 URL, 그리고 단계별 확인 지침을 제공합니다. 관리자가 조직 전체 또는 대상 파일럿 그룹에 대해 동의를 부여할 수 있도록 대상별 동의를 지원하면 도입 장벽을 낮추고 배포 마찰을 없앨 수 있습니다.
위임된 Graph 범위 처리 및 빈 데이터 집합 방지하기
개발 환경에서는 완벽하게 작동하던 웹 파트가 고객 테넌트에 설치되자 웹 페이지가 완전히 비어 버린 경험이 있으신가요? 이것은 테넌트 관리자 동의가 누락되었거나 디렉터리 데이터가 일치하지 않을 때 나타나는 전형적인 증상입니다.
Microsoft Graph가 빈 데이터 세트를 반환하는 경우, 애플리케이션 로직의 버그인 경우는 드뭅니다. 대부분은 애플리케이션이 인증에는 성공했지만 테넌트 관리자가 필요한 위임된 범위에 아직 동의하지 않았거나, 적용한 조직 데이터 필터가 고객의 사용자 프로필이나 사이트 구성과 맞지 않는 경우입니다. 쿼리는 항상 대표적인 고객 사용자 컨텍스트에서 Graph Explorer로 테스트하고, 예외를 처리되지 않은 채 던지는 대신 일부 또는 누락된 데이터 세트를 정상적으로 처리하도록 애플리케이션 로직을 설계하십시오.
런타임 권한 배너와 오류 상태 구성하기
아무리 훌륭한 온보딩 계획이 있더라도 관리자는 가끔 범위를 놓치거나 나중에 권한을 취소하기도 합니다. 이런 경우 애플리케이션이 충돌하거나 알아보기 어려운 JavaScript 콘솔 오류를 표시해서는 안 됩니다. 대신 런타임 권한 배너와 상황에 맞는 오류 상태를 제공해야 합니다.
런타임에 권한을 비동기적으로 확인하면 SPFx 웹 파트가 유효하지 않거나 누락된 토큰 범위를 즉시 감지할 수 있습니다. 결함이 발견되면 관리자 동의가 필요하다는 것을 사용자에게 알리는 깔끔하고 전문적인 배너를 표시하고, 안내형 온보딩 또는 동의 URL로 바로 연결되는 딥 링크를 함께 제공하십시오. 이렇게 하면 번거로운 지원 티켓이 고객이 직접 해결할 수 있는 셀프 서비스 절차로 바뀝니다.
구성 값 외부화 및 SPFx 패키지에 비밀 정보 남기지 않기
SPFx 패키지 안에 테넌트 ID, 클라이언트 ID, API 엔드포인트, 클라이언트 비밀을 하드코딩하는 것은 심각한 보안 위반이자 운영상 막다른 길입니다. 이러한 정보를 코드에 고정해 두면 온보딩하는 고객마다 고유한 빌드를 수십 개씩 관리하게 될 것입니다.
올바른 방법은 SPFx 패키지를 완전히 테넌트에 독립적으로 설계하는 것입니다. 구성 설정은 중앙 SharePoint 구성 목록, 외부 API, Azure App Configuration 같은 테넌트별로 인식 가능한 위치에 저장하십시오. 백엔드 서비스에 애플리케이션 비밀이 필요한 경우에는 클라이언트 측 코드 번들에 포함하지 말고 Azure Key Vault에 안전하게 저장하고 관리하십시오.
한 번 패키징하여 어디에나 배포하기: 단일 파이프라인 전략
코드가 구성 기반이고 비밀 정보가 없는 상태가 되면 단일 파이프라인 배포 전략을 채택할 수 있습니다. 즉, 솔루션을 한 번만 컴파일하고 단일 .sppkg 파일로 패키징한 다음, 그 동일한 패키지를 모든 고객 테넌트에 배포하는 방식입니다.
적절한 경우 테넌트 범위 배포를 활용하면 솔루션을 중앙 앱 카탈로그에 게시할 수 있고, CI/CD 파이프라인을 자동화하여 코드 포크를 수동으로 만들지 않고도 빌드, 번들링, 패키징, 게시를 처리할 수 있습니다. 이를 통해 버전 관리가 크게 단순해지고, 모든 고객이 동일하게 테스트된 바이너리에서 실행되도록 보장할 수 있습니다.
모니터링, 텔레메트리, 그리고 조기 장애 감지
수십 개의 서로 다른 고객 테넌트에서 실행되는 솔루션을 관리할 때는 고객이 모든 버그를 보고하기를 기대할 수 없습니다. 애플리케이션 상태를 사전에 파악할 수 있어야 합니다. 텔레메트리를 중앙에서 관리하는 것이 필수적입니다.
SPFx 구성 요소가 테넌트 ID, 상관 ID, 활성 기능, 오류 메시지를 포함한 구조화된 텔레메트리 데이터를 Application Insights 또는 Azure Monitor 대시보드로 직접 내보내도록 구성하십시오. 반복되는 인증 실패나 Graph 시간 초과에 대한 경고를 설정하면, 고객이 문제를 인지하기 전에 엔지니어링 팀이 먼저 발견하고 해결할 수 있습니다.
자주 발생하는 문제와 해결 방법
신중하게 계획하더라도 다중 테넌트 환경에서는 특정 문제가 반복해서 나타나는 경우가 많습니다. 개발자들이 가장 자주 겪는 증상과 해결 방법은 다음과 같습니다.
- 증상: 로그인 루프 또는 "내 테넌트에서는 작동하지만 다른 테넌트에서는 작동하지 않습니다."라는 오류가 표시됨
원인: 앱 등록이 실수로 단일 테넌트로 설정되었거나 회신 URL이 일치하지 않음
해결 방법: 앱 등록 유형을 다중 테넌트로 전환하고, 리디렉션 URI를 확인하여 업데이트한 다음 관리자 동의 절차를 다시 실행하십시오. - 증상: Microsoft Graph가 빈 데이터 세트를 반환함
원인: 테넌트 관리자 동의 누락 또는 사용자/그룹 필터가 지나치게 엄격함
해결 방법: 관리자 동의 워크플로를 실행하고, 실제 고객 계정으로 Graph Explorer에서 정확한 API 쿼리를 테스트한 다음, 지나치게 제한적인 쿼리 필터를 완화하십시오. - 증상: 사용자가 최신 페이지에 웹 파트를 추가할 수 없습니다.
원인: 패키지가 테넌트 전체에 배포되지 않았거나 조직의 앱 정책이 이를 차단하고 있습니다.
해결: 앱 카탈로그 배포 상태를 확인하고, 테넌트 수준의 Microsoft 365 앱 설정과 배포 정책을 점검합니다. - 증상: 사소한 구성 변경에도 솔루션을 다시 컴파일하고 빌드해야 합니다.
원인: 하드코딩된 식별자, URL 또는 엔드포인트.
해결: 구성 값을 SharePoint 목록이나 보안 구성 저장소로 분리하고, 런타임에 동적으로 가져오도록 합니다.
거버넌스, 필수 보안, 최소 권한 원칙
엔터프라이즈 환경에서 운영하려면 보안 거버넌스가 필수입니다. 고객을 안전하게 보호하고 규정 준수를 유지하려면 다음 핵심 보안 원칙을 지켜야 합니다.
- 항상 필요한 최소한의 위임 범위만 요청하고, 정기적으로 범위를 검토합니다.
- 일반 텍스트로 비밀 정보를 저장하지 말고, Azure Key Vault를 활용하며, 예측 가능한 일정에 따라 비밀을 순환(교체)합니다.
- Microsoft Teams 및 SharePoint 앱 권한 정책을 사용해 특정 사용자 대상으로만 앱 표시 범위를 제한합니다.
- 어떤 클라이언트 테넌트가 동의했는지, 동의가 언제 부여되었는지, 어떤 범위가 승인되었는지 기록하는 동의 대장을 유지합니다.
- 테넌트별 정적 CSS 자산을 포함하는 대신 SharePoint 테마 API를 사용해 시각적 브랜딩을 클라이언트 환경에 맞춥니다.
클라이언트 운영 배포 전 검증 계획
클라이언트 배포를 승인하고 완료를 선언하기 전에, 예상치 못한 문제가 없도록 철저한 검증 계획을 실행합니다.
- 대상 클라이언트 테넌트에서 동일한 계정과 범위를 사용해 Graph Explorer로 Microsoft Graph 호출을 충분히 테스트합니다.
- 소수의 대상 사용자와 함께 전용 사이트 컬렉션 하나에서 통제된 파일럿 단계를 실행합니다.
- 클라이언트의 SharePoint 앱 카탈로그에서 직접 버전 기록과 롤백 절차를 확인합니다.
- 오프라인 또는 만료된 토큰 상황을 시뮬레이션하여 사용자 지정 오류 메시지와 복구 흐름이 원활하게 작동하는지 확인합니다.
자주 묻는 질문
SPFx에 애플리케이션 권한이 필요합니까?
일반적으로는 필요하지 않습니다. SPFx는 전적으로 위임된 사용자 컨텍스트 안에서 실행됩니다. 애플리케이션 권한은 추가 관리자 승인과 특수한 아키텍처 패턴이 필요하므로, 사용자 세션 외부에서 백그라운드 처리가 반드시 필요한 경우에만 엄격하게 사용하십시오.
테넌트별 동의를 건너뛸 수 있습니까?
아닙니다. Microsoft의 보안 모델에 따라 다중 테넌트 앱이 요청한 범위에 대해서는 각 테넌트의 관리자가 명시적으로 동의해야 합니다. 이 과정을 간소화할 수는 있지만, 완전히 우회할 수는 없습니다.
여러 고객을 위해 하나의 코드베이스를 유지하려면 어떻게 해야 합니까?
솔루션을 완전히 테넌트에 종속되지 않도록 만들고, 구성 데이터를 분리하며, 패키징과 배포 파이프라인을 자동화하고, 기능 플래그를 활용해 고객별 설정을 동적으로 관리하십시오.
"비어 있음" 문제를 더 빨리 진단하려면 어떻게 해야 합니까?
Microsoft Graph 응답을 범위 검증 확인과 함께 로깅하고, 누락된 동의 또는 부족한 범위를 나타내는 인라인 알림을 표시하여 즉시 해결할 수 있는 deep link를 함께 제공하십시오.
결론
관리자 동의 흐름과 다중 테넌트 인증을 숙달하는 것이 SPFx 솔루션을 아마추어 구현과 엔터프라이즈급 제품으로 나누는 기준입니다. 다중 테넌트 Entra ID 앱을 구성하고, 안내형 온보딩 경험을 구축하며, 구성을 외부화하고, 선제적 텔레메트리를 구현하면 배포에 대한 불안을 없애고 모든 클라이언트에게 끊김 없는 경험을 제공할 수 있습니다. 실제 환경에서 이러한 ID 문제를 다루는 현실에 대해 더 듣고 싶다면 팟캐스트 에피소드 Fix Multi-Tenant SPFx Authentication에서 전체 논의를 들어 보시기 바랍니다. 읽어 주셔서 감사하며, 즐거운 코딩 되시기 바랍니다!