treeru.com
AI

GPU 1장으로 7개 회사 동시 서빙 — 멀티테넌트 격리 실전 테스트

2026-02-22
Treeru

A회사의 고객이 물었는데 B회사의 정보가 나온다면? GPU 1장에서 여러 회사를 동시에 서빙하는 멀티테넌트 AI에서 가장 치명적인 문제는 정보 격리 실패입니다. 카페 고객에게 병원 진료 정보가 노출되거나, 법률사무소 상담 내용이 학원 응답에 섞이면 서비스 자체가 불가능합니다. 5개 LoRA 어댑터로 7개 회사를 동시 서빙하며 15건의 격리 테스트를 실행한 결과를 공개합니다.

15/15

격리 테스트 PASS

7개

동시 서빙 회사

0건

정보 누출

1.5x

폭주 시 타사 지연

멀티테넌트 아키텍처

서빙 구조

GPU: RTX PRO 6000 (96GB, 350W)

서빙 엔진: SGLang + LoRA 핫스왑 (SGLang 서빙 가이드)

모델: Qwen3-8B-AWQ + LoRA 5개

VRAM: ~82GB (베이스 + 어댑터 5 + KV캐시)

컨텍스트: 4,096 토큰

프로젝트 서버: 7대 (각 1개 회사)

운영 중인 7개 테넌트

회사명업종말투LoRA
달빛카페카페/음료친근한 반말 (~요)
미래의원병원/의료정중한 존댓말 (~습니다)
오늘마켓쇼핑몰활발한 안내체
정의법률사무소법률격식 존댓말 (~하십시오)
하늘학원교육/학원밝고 친절
현지의레시피봇요리/레시피캐주얼 안내-
알파로그마케팅 솔루션비즈니스 톤-

LoRA가 없는 테넌트

현지의레시피봇과 알파로그는 LoRA 어댑터 없이 시스템 프롬프트만으로 운영됩니다. 시스템 프롬프트의 역할 지시와 정보 구조화만으로도 기본적인 페르소나 유지가 가능합니다. LoRA는 말투 일관성을 더 높이고 싶을 때 추가하는 선택 사항입니다.

테스트 1: KV 캐시 누출

가장 위험한 시나리오: GPU 내부의 KV 캐시에 이전 회사의 대화 내용이 남아 있다가 다음 회사의 응답에 섞여 나오는 경우입니다. 이 테스트는 의도적으로 회사A와 긴 대화를 한 직후 회사B에 같은 질문을 던져, 회사A의 내용이 누출되는지 확인합니다.

테스트 방법

1단계: 카페 어댑터로 "모든 메뉴와 가격을 자세히 알려주세요" → 긴 응답 생성 (KV 캐시 채움)

2단계: 즉시 병원 어댑터로 "여기가 어떤 곳인지 소개해주세요" → 응답 확인

판정: 병원 응답에 "아메리카노", "카페라떼", "달빛카페" 등 카페 키워드가 있으면 FAIL

교차 쌍검증 내용결과
카페 → 병원카페 메뉴 키워드가 병원 응답에 없는지✅ PASS
법률 → 학원법률 키워드가 학원 응답에 없는지✅ PASS
쇼핑몰 → 카페배송/주문 키워드가 카페 응답에 없는지✅ PASS

3쌍 모두 누출 0건

SGLang은 요청마다 독립적인 KV 캐시를 할당합니다. 이전 회사의 대화 내용이 다음 회사의 응답에 절대 섞이지 않습니다. 의도적으로 긴 응답을 유발해 캐시를 채운 직후에도 누출이 없었습니다.

테스트 2-3: LoRA 격리 + 동시 페르소나

테스트 2: LoRA 어댑터 격리

각 어댑터에 동일한 질문("여기가 어떤 곳인지 소개해주세요")을 순차 전송. 응답에 다른 업종의 키워드가 섞이면 FAIL.

어댑터자기 키워드타사 누출결과
카페0건PASS
병원0건PASS
쇼핑몰0건PASS
법률0건PASS
학원0건PASS

테스트 3: 동시 5개 페르소나

5개 회사에 동시에 같은 질문을 전송. 각각 올바른 업종 응답인지 확인. 동시 요청 시 어댑터가 뒤섞이면 FAIL.

회사올바른 페르소나타사 키워드결과
카페0건PASS
병원0건PASS
쇼핑몰0건PASS
법률0건PASS
학원0건PASS

검증 방법: 키워드 교차 검증

각 업종에 고유 키워드(카페: "커피", "음료")와 금지 키워드(카페 응답에 "진료", "소송" 불가)를 정의합니다. 응답에 자기 키워드가 있고 금지 키워드가 없으면 PASS. 자동화 스크립트가 양방향으로 검증합니다.

테스트 4-5: 다중 사용자·빠른 전환

테스트 4: 같은 회사 다중 사용자

같은 카페에 사용자A(메뉴 질문)와 사용자B(위치 질문)가 동시 접속. A의 응답에 B의 정보가 섞이거나 그 반대가 되면 FAIL.

사용자A: "아메리카노 가격" → 가격 정보 ✅

사용자B: "카페 위치/주차" → 위치 정보 ✅

독립 응답 확인 — PASS

테스트 5: 빠른 전환 반복

카페→병원→쇼핑몰→법률→학원을 2바퀴(10회) 빠르게 순환하며 매번 올바른 페르소나를 유지하는지 확인.

1바퀴: 5/5 ✅

2바퀴: 5/5 ✅

10/10 전부 통과 — PASS

공정 큐잉과 부하

격리가 완벽해도 한 회사가 요청을 폭주시키면 다른 회사가 영향을 받을 수 있습니다. 카페가 20건을 동시에 쏟아부었을 때, 다른 4개 회사의 응답이 얼마나 지연되는지 측정했습니다.

폭주 시나리오

카페: 20건 동시 요청 (폭주)

병원·쇼핑몰·법률·학원: 각 1건 (일반)

측정: 일반 4건의 응답 시간 vs 단독 실행 시 응답 시간

구분폭주 중단독 실행지연 배율
다른 4개 회사 (중앙값)약 1.5배기준값1.5x (양호)

판정: 양호

1개 회사가 20건을 폭주시켜도 다른 회사의 지연은 1.5배 수준입니다. SGLang의 continuous batching이 요청을 공정하게 스케줄링하기 때문입니다. 5배 이상이면 문제이지만, 1.5배는 사용자가 체감하기 어려운 수준입니다.

동시 접속 부하 (8B + LoRA 5개)

동시 접속중앙값처리량GPU 온도에러
20명3.5초1,582 tok/s43°C0%
50명5.4초2,590 tok/s48°C0%
100명8.6초3,469 tok/s62°C0%
200명16.9초3,890 tok/s70°C0%

LoRA 5개를 동시 서빙해도 성능 저하는 없습니다. VRAM 추가 사용량은 어댑터 5개 합산 ~370MB에 불과합니다. 자세한 부하 테스트 결과는 동시 접속 부하 테스트 글을 참고하세요.

결론: 15/15 PASS

#테스트건수결과
1KV 캐시 누출 (3쌍 교차)3건3/3 PASS
2LoRA 어댑터 격리 (5개 업종)5건5/5 PASS
3동시 5개 페르소나 유지5건5/5 PASS
4같은 회사 다중 사용자 독립1건PASS
5빠른 전환 반복 (10회 순환)1건10/10 PASS
종합15건15/15 PASS

GPU 1장, 7개 회사, 정보 누출 0건

KV 캐시 누출 0건, LoRA 격리 완벽, 동시 5개 페르소나 유지, 빠른 전환 10/10 통과. 1개 회사가 폭주해도 다른 회사 지연은 1.5배 수준.
GPU 1장으로 멀티테넌트 AI 서비스가 가능합니다.
LoRA 학습 과정이 궁금하다면 이전 글(LoRA 파인튜닝 가이드)을 참고하세요.

T

Treeru

웹 개발, IT 인프라, AI 솔루션 분야의 실무 인사이트를 공유합니다. 기업의 디지털 전환을 돕는 IT 파트너, Treeru입니다.

공유

댓글

(4개)
4.85/ 5

로그인하면 댓글을 작성할 수 있습니다.

2026-02-22
555.0

KV 캐시 누출 검증이 핵심이었는데, 3쌍 교차 테스트로 체계적으로 검증한 점이 좋습니다. 실제 B2B 서비스에서 가장 먼저 확인해야 할 항목이죠.

2026-02-22
4.954.9

GPU 1장으로 7개 테넌트 격리가 완벽하다니 놀랍습니다. Fair queuing 1.5배 지연도 충분히 허용 범위이고, 이 구조면 소규모 B2B SaaS 충분히 가능합니다.

2026-02-22
4.854.8

격리 테스트 스크립트 구조가 깔끔합니다. anti_keywords로 누출을 검증하는 방식, 실무에 바로 쓸 수 있겠네요. 15/15 전부 PASS는 인상적입니다.

관련 글

© 2026 TreeRU. All rights reserved.

본 콘텐츠의 저작권은 TreeRU에 있으며, 출처를 밝히지 않은 무단 전재 및 재배포를 금합니다. 인용 시 출처(treeru.com)를 반드시 명시해 주세요.