메인 콘텐츠로 건너뛰기
LexQ에 새로 생긴 기능과, 쓰는 방법이 달라지는 변경을 최신순으로 적습니다. 변경을 설명하는 가이드가 있으면 항목에서 그 가이드로 잇습니다.
롤백 확인, 늘어난 도메인 템플릿, 실행 전 타입 검사, 읽기 전용이 된 삭제한 그룹, 줄어든 500 오류

길이 제한을 넘는 입력은 400으로 거절합니다

100자를 넘는 fact 키와 표시 이름, 500자를 넘는 fact 설명은 409(C-006) 대신 400(C-001)으로 거절합니다. fact 일괄 등록은 너무 긴 키를 INVALID_KEY로 건너뛰고 나머지를 만듭니다. 전에는 500으로 실패하던 72자 초과 비밀번호와 255자 초과 프로필 이름도 이제 400(C-001)으로 거절합니다. 콘솔은 너무 긴 비밀번호를 제출 전에 막습니다. 전화번호는 50자까지이고, 가입은 254자까지의 이메일 주소를 받습니다. 72자보다 긴 비밀번호를 정해 둔 계정은 비밀번호를 재설정해야 로그인할 수 있습니다.

로컬 MCP 서버에서 데이터셋 파일을 올립니다

로컬 MCP 서버는 lexq_dataset_upload_file로 CSV나 JSON 파일을 경로로 올립니다. 파일 내용이 대화를 거치지 않습니다. 데이터셋은 UTF-8이어야 하며, 다른 인코딩의 파일은 AN-040으로 거절합니다. 데이터셋 파일과 지원 형식을 참고하세요.

호스팅 MCP 서버에 상한이 생겼습니다

호스팅 MCP 서버 mcp.lexq.io는 JSON-RPC 배치 하나에 메시지를 100개까지, 도구 인자 하나에 원소를 10,000개까지 받습니다. 압축한 요청 본문(Content-Encoding)은 415로 거절하며, 요청 본문은 지금처럼 100 KiB까지입니다. 큰 파일을 올리는 방법은 데이터셋 파일을 참고하세요.

롤백이 읽은 값을 확인합니다

롤백 요청에 그룹에서 읽은 버전과 배포를 실을 수 있습니다. 읽은 뒤 누군가 배포, 롤백, 배포 해제를 했으면 롤백은 409(P-062나 P-063)로 거절되고 아무것도 바뀌지 않습니다. 콘솔의 롤백 창은 되돌릴 버전을 보여 주고 두 값을 알아서 보내며, CLI 2.0.0에는 --expected-current-version-id와 --expected-current-deployment-id가 생겼습니다. 로컬과 호스팅 MCP 서버의 lexq_deploy_rollback은 두 값을 필수로 받으므로, 두 값이 빠진 호출은 인자 검증에서 거절됩니다. 롤백을 참고하세요.

A/B 테스트는 같은 그룹의 버전으로 합니다

다른 정책 그룹의 버전으로 A/B 테스트를 시작하면 P-016으로 거절합니다. A/B 테스트를 참고하세요.

값 제약을 바꾸면 새 제약 밖의 값을 쓰는 규칙을 알려 줍니다

fact 수정이 값 제약을 바꾸면, 응답의 meta.valueDomainMismatch가 새 제약 밖의 값을 조건에 쓰는 규칙을 알려 줍니다. 콘솔은 창으로, CLI는 1.1.6부터 stderr로, MCP 도구는 결과 끝에 붙여서 보여 줍니다. 수정은 그대로 저장됩니다. 바꾼 제약은 바꾼 뒤에 발행한 버전에만 들어갑니다. 문서는 다시 배포하면 된다고 적었지만, 이미 있는 버전을 배포하거나 그 버전으로 롤백해서는 들어가지 않습니다. name이나 description을 빼면 지금 값을 그대로 둡니다. 설명을 지우려면 빈 description을 보내세요. 새 제약 밖의 값을 쓰는 규칙과 나중에 제약을 바꾸면을 참고하세요.

시뮬레이션 목록이 pageNo와 pageSize를 돌려줍니다

시뮬레이션 목록이 다른 목록과 같은 페이지 필드를 돌려줍니다. number, size, pageable, sort, first, numberOfElements, empty 대신 pageNo와 pageSize가 오고, content, totalElements, totalPages, last는 그대로입니다. lexq analytics simulation list의 JSON 출력과 lexq_simulation_list의 결과도 같이 바뀝니다. 어느 목록이든 페이지를 고를 때는 page와 size를 보내세요. 문서는 pageNo와 pageSize로 안내했는데, API는 그 이름을 읽지 않아 그런 요청은 늘 첫 페이지를 기본 크기로 받았습니다. 페이지네이션을 참고하세요.

도메인 템플릿이 늘고, 정의가 다른 fact가 있으면 적용을 막습니다

다시 짠 이커머스 주문 가격에 핀테크 송금 승인, SaaS 요금제 한도, 보험 청구 분류, AI 에이전트 액션 승인이 더해졌습니다. 템플릿을 적용하면 입력 fact에 값 제약이 저장되고, 미리보기는 규칙 설명, 값 제약, 이미 있는 fact와 부딪히는 키를 보여 줍니다. 키가 같은데 타입이나 값 제약이 다른 fact가 이미 있으면 적용은 409(P-061)로 실패하고 아무것도 만들지 않으며, 콘솔은 적용 버튼을 막습니다. 지금까지는 기존 fact를 그대로 두고 그 위에서 템플릿 규칙을 돌렸습니다. 이미 적용한 템플릿은 바뀌지 않습니다. 도메인 템플릿을 참고하세요.

fact 값을 실행 전에 검사합니다

버전이 읽는 등록된 fact에 선언과 다른 타입의 값(예: NUMBER에 "85")을 보내면, 규칙을 평가하기 전에 400(P-060)으로 거절합니다. 이 검사가 생기기 전에는 그 규칙의 조건이 조용히 매칭되지 않고 200이 나갔습니다. null은 타입 불일치가 아니고, 등록하지 않은 키는 검사하지 않으며, 검사는 버전을 발행할 때 뜬 선언의 사본을 봅니다. 활성 규칙이 읽는 키는 필수 표시와 상관없이 모두 보내야 하고, 빠지면 400(P-015)입니다. 문서는 선택 fact는 빼도 된다고 적었습니다. 미등록 fact와 필수 vs 선택 fact를 참고하세요.

500 오류가 줄었습니다

전에는 500으로 실패하던 다음 요청이 이제 원인을 알려 주는 답을 받습니다.
  • 값이 null인 fact가 있어도 요청이 C-004로 실패하지 않습니다. 그 fact를 읽는 조건은 매칭되지 않고, 다른 규칙은 그대로 평가되며, inputFacts는 보낸 순서를 지킵니다.
  • Content-Type이 없거나 JSON이 아니면 415(C-010)입니다.
  • 필수 파라미터나 헤더가 빠졌거나, 없는 정렬 속성을 보냈거나, 페이지 번호가 범위를 넘었거나, 목록에 null 항목이 있으면 400(C-001)입니다.
  • 배치 항목의 P-015, P-052, P-060은 그 코드로 400을 돌려줍니다. 배치가 실패하면 처음 실패한 항목의 오류를 돌려주며, 몇 번째 항목인지는 싣지 않습니다.
다른 답도 바뀌었습니다. facts가 없는 배치 항목은 이제 400(C-001)으로 거절합니다. 형 변환할 수 없는 검색 조건은 C-001 대신 C-005를, priority가 0이거나 ID가 빈 순서 변경 요청은 P-034, P-025, P-010 대신 C-001을 돌려줍니다. P-003은 전부터 500이며, 문서가 400으로 적었던 것을 고쳤습니다. 에러 레퍼런스를 참고하세요.

isBlocked와 blockReason이 사전 등록 fact가 됐습니다

BLOCK이 쓰는 두 키 isBlocked(BOOLEAN)와 blockReason(STRING)이 모든 조직에 사전 등록 fact로 생겼습니다. 두 키를 대상으로 하는 SET_FACT나 MUTATE_FACT는 저장과 발행에서 400(ACT-033)으로 거절하므로, 뒤 규칙이 앞 규칙의 차단을 지울 수 없습니다. 두 키의 타입은 바꿀 수 없습니다(403, FD-003). BLOCK은 차단을 기록할 뿐이고 남은 액션과 규칙은 그대로 실행됩니다. 멈출지는 호출하는 애플리케이션이 정합니다. 콘솔은 실행을 멈춘다고 안내했었습니다. 사전 등록 fact와 요청이 실행되는 순서를 참고하세요.

삭제한 그룹은 읽기 전용 기록이 됩니다

삭제한 그룹은 읽기 전용 기록으로 남습니다. 그 그룹의 설정, 버전, 규칙을 바꾸는 요청과 발행, 배포, 예약 배포, A/B 테스트 시작, 버전 삭제는 409(P-059)로 거절합니다. 그 그룹의 행에는 삭제됨 배지가 붙고, 배포와 실행 이력의 그룹 필터에는 삭제한 그룹이 생겼으며, CLI의 표 출력은 (deleted)로 표시합니다. 그 그룹의 결정도 계속 재실행할 수 있습니다. 삭제한 그룹의 규칙은 fact 삭제나 타입 변경을 더 이상 막지 않으므로, 템플릿을 걷어 내려면 그룹을 지운 다음 fact를 지우면 됩니다. 그룹 삭제와 삭제한 그룹의 기록을 참고하세요.

비활성 그룹에서도 시험할 수 있습니다

비활성 그룹에서도 드라이런, 드라이런 비교, 시뮬레이션이 실행되므로, 다시 켜기 전에 고친 내용을 확인할 수 있습니다. 운영 실행은 여전히 활성 그룹에서만 됩니다. 콘솔은 그룹을 비활성으로 저장하기 전에 묻고, 비활성인 동안 다시 활성화 버튼이 있는 배너를 보여 줍니다. 비활성 그룹을 넣은 복합 실행은 요청 전체가 거절됩니다. 복합 실행에서 그 그룹만 빼려면 배포 해제를 쓰세요. 그룹 비활성화를 참고하세요.

액션 대상은 등록된 fact여야 합니다

SET_FACT나 MUTATE_FACT의 대상이 등록된 fact가 아닌 규칙은 저장과 발행이 400(ACT-032)으로 실패하고, 오류가 빠진 키를 알려 줍니다. fact를 먼저 등록하세요. 전에 발행한 버전은 그대로 배포되지만, 그 버전을 복제한 초안은 대상을 등록해야 발행할 수 있습니다. targetVar가 비었거나 문자열이 아니면 400(ACT-016)입니다. 액션 타입을 참고하세요.

재실행과 시뮬레이션을 취소하면 멈춥니다

재실행이나 시뮬레이션을 취소하면 작업이 멈추고, 처리한 레코드만큼만 과금합니다. 실패한 작업은 과금하지 않습니다. 대기 중이거나 실행 중인 작업도 새로 제출할 때 플랜의 레코드 한도에 세므로, 한도를 넘는 제출은 403(B-008)으로 실패합니다. 재실행의 capped는 창에 maxRecords보다 많은 레코드가 있었을 때만 true입니다. 재실행과 시뮬레이션의 레코드 상한을 참고하세요.

유효 기간이 끝난 버전은 거절합니다

유효 기간이 끝난 버전은 발행, 배포, 롤백이 400(P-058)으로 실패합니다. 버전 수정에서 기간의 한쪽 끝을 빼면 그 끝은 그대로 남습니다. 끝을 지우려면 clearEffectiveFrom이나 clearEffectiveTo를 보내거나, CLI 1.1.0부터 있는 --clear-effective-from이나 --clear-effective-to를 쓰거나, 콘솔에서 **✕**를 누르세요. 이 값 없이 수정하면 두 끝이 모두 지워지던 것을 고쳤습니다. 콘솔에서 23:59로 고른 끝은 이제 그 1분을 다 포함합니다. 전에 저장한 끝은 다시 고르기 전까지 23:59:00에서 끝납니다. 유효 기간을 참고하세요.

고친 CLI 옵션

CLI 1.1.0부터 lexq profile <groupId> --version-id <id>는 그 버전을 프로파일링하고, lexq analytics simulation start --file request.json은 파일을 요청 본문으로 보냅니다. 그 전 버전에서는 둘 다 실패했고, --version은 CLI 버전 번호만 출력했습니다. CLI 1.1.6부터는 lexq facts update --pii와 --no-pii가 fact의 PII 설정을 바꿉니다. 그 전 버전은 이 값을 보내지 않았습니다. CLI 명령과 PII fact를 참고하세요.

조직 시간대를 모든 IANA 시간대에서 고릅니다

콘솔의 조직 설정에서 모든 IANA 시간대를 도시, 지역, 오프셋으로 검색해 고를 수 있습니다. 전에는 33개뿐이었고 대부분 미국 시간대였습니다. 성능 탭의 기준 시각과 지연 차트도 이제 조직 시간대로 표시합니다. CLI 1.0.2부터 yyyy-MM-dd 날짜 필터는 조직 시간대의 그날 하루 전체를 뜻하고, 표 출력은 시각을 Z가 붙은 UTC로 보여 주며, lexq status가 tenantTimezone을 출력합니다. CLI 도움말은 날짜 필터가 어느 시간대를 쓰는지 밝히지 않았었습니다.

문서에서 바로잡은 것

  • 실행 응답은 바뀐 fact를 mutatedFacts에, __delta 키 같은 새 값을 generatedVariables에 싣습니다. outputVariables라는 필드는 없습니다. 요청이 실행되는 순서를 참고하세요.
  • A/B 테스트의 두 버전은 버전마다 lexq history list --version-id로 비교하세요. lexq history stats는 두 버전을 합쳐 보여 줍니다. 결과 모니터링을 참고하세요.
  • 성능 탭은 버전을 지정하지 않은 실행만 잽니다. 특정 버전 실행, 드라이런, 시뮬레이션, 재실행은 재지 않습니다. 특정 버전 실행은 컴파일된 규칙 캐시도 쓰지 않으니, 트래픽을 나누려면 A/B 테스트를 쓰세요. 측정 방식을 참고하세요.
  • 실패 로그의 해결과 무시는 콘솔 전용입니다. 조직의 관리자가 관리 → 실패 로그에서 처리합니다. API 키로는 실패 로그를 조회만 할 수 있어서, lexq logs action과 lexq logs bulk-action, 그리고 같은 일을 하는 MCP 도구는 403(A-002)으로 거절됩니다. CLI 명령을 참고하세요.
  • CLI는 Node.js 22 이상이 필요합니다. 요구사항을 참고하세요.