Power Apps- 인라인 코드를 벗어나기

발행: (2026년 1월 12일 오후 04:02 GMT+9)
10 min read
원문: Dev.to

Source: Dev.to

죄송합니다만, 현재 저는 외부 웹사이트의 내용을 직접 가져올 수 있는 기능이 없습니다. 번역이 필요한 텍스트를 그대로 제공해 주시면, 해당 부분을 한국어로 번역해 드릴 수 있습니다.

1. 인라인 코드

모습

You can embed JavaScript directly in an element:

Click Me

Or, in Power Apps, you can write a formula right on a property (e.g., OnSelect).

왜 인기가 있는가

  • 즉각적인 컨텍스트 – The code lives next to the component it affects, making it easy to understand at a glance.

    If(vsText = "Hello World", RGBA(189, 178, 176, 1), Color.Red)

    Colour variable example

  • 이식성 – Copy‑pasting a component between apps brings its logic with it.

트레이드오프

코드 검토

When every formula is inline, there is no single “global view” of the app’s logic. You end up hunting through many screens and controls, seeing only tiny snippets at a time.

FYI: I built a web app that extracts all the code from a Canvas app into one document – see it at .

코드 재사용

Good code is reusable. Inline formulas force you to duplicate logic across controls.

예시: a SQL‑query connector needed in seven different buttons (New Search, Next Page, …). Each button contained the same block of code, only the inputs differed.

인라인 코드를 사용할 때

규칙설명
재사용 안 함The logic will not be needed anywhere else.
단일 동작The formula performs one simple operation (e.g., a single Patch, a basic calculation).

If the code does more than one logical step (e.g., patch + reset + update), move it to a reusable block.

2. 사용자 정의 함수 (UDF) 및 동작 UDF

Power Apps는 이제 앱 수식(일명 UDF)을 지원합니다. 동작 UDF(Microsoft 용어)는 본질적으로 서브루틴이며, 동작을 수행하지만 값을 반환하지 않습니다.

차이점

항목UDF동작 UDF
범위함수에 한정; 변수와 컴포넌트를 읽고 쓸 수 있음.동일한 범위이지만 부수 효과만을 위해 사용됩니다.
트리거선언형 – 엔진이 언제 재계산할지 결정합니다.명령형 – 명시적으로 호출됩니다(예: 버튼에서).
출력값을 반환합니다.Void를 반환합니다(값 없음).

간단한 예시

UDF – 값을 반환

AddOne(num : Number) : Number = (
    num + 1
)

동작 UDF – 동작을 수행

AddToVar(num : Number) : Void = {
    Set(viNum, viNum + num)
}

첫 번째는 전달된 숫자를 1 증가시켜 반환하고, 두 번째는 전역 변수를 업데이트합니다.

만들기

두 종류 모두 앱 → 수식에서 정의합니다:

App Formulas pane

구문은 약간 다릅니다:

FunctionName( inputName : InputType ) : OutputType (
    // 여기서 코드를 작성하세요
)

UDF는 본문에 괄호 ()를 사용하고, 동작 UDF는 값을 반환하지 않고 동작만 수행한다는 것을 나타내기 위해 중괄호 {}를 사용합니다.

3. UDF 및 Behaviour UDF 사용 시점

상황권장 접근 방식
재사용 가능한 로직 (여러 컨트롤이나 화면에서 사용)필요할 때마다 호출할 UDF를 생성합니다.
부수 효과가 있는 작업 (변수 설정, 탐색, 커넥터 호출)호출 식을 깔끔하게 유지하기 위해 Behaviour UDF를 사용합니다.
복잡한 계산 (인라인 속성을 어수선하게 만들 경우)계산을 UDF로 옮겨 결과를 참조합니다.

4. 데이터‑대‑플로우에서의 함수

(Power Automate 흐름이나 Dataverse‑측 로직 내부에서 함수를 사용하는 것에 대한 추가 논의를 위한 자리 표시자.)

TL;DR

  • Inline – 빠르고 상황에 맞지만 검토와 재사용이 어려움.
  • UDF / Behaviour UDF – 중앙 집중식이며 재사용 가능하고 유지 관리가 쉬움; 반복되거나 인라인 수식을 복잡하게 만드는 로직에 사용하세요.

이 가이드라인을 적용하면 Power Apps가 가독성 있고 유지 보수가 쉬우며 확장 가능하게 유지됩니다—마치 인라인 “ 핸들러에서 외부 스크립트 파일로 JavaScript를 옮기는 것과 같습니다.

5. 예제 UDS

SubroutinenName( inputName:inputType ) : Void {
    
}

6. 선택적 및 다중 입력

AddTogether(num:Number, num2:Number) : Number = (
    num + num2
);

7. 간단한 UDS 예제

AddOneToVar() : Void = {
    Set(viNum, viNum + 1);
};

8. UDF와 UDS를 언제 사용할까

보시다시피 UDF는 매우 유용하지만, 사용 사례가 비교적 작기 때문에 앱 코딩 방식을 크게 바꾸지는 못합니다. 반면 UDS는 웹 개발자가 개척한 경로를 따라갈 수 있기 때문에 훨씬 강력합니다.

8.1 UDF/UDS를 언제 사용할까

내 개인적인 의견: 우리는 UDS를 훨씬 더 많이 사용해야 합니다. 인라인 코드를 사용할 두 가지 조건을 보면, 나머지는 모두 수식 바로 옮겨서 UDS로 호출하는 것이 좋습니다.

code example

  • 재사용 – 코드를 재사용할 계획이라면 UDS로 만드세요.
  • 복잡성 – 이벤트 속성에 여러 Power FX 함수가 포함되어 있다면 UDS로 만드세요.

항상 회색 지대가 존재합니다. 예를 들어, 다음 코드를 UDS로 옮겨야 할까요?

UDS() : Void = {
    Patch(dummyData, {ID:1}, {Title:"test1"});
    ResetForm(Form1);
};

여러 Power FX 함수를 수행하지만 단 두 줄에 불과합니다. 가독성과 명확한 표준을 위해 저는 이를 UDS로 옮길 것입니다.

주요 주의사항

  • 이름 지정 – 설명적인 이름을 사용하세요; 함수가 재사용되지 않을 경우 컴포넌트 이름을 포함시키세요.
  • 주석 – 재사용 가능한 경우, 해당 함수를 사용하는 컴포넌트를 주석에 나열하세요.

9. Dataverse 함수 및 흐름

Dataverse 함수

  • Power FX를 사용하여 서버에서 실행됩니다.
  • 간단한 API URL을 통해 재사용성을 제공하며, 다른 앱, 흐름 및 프로코드 솔루션에서 호출할 수 있습니다.

고려 사항

  • 여전히 버그가 존재하며, Microsoft의 관심이 감소하고 있는 것으로 보입니다.
  • Premium 라이선스가 필요합니다.
  • 최대 실행 시간: 2 분.
  • 동기식 – 호출자는 완료될 때까지 기다려야 합니다.

여러 플랫폼에서 동일한 코드를 실행해야 하는 특수한 시나리오에만 Dataverse 함수를 사용하십시오.

Power Automate 흐름

  • Power FX가 아닌 기술 레이어를 추가하지만, 모든 Power App 개발자는 Power Automate를 사용할 수 있습니다.
  • 네이티브 Power FX보다 느리지만 다음을 제공합니다:
    • 다양한 커넥터에 대한 접근.
    • 비사용자(서비스) 연결.
    • 위임 – 흐름이 백그라운드에서 실행되는 동안 앱이 계속 동작합니다.

전형적인 사용 사례

  • UI를 차단하지 않아야 하는 장시간 실행 작업.

자세한 내용은 내 블로그를 참고하세요:


10. 최종 생각

핵심 요점: 코드를 인라인 표현식에서 블록(UDS)으로 옮기세요. 반발이 있을 것이라는 점은 예상하고, 그것도 당연합니다. 하지만 다음을 고려해 보세요:

  • 이것은 전부 혹은 전무의 규칙이 아니라, 회색 지대가 존재합니다.
  • 변화에는 시간이 걸리지만, 일단 익숙해지면 가독성과 유지보수성이 향상됩니다.
  • 프로‑코드 솔루션은 종종 무거운 작업을 대신 처리해 줍니다.

😎 Subscribe to David Wyatt

Back to Blog

관련 글

더 보기 »

2025년 나의 Node.js API 모범 사례

Node.js는 이제 10년 넘게 프로덕션 API를 구동해 왔으며, 2025년이 되면서 더 이상 “새롭다”거나 실험적인 것이 아니라 인프라가 되었습니다. 그 성숙도는 c...