이 글이 답하는 질문
SAP의 AI 어시스턴트 Joule은 데모 영상에서는 늘 매끄럽게 움직이지만, 정작 "우리 시스템 Fiori 화면에는 왜 안 보이지?"라는 질문 앞에서 막히는 경우가 많습니다. 이 글은 다음 네 가지에 답합니다.
- Joule이 Fiori Launchpad의 어느 지점에, 어떤 구조로 임베드되는가
- 활성화까지 BTP 서브어카운트·Identity Authentication·시스템 연결이 어떤 순서로 엮이는가
- 자연어 입력이 실제로 앱 내비게이션, 데이터 질의, 트랜잭션 실행으로 이어지는 흐름
- 개발자가 Joule Studio로 자체 기능을 노출하는 확장 지점은 어디인가
사전 가정
이 글은 SAP S/4HANA Cloud Public Edition을 중심으로 설명합니다. Joule은 SuccessFactors, Ariba 등 다른 클라우드 제품에도 탑재되지만, 활성화 절차와 지원 범위는 제품·릴리스마다 다르므로 자신의 환경 문서를 함께 확인하는 것이 권장됩니다. 독자는 BTP 콕핏과 Fiori Launchpad를 다뤄본 경험이 있고, 서브어카운트 관리 권한 또는 관리자와의 협업 채널이 있다고 가정합니다. 지원 언어와 시나리오 범위는 릴리스마다 확장되고 있으므로 특정 기능의 가용 여부는 단정하지 않고 일반적인 동작 원리 위주로 다룹니다.
Joule은 Fiori 어디에 붙어 있나 — 임베드 아키텍처
Joule은 개별 Fiori 앱 안에 각각 심어지는 컴포넌트가 아니라, Launchpad의 셸(shell) 레이어에 한 번 임베드되는 웹 클라이언트입니다. 셸 바에 Joule 아이콘이 나타나고, 클릭하면 화면 우측에 대화 패널이 열립니다. 어느 앱을 쓰고 있든 셸은 항상 떠 있으므로 Joule도 항상 같은 자리에 있는 구조입니다. 백오피스 전체를 돌아다니는 개인 비서가 아니라, 로비에 상주하면서 어디로든 안내해 주는 컨시어지 데스크에 가깝다고 보면 됩니다.
내부 흐름을 단순화하면 이렇습니다.
- 사용자가 대화 패널에 자연어를 입력하면, 셸에 임베드된 Joule 웹 클라이언트가 BTP 위에서 동작하는 Joule 서비스로 요청을 전달합니다.
- Joule 서비스는 발화 의도를 분류해 적절한 캐퍼빌리티(capability)로 라우팅합니다. 크게 내비게이션형(앱 찾기·이동), 트랜잭션형(업무 실행), 정보형(도움말 문서 기반 질의응답), 분석형(데이터 조회) 계열로 나뉩니다.
- 트랜잭션형·분석형 요청은 연결된 S/4HANA Cloud의 API를 사용자 본인의 권한으로 호출합니다. 이때 SAP Cloud Identity Services(Identity Authentication, IAS)를 축으로 한 신뢰 구성이 사용자 컨텍스트를 전달하는 통로가 됩니다.
- 결과는 대화 패널에 카드·목록·링크 형태로 렌더링되고, 링크를 누르면 해당 Fiori 앱으로 이동합니다.
핵심은 두 가지입니다. 첫째, Joule은 프론트엔드가 아니라 테넌트 간 연결 구성이 본체라는 점. 둘째, 권한 우회가 없다는 점입니다. 사용자가 앱에서 볼 수 없는 데이터는 Joule에게 물어봐도 나오지 않습니다.
활성화 전제조건 — BTP·IAS·Launchpad가 엮이는 순서
활성화가 어려운 이유는 절차 자체보다, 세 영역(BTP, IAS, S/4HANA Cloud)이 서로를 참조하기 때문입니다. 일반적인 흐름은 다음과 같습니다.
[1] BTP 서브어카운트 준비
- Joule 엔타이틀먼트 할당 후 구독 생성
[2] SAP Cloud Identity Services 정렬
- S/4HANA Cloud와 BTP 서브어카운트가 "같은" IAS 테넌트를
신뢰하도록 구성 (여기가 어긋나면 이후 전부 실패)
[3] 시스템 연결
- BTP System Landscape에 S/4HANA Cloud 시스템 등록
- Joule 통합용 포메이션(formation)으로 두 시스템을 묶기
[4] 권한 부여
- 구독 시 생성되는 Joule 사용자용 롤 컬렉션을
대상 사용자에게 할당 (명칭은 릴리스에 따라 다를 수 있음)
[5] 확인
- Launchpad 재로그인 → 셸 바에 Joule 아이콘 노출 확인
롤 컬렉션 할당은 콕핏 UI로도 되지만, 대상자가 많다면 btp CLI로 처리하는 편이 반복 작업에 유리합니다. 아래는 형식을 보여주기 위한 예시입니다.
# 예시: 특정 사용자에게 Joule 사용자 롤 컬렉션 할당
btp assign security/role-collection "<Joule 사용자 롤 컬렉션명>" \
--to-user dev.kim@example.com \
--subaccount <서브어카운트-ID>
온프레미스나 Private Edition 환경이라면 지원 여부와 절차가 Public Edition과 다르므로, 해당 제품의 릴리스 노트와 활성화 문서를 별도로 확인해야 합니다.
실제 동작 예시 — 자연어가 업무가 되는 순간
아래 대화는 동작 방식을 보여주기 위해 구성한 가상의 시나리오입니다. 실제 응답 문구와 지원 범위는 릴리스·언어 설정에 따라 다릅니다.
시나리오 1 — 앱 내비게이션. 앱 이름을 정확히 몰라도 업무 표현으로 찾아갑니다.
사용자: 미결 상태인 판매오더를 처리하는 앱 열어줘
Joule : 다음 앱이 관련 있어 보입니다.
1) 판매오더 관리 2) 판매오더 이행 이슈 해결
어느 앱을 열까요?
사용자: 두 번째
Joule : '판매오더 이행 이슈 해결' 앱으로 이동합니다. →
시나리오 2 — 데이터 질의. 앱을 열지 않고 대화 패널에서 바로 조회하고, 결과에서 앱으로 점프합니다.
사용자: 이번 달 생성된 판매오더 중 금액 큰 순으로 5건 보여줘
Joule : 2026년 8월 생성 판매오더 상위 5건입니다.
#45012 ₩182,400,000 A상사 납품보류
#45007 ₩95,100,000 B전자 진행중
... (각 항목은 해당 오더 화면으로 연결)
사용자: 45012는 왜 보류 상태야?
Joule : 판매오더 45012에는 여신 한도 초과로 인한
납품 보류가 설정되어 있습니다.
시나리오 3 — 트랜잭션 실행. 변경 작업은 확인 단계를 거친 뒤 실행됩니다.
사용자: 판매오더 45012 납품 보류 해제해줘
Joule : 판매오더 45012의 납품 보류를 해제하려고 합니다.
진행할까요? [확인] [취소]
사용자: 확인
Joule : 완료했습니다. 오더 상태가 '진행중'으로 변경되었습니다.
세 시나리오 모두에서 Joule이 하는 일은 결국 "발화 → 캐퍼빌리티 매칭 → 사용자 권한으로 API 호출 → 결과 렌더링"입니다. 여신 해제 권한이 없는 사용자라면 시나리오 3은 권한 오류로 끝납니다. 이 점이 감사(audit) 관점에서 Joule을 받아들이기 쉽게 만드는 부분이기도 합니다.
개발자 확장 관점 — Joule Studio로 스킬 노출하기
표준 캐퍼빌리티만으로는 사내 커스텀 API나 Z-프로세스를 다룰 수 없습니다. 이 간극을 메우는 것이 SAP Build에 포함된 Joule Studio입니다. 일반적인 개발 흐름은 이렇습니다.
- 액션 준비: 호출할 API(OData, REST 등)를 SAP Build의 액션 프로젝트로 래핑하고 데스티네이션으로 연결합니다.
- 스킬 정의: 사용자가 말할 법한 발화 예시, 추출할 파라미터(슬롯), 되묻기 대화 흐름, 실행할 액션을 정의합니다.
- 배포: 완성한 스킬을 Joule에 배포하면 표준 기능과 같은 대화 패널에서 호출됩니다.
개념을 잡기 위한 의사(pseudo) 구조 예시입니다. 실제 정의는 Joule Studio UI에서 이뤄지며 형식은 다릅니다.
# 개념 예시 — 사내 출장비 사전승인 조회 스킬
skill: check-travel-approval
utterances:
- "내 출장 승인 상태 알려줘"
- "{trip_id} 출장 승인됐어?"
slots:
- trip_id (없으면 최근 신청 건으로 되묻기)
action:
call: GET /custom/travel-approvals/{trip_id}
via: destination TRAVEL_API
response: 승인 상태 + 결재자 + 상세 화면 링크
최근에는 단일 스킬을 넘어 여러 단계를 자율 수행하는 에이전트 구성 방향으로 확장되고 있으므로, 확장을 설계할 때는 "한 번의 질의응답"과 "여러 시스템을 오가는 절차" 중 어느 쪽인지 먼저 구분해 두는 것이 좋습니다.
삽질 노트 — 활성화가 안 될 때 점검 순서
Q1. 구독까지 했는데 셸 바에 아이콘이 안 보입니다. 가장 흔한 원인은 롤 컬렉션 미할당, 그다음이 포메이션 누락입니다. 구독(서비스 존재) → 포메이션(시스템 연결) → 롤 컬렉션(사용자 권한) 세 단계가 모두 충족돼야 하며, 할당 직후에는 브라우저 캐시를 비우고 재로그인해야 반영되는 경우가 많습니다.
Q2. 아이콘은 보이는데 클릭하면 로그인 루프에 빠집니다. 십중팔구 IAS 정렬 문제입니다. S/4HANA Cloud와 BTP 서브어카운트가 서로 다른 IAS 테넌트를 신뢰하고 있거나, 커스텀 IdP가 중간에 끼어 사용자 식별자가 일치하지 않는 경우입니다. 양쪽 신뢰 구성에서 같은 IAS 테넌트, 같은 사용자 식별자(보통 이메일)를 쓰는지 확인하세요.
Q3. "도와드릴 수 없다"는 답만 돌아옵니다. 오류가 아니라 해당 발화가 매칭되는 캐퍼빌리티가 없는 경우가 대부분입니다. 지원 시나리오 목록은 릴리스마다 확장되므로 What's New 문서에서 현재 범위를 확인하고, 언어 설정에 따라 인식률이 달라질 수 있다는 점도 감안해야 합니다.
Q4. 데이터 질의 결과가 앱에서 보는 것과 다릅니다. Joule은 질문한 사용자의 권한으로 조회하므로, 조직 단위·권한 오브젝트 제한이 그대로 적용됩니다. 다른 사용자와 결과가 다르다면 권한 차이부터 의심하는 것이 순서입니다.
핵심 한 줄
Joule은 Fiori 앱이 아니라 셸에 사는 컨시어지다 — 활성화의 본체는 UI가 아니라 BTP 구독·IAS 신뢰·포메이션이라는 세 갈래 배선이고, 대화의 본체는 사용자 권한 그대로의 API 호출이다.
더 파볼 주제
활성화와 기본 동작을 확인했다면, 다음 주제로 넓혀가는 것을 권합니다: Joule Studio 스킬을 실제 커스텀 OData 서비스와 연결하는 액션 프로젝트 구성, SAP Start 환경에서의 Joule 사용, AI 단위(AI units) 기반 과금 구조, 그리고 ABAP 개발 도구 쪽의 Joule 코드 지원 기능과의 차이 비교입니다. 원문 확인에 유용한 문서는 아래와 같습니다.
댓글 0
아직 댓글이 없습니다.