수동 세그먼트 데이터 모델 및 동기화 동작
수동 세그먼트는 검색 작업에 사용되는 구성 테이블과 런타임 테이블 간의 자동 동기화가 있는 두 테이블 데이터 모델을 사용합니다.
데이터 모델 개요
수동 세그먼트는 런타임 데이터와 구성을 분리하는 2-테이블 아키텍처를 사용합니다. 이렇게 설계하면 런타임 테이블이 검색 성능에 최적화되어 있는 동안 구성 테이블이 단일 정보 소스로 남아 있습니다.
- 구성 테이블: sn_query_gen_segment_table_config
- 여기에서 수동 세그먼트를 정의합니다. 각 기록은 관리자가 만들고 유지관리하는 하나의 세그먼트 구성을 나타냅니다.
- 동기화된 테이블: sn_query_gen_segment
- 이 테이블에 직접 쓰지 않습니다. 수동 세그먼트 구성이 생성되거나 업데이트되면 비즈니스 규칙이 이를 검색 시 쿼리되는 이 테이블에 자동으로 동기화합니다.
구성 테이블 필드
sn_query_gen_segment_table_구성 테이블에는 수동 세그먼트를 정의하기 위한 다음 필드가 포함되어 있습니다.
| 필드 | 열 이름 | 최대 길이 | 필수 | 목적 |
|---|---|---|---|---|
| 테이블 이름 | table_name | — | 예 | 세그먼트가 적용되는 테이블(엔터티)입니다. 시맨틱 계층에 활성 엔터티가 있어야 합니다. |
| 이름 | name | 255자 | 예 | 시맨틱 검색 중에 LLM이 일치하는 사용자 친화적인 이름입니다. |
| 설명 | description | 4,000자 | 아니요 | 일반적으로 사용되는 용어를 사용한 선택적 설명입니다. LLM이 세그먼트를 적용할 시기를 이해하는 데 도움이 됩니다. |
| 필터 | filter | 4,000자 | 예 | 세그먼트의 필터 조건을 정의하는 인코딩된 쿼리입니다. 조건 작성기(v2)를 사용합니다. |
| 활성 | active | — | 아니요 | 기본값은 true입니다. 아니오인 경우 세그먼트가 비활성화되고 검색에서 제외됩니다. |
동기화된 테이블 필드
sn_query_gen_segment 테이블에는 검색 작업에 사용되는 런타임 데이터가 포함되어 있습니다.
| 필드 | 소스 |
|---|---|
| name | 수동 세그먼트 구성에서 복사됨 |
| description | 수동 세그먼트 구성에서 복사됨 |
| filter | 수동 세그먼트 구성에서 복사됨 |
| table | 시작: table_name |
| entity | sn_query_gen_entity에 대한 해결된 참조 |
| source_table | 항상 sn_query_gen_segment_table_config |
| source_id | 수동 세그먼트 구성 기록의 Sys_id |
| active | manual_segment.active AND entity.active |
동기화 동작
수동 세그먼트는 구성 테이블과 런타임 테이블 간에 자동으로 동기화됩니다. 동기화를 수동으로 트리거할 필요는 없습니다.
| 트리거 | 시기 | 발생하는 일 |
|---|---|---|
| 구성에 대한 비즈니스 규칙 | sn_query_gen_segment_table_config 시 삽입 또는 업데이트 | 개별 기록을 sn_query_gen_segment 에 동기화합니다(비동기). |
| 엔터티 삽입/업데이트 | 엔터티가 생성되거나 업데이트되는 경우 active=true | 해당 엔터티에 대한 모든 세그먼트(수동 포함)를 다시 동기화합니다. |
| 주간 예약된 작업 | 토요일 자정 | 6개 세그먼트 소스 모두의 완전 동기화; 분리된 기록 정리 |
동기화 중에 다음과 같은 경우 수동 세그먼트가 적합합니다.
- active = true 구성 기록에서
- 참조된 테이블에 sn_query_gen_entity의 활성 엔터티가 있습니다 .
두 조건 중 하나가 충족되지 않으면 동기화된 세그먼트가 비활성화됩니다(삭제되지 않음).
활성화 및 비활성화
동기화된 세그먼트의 활성 상태는 manual_segment.active AND entity.active입니다.
| 이벤트 | 결과 |
|---|---|
| 수동 세그먼트 구성 active→ 아니오 | 동기화된 세그먼트가 비활성화됨 |
| 수동 세그먼트 구성 active→ 예 | 동기화된 세그먼트가 다시 활성화됨(엔터티도 활성 상태인 경우) |
| 엔터티 active → false | 해당 엔터티에 대한 모든 세그먼트가 비활성화됨 |
| 수동 세그먼트 구성 삭제됨 | 동기화된 세그먼트 삭제됨 |
| 엔터티 삭제됨 | 예약된 작업으로 정리된 분리된 세그먼트 |
비활성화된 세그먼트는 검색 결과에서 제외됩니다.
ACL 보호
동기화된 세그먼트 테이블에는 구성 테이블이 단일 정보 소스로 유지되도록 엄격한 ACL이 있습니다.
- 작성: 차단됨(admin_overrides = false) — 세그먼트는 동기화를 통해서만 만들 수 있습니다.
- 쓰기 대상 name: 차단됨 — 구성 기록에서 변경해야 합니다.
- 쓰기 대상 description: 차단됨 — 구성 기록에서 변경해야 합니다.
필터 길이 고려 사항
이 필드는 filter 최대 4,000자를 지원하지만 시스템 속성 sn_query_gen.segments.max_filter_length 의 기본값은 2,000자입니다. 이 임계치보다 긴 필터는 LLM 프롬프트에 포함될 때 잘립니다.
도메인 분리
수동 세그먼트는 도메인 분리를 지원합니다. 특정 sys_domain세그먼트 구성으로 세그먼트 구성 기록을 만들 때 동기화된 세그먼트는 해당 도메인을 상속합니다. 검색 시 세그먼트는 사용자의 도메인 컨텍스트에 따라 필터링됩니다.
인스턴스에서 도메인 분리가 활성화되지 않은 경우 이 필드는 비활성화되며 무시할 수 있습니다.