GPU 1장으로 7개 회사 동시 서빙 — 멀티테넌트 격리 실전 테스트
A회사의 고객이 물었는데 B회사의 정보가 나온다면? GPU 1장에서 여러 회사를 동시에 서빙하는 멀티테넌트 AI에서 가장 치명적인 문제는 정보 격리 실패입니다. 카페 고객에게 병원 진료 정보가 노출되거나, 법률사무소 상담 내용이 학원 응답에 섞이면 서비스 자체가 불가능합니다. 5개 LoRA 어댑터로 7개 회사를 동시 서빙하며 15건의 격리 테스트를 실행한 결과를 공개합니다.
15/15
격리 테스트 PASS
7개
동시 서빙 회사
0건
정보 누출
1.5x
폭주 시 타사 지연
멀티테넌트 아키텍처
서빙 구조
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/s | 43°C | 0% |
| 50명 | 5.4초 | 2,590 tok/s | 48°C | 0% |
| 100명 | 8.6초 | 3,469 tok/s | 62°C | 0% |
| 200명 | 16.9초 | 3,890 tok/s | 70°C | 0% |
LoRA 5개를 동시 서빙해도 성능 저하는 없습니다. VRAM 추가 사용량은 어댑터 5개 합산 ~370MB에 불과합니다. 자세한 부하 테스트 결과는 동시 접속 부하 테스트 글을 참고하세요.
결론: 15/15 PASS
| # | 테스트 | 건수 | 결과 |
|---|---|---|---|
| 1 | KV 캐시 누출 (3쌍 교차) | 3건 | ✅ 3/3 PASS |
| 2 | LoRA 어댑터 격리 (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 파인튜닝 가이드)을 참고하세요.
댓글
(4개)로그인하면 댓글을 작성할 수 있습니다.
KV 캐시 누출 검증이 핵심이었는데, 3쌍 교차 테스트로 체계적으로 검증한 점이 좋습니다. 실제 B2B 서비스에서 가장 먼저 확인해야 할 항목이죠.
GPU 1장으로 7개 테넌트 격리가 완벽하다니 놀랍습니다. Fair queuing 1.5배 지연도 충분히 허용 범위이고, 이 구조면 소규모 B2B SaaS 충분히 가능합니다.
격리 테스트 스크립트 구조가 깔끔합니다. anti_keywords로 누출을 검증하는 방식, 실무에 바로 쓸 수 있겠네요. 15/15 전부 PASS는 인상적입니다.
관련 글
© 2026 TreeRU. All rights reserved.
본 콘텐츠의 저작권은 TreeRU에 있으며, 출처를 밝히지 않은 무단 전재 및 재배포를 금합니다. 인용 시 출처(treeru.com)를 반드시 명시해 주세요.