소개

본 장에서는 AnyAPI 게이트웨이의 특징 및 설정 파일의 설정 방법에 대해 설명합니다.

개요

AnyAPI 게이트웨이는 클라이언트의 API 요청을 AnyAPI 게이트웨이에 등록된 라우팅 정보에 따라 각 API 서버들로 전달하고, 각 API 서버들로부터 받은 응답들을 취합하여 클라이언트에 전달합니다.

또한 라우팅 정보를 통하여 요청 URI 검사, 파라미터 검사 등을 수행합니다. 여러 검사 결과에 따라 라우팅할 Backend API 서버의 URI가 특정되면 해당 정보를 마스터로 전달하여 인증/인가, Qos 처리를 추가로 진행합니다. 이후 다시 게이트웨이를 통하여 실제 API 서버로 라우팅을 한 후 응답을 돌려 받습니다.

특징

AnyAPI 게이트웨이의 특징은 다음과 같습니다.

  • Non-Blocking 방식

    I/O 멀티플렉싱 방식으로 입출력을 처리하며, 특정 I/O 채널의 버퍼링이 다른 채널 처리에 영향을 주지 않도록 fully non-blocking 방식을 구현하고 있습니다. 기본적으로 단일 프로세스로 동작하며, 하나의 이벤트 스레드에서 non-blocking I/O를 통해 HTTP 프로토콜을 처리합니다. 이 과정에서 데이터의 암복호화 처리나 blocking I/O가 필요한 작업은 워커 스레드를 통해 처리합니다.

  • HTTP 프로토콜 지원

    HTTP 프로토콜은 1.0과 1.1 버전을 지원하며, HTTPS 프로토콜도 지원합니다. 또한 HTTP로 들어온 요청을 HTTPS로 변환하는 기능을 제공합니다.

  • 라우팅 및 변환

    HTTP 요청이 들어오면 Path나 Method를 기반으로 API를 식별하는 라우팅을 지원합니다. Path에서 와일드카드(*)를 사용하여 모든 문자열에 대응할 수 있습니다. 또한 Path나 Method를 다른 Path, Method로 변환을 지원합니다. Path의 경우 특정 예약어를 통해 지정한 문자열로 대체할 수 있습니다.

    항목 설명

    {FullPath}

    들어온 요청의 전체 Path로 치환합니다.

    {StagePath}

    Stage의 basePath로 치환합니다.

    {Path}

    들어온 요청의 전체 Path에서 stage basePath를 제외한 Api Path로 치환합니다.

  • 목적지 설정

    서버나 서버 그룹 또는 IP를 직접 지정하여 해당 경로로 프록시 또는 리다이렉트 응답을 돌려주는 기능을 지원합니다. 서버 그룹을 설정하여 라운드로빈 방식, Weight 방식의 목적지 라우팅을 설정할 수 있습니다.

  • API 배포 및 테스트 기능

    구현한 API는 배포 버튼을 누르기 전까지 외부에 노출되지 않습니다. 배포하지 않은 API는 AnyAPI의 테스트 기능을 통해 정상적으로 동작하는지, API 서버가 어떤 응답을 돌려주는지, API 서버로부터 응답이 얼마나 걸리는지를 확인할 수 있습니다.

  • 인증/인가

    인증된 사용자를 확인하는 인증 기능과 API 호출 횟수를 제한할 수 있는 QoS 인가 기능을 제공합니다. QOS는 STAGE별로 설정이 가능하며 분당, 시간당, 하루당 얼만큼 처리할 것인지 지정할 수 있습니다.

    다음은 AnyAPI 게이트웨이에서 현재 제공하는 인증 방식의 종류입니다.

    구분 설명

    API Key 인증

    HTTP 헤더에 들어온 x-api-key 헤더를 확인하여 등록된 API Key인지 확인하여 사용자를 인증하는 방식입니다.

    OAuth 인증

    OAuth 서버로부터 접근 토큰을 발급받아 Authorization 헤더에 넣어서 요청하면 AnyAPI 게이트웨이는 Authorization 토큰이 유효한지 체크하여 사용자를 인증하는 방식입니다.

    Terminal 인증

    TerminalLogin API를 호출하여 단말 토큰을 생성한 후 x-api-token, x-api-pk-number 헤더에 넣어서 요청하면 AnyAPI 게이트웨이는 해당 토큰이 유효한지 체크하여 사용자를 인증하는 방식입니다.

게이트웨이 환경

게이트웨이 설정 파일

AnyAPI 게이트웨이에서 사용하는 설정 파일은 초기 게이트웨이 설정과 동적으로 반영되는 게이트웨이 설정을 저장하기 위해 사용합니다.

설치 초기에 설정 파일은 다음과 같은 위치에 존재합니다.

${GATEWAY_HOME}/config/defaultApiGateway21

다음은 AnyAPI 게이트웨이 설정 파일의 작성 예시입니다. (현재 JSON 형식만 지원)

IP, PORT, Monitoring 설정을 제외하고는 사용자가 직접 수정할 수 없으며, WebAdmin을 통해서만 수정이 가능합니다.

  • gatewayConfig

    게이트웨이에 대한 기본 메타 데이터 설정 정보입니다.

    "gatewayConfig": {
        "gatewayGroupId": "${GROUP_ID}", (1)
        "id": "${ID}", (2)
        "name": "${NAME}", (3)
        "protocol": "HTTP" (4)
        "thread_monitoring":1000 (5)
        "thread_pool": { (6)
           "min":10,
           "max":50
           }
    }

    각 설정 항목에 대한 설명은 다음과 같습니다.

    항목 설명

    (1) gatewayGroupId

    게이트웨이가 배포되는 그룹의 ID입니다.

    (2) id

    게이트웨이의 고유 ID입니다.

    (3) name

    게이트웨이의 이름입니다. 설정하지 않는 경우 ID를 사용합니다.

    (4) protocol

    게이트웨이가 사용하는 프로토콜입니다. (기본값: HTTP)

    (5) thread_monitoring

    스레드 모니터링용 로그의 주기(ms)를 설정합니다. (기본값: 1000)

    (6) thread_pool

    기본 스레드 풀을 설정합니다.

    실제 파싱이나 매핑이 이루어질 때 사용됩니다. 이때 스레드 풀은 선형적으로 증가하지는 않으며, 상황에 맞게 max 값까지 증가합니다.

    • min: 부팅 시 최소로 뜨는 스레드 개수

    • max: 최대로 늘어나는 스레드 개수

  • staticResources

    게이트웨이가 처음 부팅될 때 필요한 설정 정보입니다. 이때 "endpoints" 필드는 외부와의 통신 정보이고, "applications" 필드는 게이트웨이에 등록된 애플리케이션의 정보입니다.

    "staticResources": {
        "endpoints": [{
            "endpoint": {
                "physicalName": "poClientEndpoint",
                "protocol": "HTTP",
                "direction": "OUTBOUND",
                "bootState": "RUNNING",
                "connectType": "CLIENT",
                "httpUrl": {
                    "split": true,
                    "scheme": "http",
                    "host": "${MS_IP}",
                    "port": "${MS_PORT}"
                }
            }
        },
        {
            "endpoint": {
                "physicalName": "poServerEndpoint",
                "protocol": "HTTP",
                "bootState": "RUNNING",
                "connectionPool": {
                    "max": "1000"
                },
                "httpUrl": {
                    "split": true,
                    "scheme": "http",
                    "host": "${GW_IP}",
                    "port": "${GW_PORT}"
                },
                    "rulesetId": "anylink.system.SystemServiceRuleSet"
            }
        },
        {
            "endpoint": {
                "physicalName": "httpEndpoint",
                "protocol": "HTTP",
                "bootState": "Running",
                "connectType": "Server",
                "connection_pool": {
                    "max": "100"
                },
                "httpUrl": {
                    "scheme": "http",
                    "port": "${HTTP_PORT}"
                },
                "rulesetId": "ApiApplication.ApiServiceGroup.ApiDefaultRuleChain",
                "errorRulesetId": "anylink.system.ApiGatewayErrorRuleSet"
            }
        },
        {
            "endpoint": {
                "physicalName": "httpsEndpoint",
                "protocol": "HTTP",
                "bootState": "Running",
                "connectType": "Server",
                "connectionPool": {
                    "max": "100"
                },
                "useSsl": true,
                "ssl": {
                    "keystore": {
                        "storeType": "PEM",
                        "storeLocation": "${SSL_STORE}"
                    }
                },
                "httpUrl": {
                    "scheme": "http",
                    "port": "${HTTPS_PORT}"
                },
                "rulesetId": "ApiApplication.ApiServiceGroup.ApiDefaultRuleChain",
                "errorRulesetId": "anylink.system.ApiGatewayErrorRuleSet"
            }
        }],
        "applications": [{
            "id": <string>, (1)
            "version": <int>, (2)
            "servicegroups": [{ (3)
                "id": <string>, (4)
                "version": <int>, (5)
                "rulesets": [{ (6)
                    "id": <string>, (7)
                    "rule_chains": <RuleChainInfo> (8)
                }],
                "libpath": <string> (9)
            }]
        }]
    }

    각 설정 항목에 대한 설명은 다음과 같습니다.

    항목 설명

    (1) id

    애플리케이션의 ID입니다.

    (2) version

    애플리케이션의 버전입니다.

    (3) servicegroups

    애플리케이션의 하위 서비스 그룹입니다.

    (4) id

    서비스 그룹의 ID입니다.

    (5) version

    서비스 그룹의 버전입니다.

    (6) rulesets

    서비스 그룹의 룰셋입니다.

    (7) id

    룰셋의 ID입니다.

    (8) rule_chains

    체인으로 정의한 룰셋의 실제 내용입니다.

    (9) libpath

    읽어들일 SharedLibrary의 경로입니다.

    "endpoints" 필드의 설정 방법에 대한 자세한 내용은 엔드포인트 설정을 참고합니다.

  • dynamicResources

    게이트웨이가 웹 어드민으로부터 받아온 동적 설정 정보입니다. 해당 필드는 부팅 시 자동으로 설정되며, 웹 어드민을 통해서만 수정이 가능합니다.

    "dynamicResources": {
        "string": <int>
        "endpoints": [<EndpointType>], (1)
        "applications": [<ApplicationType>], (2)
    }

    각 설정 항목에 대한 설명은 다음과 같습니다.

    항목 설명

    (1) endpoints

    엔드포인트 목록입니다.

    (2) applications

    애플리케이션 목록입니다.

  • EndpointInfo

    게이트웨이에 등록된 endpoint 설정 정보입니다. 해당 필드는 웹 어드민을 통해서만 수정이 가능합니다.

    "EndpointInfo": {
        "logical_name": <string>, (1)
        "physical_name": <string>, (2)
        "protocol": ("PO", "HTTP", "TCP"), (3)
        "direction": ("INBOUND", "OUTBOUND", "BOTH"),
        "boot_state": ("STOPPED", "RUNNING"),
        "http_url": { (4)
            "split": <bool>, (5)
            "url": <string>, (6)
            "scheme": ("HTTP", "HTTPS"), (7)
            "host": <string>, (8)
            "port": <string> (9)
        }
    }

    각 설정 항목에 대한 설명은 다음과 같습니다.

    항목 설명

    (1) logical_name

    엔드포인트의 논리적인 이름입니다.

    (2) physical_name

    엔드포인트의 ID입니다.

    (3) protocol

    엔드포인트의 프로토콜입니다. (현재 HTTP만 사용 가능)

    (4) http_url

    연결할 원격 HTTP 서버의 URL입니다.

    (5) split

    URL의 분리 여부입니다.

    • true: URL을 분리함

    • false: URL을 분리 안 함

    (6) url

    전체 URL입니다. 단, split이 'false’일 때 설정합니다.

    (7) scheme

    URL Scheme입니다. 단, split이 'true’일 때 설정합니다.

    • HTTP

    • HTTPS

    (8) host

    HTTP 호스트 이름입니다. 단, split이 'true’일 때 설정합니다.

    (9) port

    HTTP 포트 번호입니다. 단, split이 'true’일 때 설정합니다.

  • EndpointGroupInfo

    게이트웨이에 등록된 endpointgroup 설정 정보입니다. 해당 필드는 웹 어드민을 통해서만 수정이 가능합니다.

    "EndpointGroupInfo":{
        "logical_name": <string>, (1)
        "physical_name": <string>, (2)
        "routing_type": ("ROUND_ROBIN", "WEIGHT_BASED", "PRIORITY"), (3)
        "routing": [{
            "endpoint_id": <string>, (4)
            "priority": <int>, (5)
            "weight": <int> (6)
        }]
    }

    각 설정 항목에 대한 설명은 다음과 같습니다.

    항목 설명

    (1) logical_name

    엔드포인트의 논리적인 이름입니다.

    (2) physical_name

    엔드포인트의 ID입니다.

    (3) routing_type

    엔드포인트의 라우팅 정책입니다. (현재 WEIGHT_BASED만 지원)

    (4) endpoint_id

    라우팅을 설정할 하위 엔드포인트의 ID입니다.

    (5) priority

    엔드포인트의 우선순위입니다. 숫자가 낮을수록 우선순위가 높습니다.

    (6) weight

    엔드포인트의 가중치입니다. 숫자가 높을수록 라우팅 비율이 증가합니다.

  • loggerSystems

    게이트웨이에서 사용하는 로거에 대한 설정 정보입니다. 해당 필드는 웹 어드민을 통해서만 수정이 가능합니다.

    "loggerSystems": [{
        "path": "anylink",
        "level": "debug", (1)
        "rotatetype": "TIMEBASE", (2)
        "rotateparam": "daily", (3)
        "times": "local", (4)
        "format": "[%Y-%m-%d %L%H:%M:%S][%P][%q][%[THREAD]]: %t", (5)
        "expire": "none" (6)
    }]

    각 설정 항목에 대한 설명은 다음과 같습니다.

    항목 설명

    (1) level

    로거의 레벨입니다.

    • FATAL

    • CRITICAL

    • ERROR

    • WARN

    • NOTICE

    • INFO

    • DEBUG

    • TRACE

    • NONE

    (2) rotatetype

    로거 로테이트 방식입니다.

    • SIZE

    • TIMEBASE

    (3) rotateparam

    로거 로테이트에 사용할 단위입니다.

    • never: 로테이트 안 함

    • <n>: 파일 크기가 <n> 바이트를 초과하면 로테이트

    • <n> K: 파일 크기가 <n> 킬로바이트를 초과하면 로테이트

    • <n> M: 파일 크기가 <n> 메가바이트를 초과하면 로테이트

    • [day,][hh:][mm]: 지정된 요일 및 시간에 로테이트

    • daily/weekly/monthly: 지정된 일간/주간/월간에 로테이트

    • <n> hours/weeks/months: 매 <n> 시간/주/월에 로테이트

    (4) times

    로그 시간 타입입니다.

    • local: 현재 서버 시간 기준으로 로깅

    • UTC: UTC 시간 기준으로 로깅

    (5) format

    로깅되는 포맷입니다.

    • [%Y-%m-%d %L%H:%M:%S]: 년-월-일 시:분:초

    • [%P]: 프로세스 ID

    • [%q]: 로그 레벨

    • [%[THREAD]]: 스레드 정보

    • [%t]: 로그 내용

    (6) expire

    로그 파일의 만료기간입니다.

    • none: 없음

    • [day,][hh:][mm] : 지정된 요일 및 시간

    • daily/weekly/monthly: 지정된 일간/주간/월간

    • <n> hours/weeks/months: 매 <n> 시간/주/월

  • Monitoring

    게이트웨이 모니터링에 대한 설정 정보입니다. 해당 필드는 웹 어드민을 통해서만 수정이 가능합니다.

    "Monitoring": {
        "trace": {
            "enable" : "<bool>" (1)
            "option": {
                "fileEnable": "<bool>", (2)
                "fileName": "trace_log", (3)
                "path": "/var/log/anyapi", (4)
                "rotateParam": "30 M", (5)
                "rotateFileNum": "5", (6)
                "flushBufferSize": "32", (7)
                "interval": "3000",
                "endpoint": [ (8)
                    "<grpc ip:grpc port>"
                ],
                "includeBody": "<bool>" (9)
            }
        },
        "stat": { (10)
            "enable": "<bool>",
            "option": {
                "endpoint": [
                    "<grpc ip:grpc port>"
                ],
            }
        }
    }

    각 설정 항목에 대한 설명은 다음과 같습니다.

    항목 설명

    (1) enable

    모니터링의 사용 여부입니다.

    • true: 모니터링 ON

    • false: 모니터링 OFF

    (2) fileEnable

    파일 저장 여부입니다.

    • true: TRACE 정보를 파일로 저장

    • false: 파일 저장 사용 안 함

    (3) fileName

    저장될 파일 이름입니다.

    (4) path

    파일 저장 경로입니다.

    (5) rotateParam

    파일의 로테이션 크기입니다.

    (6) rotateFileNum

    로테이션되는 파일의 개수입니다.

    (7) flushBufferSize

    Span을 저장하는 버퍼 사이즈입니다.

    (8) endpoint

    gRPC의 IP 주소와 포트 번호입니다.

    (9) includeBody

    TRACE 정보에 body값의 포함 여부입니다.

    (10) stat

    통계 데이터의 전송 여부입니다.

    • true: 전송

    • false: 전송 안 함

  • loggerAccess

    게이트웨이에서 사용하는 액세스 로거에 대한 설정 정보입니다. 해당 필드는 웹 어드민을 통해서만 수정이 가능합니다.

    "loggerAccess": {
        "enable": "true", (1)
        "format": "%h %l %u %t %r %s %b", (2)
        "fileName": "access_log", (3)
        "path": "default", (4)
        "rotatetype": "TIMEBASE", (5)
        "rotateparam": "daily", (6)
        "times": "local", (7)
        "expire": "none" (8)
    }

    각 설정 항목에 대한 설명은 다음과 같습니다.

    항목 설명

    (1) enable

    액세스 로그의 사용 여부입니다.

    • true: 사용

    • false: 사용 안 함

    (2) format

    로깅되는 포맷입니다.

    • %h: 원격 호스트 주소

    • %l: 원격 로그인 이름

    • %u: Frank, HTTP 인증으로 알아낸 문서를 요청한 사용자의 ID

    • %t: 서버 요청 처리를 마친 시간

    • %r: 요청의 첫 번째 줄

    • %s: 상태

    • %b: HTTP 헤더를 제외한 전송 바이트 수

    (3) fileName

    로그 파일의 이름입니다. (기본값: access_log)

    (4) path

    로그 파일이 저장되는 경로입니다. (기본값: ${GATEWAY_HOME}/protocol/HTTP/gw_id_test/logs/access_log)

    (5) rotatetype

    로거 로테이트 방식입니다.

    • SIZE

    • TIMEBASE

    (6) rotateparam

    로거 로테이트에 사용할 단위입니다.

    • never: 로테이트 안 함

    • <n>: 파일 크기가 <n> 바이트를 초과하면 로테이트

    • <n> K: 파일 크기가 <n> 킬로바이트를 초과하면 로테이트

    • <n> M: 파일 크기가 <n> 메가바이트를 초과하면 로테이트

    • [day,][hh:][mm]: 지정된 요일 및 시간에 로테이트

    • daily/weekly/monthly: 지정된 일간/주간/월간에 로테이트

    • <n> hours/weeks/months: 매 <n> 시간/주/월에 로테이트

    (7) times

    로그 시간 타입입니다.

    • local: 현재 서버 시간 기준으로 로깅

    • UTC: UTC 시간 기준으로 로깅

    (8) expire

    로그 파일의 만료기간입니다.

    • none: 없음

    • [day,][hh:][mm] : 지정된 요일 및 시간

    • daily/weekly/monthly: 지정된 일간/주간/월간

    • <n> hours/weeks/months: 매 <n> 시간/주/월

  • environment

    게이트웨이의 타임아웃 관련 설정 정보입니다. 해당 필드는 웹 어드민을 통해서만 수정이 가능합니다.

    "environment": {
        "connectionTimeout": "3000", (1)
        "readTimeout": "30000", (2)
        "failoverTimeout": "60000" (3)
    }

    각 설정 항목에 대한 설명은 다음과 같습니다.

    항목 설명

    (1) connectionTimeout

    connectionTimeout 설정값입니다.

    (2) readTimeout

    readTimeout 설정값입니다.

    (3) failoverTimeout

    failoverTimeout 설정값입니다.

디렉터리 구조

다음은 게이트웨이를 설치하고, 한번 실행한 후에 사용하는 디렉터리 구조입니다.

${GATEWAY_HOME}
  |-- bin
  |-- inc
  |-- lib
  |-- config
  |-- protocol
  |       |-- ${PROTOCOL}
  |               |-- ${GATEWAY_NAME}
  |                      |-- logs
  |                      |-- cert
  |-- uds
bin

AnyAPI 게이트웨이의 부팅을 위한 바이너리가 위치합니다.

inc

AnyAPI 게이트웨이 헤더 파일들이 위치합니다.

lib

AnyAPI 게이트웨이에서 사용하는 라이브러리들이 위치합니다.

config

AnyAPI 게이트웨이 설정 파일이 위치합니다.

protocol

AnyAPI 게이트웨이에서 사용하는 리소스가 위치합니다.

다음은 하위 경로에 대한 설명입니다.

하위 경로 설명

${PROTOCOL}

게이트웨이가 사용하는 프로토콜 이름이 표시됩니다. AnyAPI에는 HTTP로 고정됩니다.

${GATEWAY_NAME}

게이트웨이 리소스가 저장되는 디렉터리입니다.

logs

게이트웨이의 시스템 로그가 저장되는 디렉터리입니다.

cert

어드민으로부터 설정한 인증서가 저장되는 디렉터리입니다.

uds

도메인 소켓 통신을 하는 경우 필요한 파일이 위치합니다.

환경 변수

다음은 게이트웨이를 구동할때 사용할 수 있는 환경 변수에 대한 설명입니다.

환경변수 설명

GATEWAY_HOME *

게이트웨이가 설치된 홈 디렉터리입니다. (필수 사항)

GATEWAY_HOME=/home/anylink/gateway

GATEWAY_LOG_HOME

게이트웨이의 시스템 로그가 저장되는 디렉터리를 설정합니다.

별도로 설정하지 않는다면 ${GATEWAY_HOME}/protocol/{GATEWAY_NAME}/logs를 지정합니다.

GATEWAY_LOG_HOME=/home/anylink/gateway/logs

GATEWAY_CERT_HOME

게이트웨이의 인증서가 저장되는 디렉터리를 설정합니다.

별도로 설정하지 않는다면 ${GATEWAY_HOME}/protocol/{GATEWAY_NAME}/cert를 지정합니다.

GATEWAY_CERT_HOME=/home/anylink/gateway/cert

LD_LIBRARY_PATH

lib 디렉터리를 export할 대상 경로입니다.

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GATEWAY_HOME}/lib/{PROTOCOL}/{GATEWAY_NAME}/log

GATEWAY_ENCODING

게이트웨이에서 사용하는 인코딩 방식입니다. (기본값: OS 기본값)

GATEWAY_ENCODING=utf8

GATEWAY_INACTIVE_CACHE

게이트웨이 인증시 캐시 사용 여부를 설정합니다. 'true’로 설정하면 내부 캐시를 사용하지 않고 매번 마스터로 인증을 요청합니다. (기본값: false)

  • true: 캐싱 비활성화

  • false: 캐싱 활성화

GATEWAY_INACTIVE_CACHE=false

CURLOPT_LOW_SPEED_TIME

CURLOPT_LOW_SPEED_LIMIT 옵션으로 지정된 속도 이하로 전송될 수 있는 최대 시간을 초 단위로 설정합니다. 해당 시간 이상 지속되면 전송이 취소됩니다. (기본값: 180)

CURLOPT_LOW_SPEED_LIMIT

최소 전송 속도를 초당 바이트(byte) 단위로 설정합니다. 지정한 속도가 'CURLOPT_LOW_SPEED_TIME' 옵션에 설정된 시간만큼 지속되면 전송이 취소됩니다. (기본값: 4096)

GATEWAY_FAILOVER_TIMEOUT

장애 조치 후 원래 상태로 복구될 때까지 허용되는 최대 시간입니다. 환경 변수 설정 시 어드민 설정보다 우선 적용됩니다. (기본값: 어드민 설정 값)

export GATEWAY_FAILOVER_TIMEOUT=60000(ms)

CURLOPT_CONNECTTIMEOUT_MS

외부 서버와 통신 시 연결 타임아웃을 밀리초(ms) 단위로 설정합니다. 환경 변수 설정 시 어드민 설정보다 우선 적용됩니다. (기본값: 어드민 설정 값)

export CURLOPT_CONNECTTIMEOUT_MS=30000(ms)

CURLOPT_TIMEOUT_MS

외부 서버와 통신 요청에 대한 타임아웃을 밀리초(ms) 단위로 설정합니다. 환경 변수 설정 시 어드민 설정보다 우선 적용됩니다. (기본값: 어드민 설정 값)

export CURLOPT_TIMEOUT_MS=30000(ms)

GATEWAY_REQUEST_LIMIT

클라이언트 요청 메시지 body의 최대 크기를 제한합니다. 환경 변수 설정 시 어드민 설정보다 우선 적용됩니다. (기본값: 어드민 설정 값)

export GATEWAY_REQUEST_LIMIT=3000(byte)

GATEWAY_ACTIVE_STANDBY

서버 그룹의 라우팅 방식을 Active-Standby 방식으로 설정합니다. 이 방식에서는 로컬 호스트 라우팅이 우선시됩니다. (기본값: false)

export GATEWAY_ACTIVE_STANDBY=false

GATEWAY_DISABLE_CONNECTION_ROUTING

서버 그룹의 라우팅 방식을 연결이 적은 쪽을 우선시하는 라우팅 방식에서 순수 라운드 로빈 방식으로 변경합니다. (기본값: false)

export GATEWAY_DISABLE_CONNECTION_ROUTING=false

GATEWAY_MALLOC_TRIM

일정 주기마다 malloc_trim 시스템 콜을 호출하여, 프로세스에서 사용하지 않는 메모리를 OS에 반환합니다. (기본값: 0)

export GATEWAY_MALLOC_TRIM=60000(ms)

GATEWAY_EXCEPTION_PER_MIN

예외(Exception) 생성으로 인한 부하를 줄이기 위해서 분당 발생 가능한 예외 수를 제한합니다. '-1’로 설정하면 제한하지 않습니다. (기본값: -1)

export GATEWAY_EXCEPTION_PER_MIN=100