본문으로 건너뛰기
-
skycave's Blog
skycave's Blog
  • Home
  • Investment
  • IT
    • Data engineering
    • AI
    • Programing
  • Leisure
    • Camping
    • Fishing
  • Travel
    • Domestic
    • Overseas
  • Book
  • Product
  • Hot keyword in google
  • Home
  • Investment
  • IT
    • Data engineering
    • AI
    • Programing
  • Leisure
    • Camping
    • Fishing
  • Travel
    • Domestic
    • Overseas
  • Book
  • Product
  • Hot keyword in google
닫기

검색

AI

AI 데이터 구조/검색/플랫폼 설계

By skycave
2026년 10월 13일 16 Min Read
0

0. 도입 — 문제 정의와 기준 시나리오

AI 시대의 엔터프라이즈 데이터 플랫폼이 풀어야 할 문제는 세 가지로 요약된다. ① 정형 중심 DW는 비정형(문서·음성)·벡터·실시간·재현성 요구를 수용하지 못한다. ② 사내 지식 검색이 키워드 매칭에 머물러 LLM이 신뢰할 근거를 찾지 못하고, 권한이 다른 사용자에게 같은 결과를 보여 준다. ③ 레거시·규제·인력 제약 아래에서 무중단·무손실로 전환해야 하며, 전환 중에도 규제 보고는 멈출 수 없다. 세 문제는 독립이 아니다. 데이터 구조가 계보·권한·버전을 갖추지 못하면 검색은 근거를 인용할 수 없고, 전환은 정합성을 증명할 수 없다. 따라서 본 답안은 세 축을 같은 문제해결 틀 — 문제 → 원인 → 대안 → 선택·근거 → 검증 지표 → 잔여 리스크 — 로 서술하고, 마지막에 세 축을 관통하는 원칙으로 묶는다.

서술의 기준 시나리오는 가상 국내 생명보험사 K생명이다. 시나리오를 먼저 고정해야 모든 설계 선택이 "제약에 대한 응답"으로 읽힌다.

구분 As-Is (기준선) 제약 18개월 목표 KPI
DW·배치 Oracle Exadata 40TB(연 20% 증가), 테이블 3,800개(90일 미접근 1,100개), 저장 프로시저 650개, ETL 잡 2,400개, 야간 윈도우 22:00~06:00 포화(월말 SLA 위반 3회/분기) 코어 원장은 온프레미스 유지, DBA의 redo 로그 부하 우려, 전용선 1Gbps 5년 TCO 100→70, 파이프라인 리드타임 7주→1주, 핵심 테이블 신선도 T+1→15분, 야간 배치 8→4시간
검색·문서 상용 키워드 검색(라이선스 14개월 후 만료), 약관·내부규정·민원 문서 50만 건(PDF/HWP), 사전 수동 관리, nDCG@10 = 0.52(골든셋 1,000건) 망분리, 외부 LLM은 프라이빗 경로만 nDCG@10 0.65, RAG faithfulness ≥ 0.9, 권한 유출 0건
소비·규제 BI 리포트 1,200개(활성 700), 배치 스코어링 모델 6개, 규제 보고 40건/월 개인신용정보 테이블 320개, 전자금융감독규정 기반 클라우드 이용 절차 규제 보고 불일치 0건, 월 SLA 위반 0회, 리니지·민감 태깅 커버리지 100%

가정: 클라우드(하이브리드) 이용이 중요도 평가·CSP 평가 등 절차를 거쳐 허용되고, 코어 DB의 아카이브/스탠바이 로그에 CDC 접근이 가능하며, 데이터 팀 15명 + 외부 인력 투입이 가능하다.

(손그림: 원천 3 → 수집 2 → 레이크하우스 4 → 서빙 4 → 소비 3 박스, 아래에 거버넌스 가로 띠 1개)

1부. 데이터 구조 설계 (→ 01장)

문제. 현 DW는 스토리지와 컴퓨트가 결합되어 용량 증가(연 20%)가 곧 라이선스·하드웨어 비용이고, PDF/HWP·STT 텍스트·벡터를 저장할 자리가 없다. 반대로 단순 객체 스토리지 레이크는 ACID·스키마 관리가 없어 스웜프가 된다. AI 워크로드는 추가로 "학습 당시의 데이터를 그대로 재현"하는 능력, 원본→청크→임베딩의 계보, 임베딩 모델 버전 관리를 요구한다.

원인. 근본 원인은 ① 테이블 수준 트랜잭션·스키마 진화·타임트래블을 제공하는 메타데이터 계층의 부재, ② 지표·용어 정의가 리포트마다 흩어져 있는 시맨틱 부재, ③ 분류·권한·계보가 사람의 문서에만 있고 데이터에 붙어 있지 않은 거버넌스 부재다.

대안. (a) DW 확장(Exadata 증설·클라우드 DW 단독): 빠르지만 비정형·벡터 미수용, 비용 경직. (b) 레이크 단독: 저렴하나 정합성·관리성 부재. © 레이크하우스(Iceberg/Delta/Hudi): 객체 스토리지 위에 DW 수준 관리성, 엔진 중립. (d) 데이터 메시·패브릭: 조직 모델이며 © 위에 올리는 운영 방식이다.

선택·근거. Apache Iceberg 기반 단일 레이크하우스 + REST 호환 카탈로그(Glue 연합 또는 Polaris) + 메달리온 3계층(+Feature/Chunk 계층) + 시맨틱 레이어·온톨로지 + 거버넌스 코드화를 택한다. 근거는 메커니즘 수준에서 다음과 같다.

  1. 메타데이터 트리와 프루닝. Iceberg는 스냅샷 → 매니페스트 리스트 → 매니페스트 → 데이터 파일의 계층형 메타데이터를 가지며, 매니페스트에 기록된 파티션 값과 컬럼 min/max 통계로 엔진이 파일을 열기 전에 프루닝한다. 이 구조가 엔진에 독립적이므로 Spark·Trino·Athena·Flink가 같은 테이블을 읽어 DW와 레이크의 이중 적재를 없앤다. Delta는 Spark 생태계 결합도가, Hudi는 레코드 키 업서트 특화와 운영 복잡도가 예외 조건이다.
  2. 히든 파티셔닝과 파티션 진화. days(ts), bucket(16, id) 같은 변환 함수로 파티션을 정의하면 사용자가 파티션 컬럼을 직접 필터하지 않아도 프루닝된다. 파티션 전략은 기존 데이터 재작성 없이 바꿀 수 있어 처음부터 완벽할 필요가 없다. 가장 흔한 실패 모드는 과도한 파티셔닝으로 인한 소형 파일 폭증이며, 파티션당 파일 128MB~1GB를 목표로 주기 컴팩션을 건다.
  3. v3 삭제 벡터·행 계보. 포맷 v3의 바이너리 삭제 벡터는 MOR 테이블에서 삭제 파일 폭증을 억제하고, 행 수준 계보(row lineage)는 "이 행이 어느 커밋에서 생겼는가"를 네이티브로 제공해 규제 감사와 CDC 하류 전파에 쓰인다.
  4. 스냅샷과 개인정보 삭제의 충돌. 모든 커밋이 스냅샷을 남겨 FOR SYSTEM_VERSION AS OF로 학습 데이터를 재현할 수 있지만, 스냅샷을 만료하지 않으면 삭제된 개인정보가 과거 스냅샷에 남는다. 따라서 보존 정책(예: 스냅샷 7일)과 삭제 반영 SLA, orphan 파일 정리를 하나의 정책으로 묶는다.
  5. 모델링. Silver는 통합 키 기준 3NF(변경 이력이 큰 고객·계약 엔티티만 Data Vault 패턴), Gold는 Kimball 차원모델이다. dim_customer·dim_policy는 SCD Type 2로 유효 시작·종료일을 갖는다. 보험금 심사 모델의 재현성은 "청구 시점에 유효했던 고객 속성"으로 조인할 때만 보장되는데, 이는 Feature Store의 point-in-time 조인과 동일한 원리(누수 방지) 다. 오프라인 피처는 Gold Iceberg, 온라인은 KV(DynamoDB/Redis)로 이중화하고 피처 레지스트리로 정의를 공유해 training-serving skew를 막는다.
  6. 비정형 데이터의 일급 시민화. 문서는 document / chunk / embedding(모델 버전) / index_ref 네 테이블을 Iceberg로 두고, 청크 메타데이터에 출처·버전·effective_from/to·ACL·임베딩 모델 ID를 포함한다. 벡터 인덱스는 재생성 가능한 서빙 사본이며 진실은 레이크하우스에 있다. 원본 삭제 요청이 오면 계보 테이블을 따라 청크·임베딩·인덱스·캐시를 연쇄 삭제한다.
  7. 시맨틱 레이어. dbt 메트릭/Cube로 지표·차원·조인을 중앙 정의하면 ① BI와 LLM이 같은 "신계약 건수"를 쓰고(지표 통일), ② 행 수준 보안이 정의에 붙어 Text-to-SQL이 우회할 수 없으며(권한 강제), ③ 존재하지 않는 조인·컬럼을 생성하는 환각을 구조적으로 차단한다. 상품–담보–약관조항 온톨로지는 카탈로그 용어집과 Neptune 그래프의 스키마가 된다.
  8. 저장소 선택과 PII. 저장소는 워크로드·일관성·지연·비용·운영의 5축 매트릭스로 정당화한다(예: 온라인 피처는 지연 100ms·최신 상태만 → KV, 벡터는 하이브리드·권한 → OpenSearch). PII는 Bronze→Silver 진입 시 결정론적 토큰화를 적용해 조인 키를 보존한 채 다운스트림 전부를 비식별로 운영하고, 개인신용정보 320개 테이블은 별도 영역·키로 분리한다.
  9. 스트리밍·CDC. 코어 변경은 로그 기반 CDC(Debezium+MSK, 대안 DMS)로 받아 op/ts_ms/lsn을 보존하고, Iceberg에는 비즈니스 키 + LSN 기준 MERGE INTO로 멱등 업서트한다. 전달은 at-least-once, 소비는 멱등이 기본이며, exactly-once는 Kafka↔Flink↔Iceberg 구간에서만 보장한다.

검증 지표. 계층별 데이터 SLO(Silver 신선도 15분, Gold 완료 시각, 품질 게이트 통과율 ≥ 99%), 리니지·민감 태깅 커버리지(20%/40% → 100%), 재현 테스트(스냅샷 태그 train_2026q3_v2 고정 재학습 시 지표 동일), 소형 파일 비율·컴팩션 지연.

잔여 리스크. 카탈로그 종속(REST 표준으로 완화), 컴팩션·스냅샷 만료 운영 복잡도(S3 Tables 등 자동 유지보수 또는 오케스트레이터 잡), 15명 팀의 역량(관리형 우선, Vault는 핵심 엔티티만).

2부. 검색 설계 (→ 02장)

문제. 보험 문서 질의는 “약관 제12조”, 상품 코드처럼 정확 매칭이 필요한 질의와 "해지환급금이 줄어드는 경우"처럼 의미 매칭이 필요한 질의가 섞여 있다. 여기에 부서·역할별 권한 유출 금지, 근거 인용, p95 수 초, 한국어 형태소 처리, 망분리가 동시에 요구된다.

원인. 렉시컬 검색과 시맨틱 검색은 실패 영역이 다르다. BM25는 동의어·문맥을 못 보고, 벡터는 코드·고유명사를 흐린다. 권한을 검색 후에 거르면 top-k가 고갈되어 재현율이 떨어지고, 거르기 전 결과가 LLM 컨텍스트에 들어가는 노출 경로가 생긴다. 답변 품질의 상한은 인제스천(파싱·청킹·메타데이터) 품질이 결정한다.

대안. 키워드 단독(현 상태, nDCG 0.52) / 벡터 단독 / 하이브리드 + 재순위 / GraphRAG / long-context 단독 / 관리형(Bedrock KB) vs 자체 구축.

선택·근거. OpenSearch 단일 엔진에서 BM25(nori) ∥ k-NN(HNSW)을 병렬 실행하고 RRF로 융합한 뒤 cross-encoder로 재순위하는 2단계 하이브리드를 기본으로, 관계 질의만 GraphRAG로 라우팅한다.

  1. BM25 메커니즘. 점수는 TF 포화(k1, 기본 1.2)·IDF·문서 길이 정규화(b, 기본 0.75)의 곱이다. 약관처럼 길이 편차가 큰 코퍼스에서는 b 조정이 체감되며, nori 사용자 사전(상품명·사내 용어)과 동의어 사전이 복합명사·조사 분해 실패를 줄인다.
  2. HNSW와 메모리. HNSW는 다층 근접 그래프로 상층에서 거칠게, 하층에서 정밀 탐색한다. M(노드당 간선 16~48)은 메모리·정확도, ef_construction은 빌드 품질, ef_search(≥k, 100~512)는 질의 시 재현율·지연을 결정하며 런타임에 조정 가능한 유일한 파라미터다. 메모리는 fp32 기준 벡터당 약 1.1×(4d + 8M) 바이트다. 문서 50만 건 × 평균 10청크 = 500만 청크, d=1024, M=16이면 1.1×(4,096+128) ≈ 4.6KB × 500만 ≈ 23GB, int8 양자화 시 1.1×(1,024+128) ≈ 1.27KB → 6.3GB이며 레플리카 1개면 ×2다. OpenSearch k-NN은 off-heap 서킷 브레이커 상한이 노드 RAM의 50%이므로 int8을 채택해 데이터 노드 규모를 절반 이하로 줄인다. 바이너리 양자화(1/32)는 재현율 손실이 커 rescoring이 필수다.
  3. 융합과 2단계. RRF는 score(d) = Σ 1/(k + rank_i(d)), k=60으로 점수 스케일을 버리고 순위만 쓰므로 BM25 점수와 코사인 유사도의 스케일 차이에 강건하고 튜닝이 필요 없다. 골든셋이 충분해지면 min-max 정규화 가중합으로 질의 유형별 가중을 둔다. 1단계는 각 100개 후보를 넓게 검색하고, cross-encoder는 (질의, 문서) 쌍을 함께 인코딩하므로 후보 수 N에 지연이 선형이다 — N=50, 청크 500토큰이면 요청당 2.5만 토큰 추론이므로 p95 예산에서 N을 20~50으로 제한하고 상위 5~10개만 생성에 넣는다.
  4. 청킹·인제스천. 조·항·제목 등 문서 구조 우선, 없으면 재귀 분할로 300~500토큰(한국어는 토크나이저 기준 측정), 오버랩 10~20%. small-to-big(부모-자식)으로 자식 청크로 정밀 검색하고 부모를 컨텍스트로 넘긴다. 메타데이터에 유효기간을 두어 구 규정이 검색되는 최신성 실패를 필터로 막는다.
  5. 질의 변환과 컨텍스트. 짧은 질의-긴 문서 간극은 HyDE(가상 답변 임베딩) 또는 multi-query(3~5개 패러프레이즈 → RRF)로 메우되, HyDE는 LLM에 도메인 지식이 없으면 환각이 검색을 오도하는 역효과가 있다. lost-in-the-middle 때문에 top-k를 늘리기보다 재순위 후 상위 문서를 앞뒤에 배치하고 컨텍스트 예산(8~16K 토큰)을 고정한다.
  6. 권한. 인덱스 문서에 acl_principals 필드를 두고 질의 시 사용자의 평탄화된 그룹 집합으로 pre-filter(efficient filter)한다. 엔진의 DLS를 역할에 바인딩해 애플리케이션 버그에 대한 2차 방어로 이중화한다. 소스별 ID(AD·Confluence·메일)는 아이덴티티 매핑 테이블로 공통 주체로 정규화하고, ACL을 확인할 수 없는 문서는 기본 거부한다.
  7. 생성·안전. 근거 청크 인용을 강제하고 재순위 상위 점수가 임계값 미만이면 생성을 건너뛰고 "확인 불가 + 유사 문서"로 응답한다(환각보다 미응답). 문서 내 숨은 지시(흰 글씨·주석)에 의한 간접 프롬프트 인젝션은 인제스천 시 제거, 자료를 데이터로 취급하는 프롬프트 구조, 도구 권한 최소화로 막는다.
  8. 재임베딩. 모델 교체는 전량 재임베딩이므로 docs-v8 신 인덱스를 병행 구축 → 골든셋 비교 → 섀도 → alias 원자적 스왑(blue/green)으로 처리하고 롤백은 alias 복귀다.

검증 지표. 골든셋 1,000건으로 Recall@50(1단계), nDCG@10(재순위 후; 등급 관련도를 log2 할인해 이상적 순위(ideal ranking) 대비 정규화), MRR, RAGAS 4지표(faithfulness·answer relevancy·context precision·recall), 거부 정확도, p95 지연, 비용/질의. 청킹·사전·가중치·프롬프트·모델 변경마다 자동 평가를 돌려 nDCG@10 −2pp, faithfulness −3pp 초과 하락 시 배포를 차단한다.

잔여 리스크. ACL 동기화 지연(정합성 검사 배치 + 보수적 기본 거부), HWP·표 파싱 품질(상용 파서 병행·실패율 모니터링), 모델 교체 비용, LLM-judge 평가 편향(사람 샘플 검증 병행).

3부. 플랫폼 전환 설계 (→ 03장)

문제. 라이선스 만료(검색 14개월·DW 하드웨어 2년), 야간 배치 윈도우 초과, AI 워크로드 미수용이 전환 배경이다. 제약은 규제 보고 40건/월 무중단, 클라우드 이용 절차, 망분리, 전용선 1Gbps, 15명 인력이다.

원인. ETL 잡 2,400개의 의존성이 문서화되지 않았고, 저장 프로시저 650개가 Oracle 전용 SQL(PL/SQL) 문법에 종속되어 있다. 전환의 본질적 비용은 이동이 아니라 정합성 증명과 이중 운영 기간이다.

대안. Big Bang(의존성 단순·다운타임 허용 시에만), Phased(도메인 단위), Strangler Fig(신규는 신 플랫폼, 레거시는 점진 축소), Parallel Run(검증 수단). 워크로드별 7R(Retire·Retain·Rehost·Replatform·Refactor·Repurchase·Relocate).

선택·근거. Phased + Strangler Fig를 기본 전략으로, Retire를 먼저 적용해 범위를 30% 줄이고(미접근 테이블 1,100개·비활성 리포트 500개), 비중요 업무인 내부규정 문서 RAG를 Pilot으로, 규제 보고는 마지막 Wave에 Parallel Run으로 전환한다. Big Bang은 롤백 불가능성 때문에 배제한다.

  1. 초기 적재와 CDC의 공백. 먼저 CDC 시작점(SCN/LSN/오프셋)을 고정하고 초기 적재를 수행한 뒤 SCN 이후 변경을 재생해야 일관 시점에 도달한다. 순서를 바꾸면 적재 중 변경분이 유실된다. DMS Serverless는 사용자 지정 CDC 시작점을 지원하지 않으므로 재처리가 중요한 금융 워크로드는 프로비저닝 인스턴스 또는 Debezium 경로를 쓴다. DBA 부하 우려는 스탠바이에서 추출하고 지연(lag) SLO를 둬 흡수한다.
  2. 듀얼 라이트 금지. 애플리케이션이 양쪽에 쓰는 듀얼 라이트는 부분 실패 시 불일치가 생기고 트랜잭션 보장이 없다. 로그 접근이 불가능한 경우에만 아웃박스 패턴으로 대체한다.
  3. 스키마 변환 함정. Oracle NUMBER(정밀도 무제한) → DECIMAL(38,x) 절삭, DATE의 시각 손실, 서버 로컬(KST) 암묵 저장 → UTC 엔진에서 9시간 시프트, EUC-KR/MS949 ↔ UTF-8 변환 시 한자·특수문자 깨짐과 바이트 길이 VARCHAR2 오버플로, Oracle의 '' = NULL 의미 차이를 테이블·컬럼별 매핑 표로 명시하고 정밀도 손실 테스트를 돌린다.
  4. 코드 변환과 동등성 테스트. DMS Schema Conversion과 LLM 보조 변환은 보일러플레이트를 가속하지만 의미 보존을 보장하지 않는다(환각된 함수, 성능 특성 무시). 변환 결과는 반드시 동일 입력 → 출력 비교의 동등성 테스트와 사람 리뷰를 거치며, 변환 불가 약 20%(가정)는 dbt/Spark로 재설계한다.
  5. Reconciliation 6계층. 비용·신뢰 오름차순으로 행 수·키 집합 → 열 집계(SUM/MIN/MAX/NULL 수) → 행 해시 합 → 샘플 행 전수 비교 → 통계 분포 → 리포트 수치 비교를 파티션 단위로 자동화한다. 해시는 숫자·날짜 포맷·트림·NULL 표기를 정규화한 문자열에 양쪽 같은 알고리즘(MD5 등)을 적용해야 하며, 그렇지 않으면 거짓 불일치가 폭증한다. 허용 오차(금액 합 0, 행 수 0, 분포 p > 0.05)를 규칙으로 두고 2주 연속 일치 시 컷오버 게이트를 자동 통과시킨다.
  6. 추상화·컷오버·롤백. 소비자는 뷰/alias만 바라보게 해 전환이 라우팅 교체가 되도록 한다. 컷오버는 금요일 야간 프리즈 2시간 → 최종 CDC 동기화 → 뷰 교체 → 하이퍼케어 → 72시간 롤백 윈도우이다. 롤백 조건은 핵심 리포트 불일치 > 0건, SLA 위반 2회, P1 장애 1회이며, 역동기화(reverse CDC)가 불가능하면 롤백 윈도우가 닫힐 때까지 레거시 쓰기를 유지하고 그 뒤에 read-only로 전환한다.
  7. 규제. 전자금융감독규정 제14조의2 기반 7단계(업무 선정·중요도 평가 → CSP 건전성·안전성 평가 → 안전성 확보조치 → 정보보호위원회 심의 → 계약 → 이용·사후보고 → 종료)를 Wave 0으로 병행 착수하고, Wave마다 중요도 평가·CSP 평가 문서를 산출물 게이트로 둔다. 망분리 개선 로드맵(1단계 생성형 AI·SaaS 확대, 2단계 개인신용정보 특례)에 따라 비식별·가명처리 데이터를 우선 올리고, 전면 해제 추진은 세부 요건이 확인 필요이므로 자율보안·결과책임 원칙에 맞춰 통제 증적을 더 강하게 갖춘다. 개인신용정보는 국내 리전 내 저장, 외부 LLM은 비학습·프라이빗 엔드포인트 조항을 계약에 둔다.
  8. FinOps·SLO·DR. 태깅·예산 알림, 스토리지 계층화와 스냅샷 만료로 비용을 통제하고, SLO는 신선도·가용성·지연·검색 품질·정합성 5종, RPO/RTO는 계층별 차등(Raw RPO 15분/RTO 4시간, 마트는 재생성)으로 둔다. 리스크 레지스터는 정합성 불일치·규제 지연·이중 운영 피로·DBA 부하·핵심 인력 이탈을 상위 5로 관리한다.

(손그림: 단계 박스 7개 + 게이트 마름모 1개, 실패 시 되돌아가는 화살표 1개)

검증 지표. Reconciliation 일치율 100%(허용 오차 내), 야간 배치 완료 시각, 검색 온라인 지표 저하 없음(5→25→50→100% 단계마다), 규제 보고 이중 생성 불일치 0건, 5년 TCO, 리드타임, Wave별 종료 기준 충족 여부.

잔여 리스크. 이중 운영 피로(종료일 고정·Retire 선행·외부 인력), 규제 승인 지연(비중요 업무 선행), 핵심 인력 이탈(문서화·페어링), 벤더 종속(오픈 포맷·REST 카탈로그·alias 추상화).

4. 횡단 관심사 — 세 축을 관통하는 원칙

원칙 1. 단일 진실 원천과 재생성 가능한 사본. Raw는 불변·장기 보존이고 Silver 이후·벡터 인덱스·온라인 피처·검색 인덱스는 모두 레이크하우스에서 재생성 가능한 파생물이다. 이 원칙이 있어야 재임베딩(blue/green), 롤백(뷰 복귀), 재처리(날짜 파라미터 잡)가 같은 메커니즘으로 설명된다.

원칙 2. 권한·품질은 조기에, 데이터에 붙여서 적용한다. PII 토큰화는 Silver 진입 시, ACL은 인덱스 필드와 pre-filter로, 품질은 계층 진입 게이트(Soda/GE)로 적용한다. 분류 태그 기반으로 접근 정책을 자동 적용하고, 감사 로그는 "누가·언제·어떤 청크가 컨텍스트에 들어가·어떤 답이 나갔는지"를 불변 저장(Object Lock)해 규제 요구 → 통제 → 증빙을 잇는다.

원칙 3. 기준선 측정 없이는 바꾸지 않는다. nDCG 0.52, 리드타임 7주, SLA 위반 1회 같은 기준선과 골든셋·Reconciliation·트레이스가 있어야 전환·모델 교체·프롬프트 변경이 회귀 게이트를 통과할 수 있다. 조직은 중앙 플랫폼 팀 + 도메인 오너십(데이터 프로덕트)을 Wave 2부터 도입하는 연합 거버넌스로 운영한다.

5. 결론

K생명 기준 18개월 목표는 5년 TCO 30% 절감, 리드타임 7주→1주, 신선도 T+1→15분, 야간 배치 8→4시간, 검색 nDCG@10 0.52→0.65, faithfulness ≥ 0.9, 규제 보고 불일치 0건이다. 로드맵은 "Discovery·규제 절차 병행 → PoC → 비중요 RAG Pilot → 저복잡 마트 Wave 1 → 핵심 마트·검색 50% Wave 2 → 계리·규제 보고 Parallel Run Wave 3 → 컷오버·관찰·폐기"로 요약된다.

핵심 트레이드오프는 세 가지다. ① Iceberg 레이크하우스의 엔진 중립성·재현성 vs 컴팩션·스냅샷·카탈로그를 직접 운영하는 복잡도 — 관리형 유지보수와 자동화로 흡수한다. ② 하이브리드 + 재순위 + pre-filter의 정밀도·보안 vs 지연·메모리 비용 — int8 양자화, 후보 수 제한, 캐시로 p95 안에 맞춘다. ③ Phased + Parallel Run의 안전성 vs 이중 운영 비용·기간 — Retire 선행, 종료일 고정, 정량 게이트로 기간을 통제한다. 제약을 되짚으면 18개월은 Wave 종료 기준으로, 망분리·규제는 비식별 우선과 Wave 0 절차로, 전용선 1Gbps는 CDC 증분과 오프라인 초기 적재로, DBA 우려는 스탠바이 추출로 각각 흡수했다.


보험사 AI 기반 통합 데이터 플랫폼의 데이터 구조 설계

요약

생명보험사 K사(코어 Oracle 20TB·일 3천만 건 변경, STT 월 50만 건, 문서 30만 건, 이벤트 일 5억 건, 외부 월 배치)가 12개월 내 통합 분석·온라인 피처(100ms)·상담사 RAG·경영진 Text-to-SQL을 달성하기 위한 데이터 구조(저장 계층·테이블 포맷, 모델링, 비정형 구조, 메타데이터·시맨틱, 거버넌스·보안)를 설계하고 결정 근거와 트레이드오프를 서술한다. 검색 엔진 내부와 이관 절차는 제외한다.

1. 요구사항·제약·가정

이 설계의 핵심 결론은 "Iceberg 레이크하우스 하나를 단일 진실로 두고, 정형·비정형·피처·벡터를 모두 그 파생물로 관리하되, PII는 Silver 진입 시점에 결정론적으로 토큰화한다"이다. 근거가 되는 요구와 제약을 먼저 정리한다.

구분 내용 설계 함의
기능 (a) 전사 통합 분석 (b) 이탈·사기 ML 피처 © 상담사 RAG (d) Text-to-SQL 정형(차원 모델)·피처(point-in-time)·청크/임베딩·시맨틱 정의를 한 플랫폼의 계층으로 배치
규모 코어 20TB, 일 3천만 건 변경(평균 약 350 TPS, 피크 10배 가정 시 3,500 TPS), 이벤트 일 5억 건(평균 약 5,800 EPS, 피크 5만 EPS 가정), 문서 30만 건·월 2천 건 갱신, STT 월 50만 건 로그 기반 CDC + 스트리밍 적재가 필수. 이벤트 1KB 가정 시 원시 500GB/일, 컬럼형 압축 후 약 100GB/일 → 연 36TB 증가(가정)이므로 스토리지 계층화·컴팩션 자동화가 비용의 1차 변수
비기능 온라인 피처 p99 100ms, 문서 갱신 → RAG 반영 지연, 재현 가능한 학습 데이터 온라인 KV 스토어 분리, 증분 IDP 파이프라인, Iceberg 스냅샷 태그
규제 개인정보보호법(최소 수집·보관, 가명처리), 신용정보법(개인신용정보·가명정보 결합 환경 분리), 전자금융감독규정(망분리·클라우드 이용 절차·위탁) PII 탐지→태그→토큰화→태그 기반 접근제어, 신용정보 영역 분리, 불변 감사 로그, 외부 호출은 가명정보 한정
조직 데이터 팀 12명 관리형 서비스 우선, 컴포넌트 수 최소화, 컨트랙트·품질·마스킹을 코드로 자동화
가정 ① 클라우드(또는 하이브리드)는 중요도 평가·CSP 평가 등 금융권 절차를 거쳐 이용 가능 ② Oracle Redo 로그에 CDC 접근 가능 ③ 코어는 온프레미스 유지, 전용선으로 연결 가정이 깨질 때의 대안을 §7 리스크에 명시

2. 설계 원칙

  1. 단일 진실 원천 + 재생성 가능한 사본: 진실은 Iceberg 테이블(Silver)에만 두고, Gold·피처·벡터 인덱스는 언제든 재생성 가능한 파생물로 취급한다.
  2. 메달리온 계층별 책임·금지 사항 명문화: Bronze는 변환 금지(append-only), Silver는 비즈니스 해석 금지, Gold는 원천 복원 불가능한 변환을 유일 경로로 두지 않는다.
  3. 비정형 데이터도 일급 시민: 문서·녹취는 원본→청크→임베딩의 계보를 테이블로 관리해 삭제·재임베딩·근거 추적이 SQL로 가능해야 한다.
  4. 같은 정의로 소비: BI·ML·LLM이 시맨틱 레이어의 동일한 지표·차원 정의를 참조한다. LLM이 raw 스키마를 직접 보지 않는다.
  5. 거버넌스는 코드로, PII는 조기에: 분류 태그 기반으로 접근 정책을 자동 적용하고, 토큰화는 Silver 진입 시 1회 적용해 다운스트림 전부를 비식별 상태로 운영한다.

3. 목표 아키텍처

(손그림: 원천 5 → 수집 4 → 레이크하우스 5계층 → 서빙 5 → 소비 4 박스, 거버넌스는 레이크하우스·서빙 아래를 가로지르는 띠 1개)

4. 핵심 설계 결정

결정 선택 근거 대안 트레이드오프
테이블 포맷·카탈로그 Apache Iceberg(v3) + REST 호환 카탈로그(Glue 연합 또는 Polaris) 엔진 중립(Athena·Spark·Trino 동시 사용), 히든 파티셔닝·파티션 진화, 스냅샷 타임트래블로 학습 재현, 컬럼 ID 기반 스키마 진화. 종속의 실제 지점은 포맷이 아니라 카탈로그이므로 REST 사양으로 완화 Delta Lake(+Unity), Hudi Delta는 Databricks 결합도, Hudi는 레코드 업서트 강점이나 운영 복잡. Iceberg는 컴팩션·스냅샷 만료를 직접 운영해야 함(S3 Tables·Glue 최적화로 관리형 대체 가능)
계층 모델링 Silver = 3NF 기본 + 계약·고객·담보 핵심 엔티티만 Data Vault(Hub/Link/Satellite), Gold = Kimball 스타(SCD2 차원) + 소비자별 OBT 원천 다양·이력 보존(감사 증명)은 Vault, 분석·Text-to-SQL 친화는 스타·OBT. 12명 팀이 전면 Vault를 유지하기 어려움 전 계층 OBT / 전면 Vault OBT는 조인 제거·LLM 친화이나 중복·정합성 비용 → "진실은 Silver, OBT는 재생성 가능한 파생 뷰"로 한정
피처 공급 오프라인 = Feature 테이블(Iceberg, Silver 파생), 온라인 = DynamoDB/Redis(최신 상태·TTL), 피처 레지스트리(Feast/SageMaker FS)로 정의 단일화 point-in-time 정합성·학습-서빙 편차 방지, 100ms SLO는 KV 단일 키 조회(1~5ms)로 충족 온라인만 별도 계산 / Feature Store 미도입 이중 저장 비용 vs SLO. 모델이 적고 배치 추론만이면 Iceberg + SQL로 충분 → 온라인 추론 2종(이탈·사기)이 있으므로 도입
비정형 구조 원본 S3(불변) → IDP → doc_registry·chunk·embedding·index_membership 4개 Iceberg 테이블 → OpenSearch는 파생 인덱스 재임베딩·모델 교체·삭제 연쇄·근거 추적을 SQL로. 인덱스는 재생성 가능해야 함 벡터 DB에만 적재 이중 저장(청크 텍스트·메타 약 2배) vs 계보·재현성·삭제 의무 이행
시맨틱 계층 dbt(MetricFlow)/Cube로 지표·차원·조인 정의 + 용어집, Text-to-SQL은 시맨틱 모델만 참조 LLM이 raw 스키마를 보면 조인 경로 추론 실패·지표 재정의(환각). 정의 단일화로 BI와 LLM 수치 일치 프롬프트에 DDL 주입 초기 모델링 공수(핵심 지표 50개 가정) vs 정확도·거버넌스
온톨로지·그래프 상품–담보–계약–청구–고객 온톨로지(SKOS 용어, OWL 클래스·관계, SHACL 검증) → 카탈로그 용어집, 2단계에 Neptune 그래프 약관은 조항 간 참조·개정 이력이 많아 다중 홉 질의(GraphRAG) 후보. 단, 그래프 구축·유지 비용이 커 2단계 벡터만 그래프 정확도 vs 구축 비용(LLM 추출 호출)
스트리밍 Kafka(MSK) → Flink(관리형) → Iceberg MOR, 배치는 스냅샷 재처리용(“Kappa 지향, 레이크하우스 보정”) 실시간 피처·신선도, 단일 코드 경로. 일 5억 이벤트·일 3천만 CDC는 배치로는 야간 윈도우 초과 위험 Lambda(배치+속도 이중) 로직 단일화 vs 스트리밍 운영 역량 → 관리형 Flink·MSK로 흡수
PII Bronze→Silver 진입 시 결정론적 토큰화(HMAC/FPE, 키는 KMS·HSM) + 민감 원문은 분리 볼트 테이블, 태그 기반 행/열 정책(Lake Formation/Ranger), 신용정보 영역 분리 최소 보관·목적 제한. 조인 키를 보존하면서 다운스트림 전부를 비식별로 운영 뷰 단 마스킹만 키 관리·순환 부담, 토큰 재생성 비용 vs 유출 시 영향 범위 최소화

결정 상술 ① Iceberg 메타데이터와 유지보수. Iceberg는 metadata.json → manifest list → manifest → data file의 트리로 테이블 상태를 기록하고, 매니페스트에 저장된 파일별 컬럼 min/max·null 수 통계로 질의 계획 단계에서 파일을 프루닝한다. 청구 테이블을 PARTITIONED BY (days(claim_ts), bucket(16, policy_id))로 두면 사용자가 파티션 컬럼을 명시하지 않아도 히든 파티셔닝으로 프루닝되며, 월 단위로 바꿔야 할 때 재작성 없이 파티션 진화가 가능하다. CDC·스트리밍은 소형 파일과 삭제 파일을 양산하므로 rewrite_data_files(목표 512MB, 허용 128MB~1GB)와 삭제 파일 컴팩션을 주기 실행한다. 스냅샷은 재현성의 핵심이지만 expire_snapshots를 하지 않으면 스토리지가 누적되고 개인정보 삭제 요청이 물리적으로 이행되지 않는 충돌이 생긴다 → 보존 30일 + 삭제 요청 시 대상 파일 재작성·스냅샷 즉시 만료를 운영 절차로 둔다.

결정 상술 ② 비정형 계보 테이블과 연쇄 삭제. doc_registry(doc_id, doc_version, source_uri, sha256, parsed_uri, status, effective_from/to), chunk(chunk_id, doc_id, doc_version, section_path, text, token_count, pii_level, acl), embedding(chunk_id, model_version, vector_ref, created_at), index_membership(index_name, chunk_id, loaded_at, status)의 4개 테이블을 Iceberg로 둔다. sha256 비교로 변경 청크만 재임베딩하고, 구 버전은 effective_to를 채워 구·신 약관을 시점별로 검색한다. 원본 삭제 요청이 오면 doc_id로 chunk → embedding → index_membership을 따라가며 OpenSearch에 delete_by_query를 발행하고 Iceberg 행을 삭제·스냅샷 만료한다. 실패 모드는 "인덱스에는 남고 테이블에서만 지워진 고아 청크"이며, 주기 대사(index_membership vs 인덱스 doc 수)로 보정한다. 문서 30만 건 × 평균 20청크(가정) = 600만 청크, 월 2천 건 갱신 = 월 4만 청크 재임베딩 수준으로 비용이 예측 가능해진다.

결정 상술 ③ point-in-time 조인과 SCD2. 사기 탐지 모델 학습 시 청구 시각 claim_ts 기준으로 “그 시점에 알 수 있었던” 피처만 조인해야 미래 정보 누수가 없다. feature.customer_daily에서 feature_ts <= claim_ts인 최신 행을 ASOF 조인하며, Gold의 dim_customer(SCD2: 유효 시작·종료·현재 플래그)도 동일 원리로 당시 주소·직업을 재현한다. 학습·서빙 편차는 피처 정의를 레지스트리 한 곳에 선언하고 오프라인(Iceberg)·온라인(KV) 모두 같은 Flink 잡이 머티리얼라이즈하도록 해 제거한다. 데이터셋은 Iceberg 태그(train_2026q3_v2)로 고정하고 MLflow 런에 기록한다.

결정 상술 ④ 결정론적 토큰화와 멱등 MERGE. 주민번호·계좌 등은 Silver 진입 시 KMS 보관 키로 HMAC(또는 포맷 보존 암호화)하여 같은 입력이 항상 같은 토큰이 되게 한다. 이렇게 해야 고객·계약·청구 간 조인 키가 보존되고, 역참조는 분리된 볼트 테이블에 대한 별도 권한으로만 가능하다. 키 순환 시 전량 재토큰화가 필요하므로 순환 주기를 길게(연 1회 가정) 두고 버전 컬럼을 둔다. CDC 적재는 op(c/u/d), ts_ms, src_lsn을 보존하고 MERGE INTO ... WHEN MATCHED AND s.src_lsn > t.src_lsn으로 늦게 도착한 구버전 레코드를 무시해 at-least-once 전달에도 멱등을 보장한다. exactly-once는 Kafka↔Flink↔Iceberg 구간(체크포인트 커밋)에만 한정해 보장한다.

5. 거버넌스·보안·규제

거버넌스는 "컨트랙트(사전) – 품질 게이트(적재 시) – 관측성(사후) – 접근제어(상시) – 감사(증명)"의 시간축으로 배치한다.

  • 데이터 컨트랙트: 원천 팀과 ODCS 형식으로 스키마·분류·SLA(Silver 신선도 15분)·보존(5년) 합의, CI에서 datacontract test로 검증. 스트리밍 경계는 Glue Schema Registry에 BACKWARD 호환 모드(필드 추가는 기본값 필수, 삭제는 deprecate → remove 2단계).
  • 품질 게이트: Bronze→Silver(컨트랙트 검증), Silver→Gold/Feature/Chunk(비즈니스 규칙)의 두 경계에서 Soda/Deequ 검사, 실패는 격리 테이블로 분기. 규제 보고 테이블은 Fail-closed, 로그 집계는 Fail-open.
  • 분류·접근제어: Macie/Comprehend/Presidio로 PII 탐지 → 카탈로그 태그 pii_level → Lake Formation LF-Tag 기반 행·열·셀 정책. 신용정보·가명정보 결합은 분리 환경(별도 계정·버킷)에서만.
  • 감사: 조회·내보내기·정책 변경·LLM 호출(프롬프트·근거 청크 ID·모델 버전)을 S3 Object Lock 불변 저장. 보존 기간은 전자금융 거래기록 등 관련 규정에 따른다(세부 조항은 확인 필요).
  • 규제 절차: 클라우드 이용은 업무 선정·중요도 평가 → CSP 평가 → 안전성 확보조치 → 정보보호위원회 심의 → 계약 → 사후보고의 절차(전자금융감독규정 제14조의2)를 Wave 0으로 병행. 외부 LLM·임베딩 호출은 현 단계에서 가명처리 데이터 한정, 원문·식별정보는 내부망 보존. 비운영 환경은 토큰화 사본만.

6. 운영·평가·관측성

대상 SLO·지표 측정
Silver 신선도 코어 CDC 15분, 이벤트 5분 Kafka 소비 지연 + Iceberg 커밋 시각
Gold 배치 일 배치 완료 05:00 오케스트레이터 메트릭
온라인 피처 p99 100ms, 오프라인–온라인 값 불일치율 < 0.1% 일 샘플 1만 건 비교
문서 파이프라인 갱신 → 인덱스 반영 p95 1시간, 파싱 실패율 < 2%, 중복률 < 1% IDP 런 로그·sha256 중복 검사
품질 게이트 통과율 계층별 99% 이상 Soda 결과
리니지·태깅 커버리지 Silver 이상 테이블 100% 소유자·분류 태그 카탈로그 스캔
재현성 분기 1회 스냅샷 태그 고정 재학습으로 동일 지표 재현 MLflow 비교
비용 TB당 월 스토리지, 컴팩션 컴퓨트 비율, 쿼리 비용 상위 10 FinOps 태깅

관측성 5축(신선도·볼륨·스키마·분포·리니지)에 AI 확장 축(임베딩 인덱스 신선도, 청크 수 변화, 임베딩 분포 드리프트)을 추가한다.

7. 로드맵·리스크

  • 1~3개월: 레이크하우스 기반·REST 카탈로그·Lake Formation, 계약 도메인 CDC PoC(Oracle → MSK → Flink → Iceberg), 약관 1만 건 IDP 파일럿, 컨트랙트·품질 게이트 틀, 규제 절차 착수.
  • 4~8개월: 전 도메인 CDC·이벤트 스트리밍, Silver Vault 핵심 엔티티·Gold 스타, 시맨틱 레이어 핵심 지표 50개, 피처 스토어(이탈·사기), RAG 파일럿(상담사 50명).
  • 9~12개월: Text-to-SQL(시맨틱 레이어 경유), 그래프 선택 도입, 거버넌스 자동화·감사 대시보드, 운영 이관.
리스크 영향 완화
Oracle Redo 로그 접근 불가 CDC 불가·삭제 누락 쿼리 기반 CDC + 소프트 삭제 플래그 + 야간 전수 대사, 지연 SLA 완화
HWP·표 파싱 품질 RAG 근거 오류 상용 변환기 병행, OCR 신뢰도 메타 + 저신뢰 재처리 큐
토큰 키 관리 유출·재토큰화 비용 HSM·키 버전 컬럼, 순환 리허설
소형 파일·스냅샷 누적 쿼리 지연·비용·삭제 미이행 관리형 컴팩션(S3 Tables/Glue 최적화), 만료 정책 자동화
팀 역량(12명) 일정 지연 관리형 우선, 컴포넌트 수 상한, 교육·외부 인력
규제 승인 지연 클라우드 착수 지연 비중요 업무부터, 온프레미스 대체 경로 유지

8. 결론

Iceberg 레이크하우스를 단일 진실로 두고 Silver(3NF+핵심 Vault)·Gold(스타·OBT)·Feature·Chunk 계층을 모두 재생성 가능한 파생으로 설계하면, 통합 분석·온라인 피처·RAG·Text-to-SQL이 하나의 정의와 하나의 권한 체계를 공유한다. 핵심 트레이드오프는 ① 이중 저장(비정형 계보·피처) vs 재현성·삭제 의무, ② 스냅샷 보존 vs 개인정보 삭제, ③ 관리형 종속 vs 12명 팀의 운영 여력이며, 세 가지 모두 "진실은 테이블, 사본은 재생성"과 “PII는 조기 토큰화” 원칙으로 해소한다. 기대 KPI는 Silver 신선도 15분, 피처 p99 100ms, 문서 반영 1시간, 품질 게이트 통과율 99%, 재현 테스트 분기 1회 통과이다.

작성자

skycave

Follow Me
다른 기사
Previous

AI 플랫폼 전환 설계

Next

사내 지식 AI 검색(RAG) 플랫폼 설계

댓글 없음! 첫 댓글을 남겨보세요.

답글 남기기 응답 취소

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Copyright 2026 — skycave's Blog. All rights reserved. Blogsy WordPress Theme