๐Ÿค– LLM

LLM Inference Engine Analysis

LLM ์ถ”๋ก  ์—”์ง„ ์‹ฌ์ธต ๋ถ„์„

vLLM ยท TensorRT-LLM ยท SGLang ยท TGI ยท llama.cpp โ€” ์•„ํ‚คํ…์ฒ˜ ๋น„๊ต์™€ ์„ ํƒ ๊ธฐ์ค€

LLM ์ถ”๋ก  ์—”์ง„์€ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‹ค์ œ ์„œ๋น„์Šค๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ์ธํ”„๋ผ์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ชจ๋ธ์ด๋ผ๋„ ์—”์ง„์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋Ÿ‰, ์ง€์—ฐ์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง€๋ฉฐ, ์—”์ง„ ์„ ํƒ์€ ๊ณง ์„œ๋น„์Šค ํ’ˆ์งˆ๊ณผ ์šด์˜ ๋น„์šฉ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ ๋ฌธ์„œ๋Š” ์ฃผ์š” ์˜คํ”ˆ์†Œ์Šค ์ถ”๋ก  ์—”์ง„๋“ค์˜ ์•„ํ‚คํ…์ฒ˜, ํ•ต์‹ฌ ์ตœ์ ํ™” ๊ธฐ๋ฒ•, ์šด์˜ ๊ด€์ ์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

2026๋…„ ๊ธฐ์ค€์œผ๋กœ vLLM๊ณผ SGLang์ด ๊ฐ€์žฅ ํ™œ๋ฐœํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, TensorRT-LLM์€ NVIDIA ์ƒํƒœ๊ณ„์—์„œ ์ตœ๊ณ  ์ˆ˜์ค€์˜ ๋‹จ์ผ GPU ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. TGI๋Š” Hugging Face ์ƒํƒœ๊ณ„์™€์˜ ๊ธด๋ฐ€ํ•œ ํ†ตํ•ฉ์œผ๋กœ ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘์— ๊ฐ•์ ์ด ์žˆ์œผ๋‚˜ ํ˜„์žฌ maintenance ๋ชจ๋“œ๋กœ ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. llama.cpp๋Š” CPU/์—ฃ์ง€ ์ถ”๋ก ์— ํŠนํ™”๋˜์–ด ์žˆ์–ด ๋ฆฌ์†Œ์Šค ์ œ์•ฝ ํ™˜๊ฒฝ์—์„œ ๋…์ž์ ์ธ ์˜์—ญ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ฐœ๋…

  • PagedAttention: KV ์บ์‹œ๋ฅผ ๊ณ ์ • ํฌ๊ธฐ ๋ธ”๋ก์œผ๋กœ ๋‚˜๋ˆ  ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ค„์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์œผ๋กœ, vLLM์ด ์ฒ˜์Œ ๋„์ž…ํ•˜๊ณ  ์ดํ›„ ๋Œ€๋ถ€๋ถ„์˜ ์—”์ง„์ด ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Continuous Batching: ํ† ํฐ ์Šคํ…๋งˆ๋‹ค ์™„๋ฃŒ๋œ ์š”์ฒญ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ ์š”์ฒญ์„ ์ฑ„์›Œ ๋„ฃ๋Š” ๋™์  ๋ฐฐ์น˜ ๊ธฐ๋ฒ•์œผ๋กœ, GPU utilization์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • Tensor Parallelism: ๋ชจ๋ธ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ์—ฌ๋Ÿฌ GPU์— ๋ถ„์‚ฐํ•˜์—ฌ ๋‹จ์ผ ์š”์ฒญ์˜ ์ง€์—ฐ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • Speculative Decoding: ์ž‘์€ ๋ชจ๋ธ(draft)์ด ๋ฏธ๋ฆฌ ํ† ํฐ์„ ์˜ˆ์ธกํ•˜๊ณ  ํฐ ๋ชจ๋ธ(target)์ด ๊ฒ€์ฆํ•˜์—ฌ throughput์„ ๋†’์ด๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • Prefix Caching: ๊ณตํ†ต ํ”„๋กฌํ”„ํŠธ์˜ KV ์บ์‹œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต์ ์ธ prefill ๋น„์šฉ์„ ์ค„์ด๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • Quantization: ๊ฐ€์ค‘์น˜๋‚˜ ํ™œ์„ฑํ™”๋ฅผ ์ €์ •๋ฐ€ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์™€ ์—ฐ์‚ฐ๋Ÿ‰์„ ์ค„์ด๋Š” ๊ธฐ๋ฒ•์œผ๋กœ, FP8/INT8/INT4/GPTQ/AWQ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์—”์ง„ ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”

๊ฐ ์ถ”๋ก  ์—”์ง„์€ Python ํ”„๋ก ํŠธ์—”๋“œ, C++/CUDA ๋Ÿฐํƒ€์ž„, ์ปค๋„ ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์—”์ง„์— ๋”ฐ๋ผ PyTorch ๊ธฐ๋ฐ˜(vLLM, SGLang)์ธ์ง€ TensorRT ๊ธฐ๋ฐ˜(TensorRT-LLM)์ธ์ง€์— ๋”ฐ๋ผ ๋นŒ๋“œ ์‹œ๊ฐ„, ๋ชจ๋ธ ํ˜ธํ™˜์„ฑ, ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์šฉ์ด์„ฑ์ด ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

vLLM์€ PyTorch ์œ„์— ๊ตฌ์ถ•๋˜์–ด Hugging Face ๋ชจ๋ธ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ, PagedAttention๊ณผ continuous batching์œผ๋กœ ๋†’์€ throughput์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. SGLang์€ RadixAttention์œผ๋กœ prefix caching์„ ๊ฐ€์†ํ•˜๊ณ , zero-overhead CPU ์Šค์ผ€์ค„๋Ÿฌ๋กœ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. TensorRT-LLM์€ TensorRT ์—”์ง„ ๋นŒ๋“œ๋ฅผ ํ†ตํ•ด NVIDIA GPU์—์„œ ์ตœ์ ํ™”๋œ ์ปค๋„์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋‹จ์ผ ๋…ธ๋“œ ์„ฑ๋Šฅ์€ ๊ฐ€์žฅ ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.

LLM Inference Engine Architecture

๊ทธ๋ฆผ 1. ์ฃผ์š” LLM ์ถ”๋ก  ์—”์ง„์˜ ์ „์ฒด ์•„ํ‚คํ…์ฒ˜ ๋น„๊ต

2. ํ•ต์‹ฌ ์ตœ์ ํ™” ๊ธฐ๋ฒ• ๋น„๊ต

๋ชจ๋“  ์ถ”๋ก  ์—”์ง„์ด ๊ณตํ†ต์ ์œผ๋กœ ์ถ”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค: (1) GPU memory๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์—ฌ ๋” ๋งŽ์€ ๋™์‹œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , (2) ๊ฐ ์š”์ฒญ์˜ ์ฒซ ํ† ํฐ ์ง€์—ฐ์‹œ๊ฐ„(TTFT)๊ณผ ํ† ํฐ ๊ฐ„ ์ง€์—ฐ์‹œ๊ฐ„(ITL)์„ ์ค„์ด๊ณ , (3) ๋‹ค์–‘ํ•œ ์–‘์žํ™”์™€ ๋ถ„์‚ฐ ์ „๋žต์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—”์ง„๋งˆ๋‹ค ์ด ์„ธ ๊ฐ€์ง€๋ฅผ ํ‘ธ๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

vLLM์€ PagedAttention์œผ๋กœ KV ์บ์‹œ์˜ ์กฐ๊ฐํ™”๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , chunked prefill๋กœ ๊ธด ํ”„๋กฌํ”„ํŠธ๊ฐ€ decode์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ค„์ž…๋‹ˆ๋‹ค. SGLang์€ RadixAttention์œผ๋กœ ํ”„๋กฌํ”„ํŠธ ๊ฐ„ ๊ณต์œ  ์ ‘๋‘์‚ฌ๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ KV ์บ์‹œ๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. TensorRT-LLM์€ ๋ชจ๋ธ์„ TensorRT ์—”์ง„์œผ๋กœ ๋นŒ๋“œํ•˜์—ฌ ์ปค๋„ ์ˆ˜์ค€์˜ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , Inflight Batching์œผ๋กœ continuous batching์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

Core Optimization Techniques

๊ทธ๋ฆผ 2. PagedAttention, RadixAttention, TensorRT ์ตœ์ ํ™”์˜ ๋™์ž‘ ์›๋ฆฌ

PagedAttention๊ณผ RadixAttention์˜ ์ฐจ์ด

PagedAttention์€ KV ์บ์‹œ๋ฅผ ๊ณ ์ • ํฌ๊ธฐ ๋ธ”๋ก(์ผ๋ฐ˜์ ์œผ๋กœ 16๊ฐœ ํ† ํฐ ๋‹จ์œ„)์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. ๊ฐ ์‹œํ€€์Šค๋Š” ์—ฌ๋Ÿฌ ๋ธ”๋ก์— ๊ฑธ์ณ KV ์บ์‹œ๋ฅผ ํ• ๋‹น๋ฐ›์œผ๋ฉฐ, ํ† ํฐ์ด ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ ๋ธ”๋ก์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ์ผ๋ฐ˜์ ์ธ serving์—์„œ ๋›ฐ์–ด๋‚œ ํšจ์œจ์„ ๋ณด์ž…๋‹ˆ๋‹ค.

RadixAttention์€ ํ”„๋กฌํ”„ํŠธ์˜ ์ ‘๋‘์‚ฌ trie๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์š”์ฒญ ๊ฐ„์— ๊ณตํ†ต๋œ KV ์บ์‹œ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•˜๊ฑฐ๋‚˜ ์œ ์‚ฌํ•œ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ์„ธ์…˜์—์„œ prefill ๋น„์šฉ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SGLang์€ ์ด ๊ธฐ์ˆ ์„ ํ†ตํ•ด LLM serving์—์„œ ์ตœ๋Œ€ 5x๊นŒ์ง€ ์ถ”๋ก  ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œ์ผฐ๋‹ค๊ณ  ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

3. ๋ถ„์‚ฐ ์ถ”๋ก ๊ณผ ๋ณ‘๋ ฌํ™”

๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ(70B ์ด์ƒ)์€ ๋‹จ์ผ GPU์— ์™„์ „ํžˆ ๋กœ๋“œํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๋ชจ๋ธ ๋ณ‘๋ ฌํ™”๊ฐ€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ์—”์ง„์— ๋”ฐ๋ผ ์ง€์›ํ•˜๋Š” ๋ณ‘๋ ฌํ™” ์ „๋žต๊ณผ ๊ตฌํ˜„ ๋ฐฉ์‹์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

Tensor Parallelism(TP)์€ ๋ชจ๋ธ์˜ ๊ฐ€์ค‘์น˜ ํ–‰๋ ฌ์„ ์—ฌ๋Ÿฌ GPU์— ์„ธ๋กœ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ๊ฐ GPU๊ฐ€ ์ „์ฒด ๋ ˆ์ด์–ด์˜ ์ผ๋ถ€๋ฅผ ๋‹ด๋‹นํ•˜๋˜, forward pass๋งˆ๋‹ค all-reduce ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Pipeline Parallelism(PP)์€ ๋ ˆ์ด์–ด๋ฅผ ์—ฌ๋Ÿฌ ์Šคํ…Œ์ด์ง€๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ GPU์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. TP๋Š” ํ†ต์‹  ๋นˆ๋„๊ฐ€ ๋†’์ง€๋งŒ ์ง€์—ฐ์‹œ๊ฐ„์ด ๋‚ฎ๊ณ , PP๋Š” ํ†ต์‹ ์ด ์ ์ง€๋งŒ ํŒŒ์ดํ”„๋ผ์ธ ๋ฒ„๋ธ”์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Expert Parallelism(EP)์€ MoE ๋ชจ๋ธ์—์„œ ๊ฐ expert๋ฅผ ๋‹ค๋ฅธ GPU์— ๋ถ„์‚ฐํ•˜๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค. DeepSeek-V3์ฒ˜๋Ÿผ ์ˆ˜๋ฐฑ ๊ฐœ์˜ expert๋ฅผ ๊ฐ€์ง„ ๋ชจ๋ธ์—์„œ๋Š” EP๊ฐ€ ํ•„์ˆ˜์ ์ด๋ฉฐ, vLLM๊ณผ SGLang ๋ชจ๋‘ ์ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Distributed Inference

๊ทธ๋ฆผ 3. Tensor Parallelism, Pipeline Parallelism, Expert Parallelism ๋น„๊ต

4. ์ถ”๋ก  ์—”์ง„๋ณ„ ์ƒ์„ธ ๋ถ„์„

vLLM

vLLM์€ UC Berkeley์—์„œ ๊ฐœ๋ฐœ๋œ ์˜คํ”ˆ์†Œ์Šค LLM ์ถ”๋ก  ์—”์ง„์œผ๋กœ, 85k ์ด์ƒ์˜ GitHub ์Šคํƒ€๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. PagedAttention์„ ์ฒ˜์Œ ๋„์ž…ํ•˜์—ฌ LLM serving์˜ ํ‘œ์ค€์„ ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ, ํ˜„์žฌ 200๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํŠน์ง•์œผ๋กœ๋Š” PagedAttention ๊ธฐ๋ฐ˜ KV ๊ด€๋ฆฌ, continuous batching, chunked prefill, prefix caching, ๋‹ค์–‘ํ•œ ์–‘์žํ™”(FP8/INT8/INT4/GPTQ/AWQ/GGUF) ์ง€์›์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ speculative decoding(n-gram, suffix, EAGLE, DFlash), disaggregated prefill/decode, ๋ฉ€ํ‹ฐ LoRA ์ง€์› ๋“ฑ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋“œ์›จ์–ด ๊ด€์ ์—์„œ๋Š” NVIDIA GPU๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ง€์›ํ•˜๋ฉฐ, AMD GPU, x86/ARM CPU, Google TPU, Intel Gaudi ๋“ฑ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. OpenAI ํ˜ธํ™˜ API ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

TensorRT-LLM

TensorRT-LLM์€ NVIDIA๊ฐ€ ๊ฐœ๋ฐœํ•œ LLM ์ถ”๋ก  ์ตœ์ ํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, TensorRT ์—”์ง„ ๋นŒ๋“œ๋ฅผ ํ†ตํ•ด NVIDIA GPU์—์„œ ์ตœ๊ณ  ์ˆ˜์ค€์˜ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. 14k ์ด์ƒ์˜ GitHub ์Šคํƒ€๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, v1.x ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ์™„์ „ํ•œ ์˜คํ”ˆ์†Œ์Šค๋กœ ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํŠน์ง•์€ Python API๋ฅผ ํ†ตํ•œ ๋ชจ๋ธ ์ •์˜, TensorRT ์—”์ง„ ๋นŒ๋“œ, ์ปค์Šคํ…€ CUDA ์ปค๋„, PyTorch ๊ธฐ๋ฐ˜ ๋Ÿฐํƒ€์ž„์ž…๋‹ˆ๋‹ค. DeepSeek-R1/V3, Llama 4 ๊ฐ™์€ ์ตœ์‹  ๋ชจ๋ธ์— ๋Œ€ํ•œ Day-0 ์ง€์›์„ ์ œ๊ณตํ•˜๋ฉฐ, Blackwell GPU์—์„œ 40,000+ tokens/s ์ด์ƒ์˜ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ ์€ ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๊ธธ๊ณ , ๋ชจ๋ธ ๋ณ€๊ฒฝ ์‹œ ์—”์ง„์„ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋ฉฐ, NVIDIA GPU ์™ธ์˜ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Triton Inference Server์™€์˜ ํ†ตํ•ฉ์ด ์ž˜ ๋˜์–ด ์žˆ์–ด ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์— ๊ฐ•์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

SGLang

SGLang์€ LMSYS์—์„œ ๊ฐœ๋ฐœํ•œ ๊ณ ์„ฑ๋Šฅ LLM ์„œ๋น™ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, 29.9k ์ด์ƒ์˜ GitHub ์Šคํƒ€๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. RadixAttention๊ณผ zero-overhead CPU ์Šค์ผ€์ค„๋Ÿฌ๋กœ ๋น ๋ฅธ ์ถ”๋ก ์„ ์ œ๊ณตํ•˜๋ฉฐ, 400,000๊ฐœ ์ด์ƒ์˜ GPU์—์„œ ํ”„๋กœ๋•์…˜ ์‚ฌ์šฉ์ด ๋ณด๊ณ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํŠน์ง•์€ RadixAttention ๊ธฐ๋ฐ˜ prefix caching, zero-overhead ๋ฐฐ์น˜ ์Šค์ผ€์ค„๋Ÿฌ, prefill-decode ๋ถ„๋ฆฌ(disaggregation), ๋‹ค์–‘ํ•œ ์–‘์žํ™”(FP4/FP8/INT4/AWQ/GPTQ) ์ง€์›์ž…๋‹ˆ๋‹ค. ๋”ฅ์‹œํฌ ์ตœ์ ํ™”๋ฅผ ํฌํ•จํ•œ ์ตœ์‹  ๋ชจ๋ธ์— ๋Œ€ํ•œ day-0 ์ง€์›์ด ๊ฐ•์ ์ด๋ฉฐ, RL/ํฌ์ŠคํŠธํŠธ๋ ˆ์ด๋‹ ๋ฐฑ์—”๋“œ๋กœ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ•˜๋“œ์›จ์–ด ๊ด€์ ์—์„œ๋Š” NVIDIA GPU(GB200/B300/H100/A100), AMD GPU(MI355/MI300), Intel CPU, Google TPU, Ascend NPU๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. OpenAI API ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ(SGLang DSL)๋กœ ๋ณต์žกํ•œ LLM ํŒŒ์ดํ”„๋ผ์ธ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TGI (Text Generation Inference)

TGI๋Š” Hugging Face๊ฐ€ ๊ฐœ๋ฐœํ•œ LLM ์„œ๋น™ ํˆดํ‚ท์œผ๋กœ, Hugging Face ์ƒํƒœ๊ณ„์™€์˜ ๊ธด๋ฐ€ํ•œ ํ†ตํ•ฉ์ด ๊ฐ•์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 2026๋…„ ๊ธฐ์ค€์œผ๋กœ maintenance ๋ชจ๋“œ์— ์ง„์ž…ํ•˜์—ฌ, ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ ๋ฌธ์„œ ๊ฐœ์„ ์— ๊ตญํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํŠน์ง•์€ ๊ฐ„๋‹จํ•œ ๋Ÿฐ์ฒ˜, Tensor Parallelism, continuous batching, Flash Attention/Paged Attention ํ†ตํ•ฉ, bitsandbytes/GPT-Q ์–‘์žํ™”, Server-Sent Events ์ŠคํŠธ๋ฆฌ๋ฐ์ž…๋‹ˆ๋‹ค. Hugging Chat, OpenAssistant ๋“ฑ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ํ”„๋กœ๋•์…˜ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

maintenance ๋ชจ๋“œ ์ „ํ™˜์˜ ์ฃผ์š” ์›์ธ์€ vLLM, SGLang ๊ฐ™์€ ์—”์ง„๋“ค์ด transformers ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฐ˜ ์ตœ์ ํ™”๋ฅผ ์ฑ„ํƒํ•˜๋ฉด์„œ, TGI์˜ ๋…์ž์ ์ธ ์ตœ์ ํ™” ๋ฐฉ์‹์ด ๊ฒฝ์Ÿ๋ ฅ์„ ์žƒ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Hugging Face ์ž์ฒด์—์„œ๋„ vLLM๊ณผ SGLang์„ ์ถ”์ฒœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

llama.cpp

llama.cpp๋Š” CPU/์—ฃ์ง€ ๋””๋ฐ”์ด์Šค์—์„œ์˜ LLM ์ถ”๋ก ์— ํŠนํ™”๋œ ์—”์ง„์œผ๋กœ, GGUF ํ˜•์‹์˜ ์–‘์žํ™”๋œ ๋ชจ๋ธ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. GPU๊ฐ€ ์—†๋Š” ํ™˜๊ฒฝ์ด๋‚˜ ์ œํ•œ๋œ ๋ฆฌ์†Œ์Šค์—์„œ๋„ LLM์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํŠน์ง•์€ ์ˆœ์ˆ˜ C/C++ ๊ตฌํ˜„, GGUF ๋ชจ๋ธ ํ˜•์‹, ๋‹ค์–‘ํ•œ ์–‘์žํ™”(Q4_0, Q4_K_M, Q5_K_M, Q8_0 ๋“ฑ), Metal/CUDA/Vulkan ๋ฐฑ์—”๋“œ ์ง€์›, extremely low memory footprint์ž…๋‹ˆ๋‹ค. mlx ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด Apple Silicon์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ ์€ ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ์˜ serving throughput์ด ์ „๋ฌธ ์—”์ง„์— ๋น„ํ•ด ๋‚ฎ๊ณ , distributed inference ์ง€์›์ด ์ œํ•œ์ ์ด๋ฉฐ, ์ตœ์‹  ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜ ์ง€์›์ด ๋А๋ฆฌ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœํ† ํƒ€์ดํ•‘, ๋กœ์ปฌ ๊ฐœ๋ฐœ, ์—ฃ์ง€ ๋ฐฐํฌ์—์„œ๋Š” ์—ฌ์ „ํžˆ ๊ฐ•๋ ฅํ•œ ์„ ํƒ์ง€์ž…๋‹ˆ๋‹ค.

๋น„๊ต/๋ถ„์„

ํ•ญ๋ชฉ vLLM TensorRT-LLM SGLang TGI llama.cpp
GitHub Stars 85k+ 14k+ 29.9k+ 10k+ 80k+
๋นŒ๋“œ ๋ฐฉ์‹ pip ์„ค์น˜ ์—”์ง„ ๋นŒ๋“œ ํ•„์š” pip ์„ค์น˜ pip ์„ค์น˜ ์†Œ์Šค ๋นŒ๋“œ
KV ๊ด€๋ฆฌ PagedAttention Paged KV Cache RadixAttention Paged Attention GGUF ๊ธฐ๋ฐ˜
Continuous Batching ์ง€์› ์ง€์› (Inflight) ์ง€์› ์ง€์› ์ œํ•œ์ 
TP/PP/EP TP, PP, EP TP, PP, EP TP, PP, EP TP ๋ฏธ์ง€์›
์–‘์žํ™” FP8/INT8/INT4/GPTQ/AWQ/GGUF FP8/FP4/INT8/INT4 FP4/FP8/INT4/AWQ/GPTQ bitsandbytes/GPTQ GGUF ๋‹ค์–‘ํ•œ ๋น„ํŠธ
ํ•˜๋“œ์›จ์–ด NVIDIA/AMD/CPU/TPU/Gaudi NVIDIA ์ „์šฉ NVIDIA/AMD/CPU/TPU/NPU NVIDIA CPU/Metal/CUDA/Vulkan
OpenAI API ํ˜ธํ™˜ ์ง€์› ์ง€์› (Triton ํ†ตํ•ฉ) ์ง€์› ์ง€์› ์ œํ•œ์ 
๋ชจ๋ธ ํ˜ธํ™˜์„ฑ 200+ ๋ชจ๋ธ ๊ด‘๋ฒ”์œ„ ๊ด‘๋ฒ”์œ„ Hugging Face ๋ชจ๋ธ GGUF ๋ณ€ํ™˜ ํ•„์š”
๋Ÿฐํƒ€์ž„ ์–ธ์–ด Python + C++/CUDA Python + C++/CUDA Python + Rust/CUDA Rust + Python C/C++
ํ˜„์žฌ ์ƒํƒœ ํ™œ๋ฐœํ•œ ๊ฐœ๋ฐœ ํ™œ๋ฐœํ•œ ๊ฐœ๋ฐœ ํ™œ๋ฐœํ•œ ๊ฐœ๋ฐœ Maintenance ๋ชจ๋“œ ํ™œ๋ฐœํ•œ ๊ฐœ๋ฐœ
Engine Comparison

๊ทธ๋ฆผ 4. ์ฃผ์š” ์ถ”๋ก  ์—”์ง„์˜ ํŠน์ง•๋ณ„ ๋น„๊ต ๋งคํŠธ๋ฆญ์Šค

5. ์—”์ง„ ์„ ํƒ ๊ธฐ์ค€

์—”์ง„ ์„ ํƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์š”์†Œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค:

๋ชจ๋ธ ๊ทœ๋ชจ์™€ ํ•˜๋“œ์›จ์–ด: 70B ์ด์ƒ์˜ ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ์€ TP/PP๊ฐ€ ํ•„์ˆ˜์ ์ด๋ฏ€๋กœ vLLM, TensorRT-LLM, SGLang์ด ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. 7B-13B ์ค‘ํ˜• ๋ชจ๋ธ์€ ์–ด๋–ค ์—”์ง„์ด๋“  ๋‹จ์ผ GPU์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. CPU-only ํ™˜๊ฒฝ์—์„œ๋Š” llama.cpp๊ฐ€ ์œ ์ผํ•œ ์‹ค์šฉ์  ์„ ํƒ์ž…๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ์šฐ์„ ์ˆœ์œ„: ์ตœ๊ณ ์˜ ๋‹จ์ผ GPU ์„ฑ๋Šฅ์ด ํ•„์š”ํ•˜๋ฉด TensorRT-LLM์ด ๊ฐ€์žฅ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋†’์€ throughput์ด ํ•„์š”ํ•˜๋ฉด vLLM์ด๋‚˜ SGLang์ด ์ข‹์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๋‚ฎ์€ latency๊ฐ€ ์ค‘์š”ํ•˜๋ฉด SGLang์˜ zero-overhead ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์šด์˜ ํŽธ์˜์„ฑ: ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘๊ณผ ์‰ฌ์šด ๋ฐฐํฌ๊ฐ€ ์ค‘์š”ํ•˜๋ฉด vLLM์ด๋‚˜ SGLang์ด pip๋กœ ์„ค์น˜ ๊ฐ€๋Šฅํ•˜๊ณ  Hugging Face ๋ชจ๋ธ๊ณผ ์ฆ‰์‹œ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋ชจ๋ธ ์ข…๋ฅ˜๋Š” ์ ๋”๋ผ๋„ ๋นŒ๋“œ๋œ ์—”์ง„ ์ด๋ฏธ์ง€๋กœ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์„ฑ๋Šฅ์„ ์–ป๊ณ  ์‹ถ๋‹ค๋ฉด TensorRT-LLM + Triton ์กฐํ•ฉ์ด ํ”„๋กœ๋•์…˜์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ƒํƒœ๊ณ„: vLLM๊ณผ SGLang์ด ๊ฐ€์žฅ ํ™œ๋ฐœํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋น ๋ฅธ ๋ชจ๋ธ ์ง€์›๊ณผ ๋ฒ„๊ทธ ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. TensorRT-LLM์€ NVIDIA์˜ ๊ณต์‹ ์ง€์›์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

6. ์žฅ๋‹จ์ 

์žฅ์ 

ํ˜„๋Œ€ LLM ์ถ”๋ก  ์—”์ง„๋“ค์€ ๋ชจ๋‘ continuous batching, PagedAttention ๊ณ„์—ด์˜ KV ๊ด€๋ฆฌ, ๋‹ค์–‘ํ•œ ์–‘์žํ™”๋ฅผ ์ง€์›ํ•˜์—ฌ, ๋ช‡ ๋…„ ์ „์— ๋น„ํ•ด ๋™์ผํ•œ ํ•˜๋“œ์›จ์–ด์—์„œ ํ›จ์”ฌ ๋” ๋†’์€ throughput๊ณผ ๋‚ฎ์€ latency๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„๊ฐ€ ์„ฑ์ˆ™ํ•˜์—ฌ ํ”„๋กœ๋•์…˜ ์ˆ˜์ค€์˜ serving์„ ๋ผ์ด์„ ์Šค ๋น„์šฉ ์—†์ด ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ„์‚ฐ ์ถ”๋ก (TP/PP/EP)์ด ๋ชจ๋“  ์ฃผ์š” ์—”์ง„์—์„œ ์ง€์›๋˜๋ฏ€๋กœ, ์ˆ˜๋ฐฑ B ํŒŒ๋ผ๋ฏธํ„ฐ ์ด์ƒ์˜ ๋ชจ๋ธ๋„ ์—ฌ๋Ÿฌ GPU์— ๊ฑธ์ณ ํšจ์œจ์ ์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OpenAI ํ˜ธํ™˜ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—”์ง„์ด ๋งŽ์•„ ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ์ „ํ™˜ ๋น„์šฉ์ด ๋‚ฎ์Šต๋‹ˆ๋‹ค.

๋‹จ์ 

์—”์ง„ ๊ฐ„ ์„ ํƒ์ด ์ ์  ์–ด๋ ค์›Œ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. vLLM๊ณผ SGLang์˜ ๊ธฐ๋Šฅ ์ฐจ์ด๊ฐ€ ์ค„์–ด๋“ค๊ณ  ์žˆ์œผ๋ฉฐ, TensorRT-LLM์€ ์„ฑ๋Šฅ์€ ๋›ฐ์–ด๋‚˜์ง€๋งŒ ๋นŒ๋“œ ์‹œ๊ฐ„๊ณผ ์œ ์—ฐ์„ฑ์—์„œ trade-off๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. TGI๋Š” maintenance ๋ชจ๋“œ๋กœ ์ „ํ™˜๋˜์–ด ์ƒˆ ํ”„๋กœ์ ํŠธ์—์„œ์˜ ์‚ฌ์šฉ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

๊ฐ ์—”์ง„์˜ ์ตœ์ ํ™”๊ฐ€ ํŠน์ • ํ•˜๋“œ์›จ์–ด(NVIDIA)์— ์˜์กดํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์–ด, AMD๋‚˜ ๋‹ค๋ฅธ ๊ฐ€์†๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ง€์› ์ˆ˜์ค€์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ตœ์‹  ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ง€์› ์†๋„๊ฐ€ ์—”์ง„๋งˆ๋‹ค ๋‹ค๋ฅด๋ฏ€๋กœ, ํŠน์ • ๋ชจ๋ธ์„ ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์—”์ง„ ์„ ํƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ ๊ธฐ์ˆ 

์ž๋ฃŒ ๋งํฌ ์—ฐ๊ฒฐ์ 
Continuous Batching Analysis llm_0065_continuous_batching_analysis.html ํ† ํฐ ์Šคํ… ๋‹จ์œ„ ๋™์  ๋ฐฐ์น˜ ์Šค์ผ€์ค„๋ง
PagedAttention Analysis llm_0010_pagedattention_analysis.html KV ์บ์‹œ ํŽ˜์ด์ง• ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
Disaggregated LLM Serving Analysis llm_0080_disaggregated_llm_serving_analysis.html prefill/decode ๋ถ„๋ฆฌ ์„œ๋น™
Prefix Caching Analysis llm_0045_prefix_caching_analysis.html ์ ‘๋‘์‚ฌ ๊ธฐ๋ฐ˜ KV ์บ์‹œ ์žฌ์‚ฌ์šฉ
Speculative Decoding Analysis llm_0070_speculative_decoding_analysis.html draft-verify ์ถ”๋ก  ๊ฐ€์†
Quantization Analysis llm_0090_quantization.html ์ €์ •๋ฐ€ ์–‘์žํ™” ๊ธฐ๋ฒ•
MoE Analysis llm_0005_moe_analysis.html Expert Parallelism์™€ MoE ์„œ๋น™
vLLM https://github.com/vllm-project/vllm PagedAttention ๊ธฐ๋ฐ˜ ๋ฒ”์šฉ ์ถ”๋ก  ์—”์ง„
TensorRT-LLM https://nvidia.github.io/TensorRT-LLM/ NVIDIA ์ตœ์ ํ™” ์ถ”๋ก  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
SGLang https://github.com/sgl-project/sglang RadixAttention ๊ธฐ๋ฐ˜ ๊ณ ์„ฑ๋Šฅ ์„œ๋น™
TGI https://huggingface.co/docs/text-generation-inference Hugging Face ์„œ๋น™ ํˆดํ‚ท
llama.cpp https://github.com/ggerganov/llama.cpp CPU/์—ฃ์ง€ ์ถ”๋ก  ์—”์ง„

7. ํ•ต์‹ฌ ์ •๋ฆฌ

LLM ์ถ”๋ก  ์—”์ง„์€ continuous batching๊ณผ PagedAttention์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ, ๋™์ผํ•œ ํ•˜๋“œ์›จ์–ด์—์„œ ์ด์ „ ์„ธ๋Œ€ ๋Œ€๋น„ ์ˆ˜๋ฐฐ ๋†’์€ throughput์„ ๋‹ฌ์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. vLLM์€ ๋ฒ”์šฉ์„ฑ๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ทœ๋ชจ์—์„œ, TensorRT-LLM์€ ๋‹จ์ผ GPU ์„ฑ๋Šฅ์—์„œ, SGLang์€ ๋Ÿฐํƒ€์ž„ ํšจ์œจ์„ฑ์—์„œ ๊ฐ๊ฐ ๊ฐ•์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์—”์ง„ ์„ ํƒ์€ ๋ชจ๋ธ ๊ทœ๋ชจ, ํ•˜๋“œ์›จ์–ด ํ™˜๊ฒฝ, ์šด์˜ ํŽธ์˜์„ฑ, ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›์„ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์—”์ง„์ด OpenAI ํ˜ธํ™˜ API๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ์‹ค์ œ ์„œ๋น„์Šค์˜ bottleneck๊ณผ SLA์— ๋งž์ถฐ ์—”์ง„์„ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ด ๊ณผ๊ฑฐ๋ณด๋‹ค ํ›จ์”ฌ ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค.