Skip to main content
이 문서는 Unity Catalog 섹션의 일부입니다.

UC 함수란?

Unity Catalog에서 함수(Function) 는 재사용 가능한 로직을 SQL 또는 Python으로 정의하여, 카탈로그에 등록하고 권한을 관리할 수 있는 객체입니다. 일반 데이터베이스의 UDF(User-Defined Function)와 유사하지만, Unity Catalog의 거버넌스(권한, 리니지, 감사)가 적용된다는 점이 핵심입니다.
💡 UDF(User-Defined Function, 사용자 정의 함수) 란 사용자가 직접 작성한 함수를 의미합니다. Databricks에서는 SQL과 Python 두 언어로 UDF를 작성할 수 있으며, Unity Catalog에 등록하여 조직 전체에서 공유할 수 있습니다.

함수 유형


SQL UDF 생성

기본 문법

실전 예시


Python UDF 생성

기본 문법

실전 예시


테이블 반환 함수 (Table Function)

테이블 반환 함수는 단일 값이 아닌 행 집합(테이블) 을 반환합니다.

에이전트 도구로서의 UC 함수

🆕 UC Functions as Tools: Unity Catalog 함수는 AI 에이전트의 도구(Tool) 로 활용할 수 있습니다. 에이전트가 함수를 호출하여 데이터 조회, 계산, 외부 API 연동 등을 수행합니다.
UC 함수를 에이전트 도구로 사용하면 다음과 같은 이점이 있습니다:

권한 관리

함수 관련 권한

권한 부여 예시


함수 관리


실전 인사이트: 비즈니스 로직을 노트북에 산발적으로 두지 마세요

20년간 데이터 엔지니어링을 하면서, “같은 로직이 10개 노트북에 복사-붙여넣기 되어 있는” 상황을 셀 수 없이 많이 봐왔습니다. 한 팀이 고객등급분류 로직을 노트북에 작성하면, 다른 팀이 그것을 복사하고, 시간이 지나면 각 노트북의 로직이 미묘하게 달라지면서 같은 고객이 팀마다 다른 등급으로 분류 되는 사태가 발생합니다.

노트북 산재 vs UC 함수 중앙화

중앙화 대상이 되어야 할 비즈니스 로직 유형

💡 규칙: 만약 2개 이상의 팀이나 파이프라인에서 동일한 로직을 사용 한다면, 그것은 UC 함수로 중앙화해야 할 후보입니다. production.rules 스키마에 비즈니스 규칙을, production.utils에 유틸리티 함수를 분리하여 관리하면 깔끔합니다.

실전 인사이트: SQL UDF vs Python UDF 성능 차이

UC 함수를 작성할 때 SQL과 Python 중 어떤 언어를 선택해야 할지 고민될 수 있습니다. 성능 차이가 상당하므로, 용도에 따라 신중하게 선택해야 합니다.

성능 벤치마크 (1000만 행 테이블, SELECT에서 UDF 호출)

Python UDF가 느린 이유는 다음과 같습니다:
  1. 행 단위 직렬화/역직렬화: 각 행의 데이터를 JVM에서 Python 프로세스로 전달하고 결과를 돌려받는 과정에서 오버헤드가 발생합니다
  2. Python 프로세스 기동: 첫 호출 시 Python 인터프리터를 시작하는 콜드 스타트가 있습니다
  3. GIL 제약: Python의 GIL로 인해 병렬 처리가 제한됩니다

언어 선택 가이드

⚠️ 실전 팁: Python UDF는 소량 호출(에이전트 도구, 단건 API 호출) 에는 적합하지만, 대량 배치 처리(수백만 행 변환) 에는 부적합합니다. 대량 처리가 필요한 경우, Python UDF 대신 Spark DataFrame 변환 이나 SQL UDF 를 사용하세요.

실전 인사이트: 에이전트 도구로서의 UC 함수 설계 패턴

UC 함수를 AI 에이전트 도구로 설계할 때는, 일반적인 UDF 설계와는 다른 고려사항이 있습니다.

에이전트 도구용 함수 설계 원칙

💡 핵심: 에이전트 도구용 함수는 LLM이 자연어를 입력으로 넣어도 작동 하도록 설계해야 합니다. BIGINT ID를 요구하면 LLM이 ID를 모를 때 도구를 사용할 수 없습니다. LIKE 검색이나 유연한 매칭을 지원하고, 반환값에도 “재고 있음 (15개)“처럼 LLM이 바로 사용자에게 전달할 수 있는 자연어를 포함하세요.

정리


참고 링크