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: 요청이 처리된 후 요청 또는 응답 데이터를 기반으로 로깅 동작을 구현하는 데 사용됩니다.
각 탭에는 전용 코드 편집기와 개발 속도를 높이는 데 도움이 되는 스니펫 및 예제에 대한 접근이 포함되어 있습니다.
코드는 여러 실행 단계가 활용될 경우 각 탭 내에서 별도로 작성되고 저장되어야 합니다.

스니펫 (미리 정의된 코드 블록)
Snippets 섹션은 사용자가 편집기에 삽입할 수 있는 미리 정의된 코드 블록을 제공합니다. 이러한 블록은 사용자가 코드를 처음부터 작성할 필요 없이 일반적으로 사용되는 요청 수정을 신속하게 구현하는 데 도움을 줍니다.
스니펫 목록:
| Snippets | Description |
|---|---|
| JSON 파서 | JSON 형식의 요청 본문을 로드하고 처리합니다. |
| 요청 원본 본문 가져오기 | 처리하기 전에 전체 요청 본문을 검색합니다. |
| 서비스 요청 원본 본문 설정 | 요청 본문을 수정하여 백엔드로 전달하기 전에 변경합니다. |
| 요청 메서드 가져오기 | HTTP 메서드(GET, POST 등)를 검색합니다. |
| 요청 경로 가져오기 | 전체 요청 경로를 얻습니다. |
| 요청 헤더 가져오기 | 특정 요청 헤더에서 값을 추출합니다. |
| 요청 헤더 설정 | 요청 헤더를 동적으로 수정하거나 추가합니다. |
| 응답 종료 설정 | 요청을 종료하고 사용자 정의 응답을 반환합니다. |
| 서비스 호스트 설정 | 대상 서버를 동적으로 변경합니다. |
| 서비스 요청 스킴 설정 | 요청 스킴(http 또는 https)을 수정합니다. |
| 서비스 요청 경로 설정 | 요청을 백엔드로 전송하기 전에 요청 경로를 변경합니다. |

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


사용자는 코드 편집기에서 스크립트를 직접 수정하거나 미리 정의된 스니펫을 사용할 수 있습니다. 예시를 클릭하면 팝업 편집기가 열려 추가적인 사용자 지정을 할 수 있습니다.
사전 함수 정책에 대한 자주 묻는 질문
- When does Pre-function execute in the API lifecycle?
사전 함수는 선택된 실행 단계에 따라 요청 또는 응답 처리 중에 synchronously를 실행합니다.
실행은 only after a request reaches the API policy chain에서 발생하며, 백엔드로 전달되기 전이나 클라이언트로 반환되기 전에 발생합니다.
- 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 요청 또는 응답 동작에 영향을 미치지 않습니다.
- Can scripts in different tabs share data or variables?
아니요.
각 실행 단계:
- 독립적으로 실행됩니다.
- 다른 탭과 변수를 자동으로 공유하지 않습니다.
- 요청 간에 지속적인 메모리가 없습니다.
탭 간에 full isolation를 가정해야 하며, 지원되는 컨텍스트 메커니즘을 통해 명시적으로 처리되지 않는 한 그렇습니다.
- What can’t (or shouldn’t) Pre-function do?
프리 함수는 not designed to입니다:
- 요청 간에 데이터를 지속합니다.
- 장기 실행 또는 차단 작업을 수행합니다.
- 전용 인증 또는 권한 부여 정책을 완전히 대체합니다.
- 백엔드 내부에 직접 접근합니다.
- 비밀이나 자격 증명을 안전하게 저장합니다.
- Can Pre‑function be used to block or reject requests?
예.
Set Response Exit 스니펫을 Access phase에서 사용하여:
- 요청 실행을 즉시 중지합니다.
- 사용자 정의 상태 코드와 응답 본문을 반환합니다.
- 백엔드 호출을 피합니다.
이것은 검증 또는 권한 부여 실패를 처리하는 권장 방법입니다.