
🔎 오케스트라 플러그인이 새로 업데이트 되었다구요?
2025 최신 버전 업데이트 글 바로가기!
안녕하세요! 오늘은 bubble.io에서 가장 활용도가 높은 플러그인 orchestra에 대한 기술블로그를 작성해보고자 합니다.
이 포스트의 독자층은 보통 버블 입문자일 것 같은데요, 이번 포스팅을 잘 읽고 오케스트라의 사용방법을 자세히 익혀서 구현할 수 있는 기술 범위를 더 넓혀보시길 바랍니다!
버블에서는 데이터 더미를 반복적인 형식으로 프론트에 나타내주는 작업이 빈번하게 나타나는데요, 이 때 사용하는 요소가 Repeating group입니다. 리피팅 그룹 내부에 표시해 줄 데이터 리스트를 지정하고, 가장 첫번째 셀에 각각의 데이터를 나타내 줄 형식을 디자인하면 지정한 데이터 리스트 내부의 모든 데이터가 같은 형식으로 나타나게 됩니다.
이 때에 이 리피팅그룹 내부의 데이터리스트에 동일한 워크플로우를 실행시키고 싶을 때! 오케스트라를 사용할 수 있습니다. 버블 자체 기능만으로는 리피팅 그룹의 내부 데이터에 각각의 워크플로우를 실행시킬 수 있는 방법이 존재하지 않기에 plugin orchestra가 아주 유용하게 사용될 수 있습니다.

예를 들어, 어떤 상품 리스트를 리피팅그룹으로 나타내주었고, 각 셀에서 해당 상품의 수량을 지정한 후, 리피팅그룹 하단의 저장 버튼을 누르면 각 셀의 상품의 수량 정보에 내가 지정한 수량이 들어가도록 하려는 상황을 가정해봅시다. 이 때에, 오케스트라의 ‘maestro’에게 어떤 ‘musician'에게 명령(지휘)을 내릴 것인지 지정하고, 해당 ‘musician'이 각 셀에서 어떤 워크플로우를 실행할 것인지를 지정해둔다면, 저장버튼을 눌렀을 때 이를 trigger 할 수 있습니다. trigger가 된 ‘maestro’는 지정된 ‘musician'에게 실행 명령을 내리고, 각 셀 내부의 ‘musician'은 셀 하나하나마다 워크플로우를 실행합니다.
결과적으로 리피팅그룹의 각 셀 내부에서 각각의 워크플로우가 실행되며 상품의 수량 정보에 내가 지정한 수량이 들어가도록 수정이 완료되는 것이죠.
이 작업은, 기존에 여러 개의 워크플로우를 만들어 각각을 실행시켜줘야하는 과정을 trigger 한 번에 간편하게 실행될 수 있도록 해준다는 아주 큰 장점이 있습니다. 예를 들어, 기존에 수량을 변경하고 싶은 상품 정보가 5개였다면 5개의 워크플로우(step)을 넣어주어야 하겠지만, 이 작업은 trigger이 걸리는 하나의 워크플로우에서 모든 작업이 끝나죠.
그럼 이제부터는, 이 강력한 플러그인을 어떻게 사용하는 것인지, 사용 방법에 대해 상세히 기술해보겠습니다! (같이 따라해보시면 도움이 많이 됩니다)
1. 일단, 플러그인을 먼저 설치해봅시다.
버블 좌측의 탭에서 plugin탭을 클릭한 후, 우측 상단의 +add plugins 을 클릭합니다.
검색창에 orchestra를 입력하고, install해줍니다.

2. 기본 설정에 element id 설정
orchestra를 본격적으로 사용하기 전에, 기본 설정 변경이 필요합니다. 이 플러그인에서는 element id로 maestro가 지휘할 musician을 지정할 수 있는데요, element id는 버블 앱을 처음 만들었을 때 기본 설정값으로 들어가있지 않기 때문에 따로 설정을 해줘야합니다.
우측 탭의 settings를 클릭하고, 상단의 general탭을 선택한 후 가장 하단으로 스크롤하면, ‘Expose the option to add an ID attribute to HTML elements’라는 문구와 함께 체크박스가 있는데요, 체크해줍니다! 이 체크박스가 선택되면 프론트에 있는 html elements들의 아이디를 지정할 수 있게 됩니다.
이 체크박스를 선택하기 전에는 아래 사진과 같이 어떤 element의 appearance탭 맨 하단에 ID attribute란이 없지만, 체크박스 선택 후에는 그 다음 사진과 같이 탭 맨 하단에 ID attribute란이 생깁니다.

이제 좌측의 디자인 탭을 클릭해 maestro와 musician을 배치해봅시다!
3. element 배치
먼저, 리피팅그룹을 생성하고, 리피팅그룹에 표시해 줄 데이터 리스트를 지정(app data에서 실제로 표시될 예시 데이터를 꼭 만들어줍시다!)해준 후 하단에 button을 배치해줍시다.
오케스트라를 설치하면 디자인탭의 visual element 탭에 musicians과 maestro가 생겨나는데요,

musicians는 워크플로우를 작동시킬 리피팅 그룹 첫번째 셀 내부에, maestro는 리피팅그룹 외부에 배치해줍니다. (두 개 element의 위치 주의!)

4. 워크플로우 3개 설명
저는 리피팅그룹에 뜬 상품 데이터에 수량을 각각 입력해주고, 오케스트라가 돌면서 변경한 상품 수량이 각 셀의 상품 데이터에 저장되도록 로직을 설계하려고 하는데요, 이 때에 워크플로우를 어떻게 설정할 지 보겠습니다.
오케스트라 실행을 위해서는 총 3개의 워크플로우가 필요합니다.
- 어떤 액션이 일어났을 때 trigger musicians under maestro (* class to trigger 에 2번 musicians class 항목과 같은 값)
: 이 경우에, save라는 버튼을 눌렀을 때 musician을 trigger할 것이기 때문에 아래 사진과 같이 워크플로우를 설정해줍니다. 이 때 class to trigger에는 식별가능한 임의의 텍스트를 넣어주고(이후에 사용될 값이니 꼭 기억합시다) 워크플로우를 리피팅그룹의 모든 셀에 대해 실행할것이라면, trigger every cell에 yes라고 설정값을 반드시 바꿔줘야 합니다.

- musicians revealed-initialize musicians(*musicians class에 1번 class to trigger 항목과 같은 값 지정)
: musician이 제대로 실행되기 위해서는 initialize라는 과정을 거쳐야 하는데요, 아래 사진과 같이 워크플로우에서 musician revealed를 선택해주고, initialize musician을 선택해줍니다.
여기서 앞의 단계 ‘class to trigger’에 입력했던 save를 꼭 동일하게 입력해줘야 합니다!
그래야 리피팅 그룹 외부에 있는 maestro가 명령을 내릴 musician을 식별할 수 있습니다.

- musicians will run this workflow inside each cell - 리피팅 그룹의 각 셀에서 작동시키고 싶은 워크플로우 만들어주기 (**이 워크플로우에 너무 많은 작업을 넣으면 제대로 작동이 안되기도 함-디버그 모드에서 테스트하며 확인하기)
: 이제 마지막 단계입니다. 리피팅 그룹 내부에서 어떤 워크플로우를 작동시킬 것인지를 지정해줘야 합니다. ‘musician will run this workflow’ event 를 선택하고, 작동시킬 워크플로우를 지정해줍니다. 저같은 경우에는 해당 셀의 데이터에 수량 변화를 줄 것이기 때문에 ‘make change to [상품]’ 이라는 워크플로우를 넣고, [상품]의 <수량>은 리피팅 그룹 각 셀 내부에 있는 인풋창의 value 로 지정해줄 것입니다.

이제 모든 작업이 끝났습니다. 프리뷰를 돌려 각 셀의 인풋창에 수량을 입력하고, save버튼을 누른 다음에, app data의 [상품]에 들어가 수량을 확인하면 입력한대로 변경되었음을 확인할 수 있습니다!

* 주의사항! (예외상황, 오류가 나는 상황 등…)
여기서 주의! 오케스트라 플러그인 이니셜라이즈 → 만약 뮤지션이 들어있는 리피팅그룹의 data source가 비어있거나, 실질 데이터가 empty 상태라면, 페이지를 프리뷰했을 때 로딩이 제대로 되지 않습니다 (상단에 로딩바가 계속 떠있는 문제 발생). 이는 오케스트라가 실제 데이터가 담겨져있는 리피팅그룹에서만 이니셜라이즈가 가능하기에 발생하는 문제인데요, 이 점을 고려해서 페이지 로드 당시에 리피팅 그룹에 들어갈 실제 데이터(임시)를 적어도 1개 이상 만들어줘야합니다.
예를 들어, 이전에 진행했던 프로젝트에서 (인풋창에 입력하는 갯수만큼 데이터 생성, 생성한 데이터를 리피팅그룹에 띄우고, 해당 데이터의 특정 정보를 각 셀에서 수정한 다음, 하단의 완료버튼을 눌러서 변경된 정보가 저장되게 하는 로직)을 구현해야되는 상황이 있었는데요, 여기서 문제는, 리피팅 그룹 각 셀에서 워크플로우를 실행하려면 페이지가 로드되었을 때 리피팅그룹에 들어가있는 실제 데이터가 있어야만 이니셜라이즈가 되지만 (페이지가 정상적으로 로드되지만), 제가 구현하려고 했던 로직은 초기에 데이터가 없는 상태에서 유저가 입력하는 갯수대로 데이터가 생성되는 방식이었다는 것입니다. 어찌보면 두 작업은 함께 구현할 수 없다고 생각되긴 하지만, 아래의 방법으로 문제를 해결할 수 있었습니다.
페이지가 로드되었을 때, 임시 데이터를 하나 생성해서 리피팅그룹에 1개의 실제 데이터가 들어가있도록 하고, 사용자가 인풋창에 만들 데이터의 개수를 입력했을 때, 개수만큼 데이터를 생성하기 직전에 임시로 만들었던 데이터 1개를 삭제하는 것입니다. 다른 오류 없이 원하는대로 구현하기 위해선 약간의 컨디션을 조금 더 걸어주긴 해야겠지만, 이런 방식으로 두 상황을 절충할 수 있었습니다.
추가적으로, 마에스트로와 뮤지션을 invisible하게 설정하면 이니셜라이즈 자체가 되지 않는 경우도 있으니 엘리먼트 사이즈를 최대한 작게 조절하고 visible 상태를 유지하는 것이 좋습니다!
오늘은 bubble.io의 plugin orchestra에 대해 알아봤는데요, 실제 작업을 하다보면 거의 대부분의 프로젝트에 사용되는 플러그인인만큼, 이 포스팅을 통해 오케스트라를 알고 자유자재로 사용하신다면 훨씬 많은 작업을 더 간편하게 구현하실 수 있을겁니다!








![[2025 최신] 버블에서 리피팅 그룹 각 셀마다 워크플로우를 실행하고 싶을 때 : 플러그인 오케스트라(Orchestra)](/_next/image?url=https%3A%2F%2Fuosmtaxndlzgvsnhbugi.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fmedia%2F12-1.jpg&w=3840&q=75)