본문으로 건너뛰기
버전: Latest(v3.0) 🔥

Pre-function

개요

Pre-function 정책은 사용자가 요청이 처리되기 전에 사용자 정의 스크립트를 실행할 수 있도록 합니다. 이 정책은 사용자가 요청 매개변수, 헤더 및 본문 내용을 추가, 제거 또는 변환하여 요청을 동적으로 수정할 수 있게 합니다.

Pre-function 정책은 일반적으로 다음과 같은 용도로 사용됩니다:

  • Data Masking: 개인 식별 번호와 같은 민감한 데이터를 백엔드에 도달하기 전에 숨기는 것.
  • Query String Manipulation: 쿼리 매개변수를 동적으로 수정하거나 필터링하는 것.
  • Token Validation: 인증 및 보안 로직을 구현하는 것.
  • Routing Control: 요청 속성에 따라 라우팅 결정을 수정하는 것.

구성 세부정보

Pre-function 정책은 사용자가 스크립트를 작성하는 code editor로 구성됩니다. 인터페이스에는 다음 구성 요소가 포함됩니다:

코드 편집기

editor는 사용자가 API 요청 생애 주기의 다양한 실행 단계에 대한 사용자 정의 Lua 스크립트를 작성하고 수정할 수 있는 주요 영역입니다. 코드 편집기 내에는 네 개의 탭이 있습니다:

  • Access: 여기에서 입력된 코드는 접근 단계에서 실행되어 사용자가 인증, 헤더, 경로 재작성 등과 같은 요청 수준의 로직을 조작할 수 있게 합니다.
  • Header Filter: 클라이언트에 다시 전송되기 전에 응답 헤더를 수정하는 데 사용됩니다.
  • Body Filter: 응답 본문을 조작할 수 있게 하여 응답 내용을 변환하거나 마스킹하는 데 유용합니다.
  • Log: 요청이 처리된 후 요청 또는 응답 데이터를 기반으로 로깅 동작을 구현하는 데 사용됩니다.

각 탭에는 전용 코드 편집기와 개발 속도를 높이는 데 도움이 되는 스니펫 및 예제에 대한 접근이 포함되어 있습니다.

노트

코드는 여러 실행 단계가 활용될 경우 각 탭 내에서 별도로 작성되고 저장되어야 합니다.

Pre-function Code Editor

스니펫 (미리 정의된 코드 블록)

Snippets 섹션은 사용자가 편집기에 삽입할 수 있는 미리 정의된 코드 블록을 제공합니다. 이러한 블록은 사용자가 코드를 처음부터 작성할 필요 없이 일반적으로 사용되는 요청 수정을 신속하게 구현하는 데 도움을 줍니다.

스니펫 목록:

SnippetsDescription
JSON 파서JSON 형식의 요청 본문을 로드하고 처리합니다.
요청 원본 본문 가져오기처리하기 전에 전체 요청 본문을 검색합니다.
서비스 요청 원본 본문 설정요청 본문을 수정하여 백엔드로 전달하기 전에 변경합니다.
요청 메서드 가져오기HTTP 메서드(GET, POST 등)를 검색합니다.
요청 경로 가져오기전체 요청 경로를 얻습니다.
요청 헤더 가져오기특정 요청 헤더에서 값을 추출합니다.
요청 헤더 설정요청 헤더를 동적으로 수정하거나 추가합니다.
응답 종료 설정요청을 종료하고 사용자 정의 응답을 반환합니다.
서비스 호스트 설정대상 서버를 동적으로 변경합니다.
서비스 요청 스킴 설정요청 스킴(http 또는 https)을 수정합니다.
서비스 요청 경로 설정요청을 백엔드로 전송하기 전에 요청 경로를 변경합니다.

Pre-function Snippets

예제 섹션

이 섹션에는 Pre-function 정책의 실제 구현을 보여주는 미리 정의된 예제 스크립트가 포함되어 있습니다. 이러한 예제는 사용자가 일반적인 시나리오를 신속하게 구현할 수 있도록 템플릿 역할을 합니다.

예제 목록:

ExamplesDescription
데이터 마스킹요청 페이로드에서 민감한 정보를 마스킹합니다. 쿼리 문자열에 값으로 나타날 때 한국 주민등록번호를 “SSN-DATA”로 대체하고 라우팅을 계속합니다.
쿼리 문자열 조작"service" 키와 해당 값 외의 모든 쿼리 문자열을 제거합니다.
백엔드 라우팅 조건에 따라 매개변수를 필터링합니다:
- 라우팅 대상 백엔드 주소가 A일 때, 모든 쿼리 매개변수가 완전히 제거됩니다.
- 그러나 라우팅 대상 백엔드 주소가 B일 경우, 특정 쿼리 매개변수 집합만 허용되며, 다른 매개변수는 폐기됩니다.
토큰 검증정규 표현식을 사용하여 "Authorization: bearer xxxxxxxx" 토큰에 대한 사용자 정의 검증을 구현합니다. 그리고 특정 메서드 + 경로 조합은 베어러 토큰 검증을 수행하지 않습니다.
라우팅사용자가 코드를 작성하여 상황에 따라 라우팅을 계속하거나 즉시 실패를 처리할 수 있도록 허용합니다.

사전 함수 예시

적용 예시

사용자는 코드 편집기에서 스크립트를 직접 수정하거나 미리 정의된 스니펫을 사용할 수 있습니다. 예시를 클릭하면 팝업 편집기가 열려 추가적인 사용자 지정을 할 수 있습니다.

사전 함수 정책에 대한 자주 묻는 질문

  1. When does Pre-function execute in the API lifecycle?

사전 함수는 선택된 실행 단계에 따라 요청 또는 응답 처리 중에 synchronously를 실행합니다.

실행은 only after a request reaches the API policy chain에서 발생하며, 백엔드로 전달되기 전이나 클라이언트로 반환되기 전에 발생합니다.

  1. 4 separate execution phase of Pre-function detailed as below. Logic placed in the wrong phase will not work as expected.

접근 단계

  • 실행: before routing to the backend
  • 인증, 검증, 헤더/쿼리/경로 조작 및 라우팅 제어에 사용됨
  • 대부분의 요청 수준 로직이 구현되어야 하는 곳입니다.

헤더 필터 단계

  • 실행: before response headers are sent to the client
  • 응답 헤더를 수정하는 데만 사용됨

본문 필터 단계

  • 실행: while processing the response body
  • 응답 페이로드를 마스킹하거나 변환하는 데 사용됨

로그 단계

  • 실행: after the request is completed
  • 로깅 및 가시성에만 사용됨
  • 여기서의 변경 사항은 not 요청 또는 응답 동작에 영향을 미치지 않습니다.
  1. Can scripts in different tabs share data or variables?

아니요.

각 실행 단계:

  • 독립적으로 실행됩니다.
  • 다른 탭과 변수를 자동으로 공유하지 않습니다.
  • 요청 간에 지속적인 메모리가 없습니다.

탭 간에 full isolation를 가정해야 하며, 지원되는 컨텍스트 메커니즘을 통해 명시적으로 처리되지 않는 한 그렇습니다.

  1. What can’t (or shouldn’t) Pre-function do?

프리 함수는 not designed to입니다:

  • 요청 간에 데이터를 지속합니다.
  • 장기 실행 또는 차단 작업을 수행합니다.
  • 전용 인증 또는 권한 부여 정책을 완전히 대체합니다.
  • 백엔드 내부에 직접 접근합니다.
  • 비밀이나 자격 증명을 안전하게 저장합니다.
  1. Can Pre‑function be used to block or reject requests?

예.

Set Response Exit 스니펫을 Access phase에서 사용하여:

  • 요청 실행을 즉시 중지합니다.
  • 사용자 정의 상태 코드와 응답 본문을 반환합니다.
  • 백엔드 호출을 피합니다.

이것은 검증 또는 권한 부여 실패를 처리하는 권장 방법입니다.