시작하며: Joule을 BTP에서 켜기까지
Joule은 SAP가 자사 클라우드 제품 전반에 탑재하고 있는 생성형 AI 어시스턴트입니다. S/4HANA Cloud, SuccessFactors 같은 애플리케이션 안에서 자연어로 질문하고 트랜잭션을 실행하는 경험을 제공하지만, 그 뒤에서 이 모든 것을 묶어주는 기반은 SAP BTP입니다. 처음 Joule을 도입하는 팀이 가장 많이 헤매는 지점은 "어디서부터 켜야 하는가"인데, 이 글은 가상의 물류 기업 한빛로지스틱스가 BTP 환경에서 Joule을 처음 활성화한다는 시나리오로 그 과정을 처음부터 끝까지 따라갑니다. 이 글을 끝까지 읽으면 다음을 스스로 할 수 있게 됩니다.
- Joule 활성화에 필요한 엔타이틀먼트와 라이선스 전제 조건 파악
- 서브어카운트 생성부터 구독, 역할 컬렉션 할당까지의 전체 흐름 수행
- SAP Cloud Identity Services와의 신뢰 구성 및 포메이션(Formation) 연결
- 활성화 이후 자주 발생하는 오류의 원인 진단
이 글을 편하게 읽기 위한 배경
BTP 콕핏(Cockpit)에서 서브어카운트를 만들어 보고, 서비스 마켓플레이스에서 구독형 서비스를 하나라도 활성화해 본 경험이 있다면 충분합니다. SAML/OIDC 같은 인증 프로토콜을 깊이 알 필요는 없지만, "IdP(Identity Provider)가 사용자를 인증해 주는 곳"이라는 정도의 감각이 있으면 신뢰 구성 부분이 훨씬 쉽게 읽힙니다. Cloud Foundry나 Kyma 런타임 지식은 필요하지 않습니다. Joule 자체는 코드 배포 없이 구독만으로 동작하기 때문입니다.
환경과 계약 조건 점검
2026년 상반기 기준, Joule은 BTP 멀티 환경 글로벌 어카운트에서 구독형(SaaS) 애플리케이션으로 제공됩니다. 시작 전에 아래 항목을 확인하세요.
| 항목 | 확인 내용 |
|---|---|
| 글로벌 어카운트 | 엔터프라이즈 계약 기반 BTP 글로벌 어카운트 (트라이얼에서는 일반적으로 Joule을 사용할 수 없음) |
| 엔타이틀먼트 | Joule 서비스와 default 플랜이 글로벌 어카운트에 배정되어 있는지 |
| 리전 | eu10, us10 등 Joule 지원 리전인지 — SAP Discovery Center에서 최신 지원 리전 확인 권장 |
| Identity 테넌트 | SAP Cloud Identity Services(IAS) 테넌트가 같은 고객 번호로 프로비저닝되어 있는지 |
| 연결 대상 제품 | S/4HANA Cloud, SuccessFactors 등 Joule 지원 제품의 관리자 권한 |
특히 라이선스 측면에서 Joule은 연결하려는 SAP 클라우드 제품의 계약 조건에 따라 사용 범위가 달라지므로, 계약 담당자와 사전에 확인하는 것이 안전합니다. 엔타이틀먼트가 글로벌 어카운트에 보이지 않는다면 기술 문제가 아니라 계약 문제일 가능성이 높습니다.
Joule이 BTP 위에서 동작하는 방식
설정에 들어가기 전에 구조를 이해하면 각 단계가 왜 필요한지 자연스럽게 보입니다. Joule을 호텔의 컨시어지에 비유하면, BTP 서브어카운트는 컨시어지 데스크가 놓이는 로비이고, SAP Cloud Identity Services는 투숙객의 신분을 확인해 주는 프런트이며, 포메이션은 컨시어지가 어느 객실(제품 시스템)까지 안내할 수 있는지 정해 주는 출입 권한 목록입니다. 데스크만 설치한다고 컨시어지가 일할 수 있는 게 아니라, 신분 확인 체계와 출입 권한이 함께 갖춰져야 하는 것과 같습니다.
기술적으로 풀면 흐름은 이렇습니다. 사용자가 S/4HANA Cloud 화면에서 Joule 아이콘을 누르면, Joule은 BTP 서브어카운트에 구독된 애플리케이션으로서 IAS를 통해 사용자를 인증합니다. 이때 연결 대상 제품과 Joule이 서로 다른 IdP를 쓰면 "같은 사람"임을 증명할 수 없기 때문에, 양쪽 모두 동일한 IAS 테넌트를 바라보게 만드는 것이 핵심 전제입니다. 그리고 Joule이 어떤 제품 시스템의 기능(capability)을 호출할 수 있는지는 글로벌 어카운트의 System Landscape에서 만드는 포메이션이 결정합니다. 포메이션은 "이 Joule 구독과 이 제품 시스템은 한 팀"이라고 선언하는 장치라고 이해하면 됩니다.
요약: 구독(데스크 설치) → IAS 신뢰 구성(신분 확인 체계) → 역할 컬렉션(이용 자격) → 포메이션(출입 권한). 이 네 가지가 모두 맞아야 Joule이 응답합니다.
실전 활성화: 세 단계로 완성하기
1단계 — 기본 활성화: 엔타이틀먼트부터 구독까지. 먼저 글로벌 어카운트에서 운영용 서브어카운트를 만듭니다. 한빛로지스틱스는 hanbit-ai-prod라는 이름으로 eu10 리전에 생성했습니다. 이후 순서는 다음과 같습니다.
- 서브어카운트의 Entitlements 메뉴에서 Edit → Add Service Plans를 눌러 Joule의
default플랜을 배정합니다. - Security → Trust Configuration에서 Establish Trust를 눌러 회사의 IAS 테넌트를 OpenID Connect 방식으로 연결합니다. 기본 SAP ID Service가 아니라 IAS가 로그인에 쓰이도록 구성하는 것이 핵심입니다.
- Services → Service Marketplace에서 Joule 타일을 찾아 Create로 구독을 생성합니다. 상태가
Subscribed가 될 때까지 잠시 기다립니다. - Security → Role Collections에서 구독과 함께 생성된 Joule 최종 사용자용 역할 컬렉션(일반적으로
Joule_End_User계열 이름)을 파일럿 사용자에게 할당합니다.
진행 전에 설정값을 한 장으로 정리해 두면 검토와 인수인계가 쉬워집니다. 한빛로지스틱스 팀이 사용한 설정 시트 예시입니다.
# hanbit-logistics: Joule 활성화 설정 시트 (운영)
globalAccount: hanbit-logistics-ga
subaccount:
name: hanbit-ai-prod
region: eu10 # Joule 지원 리전 사전 확인
entitlement:
service: joule
plan: default
identity:
iasTenant: hanbit.accounts.ondemand.com
trustProtocol: OpenID Connect
formation:
type: "Integration with Joule"
members:
- hanbit-ai-prod # Joule 구독 서브어카운트
- s4hana-cloud-prod # 연결 대상 제품 시스템
2단계 — 시스템 연결과 상태 점검 자동화. 이제 글로벌 어카운트 레벨의 System Landscape로 이동합니다. Systems에서 연결 대상 제품(예: S/4HANA Cloud 운영 테넌트)을 등록하고 발급된 토큰을 제품 쪽 관리 화면에 입력해 등록을 완료합니다. 그다음 Formations → Create Formation에서 유형을 Integration with Joule로 선택하고, Joule 구독 서브어카운트와 제품 시스템을 멤버로 묶습니다. 운영 환경에서는 구독 상태가 배포 파이프라인이나 야간 점검에서 자동으로 확인되도록 스크립트를 두는 것이 좋습니다. 아래는 SaaS Provisioning API로 구독 상태를 확인하는 점검 스크립트 예시입니다.
// check-joule-subscription.js — 야간 점검용 구독 상태 확인
const REGION = "eu10";
const BASE = `https://saas-manager.cfapps.${REGION}.hana.ondemand.com`;
async function getToken() {
const res = await fetch(process.env.UAA_URL + "/oauth/token", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
grant_type: "client_credentials",
client_id: process.env.SAAS_CLIENT_ID,
client_secret: process.env.SAAS_CLIENT_SECRET,
}),
});
if (!res.ok) throw new Error(`토큰 발급 실패: HTTP ${res.status}`);
return (await res.json()).access_token;
}
async function checkJoule() {
try {
const token = await getToken();
const res = await fetch(`${BASE}/saas-manager/v1/applications`, {
headers: { Authorization: `Bearer ${token}` },
});
if (!res.ok) throw new Error(`구독 조회 실패: HTTP ${res.status}`);
const { applications = [] } = await res.json();
const joule = applications.find((a) => a.appName?.includes("joule"));
if (!joule) return console.warn("[WARN] Joule 구독을 찾을 수 없습니다.");
console.log(`[INFO] Joule 상태: ${joule.state}`);
if (joule.state !== "SUBSCRIBED") {
console.error("[ALERT] 구독 비정상 — 온콜 채널에 알림 전송");
process.exitCode = 1;
}
} catch (e) {
console.error("[ERROR]", e.message);
process.exitCode = 1;
}
}
checkJoule();
3단계 — 운영 수준 권한 관리. 파일럿 단계에서는 사용자 개인에게 역할 컬렉션을 직접 할당해도 되지만, 운영 전환 시에는 IAS 그룹과 역할 컬렉션을 매핑해 관리 부담을 줄이는 방식을 권장합니다. 즉 IAS에서 HANBIT_JOULE_USERS_PROD 같은 그룹을 만들고, BTP 역할 컬렉션 매핑에서 Groups 속성이 해당 값일 때 자동으로 권한이 부여되도록 구성합니다. 팀에서 관리하는 매핑 정의 예시는 다음과 같습니다.
{
"subaccount": "hanbit-ai-prod",
"roleCollectionMappings": [
{
"roleCollection": "Joule_End_User",
"attribute": "Groups",
"operator": "equals",
"value": "HANBIT_JOULE_USERS_PROD"
}
],
"governance": {
"reviewCycleDays": 90,
"owner": "platform-team@hanbit-logistics.example"
}
}
보안 관점에서는 최소 권한 원칙을 지키고(관리자용 역할 컬렉션은 플랫폼 팀만), 분기마다 그룹 멤버십을 리뷰하는 절차를 함께 두면 감사 대응이 수월해집니다. 성능 관점에서 Joule 자체는 SAP가 운영하는 SaaS이므로 별도 스케일링은 필요 없지만, 연결 제품 쪽 세션 정책과 리전 간 지연은 사용자 체감에 영향을 줄 수 있어 같은 리전 배치를 일반적으로 권장합니다.
자주 만나는 문제와 해결 포인트
Q1. 서비스 마켓플레이스에 Joule 타일이 보이지 않습니다. 대부분 엔타이틀먼트 미배정이 원인입니다. 글로벌 어카운트의 Entitlements에서 Joule이 해당 서브어카운트에 배정됐는지 먼저 확인하고, 배정 화면 자체에 Joule이 없다면 리전 미지원이거나 계약에 포함되지 않은 경우이므로 Discovery Center와 계약 조건을 점검하세요.
Q2. 구독은 성공했는데 Joule 접속 시 권한 오류(403)가 납니다. 역할 컬렉션이 할당되지 않았거나, 사용자가 IAS가 아닌 다른 IdP로 로그인한 경우입니다. Trust Configuration에서 IAS가 로그인에 사용되도록 설정됐는지, 역할 컬렉션 매핑의 그룹명이 IAS 그룹명과 대소문자까지 일치하는지 확인하세요.
Q3. 포메이션 생성 화면에서 연결할 시스템이 목록에 나오지 않습니다. System Landscape에 시스템 등록이 완료되지 않았거나, 등록 토큰을 제품 쪽에 입력하지 않아 등록이 대기 상태인 경우가 많습니다. 제품 테넌트와 BTP 글로벌 어카운트의 고객 번호가 다르면 목록에 나타나지 않을 수 있다는 점도 기억하세요.
Q4. Joule 창은 뜨는데 아무 기능도 실행하지 못합니다. 포메이션까지 만들었더라도 제품 쪽에서 Joule 기능(capability) 활성화가 빠지면 빈 응답만 옵니다. 연결 대상 제품의 관리자 설정에서 사용할 기능 범위를 켰는지 확인하세요.
활성화 이후 넓혀갈 방향
기본 연동이 끝났다면 SAP Build의 Joule Studio로 팀 고유의 커스텀 스킬을 만들어 사내 시스템 조회나 반복 업무를 자연어로 처리하는 단계로 나아갈 수 있습니다. 여러 제품을 쓰는 조직이라면 SuccessFactors 등 추가 시스템을 같은 포메이션 패턴으로 확장하는 것이 다음 과제이고, AI 활용 범위를 넓히려면 SAP AI Core와 생성형 AI 허브(Generative AI Hub)를 함께 살펴보면 Joule 바깥의 커스텀 AI 시나리오까지 그림이 그려집니다. 권한 자동화를 더 다듬고 싶다면 BTP용 Terraform 프로바이더로 이 글의 설정을 코드화하는 것도 좋은 연습이 됩니다.
더 깊이 볼 자료
- SAP Help Portal — Joule 문서 (활성화 및 관리 가이드)
- SAP Help Portal — SAP BTP 문서 (엔타이틀먼트, 구독, System Landscape)
- SAP Help Portal — SAP Cloud Identity Services 문서 (IAS 신뢰 구성)
- SAP Discovery Center — Joule 서비스 카탈로그 (지원 리전/플랜 확인)
- SAP Community — Joule 토픽 (도입 사례와 Q&A)
- SAP 제품 페이지 — Joule 개요
이 글의 화면 경로와 명칭은 2026년 상반기 BTP 콕핏 기준이며, UI 라벨은 릴리스에 따라 달라질 수 있으므로 실제 작업 시에는 위 문서의 최신 버전과 대조하며 진행하는 것을 권장합니다.
댓글 0
아직 댓글이 없습니다.