<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>sweetdev</title>
    <link>https://sweetdev.tistory.com/</link>
    <description>iOS developer (2018.3~2021.7)
University of Southern California, Master of Computer Networks (2024~)</description>
    <language>ko</language>
    <pubDate>Sat, 20 Jun 2026 17:53:43 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>SweetDev</managingEditor>
    <image>
      <title>sweetdev</title>
      <url>https://tistory1.daumcdn.net/tistory/2950058/attach/fb1f939c1aec4be7a43a3d43c3b787f6</url>
      <link>https://sweetdev.tistory.com</link>
    </image>
    <item>
      <title>[CCNP DataCenter] vPC (Virtual Port Channel)</title>
      <link>https://sweetdev.tistory.com/1289</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;==ChatGPT가 쓴 글입니다 ==&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Virtual&amp;nbsp;Port&amp;nbsp;Channel&amp;nbsp;(vPC)는&amp;nbsp;Cisco&amp;nbsp;Nexus&amp;nbsp;스위치에서&amp;nbsp;사용되는&amp;nbsp;기술로,&amp;nbsp;두&amp;nbsp;개의&amp;nbsp;스위치가&amp;nbsp;마치&amp;nbsp;하나의&amp;nbsp;스위치처럼&amp;nbsp;동작하도록&amp;nbsp;해줍니다.&amp;nbsp;이를&amp;nbsp;통해&amp;nbsp;고가용성과&amp;nbsp;부하&amp;nbsp;분산을&amp;nbsp;제공하면서도&amp;nbsp;네트워크의&amp;nbsp;복잡성을&amp;nbsp;줄이고,&amp;nbsp;스패닝&amp;nbsp;트리&amp;nbsp;프로토콜(STP)의&amp;nbsp;필요성을&amp;nbsp;줄여줍니다.&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;vPC의&amp;nbsp;주요&amp;nbsp;개념&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**vPC&amp;nbsp;도메인(vPC&amp;nbsp;Domain)**:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;두&amp;nbsp;개의&amp;nbsp;물리적&amp;nbsp;스위치가&amp;nbsp;vPC&amp;nbsp;도메인으로&amp;nbsp;설정됩니다.&amp;nbsp;이&amp;nbsp;두&amp;nbsp;스위치는&amp;nbsp;vPC&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;vPC&amp;nbsp;도메인은&amp;nbsp;고유한&amp;nbsp;도메인&amp;nbsp;ID를&amp;nbsp;가지며,&amp;nbsp;이&amp;nbsp;도메인&amp;nbsp;ID는&amp;nbsp;vPC&amp;nbsp;도메인&amp;nbsp;내의&amp;nbsp;스위치&amp;nbsp;간에&amp;nbsp;고유해야&amp;nbsp;합니다.&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;**vPC&amp;nbsp;피어링&amp;nbsp;링크(vPC&amp;nbsp;Peer&amp;nbsp;Link)**:&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;VLAN&amp;nbsp;정보를&amp;nbsp;교환합니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;vPC&amp;nbsp;피어링&amp;nbsp;링크는&amp;nbsp;일반적으로&amp;nbsp;두&amp;nbsp;개&amp;nbsp;이상의&amp;nbsp;10GbE&amp;nbsp;또는&amp;nbsp;40GbE&amp;nbsp;링크로&amp;nbsp;구성되며,&amp;nbsp;트래픽&amp;nbsp;부하&amp;nbsp;분산을&amp;nbsp;위해&amp;nbsp;EtherChannel을&amp;nbsp;통해&amp;nbsp;결합됩니다.&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;**vPC&amp;nbsp;피어&amp;nbsp;킵얼라이브&amp;nbsp;링크(vPC&amp;nbsp;Peer&amp;nbsp;Keepalive&amp;nbsp;Link)**:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;vPC&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;감시합니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;vPC&amp;nbsp;피어&amp;nbsp;킵얼라이브&amp;nbsp;링크가&amp;nbsp;실패하면&amp;nbsp;vPC&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;4.&amp;nbsp;**vPC&amp;nbsp;멤버&amp;nbsp;포트(vPC&amp;nbsp;Member&amp;nbsp;Ports)**:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;vPC&amp;nbsp;도메인에&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;###&amp;nbsp;vPC의&amp;nbsp;장점&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**고가용성**:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;vPC를&amp;nbsp;사용하면&amp;nbsp;두&amp;nbsp;스위치&amp;nbsp;간에&amp;nbsp;이중화된&amp;nbsp;연결이&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;2.&amp;nbsp;**부하&amp;nbsp;분산**:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;vPC는&amp;nbsp;여러&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;**스패닝&amp;nbsp;트리&amp;nbsp;프로토콜(STP)&amp;nbsp;최소화**:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;vPC는&amp;nbsp;스패닝&amp;nbsp;트리&amp;nbsp;프로토콜의&amp;nbsp;필요성을&amp;nbsp;줄여줍니다.&amp;nbsp;STP에&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;4.&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;&lt;br /&gt;###&amp;nbsp;vPC의&amp;nbsp;주요&amp;nbsp;구성&amp;nbsp;요소&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;**vPC&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;VLAN&amp;nbsp;정보를&amp;nbsp;교환합니다.&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;**vPC&amp;nbsp;피어&amp;nbsp;킵얼라이브&amp;nbsp;링크**:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;vPC&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;3.&amp;nbsp;**vPC&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;&lt;br /&gt;vPC는&amp;nbsp;고가용성과&amp;nbsp;부하&amp;nbsp;분산을&amp;nbsp;제공하면서도&amp;nbsp;네트워크의&amp;nbsp;복잡성을&amp;nbsp;줄이고,&amp;nbsp;스패닝&amp;nbsp;트리&amp;nbsp;프로토콜의&amp;nbsp;필요성을&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;</description>
      <author>SweetDev</author>
      <guid isPermaLink="true">https://sweetdev.tistory.com/1289</guid>
      <comments>https://sweetdev.tistory.com/1289#entry1289comment</comments>
      <pubDate>Tue, 4 Jun 2024 04:08:54 +0900</pubDate>
    </item>
    <item>
      <title>[CCNP] FHRP (First Hop Redundancy Protocol)</title>
      <link>https://sweetdev.tistory.com/1288</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;HSRP&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GLBP&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VRRP&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HSRP&amp;nbsp;(Hot&amp;nbsp;Standby&amp;nbsp;Router&amp;nbsp;Protocol),&amp;nbsp;VRRP&amp;nbsp;(Virtual&amp;nbsp;Router&amp;nbsp;Redundancy&amp;nbsp;Protocol),&amp;nbsp;GLBP&amp;nbsp;(Gateway&amp;nbsp;Load&amp;nbsp;Balancing&amp;nbsp;Protocol)은&amp;nbsp;모두&amp;nbsp;고가용성과&amp;nbsp;부하&amp;nbsp;분산을&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;HSRP&amp;nbsp;(Hot&amp;nbsp;Standby&amp;nbsp;Router&amp;nbsp;Protocol)&lt;br /&gt;####&amp;nbsp;방식&lt;br /&gt;-&amp;nbsp;HSRP는&amp;nbsp;Cisco가&amp;nbsp;개발한&amp;nbsp;프로토콜로,&amp;nbsp;한&amp;nbsp;대의&amp;nbsp;액티브(Active)&amp;nbsp;라우터와&amp;nbsp;한&amp;nbsp;대&amp;nbsp;이상의&amp;nbsp;스탠바이(Standby)&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;IP&amp;nbsp;주소와&amp;nbsp;가상&amp;nbsp;MAC&amp;nbsp;주소를&amp;nbsp;사용하여&amp;nbsp;클라이언트와&amp;nbsp;통신합니다.&lt;br /&gt;&lt;br /&gt;####&amp;nbsp;장점&lt;br /&gt;-&amp;nbsp;**간단한&amp;nbsp;구성**:&amp;nbsp;설정이&amp;nbsp;비교적&amp;nbsp;간단하고&amp;nbsp;이해하기&amp;nbsp;쉽습니다.&lt;br /&gt;-&amp;nbsp;**신뢰성**:&amp;nbsp;Cisco&amp;nbsp;장비에서의&amp;nbsp;높은&amp;nbsp;호환성과&amp;nbsp;신뢰성을&amp;nbsp;제공합니다.&lt;br /&gt;&lt;br /&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;불가능합니다.&lt;br /&gt;-&amp;nbsp;**벤더&amp;nbsp;종속성**:&amp;nbsp;Cisco&amp;nbsp;전용&amp;nbsp;프로토콜이므로,&amp;nbsp;다른&amp;nbsp;벤더의&amp;nbsp;장비와&amp;nbsp;호환되지&amp;nbsp;않습니다.&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;VRRP&amp;nbsp;(Virtual&amp;nbsp;Router&amp;nbsp;Redundancy&amp;nbsp;Protocol)&lt;br /&gt;####&amp;nbsp;방식&lt;br /&gt;-&amp;nbsp;VRRP는&amp;nbsp;IETF&amp;nbsp;표준&amp;nbsp;프로토콜로,&amp;nbsp;HSRP와&amp;nbsp;유사하게&amp;nbsp;한&amp;nbsp;대의&amp;nbsp;마스터(Master)&amp;nbsp;라우터와&amp;nbsp;한&amp;nbsp;대&amp;nbsp;이상의&amp;nbsp;백업(Backup)&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;-&amp;nbsp;가상&amp;nbsp;IP&amp;nbsp;주소와&amp;nbsp;가상&amp;nbsp;MAC&amp;nbsp;주소를&amp;nbsp;사용하여&amp;nbsp;클라이언트와&amp;nbsp;통신합니다.&lt;br /&gt;&lt;br /&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;가능합니다.&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;단점&lt;br /&gt;-&amp;nbsp;**부하&amp;nbsp;분산&amp;nbsp;불가**:&amp;nbsp;HSRP와&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;GLBP&amp;nbsp;(Gateway&amp;nbsp;Load&amp;nbsp;Balancing&amp;nbsp;Protocol)&lt;br /&gt;####&amp;nbsp;방식&lt;br /&gt;-&amp;nbsp;GLBP는&amp;nbsp;Cisco가&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;IP&amp;nbsp;주소를&amp;nbsp;사용하고,&amp;nbsp;각&amp;nbsp;라우터가&amp;nbsp;고유의&amp;nbsp;가상&amp;nbsp;MAC&amp;nbsp;주소를&amp;nbsp;가집니다.&lt;br /&gt;&lt;br /&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;있습니다.&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;단점&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;Cisco&amp;nbsp;전용&amp;nbsp;프로토콜이므로,&amp;nbsp;다른&amp;nbsp;벤더의&amp;nbsp;장비와&amp;nbsp;호환되지&amp;nbsp;않습니다.&lt;br /&gt;&lt;br /&gt;###&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;HSRP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;VRRP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;GLBP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;(Cisco&amp;nbsp;전용)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;표준&amp;nbsp;(IETF)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;비표준&amp;nbsp;(Cisco&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;|&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;&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;|&lt;br /&gt;|&amp;nbsp;벤더&amp;nbsp;종속성&amp;nbsp;&amp;nbsp;|&amp;nbsp;Cisco&amp;nbsp;장비&amp;nbsp;필요&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;여러&amp;nbsp;벤더&amp;nbsp;지원&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;Cisco&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;선택하는&amp;nbsp;것이&amp;nbsp;중요합니다.&lt;/p&gt;</description>
      <author>SweetDev</author>
      <guid isPermaLink="true">https://sweetdev.tistory.com/1288</guid>
      <comments>https://sweetdev.tistory.com/1288#entry1288comment</comments>
      <pubDate>Tue, 4 Jun 2024 03:39:14 +0900</pubDate>
    </item>
    <item>
      <title>[CCNP] Routed Access 디자인</title>
      <link>https://sweetdev.tistory.com/1287</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;- 챗 지피티가 작성한 글입니다 -&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Routed&amp;nbsp;Access&amp;nbsp;디자인은&amp;nbsp;네트워크&amp;nbsp;디자인&amp;nbsp;아키텍처의&amp;nbsp;한&amp;nbsp;형태로,&amp;nbsp;특히&amp;nbsp;대규모&amp;nbsp;기업&amp;nbsp;네트워크에서&amp;nbsp;사용됩니다.&amp;nbsp;이&amp;nbsp;디자인은&amp;nbsp;스위치와&amp;nbsp;라우터&amp;nbsp;간의&amp;nbsp;전통적인&amp;nbsp;경계를&amp;nbsp;허물어,&amp;nbsp;액세스&amp;nbsp;레이어에서&amp;nbsp;라우팅&amp;nbsp;기능을&amp;nbsp;수행하도록&amp;nbsp;설계되었습니다.&amp;nbsp;다음은&amp;nbsp;Routed&amp;nbsp;Access&amp;nbsp;디자인의&amp;nbsp;주요&amp;nbsp;개념과&amp;nbsp;장점입니다:&lt;br /&gt;&lt;br /&gt;###&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;디스트리뷰션(분배)&amp;nbsp;레이어&amp;nbsp;또는&amp;nbsp;코어&amp;nbsp;레이어에서&amp;nbsp;수행됩니다.&amp;nbsp;하지만&amp;nbsp;Routed&amp;nbsp;Access&amp;nbsp;디자인에서는&amp;nbsp;액세스&amp;nbsp;레이어&amp;nbsp;스위치가&amp;nbsp;라우팅&amp;nbsp;기능을&amp;nbsp;수행합니다.&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;2.&amp;nbsp;**단순한&amp;nbsp;네트워크&amp;nbsp;아키텍처**:&amp;nbsp;Routed&amp;nbsp;Access는&amp;nbsp;네트워크&amp;nbsp;토폴로지를&amp;nbsp;단순화합니다.&amp;nbsp;액세스&amp;nbsp;레이어에서&amp;nbsp;라우팅이&amp;nbsp;이루어지기&amp;nbsp;때문에,&amp;nbsp;데이터&amp;nbsp;트래픽이&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;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;네트워크의&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;4.&amp;nbsp;**로드&amp;nbsp;밸런싱**:&amp;nbsp;Routed&amp;nbsp;Access&amp;nbsp;디자인은&amp;nbsp;로드&amp;nbsp;밸런싱을&amp;nbsp;보다&amp;nbsp;효율적으로&amp;nbsp;수행할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;각&amp;nbsp;액세스&amp;nbsp;스위치가&amp;nbsp;독립적으로&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;장점&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;네트워크에&amp;nbsp;통합할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&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;기능을&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;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;4.&amp;nbsp;**향상된&amp;nbsp;성능**:&amp;nbsp;로컬&amp;nbsp;트래픽이&amp;nbsp;액세스&amp;nbsp;레이어에서&amp;nbsp;직접&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;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;있습니다.&lt;br /&gt;&lt;br /&gt;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;합니다.&lt;br /&gt;&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;2&amp;nbsp;스위칭&amp;nbsp;환경과의&amp;nbsp;호환성&amp;nbsp;문제를&amp;nbsp;해결해야&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;Routed&amp;nbsp;Access&amp;nbsp;디자인은&amp;nbsp;대규모&amp;nbsp;네트워크에서&amp;nbsp;효율성과&amp;nbsp;성능을&amp;nbsp;향상시키기&amp;nbsp;위한&amp;nbsp;효과적인&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;</description>
      <author>SweetDev</author>
      <guid isPermaLink="true">https://sweetdev.tistory.com/1287</guid>
      <comments>https://sweetdev.tistory.com/1287#entry1287comment</comments>
      <pubDate>Mon, 3 Jun 2024 06:57:43 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Typer써서 쉽게 python cli 프로그램 만들기</title>
      <link>https://sweetdev.tistory.com/1286</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;This text is generated by ChatGPT.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;`typer`는&amp;nbsp;파이썬&amp;nbsp;함수를&amp;nbsp;커맨드&amp;nbsp;라인&amp;nbsp;인터페이스(CLI)&amp;nbsp;명령으로&amp;nbsp;변환하는&amp;nbsp;데&amp;nbsp;사용하는&amp;nbsp;라이브러리입니다.&amp;nbsp;이를&amp;nbsp;통해&amp;nbsp;개발자는&amp;nbsp;복잡한&amp;nbsp;파싱&amp;nbsp;로직을&amp;nbsp;작성하지&amp;nbsp;않고도&amp;nbsp;간단한&amp;nbsp;함수&amp;nbsp;정의를&amp;nbsp;통해&amp;nbsp;강력하고&amp;nbsp;사용하기&amp;nbsp;쉬운&amp;nbsp;CLI&amp;nbsp;도구를&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;Typer의&amp;nbsp;기본&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;`typer`를&amp;nbsp;사용하여&amp;nbsp;그&amp;nbsp;함수를&amp;nbsp;CLI&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;실행할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;예시&amp;nbsp;코드&lt;br /&gt;&lt;br /&gt;다음은&amp;nbsp;`typer`를&amp;nbsp;사용하여&amp;nbsp;간단한&amp;nbsp;커맨드&amp;nbsp;라인&amp;nbsp;툴을&amp;nbsp;만드는&amp;nbsp;예시입니다.&lt;br /&gt;&lt;br /&gt;```python&lt;br /&gt;#&amp;nbsp;app.py&amp;nbsp;파일&lt;br /&gt;import&amp;nbsp;typer&lt;br /&gt;&lt;br /&gt;app&amp;nbsp;=&amp;nbsp;typer.Typer()&lt;br /&gt;&lt;br /&gt;@app.command()&lt;br /&gt;def&amp;nbsp;hello(name:&amp;nbsp;str):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;&quot;&quot;Simple&amp;nbsp;program&amp;nbsp;that&amp;nbsp;greets&amp;nbsp;NAME&amp;nbsp;for&amp;nbsp;a&amp;nbsp;total&amp;nbsp;of&amp;nbsp;COUNT&amp;nbsp;times.&quot;&quot;&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typer.echo(f&quot;Hello&amp;nbsp;{name}&quot;)&lt;br /&gt;&lt;br /&gt;if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&quot;__main__&quot;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app()&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;```bash&lt;br /&gt;python&amp;nbsp;app.py&amp;nbsp;hello&amp;nbsp;--name&amp;nbsp;John&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;실행&amp;nbsp;결과&lt;br /&gt;&lt;br /&gt;```&lt;br /&gt;Hello&amp;nbsp;John&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;예시에서는&amp;nbsp;`hello`라는&amp;nbsp;함수를&amp;nbsp;정의하고&amp;nbsp;`typer`를&amp;nbsp;사용해&amp;nbsp;`app`&amp;nbsp;객체에&amp;nbsp;커맨드로&amp;nbsp;추가했습니다.&amp;nbsp;이&amp;nbsp;커맨드는&amp;nbsp;사용자가&amp;nbsp;커맨드&amp;nbsp;라인에서&amp;nbsp;이&amp;nbsp;프로그램을&amp;nbsp;실행할&amp;nbsp;때&amp;nbsp;`--name`&amp;nbsp;옵션과&amp;nbsp;함께&amp;nbsp;이름을&amp;nbsp;제공하도록&amp;nbsp;요구합니다.&amp;nbsp;`typer.echo`는&amp;nbsp;표준&amp;nbsp;출력으로&amp;nbsp;메시지를&amp;nbsp;출력합니다.&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;`plot_query_results`&amp;nbsp;함수를&amp;nbsp;커맨드&amp;nbsp;라인&amp;nbsp;툴로&amp;nbsp;변환하기&lt;br /&gt;&lt;br /&gt;위에서&amp;nbsp;설명한&amp;nbsp;`plot_query_results`&amp;nbsp;함수를&amp;nbsp;`typer`를&amp;nbsp;사용해&amp;nbsp;CLI&amp;nbsp;도구로&amp;nbsp;만들고&amp;nbsp;싶다면,&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있습니다:&lt;br /&gt;&lt;br /&gt;```python&lt;br /&gt;import&amp;nbsp;typer&lt;br /&gt;import&amp;nbsp;json&lt;br /&gt;from&amp;nbsp;pathlib&amp;nbsp;import&amp;nbsp;Path&lt;br /&gt;&lt;br /&gt;app&amp;nbsp;=&amp;nbsp;typer.Typer()&lt;br /&gt;&lt;br /&gt;@app.command()&lt;br /&gt;def&amp;nbsp;plot_query_results(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_path:&amp;nbsp;Path&amp;nbsp;=&amp;nbsp;typer.Argument(&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;exists=True,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_okay=True,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dir_okay=False,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;readable=True,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;help=&quot;The&amp;nbsp;path&amp;nbsp;to&amp;nbsp;the&amp;nbsp;JSON&amp;nbsp;file&amp;nbsp;containing&amp;nbsp;the&amp;nbsp;query&amp;nbsp;results.&quot;&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;&quot;&quot;&quot;Reads&amp;nbsp;a&amp;nbsp;JSON&amp;nbsp;file&amp;nbsp;and&amp;nbsp;plots&amp;nbsp;query&amp;nbsp;results&amp;nbsp;based&amp;nbsp;on&amp;nbsp;the&amp;nbsp;content.&quot;&quot;&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;with&amp;nbsp;open(file_path,&amp;nbsp;&quot;r&quot;)&amp;nbsp;as&amp;nbsp;file:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;=&amp;nbsp;json.load(file)&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;print(&quot;Data&amp;nbsp;processed&amp;nbsp;and&amp;nbsp;plot&amp;nbsp;created.&quot;)&lt;br /&gt;&lt;br /&gt;if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&quot;__main__&quot;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app()&lt;br /&gt;```&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;스크립트를&amp;nbsp;사용하면&amp;nbsp;사용자는&amp;nbsp;커맨드&amp;nbsp;라인에서&amp;nbsp;JSON&amp;nbsp;파일&amp;nbsp;경로를&amp;nbsp;명령어와&amp;nbsp;함께&amp;nbsp;제공하여&amp;nbsp;함수를&amp;nbsp;실행할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이&amp;nbsp;방식으로&amp;nbsp;`typer`는&amp;nbsp;파이썬&amp;nbsp;함수를&amp;nbsp;간편하게&amp;nbsp;커맨드&amp;nbsp;라인&amp;nbsp;도구로&amp;nbsp;전환할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;해줍니다.&lt;/p&gt;</description>
      <author>SweetDev</author>
      <guid isPermaLink="true">https://sweetdev.tistory.com/1286</guid>
      <comments>https://sweetdev.tistory.com/1286#entry1286comment</comments>
      <pubDate>Tue, 30 Apr 2024 03:59:18 +0900</pubDate>
    </item>
    <item>
      <title>[Python] -m 옵션: 모듈을 스크립트로 사용할 때.</title>
      <link>https://sweetdev.tistory.com/1285</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Python에서&amp;nbsp;`-m`&amp;nbsp;옵션은&amp;nbsp;모듈을&amp;nbsp;스크립트로&amp;nbsp;실행할&amp;nbsp;때&amp;nbsp;사용됩니다.&amp;nbsp;이&amp;nbsp;옵션을&amp;nbsp;사용하면&amp;nbsp;Python은&amp;nbsp;지정된&amp;nbsp;모듈의&amp;nbsp;이름을&amp;nbsp;검색하여&amp;nbsp;해당&amp;nbsp;모듈을&amp;nbsp;스크립트처럼&amp;nbsp;실행합니다.&amp;nbsp;모듈은&amp;nbsp;Python&amp;nbsp;파일이나&amp;nbsp;패키지일&amp;nbsp;수&amp;nbsp;있으며,&amp;nbsp;`-m`&amp;nbsp;옵션&amp;nbsp;뒤에&amp;nbsp;모듈의&amp;nbsp;이름을&amp;nbsp;명시합니다.&lt;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어,&amp;nbsp;`python&amp;nbsp;-m&amp;nbsp;module_name`&amp;nbsp;명령은&amp;nbsp;`module_name`&amp;nbsp;모듈을&amp;nbsp;찾아&amp;nbsp;실행합니다.&amp;nbsp;모듈이&amp;nbsp;패키지의&amp;nbsp;일부인&amp;nbsp;경우,&amp;nbsp;점(.)을&amp;nbsp;사용하여&amp;nbsp;해당&amp;nbsp;패키지&amp;nbsp;내에서&amp;nbsp;모듈의&amp;nbsp;경로를&amp;nbsp;명시할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;`python&amp;nbsp;-m&amp;nbsp;package.module_name`은&amp;nbsp;`package`&amp;nbsp;패키지&amp;nbsp;내의&amp;nbsp;`module_name`&amp;nbsp;모듈을&amp;nbsp;실행합니다.&lt;br /&gt;&lt;br /&gt;`-m`&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;Python의&amp;nbsp;표준&amp;nbsp;라이브러리에&amp;nbsp;포함된&amp;nbsp;모듈을&amp;nbsp;직접&amp;nbsp;실행할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;`python&amp;nbsp;-m&amp;nbsp;http.server`&amp;nbsp;명령은&amp;nbsp;현재&amp;nbsp;디렉토리를&amp;nbsp;서빙하는&amp;nbsp;간단한&amp;nbsp;HTTP&amp;nbsp;서버를&amp;nbsp;시작합니다.&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;**가상&amp;nbsp;환경&amp;nbsp;관리**:&amp;nbsp;`python&amp;nbsp;-m&amp;nbsp;venv&amp;nbsp;myenv`&amp;nbsp;명령은&amp;nbsp;`myenv`라는&amp;nbsp;새로운&amp;nbsp;가상&amp;nbsp;환경을&amp;nbsp;생성합니다.&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;**패키지&amp;nbsp;관리**:&amp;nbsp;`python&amp;nbsp;-m&amp;nbsp;pip&amp;nbsp;install&amp;nbsp;some_package`&amp;nbsp;명령은&amp;nbsp;`pip`&amp;nbsp;모듈을&amp;nbsp;사용하여&amp;nbsp;`some_package`&amp;nbsp;패키지를&amp;nbsp;설치합니다.&lt;br /&gt;&lt;br /&gt;`-m`&amp;nbsp;옵션을&amp;nbsp;사용하는&amp;nbsp;이유&amp;nbsp;중&amp;nbsp;하나는&amp;nbsp;스크립트의&amp;nbsp;실행&amp;nbsp;환경을&amp;nbsp;보다&amp;nbsp;명확하게&amp;nbsp;제어할&amp;nbsp;수&amp;nbsp;있다는&amp;nbsp;점입니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;특정&amp;nbsp;Python&amp;nbsp;인터프리터&amp;nbsp;버전을&amp;nbsp;명시적으로&amp;nbsp;사용하거나,&amp;nbsp;스크립트를&amp;nbsp;실행하기&amp;nbsp;전에&amp;nbsp;가상&amp;nbsp;환경을&amp;nbsp;활성화할&amp;nbsp;필요&amp;nbsp;없이&amp;nbsp;모듈을&amp;nbsp;실행할&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;</description>
      <author>SweetDev</author>
      <guid isPermaLink="true">https://sweetdev.tistory.com/1285</guid>
      <comments>https://sweetdev.tistory.com/1285#entry1285comment</comments>
      <pubDate>Sat, 9 Mar 2024 13:27:07 +0900</pubDate>
    </item>
    <item>
      <title>[고급 운영체제][논문 리뷰] RAID: High-Performance, Reliable Secondary Storage (PETER M. CHEN et al)</title>
      <link>https://sweetdev.tistory.com/1281</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;챕터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;###&amp;nbsp;1.&amp;nbsp;INTRODUCTION&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;RAID&amp;nbsp;기술의&amp;nbsp;개요,&amp;nbsp;연구의&amp;nbsp;배경,&amp;nbsp;목적을&amp;nbsp;소개합니다.&amp;nbsp;데이터&amp;nbsp;저장의&amp;nbsp;중요성과&amp;nbsp;RAID가&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;BACKGROUND&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;**2.1&amp;nbsp;Disk&amp;nbsp;Terminology**:&amp;nbsp;하드&amp;nbsp;디스크&amp;nbsp;및&amp;nbsp;저장&amp;nbsp;장치&amp;nbsp;관련&amp;nbsp;기본&amp;nbsp;용어&amp;nbsp;정리.&lt;br /&gt;-&amp;nbsp;**2.2&amp;nbsp;Data&amp;nbsp;Paths**:&amp;nbsp;데이터가&amp;nbsp;시스템&amp;nbsp;내에서&amp;nbsp;어떻게&amp;nbsp;이동하는지에&amp;nbsp;대한&amp;nbsp;설명.&lt;br /&gt;-&amp;nbsp;**2.3&amp;nbsp;Technology&amp;nbsp;Trends**:&amp;nbsp;저장&amp;nbsp;장치&amp;nbsp;기술의&amp;nbsp;발전&amp;nbsp;추세&amp;nbsp;및&amp;nbsp;미래&amp;nbsp;전망.&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;3.&amp;nbsp;DISK&amp;nbsp;ARRAY&amp;nbsp;BASICS&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;**3.1&amp;nbsp;Data&amp;nbsp;Striping&amp;nbsp;and&amp;nbsp;Redundancy**:&amp;nbsp;데이터&amp;nbsp;스트라이핑과&amp;nbsp;중복성이&amp;nbsp;데이터&amp;nbsp;보호&amp;nbsp;및&amp;nbsp;성능에&amp;nbsp;미치는&amp;nbsp;영향.&lt;br /&gt;-&amp;nbsp;**3.2&amp;nbsp;Basic&amp;nbsp;RAID&amp;nbsp;Organizations**:&amp;nbsp;기본&amp;nbsp;RAID&amp;nbsp;구성(RAID&amp;nbsp;0~RAID&amp;nbsp;6)과&amp;nbsp;각각의&amp;nbsp;특성.&lt;br /&gt;-&amp;nbsp;**3.3&amp;nbsp;Performance&amp;nbsp;and&amp;nbsp;Cost&amp;nbsp;Comparisons**:&amp;nbsp;다양한&amp;nbsp;RAID&amp;nbsp;레벨의&amp;nbsp;성능&amp;nbsp;및&amp;nbsp;비용&amp;nbsp;비교.&lt;br /&gt;-&amp;nbsp;**3.4&amp;nbsp;Reliability**:&amp;nbsp;RAID&amp;nbsp;시스템의&amp;nbsp;신뢰성&amp;nbsp;평가&amp;nbsp;방법.&lt;br /&gt;-&amp;nbsp;**3.5&amp;nbsp;Implementation&amp;nbsp;Considerations**:&amp;nbsp;RAID&amp;nbsp;시스템&amp;nbsp;구현&amp;nbsp;시&amp;nbsp;고려해야&amp;nbsp;할&amp;nbsp;주요&amp;nbsp;요소.&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;4.&amp;nbsp;ADVANCED&amp;nbsp;TOPICS&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;**4.1&amp;nbsp;Improving&amp;nbsp;Small&amp;nbsp;Write&amp;nbsp;Performance&amp;nbsp;for&amp;nbsp;RAID&amp;nbsp;Level&amp;nbsp;5**:&amp;nbsp;RAID&amp;nbsp;5의&amp;nbsp;작은&amp;nbsp;쓰기&amp;nbsp;작업&amp;nbsp;성능&amp;nbsp;개선&amp;nbsp;방안.&lt;br /&gt;-&amp;nbsp;**4.2&amp;nbsp;Declustered&amp;nbsp;Parity**:&amp;nbsp;분산&amp;nbsp;패리티를&amp;nbsp;이용한&amp;nbsp;신뢰성&amp;nbsp;및&amp;nbsp;성능&amp;nbsp;향상&amp;nbsp;방법.&lt;br /&gt;-&amp;nbsp;**4.3&amp;nbsp;Exploiting&amp;nbsp;Online&amp;nbsp;Spare&amp;nbsp;Disks**:&amp;nbsp;온라인&amp;nbsp;여분&amp;nbsp;디스크를&amp;nbsp;활용한&amp;nbsp;데이터&amp;nbsp;복구&amp;nbsp;전략.&lt;br /&gt;-&amp;nbsp;**4.4&amp;nbsp;Data&amp;nbsp;Striping&amp;nbsp;in&amp;nbsp;Disk&amp;nbsp;Arrays**:&amp;nbsp;디스크&amp;nbsp;어레이에서의&amp;nbsp;데이터&amp;nbsp;스트라이핑&amp;nbsp;전략.&lt;br /&gt;-&amp;nbsp;**4.5&amp;nbsp;Performance&amp;nbsp;and&amp;nbsp;Reliability&amp;nbsp;Modeling**:&amp;nbsp;RAID&amp;nbsp;시스템의&amp;nbsp;성능&amp;nbsp;및&amp;nbsp;신뢰성&amp;nbsp;모델링&amp;nbsp;방법.&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;5.&amp;nbsp;CASE&amp;nbsp;STUDIES&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;**5.1~5.6**:&amp;nbsp;다양한&amp;nbsp;실제&amp;nbsp;RAID&amp;nbsp;시스템&amp;nbsp;사례&amp;nbsp;연구(Thinking&amp;nbsp;Machines&amp;nbsp;Corporation&amp;nbsp;ScaleArray,&amp;nbsp;StorageTek&amp;nbsp;Iceberg&amp;nbsp;9200&amp;nbsp;Disk&amp;nbsp;Array&amp;nbsp;Subsystem&amp;nbsp;등)를&amp;nbsp;통해&amp;nbsp;RAID&amp;nbsp;기술의&amp;nbsp;실제&amp;nbsp;적용&amp;nbsp;사례와&amp;nbsp;성과&amp;nbsp;분석.&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;6.&amp;nbsp;OPPORTUNITIES&amp;nbsp;FOR&amp;nbsp;FUTURE&amp;nbsp;RESEARCH&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;**6.1&amp;nbsp;Experience&amp;nbsp;with&amp;nbsp;Disk&amp;nbsp;Arrays**:&amp;nbsp;디스크&amp;nbsp;어레이&amp;nbsp;사용&amp;nbsp;경험에서&amp;nbsp;얻은&amp;nbsp;교훈.&lt;br /&gt;-&amp;nbsp;**6.2&amp;nbsp;Interaction&amp;nbsp;among&amp;nbsp;New&amp;nbsp;Organizations**:&amp;nbsp;새로운&amp;nbsp;RAID&amp;nbsp;구성&amp;nbsp;간의&amp;nbsp;상호&amp;nbsp;작용.&lt;br /&gt;-&amp;nbsp;**6.3&amp;nbsp;Scalability,&amp;nbsp;Massively&amp;nbsp;Parallel&amp;nbsp;Computers,&amp;nbsp;and&amp;nbsp;Small&amp;nbsp;Disks**:&amp;nbsp;RAID&amp;nbsp;기술의&amp;nbsp;확장성,&amp;nbsp;대규모&amp;nbsp;병렬&amp;nbsp;컴퓨터와&amp;nbsp;소형&amp;nbsp;디스크의&amp;nbsp;활용.&lt;br /&gt;-&amp;nbsp;**6.4&amp;nbsp;Latency**:&amp;nbsp;데이터&amp;nbsp;액세스&amp;nbsp;지연&amp;nbsp;시간&amp;nbsp;최소화&amp;nbsp;방안.&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;7.&amp;nbsp;CONCLUSIONS&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;논문의&amp;nbsp;주요&amp;nbsp;발견,&amp;nbsp;RAID&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;Q&amp;amp;A&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;RAID 5가 단일 패리티 비트 대신 스트라이프 단위의 패리티를 사용하는 이유를 설명하시오.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;답안&lt;/li&gt;
&lt;li&gt;RAID 5는 단일 패리티 비트 대신 스트라이프 단위의 패리티를 사용하여 데이터의 가용성과 내결함성을 향상시킵니다. 스트라이프 단위의 패리티를 사용하면, 하나의 디스크가 실패했을 때 나머지 디스크에 분산 저장된 패리티 정보를 통해 손실된 데이터를 복구할 수 있습니다. 이 방식은 하나의 디스크에 패리티를 집중하는 것이 아니라, 모든 디스크에 패리티 정보를 분산시키므로, 디스크 장애 시 복구 과정에서 모든 디스크의 I/O를 활용할 수 있어 복구 속도가 빨라집니다. 또한, 스트라이프 단위의 패리티는 큰 쓰기 작업에서의 성능을 향상시키며, 병렬 처리를 통해 더 나은 성능을 제공합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;RAID 0, RAID 1, RAID 5 각각의 설계 선택을 비교하고, 각각이 제공하는 데이터 보호 및 성능 개선 측면에서 어떻게 다른지 설명하시오.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;답안
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;RAID 0&lt;/b&gt;은 성능 향상에 초점을 맞춘 설계로, 데이터 스트라이핑을 통해 높은 처리량과 빠른 I/O 성능을 제공합니다. 그러나 RAID 0은 데이터 보호 기능이 없어, 하나의 디스크가 실패하면 모든 데이터가 손실될 위험이 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RAID 1&lt;/b&gt;은 미러링을 통해 높은 데이터 보호를 제공합니다. 모든 데이터가 두 개의 디스크에 복사되어 저장되므로, 하나의 디스크가 실패해도 데이터 손실 없이 시스템이 계속 작동할 수 있습니다. 이는 읽기 성능은 향상시키지만, 쓰기 성능은 RAID 0보다 낮으며, 데이터 저장 효율성도 절반으로 감소합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RAID 5&lt;/b&gt;는 성능과 데이터 보호 사이의 균형을 제공하는 설계입니다. 스트라이프 단위의 패리티를 사용하여 하나의 디스크가 실패해도 데이터를 복구할 수 있으며, 동시에 스트라이핑을 통해 높은 읽기/쓰기 성능을 유지합니다. RAID 5는 RAID 1에 비해 더 나은 저장 효율성을 제공하지만, 패리티 계산으로 인해 작은 쓰기 작업에서는 성능 저하가 발생할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;대규모 데이터 센터 환경에서 데이터의 신뢰성을 최대화하기 위해 RAID 6 설계를 어떻게 수정할 수 있을까요? 기존 RAID 6 설계와 비교하여 귀하의 수정안이 가지는 장단점을 설명하시오.&lt;/li&gt;
&lt;li&gt;RAID 5 utilizes stripe-level parity instead of a single parity bit to enhance data availability and fault tolerance. Using stripe-level parity allows for the reconstruction of lost data from the parity information distributed across the remaining disks when one disk fails. This method does not concentrate parity on one disk but distributes parity information across all disks, allowing for the use of all disks&amp;rsquo; I/O during recovery, which speeds up the process. Additionally, stripe-level parity improves performance during large write operations and offers better performance through parallel processing.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;RAID 0, RAID 1, and RAID 5 each have distinct design choices that differ in the level of data protection and performance enhancement they offer. &amp;bull; RAID 0 is designed for performance improvement, offering high throughput and fast I/O via data striping. However, it lacks data protection; if one disk fails, all data is at risk of being lost. &amp;bull; RAID 1 provides high data protection through mirroring. All data is duplicated and stored on two disks, allowing the system to continue functioning without data loss if one disk fails. This improves read performance but has lower write performance compared to RAID 0 and reduces data storage efficiency by half. &amp;bull; RAID 5 offers a balance between performance and data protection. It uses stripe-level parity for data recovery in case of a single disk failure while maintaining high read/write performance through striping. RAID 5 offers better storage efficiency than RAID 1 but can suffer performance degradation in small write operations due to parity calculations.&lt;/li&gt;
&lt;li&gt;In a large data center environment, RAID 6 design could be modified to maximize data reliability by incorporating additional redundancy measures, such as using more parity blocks or implementing advanced error correction algorithms. Compared to the original RAID 6 design, these modifications could offer improved fault tolerance but might come with increased costs, reduced storage efficiency, and potentially slower write performance due to the overhead of additional parity calculations.&lt;/li&gt;
&lt;li&gt;Bit-level striping and block-level striping are two different methods of storing data on a disk array. Each has advantages and disadvantages depending on the specific scenario and requirements. &amp;bull; Bit-level striping involves spreading individual bits of data across multiple disks. This can offer very high I/O performance for certain types of workloads but may be more complex to implement and manage. &amp;bull; Block-level striping spreads larger blocks of data across multiple disks and is more common. It provides a good balance between performance and manageability, making it suitable for a wide range of applications. However, it may not offer the same level of performance for workloads that benefit from bit-level striping&amp;rsquo;s finer granularity.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Bit-level striping and block-level striping are two different methods of storing data across disk arrays. Each has its own advantages and disadvantages depending on the specific scenario and requirements. Bit-level Striping&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Bit-level striping involves distributing data across multiple disks at the bit level. RAID 3 is a typical example that uses this method. Advantages: &amp;bull; Concurrent Read/Write: All disks can perform operations simultaneously, allowing for concurrent read/write operations. &amp;bull; Reduced Overhead: Since data blocks are very small, there can be less overhead for small-sized files. Disadvantages: &amp;bull; Complexity: Bit-level striping is complex to implement, requiring all disks to operate in sync, increasing the complexity of the controller. &amp;bull; Lack of Flexibility: It can be inefficient for large files and is not flexible in handling requests of varying sizes efficiently. &amp;bull; Performance Impact: If one disk encounters issues, it can affect the performance of the entire system since all disks need to access the same data bits. Block-level Striping&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Block-level striping distributes data across multiple disks in block units. Most RAID levels, such as RAID 0, RAID 5, and RAID 6, use this method. Advantages: &amp;bull; Performance Improvement: Data is distributed across multiple disks, allowing for parallel reading and writing, which improves performance. &amp;bull; Flexibility: Effectively handles requests for data of varying sizes and is particularly efficient for large files. &amp;bull; Simplicity: Compared to bit-level striping, it is relatively simple to implement and has lower controller complexity. Disadvantages: &amp;bull; Small Write Issue: Small write requests may require additional reads and writes to update the related parity information, leading to overhead (commonly in RAID 5 and RAID 6). &amp;bull; Need for Stripe Size Adjustment: Optimal performance requires adjusting the size of the stripes to fit the system&amp;rsquo;s needs. Conclusion&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Bit-level striping can provide highly specialized performance for certain tasks, but block-level striping tends to be more suitable for general use cases and contemporary data storage demands. 3. How does the RAID approach to reliability compare with the method used in the System R Database Manager for ensuring data integrity? &amp;bull; Answer: The RAID approach achieves reliability through physical redundancy, while the System R Database Manager primarily uses software-based recovery mechanisms and transaction logging to ensure data integrity. RAID is designed to address hardware failures, and System R is designed to respond to errors within the database and software issues. Both methods enhance reliability but differ in the types of issues they address and their approaches.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;bit-level striping과 block-level striping의 장단점을 설명하시오&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;답안비트-레벨 스트라이핑 (Bit-level Striping)&lt;b&gt;장점:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;동시 읽기/쓰기&lt;/b&gt;: 모든 디스크가 동시에 작업을 수행할 수 있기 때문에, 데이터의 동시 읽기/쓰기 작업이 가능합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오버헤드 감소&lt;/b&gt;: 데이터 블록이 매우 작기 때문에, 작은 크기의 파일에 대한 오버헤드가 적을 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;단점:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;복잡성&lt;/b&gt;: 비트-레벨 스트라이핑은 구현이 복잡하며, 모든 디스크가 동시에 동기화되어 작업을 수행해야 하기 때문에 컨트롤러의 복잡성이 증가합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유연성 부족&lt;/b&gt;: 크기가 큰 파일에 대해서는 비효율적일 수 있으며, 다양한 크기의 요청을 효율적으로 처리하는데 유연하지 않습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;성능 저하&lt;/b&gt;: 모든 디스크가 동일한 데이터 비트에 접근해야 하기 때문에, 한 디스크에 문제가 발생하면 전체 시스템의 성능에 영향을 줄 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
블록-레벨 스트라이핑 (Block-level Striping)&lt;b&gt;장점:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;성능 향상&lt;/b&gt;: 데이터가 여러 디스크에 걸쳐 분산되므로, 병렬로 데이터를 읽고 쓸 수 있어 성능이 향상됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유연성&lt;/b&gt;: 다양한 크기의 데이터 요청을 효과적으로 처리할 수 있으며, 특히 큰 파일을 다룰 때 효율적입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단순성&lt;/b&gt;: 비트-레벨 스트라이핑에 비해 구현이 상대적으로 간단하고, 컨트롤러의 복잡성이 낮습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;단점:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;작은 쓰기 문제&lt;/b&gt;: 작은 쓰기 요청이 있을 때, 관련된 패리티 정보를 업데이트하기 위해 추가적인 읽기와 쓰기가 필요할 수 있어 오버헤드가 발생합니다(RAID 5와 RAID 6에서 주로 발생).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;스트라이프 크기 조절 필요&lt;/b&gt;: 스트라이프의 크기를 시스템의 요구에 맞게 조절해야 최적의 성능을 낼 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
결론&lt;/li&gt;
&lt;li&gt;비트-레벨 스트라이핑은 특정한 작업에 대해 매우 특수화된 성능을 제공할 수 있지만, 일반적인 사용 사례와 현대적인 데이터 저장 요구에는 블록-레&lt;/li&gt;
&lt;li&gt;블록-레벨 스트라이핑은 데이터를 블록 단위로 여러 디스크에 분산하여 저장합니다. RAID 0, RAID 5, RAID 6 등 대부분의 RAID 레벨이 이 방식을 사용합니다.&lt;/li&gt;
&lt;li&gt;비트-레벨 스트라이핑은 데이터를 비트 단위로 여러 디스크에 분산하여 저장합니다. RAID 3이 이 방식을 사용하는 대표적인 예입니다.&lt;/li&gt;
&lt;li&gt;비트-레벨 스트라이핑과 블록-레벨 스트라이핑은 데이터를 디스크 어레이에 저장하는 두 가지 다른 방법입니다. 이들 각각은 특정 시나리오와 요구 사항에 따라 장단점을 가지고 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;캐싱을 사용하면 RAID 5의 작은 쓰기 작업: RAID 5에서는 작은 쓰기 작업을 처리하기 위해 일반적으로 4번의 I/O가 필요합니다(2번의 읽기, 1번의 쓰기, 1번의 패리티 쓰기). 그러나 캐싱을 사용하면 이러한 작은 쓰기 작업에 필요한 I/O의 수를 3번으로 줄일 수 있습니다. 이는 캐시가 먼저 업데이트되고, 실제 디스크에는 나중에 쓰기가 이루어지기 때문입니다. 왜??&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;답안&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;memory-style ECC이 parity방식보다 space overhead가 큰 이유?&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;답안&lt;b&gt;패리티&lt;/b&gt;는 보통 각 바이트(또는 더 큰 단위의 데이터)에 하나의 비트를 추가하는 방식입니다. 이 비트는 전체 1-비트의 수가 짝수(짝수 패리티) 또는 홀수(홀수 패리티)가 되도록 1 또는 0으로 설정됩니다. 패리티는 단일 비트 오류를 감지할 수 있지만, 수정할 수는 없습니다. 패리티의 오버헤드는 상대적으로 낮으며, 8비트 데이터 단위의 경우 대략 12.5%의 오버헤드가 발생합니다.ECC 메모리의 공간 오버헤드가 패리티보다 큰 주된 이유는 다음과 같습니다:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;오류 수정 능력&lt;/b&gt;: ECC는 오류를 감지하는 것뿐만 아니라 수정할 수도 있습니다. 오류를 수정하는 능력은 단순 감지를 위해 필요한 것보다 추가적인 비트가 필요합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;더 큰 범위의 커버리지&lt;/b&gt;: ECC는 단일 데이터 워드 내에서 단일 비트 오류를 감지하고 수정할 뿐만 아니라, 두 비트 오류를 감지(하지만 수정하지는 않음)할 수 있습니다. 이 더 큰 수준의 커버리지는 더 많은 중복성을 요구합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;알고리즘의 복잡성&lt;/b&gt;: ECC에 사용되는 알고리즘은 더 복잡하고 능력이 있어, ECC 계산을 위한 추가 비트를 위한 저장 공간이 필요합니다.&lt;/li&gt;
&lt;/ol&gt;
요약하자면, ECC가 오류를 단순히 감지하는 것 이상으로 수정할 수 있는 능력 때문에 더 많은 중복 비트가 필요하고, 이로 인해 패리티에 비해 더 큰 공간 오버헤드를 가지게 됩니다.&lt;/li&gt;
&lt;li&gt;반면에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;ECC 메모리&lt;/b&gt;는 더 복잡한 알고리즘을 사용하여 오류를 감지하고 수정합니다. ECC는 단일 비트 오류를 수정할 수 있으며, 멀티 비트 오류를 감지할 수 있습니다. 이는 ECC가 패리티보다 더 견고하다는 것을 의미합니다. 이를 달성하기 위해, ECC 메모리는 추가적인 중복 데이터를 저장합니다. 예를 들어, 일반적인 ECC 방식인 해밍 코드(Hamming Code)는 데이터 8비트마다 1비트를 초과하는 중복성을 요구합니다. 구체적인 ECC 구현에 따라 오버헤드가 다를 수 있지만, 일반적으로 패리티에 사용되는 단일 비트보다 많으므로 공간 오버헤드가 더 큽니다.&lt;/li&gt;
&lt;li&gt;메모리 스타일의 ECC(Error-Correcting Code, 오류 정정 코드) 메모리와 패리티 기반 시스템은 모두 오류를 감지하고 수정하는 유사한 목적을 가지고 있지만, 이를 수행하는 방식과 복잡성 및 오버헤드 측면에서 차이가 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;small read, small write, large read, large write을 비교하시요&lt;/li&gt;
&lt;li&gt;RAID에서 다양한 레벨의 구현이 제공하는 고성능 및 신뢰성 향상 방법을 설명하세요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Modify Design Choices&lt;/b&gt;: 초고속 SSD 기반 스토리지 시스템에서 RAID 구성을 어떻게 수정할 수 있을까요?&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;How does the RAID approach to reliability compare with the method used in the System R Database Manager for ensuring data integrity?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;답변&lt;/b&gt;: RAID 접근법은 물리적인 중복성을 통해 신뢰성을 달성하는 반면, System R Database Manager는 주로 소프트웨어 기반의 복구 메커니즘과 트랜잭션 로깅을 사용하여 데이터 무결성을 보장합니다. RAID는 하드웨어 실패에 대비하여 설계되었고, System R은 데이터베이스 내부의 오류와 소프트웨어 문제에 대응하기 위해 설계되었습니다. 두 방법 모두 신뢰성을 향상시키지만, 다루는 문제의 유형과 접근 방식에서 차이를 보입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;초고속 SSD 기반 스토리지 시스템에서 RAID 구성을 수정할 때 고려해야 할 중요한 점들은 다음과 같습니다:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;1.	RAID 수준의 선택: 전통적인 HDD에 기반한 시스템과 달리, SSD는 더 높은 I/O 성능과 더 낮은 지연 시간을 제공합니다. 이러한 특성 때문에 RAID 0의 성능 이점이 상대적으로 감소할 수 있습니다. 반면, RAID 1, RAID 5, RAID 6와 같은 데이터 보호를 제공하는 RAID 수준이 더 중요해질 수 있습니다.
2.	내구성 및 오버프로비저닝: SSD는 쓰기 사이클에 의해 내구성이 제한되므로, RAID 구성에서 불필요한 쓰기 작업을 줄이기 위한 오버프로비저닝을 고려할 필요가 있습니다. 이는 SSD의 수명을 연장하고 성능을 일정하게 유지하는 데 도움이 됩니다.
3.	TRIM 명령의 활용: TRIM 명령을 지원하는 RAID 컨트롤러를 사용하면 SSD의 불필요한 쓰기 작업을 줄이고, SSD의 가비지 컬렉션(Garbage Collection) 효율을 높일 수 있습니다.
4.	연속성 및 병렬 처리: SSD는 데이터의 물리적인 위치에 관계없이 거의 일정한 접근 시간을 제공합니다. 이는 RAID 구성에서의 연속성 요구사항을 줄여주며, 병렬 처리를 통해 성능을 극대화할 수 있게 합니다.
5.	소프트웨어 정의 스토리지(SDS)와의 통합: 소프트웨어 정의 스토리지를 사용하여 RAID 구성을 관리하고 최적화할 수 있습니다. SDS는 스토리지 관리를 더 유연하고 지능적으로 만들어 주며, SSD의 성능을 최대한 활용할 수 있도록 도와줍니다.
6.	RAID 복구 시간 고려: SSD는 HDD에 비해 데이터를 더 빠르게 읽고 쓸 수 있으므로, RAID 복구 시간이 크게 단축됩니다. 이는 RAID 5 또는 RAID 6과 같이 복구 시간이 중요한 구성을 선택할 때 고려해야 할 중요한 요소입니다.
7.	에러 체킹 및 교정(ECC): SSD는 일반적으로 자체적인 ECC 메커니즘을 가지고 있어서, RAID 구성 시 추가적인 ECC 기능이 불필요할 수 있습니다. 이를 고려하여 RAID 컨트롤러의 오버헤드를 줄일 수 있습니다.

&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;SSD 기반 스토리지 시스템에서 RAID 구성을 수정할 때는 이러한 요소들을 종합적으로 고려하여 시스템의 신뢰성, 성능 및 비용 효율성 사이의 최적의 균형을 찾아야 합니다.&lt;/p&gt;</description>
      <author>SweetDev</author>
      <guid isPermaLink="true">https://sweetdev.tistory.com/1281</guid>
      <comments>https://sweetdev.tistory.com/1281#entry1281comment</comments>
      <pubDate>Sat, 13 Jan 2024 05:03:58 +0900</pubDate>
    </item>
    <item>
      <title>[Flutter] Algolia 적용하기</title>
      <link>https://sweetdev.tistory.com/1278</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 가입하고 아이디 만들기(GitHub로그인 하면 편하다!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. pubspec.yaml에 추가하기&lt;/p&gt;
&lt;pre id=&quot;code_1704153485414&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies:
  flutter:
    sdk: flutter
  algolia: ^1.1.2  # Ensure you're using the latest version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &amp;nbsp;dart 클래스 만들기&lt;/p&gt;
&lt;pre id=&quot;code_1704153660215&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import 'package:algolia/algolia.dart';

class AlgoliaService {
  static final Algolia _algolia = Algolia.init(
    applicationId: 'YourApplicationID', // Replace with Your Application ID
    apiKey: 'YourAdminAPIKey', // Replace with Your Admin API Key
  );

  static Algolia get algolia =&amp;gt; _algolia;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 코드 짜기&lt;/p&gt;
&lt;pre id=&quot;code_1704154735525&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import 'package:flutter/material.dart';
import 'algolia_service.dart';

class SearchScreen extends StatefulWidget {
  @override
  _SearchScreenState createState() =&amp;gt; _SearchScreenState();
}

class _SearchScreenState extends State&amp;lt;SearchScreen&amp;gt; {
  String _searchTerm = '';
  List&amp;lt;AlgoliaObjectSnapshot&amp;gt; _results = [];

  _search() async {
    AlgoliaQuery query = AlgoliaService.algolia.instance.index('your_index_name').query(_searchTerm);
    AlgoliaQuerySnapshot querySnap = await query.getObjects();
    setState(() {
      _results = querySnap.hits;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Algolia Search'),
      ),
      body: Column(
        children: &amp;lt;Widget&amp;gt;[
          Padding(
            padding: const EdgeInsets.all(10.0),
            child: TextField(
              onChanged: (val) {
                setState(() {
                  _searchTerm = val;
                });
                _search();
              },
              decoration: InputDecoration(
                prefixIcon: Icon(Icons.search),
                hintText: 'Search...',
              ),
            ),
          ),
          Expanded(
            child: _results.length == 0
                ? Center(child: Text('No Results Found'))
                : ListView.builder(
                    itemCount: _results.length,
                    itemBuilder: (context, index) {
                      AlgoliaObjectSnapshot snap = _results[index];
                      return ListTile(
                        title: Text(snap.data['name']), // Adjust according to your data
                        subtitle: Text(snap.data['description']), // Adjust according to your data
                      );
                    },
                  ),
          ),
        ],
      ),
    );
  }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>SweetDev</author>
      <guid isPermaLink="true">https://sweetdev.tistory.com/1278</guid>
      <comments>https://sweetdev.tistory.com/1278#entry1278comment</comments>
      <pubDate>Tue, 2 Jan 2024 09:19:00 +0900</pubDate>
    </item>
    <item>
      <title>[CCNA] 시험 자료를 만들고 있습니다 (작성중, 추후 판매 예정)</title>
      <link>https://sweetdev.tistory.com/1275</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 SweetDev입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에 블로그에 합격 후기를 올렸었는데 예상 외로 많은 분들이 CCNA 합격 후기를 궁금해하시고, 찾아봐주신다는 사실을 알게 되었습니다. 시험이 개정된 이후, 한국어로 된 후기들이 찾기 힘들어져 그런 점도 있는 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이번에 새로 개정된 CCNA 자료집을, 제가 공부했던 필기를 기반으로 한국어로 만들어서 배포해볼까 생각중입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;챕터는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CCNA 공부를 시작하며 알아야 할 것들&lt;/li&gt;
&lt;li&gt;네트워크 장비들&lt;/li&gt;
&lt;li&gt;인터페이스 / 케이블&lt;/li&gt;
&lt;li&gt;OSI 모델&lt;/li&gt;
&lt;li&gt;TCP/IP 모음&lt;/li&gt;
&lt;li&gt;CLI 입문&lt;/li&gt;
&lt;li&gt;Ethernet LAN Switching&lt;/li&gt;
&lt;li&gt;ipv4 Address&lt;/li&gt;
&lt;li&gt;ipv4 Header&lt;/li&gt;
&lt;li&gt;Switch Interface&lt;/li&gt;
&lt;li&gt;Static 라우팅 개념잡기&lt;/li&gt;
&lt;li&gt;패킷의 인생&lt;/li&gt;
&lt;li&gt;서브네팅&lt;/li&gt;
&lt;li&gt;가변길이 서브네팅&lt;/li&gt;
&lt;li&gt;VLAN&lt;/li&gt;
&lt;li&gt;DTP/VTP&lt;/li&gt;
&lt;li&gt;STP(Spanning Tree Protocol)&lt;/li&gt;
&lt;li&gt;RSTP(Rapid Spanning Tree Protocol)&lt;/li&gt;
&lt;li&gt;EtherChannel&lt;/li&gt;
&lt;li&gt;Dynamic Routing 입문&lt;/li&gt;
&lt;li&gt;RIP &amp;amp; EIGRP&lt;/li&gt;
&lt;li&gt;OSPF&lt;/li&gt;
&lt;li&gt;FHRP&lt;/li&gt;
&lt;li&gt;TCP&amp;amp;UDP&lt;/li&gt;
&lt;li&gt;IPv6&lt;/li&gt;
&lt;li&gt;표준 ACL&lt;/li&gt;
&lt;li&gt;CDP&amp;amp;LLDP&lt;/li&gt;
&lt;li&gt;NTP&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;DHCP&lt;/li&gt;
&lt;li&gt;SNMP&lt;/li&gt;
&lt;li&gt;SysLog&lt;/li&gt;
&lt;li&gt;FTP &amp;amp; TFTP&lt;/li&gt;
&lt;li&gt;NAT, private ipv4&lt;/li&gt;
&lt;li&gt;QoS&lt;/li&gt;
&lt;li&gt;보안 시작하기&lt;/li&gt;
&lt;li&gt;Port 보안&lt;/li&gt;
&lt;li&gt;DHCP Snooping&lt;/li&gt;
&lt;li&gt;Dynamic ARP Inspection&lt;/li&gt;
&lt;li&gt;LAN 구조&lt;/li&gt;
&lt;li&gt;WAN 구조&lt;/li&gt;
&lt;li&gt;가상화와 클라우드&lt;/li&gt;
&lt;li&gt;컨테이너&lt;/li&gt;
&lt;li&gt;VRF&lt;/li&gt;
&lt;li&gt;Wireless 시작하기&lt;/li&gt;
&lt;li&gt;Wireless 구조 - Autonomous, Lightweight, Cloud-based&lt;/li&gt;
&lt;li&gt;Wireless 보안&lt;/li&gt;
&lt;li&gt;Wireless 설정&lt;/li&gt;
&lt;li&gt;네트워크 자동화&lt;/li&gt;
&lt;li&gt;SDN&lt;/li&gt;
&lt;li&gt;Ansible, Puppet and Chef&lt;/li&gt;
&lt;li&gt;명령어 모음집&lt;/li&gt;
&lt;li&gt;시험 전 필수 암기 사항&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 경험한 CCNA를 기반으로 작성해서 최대한 간단하지만, 한번에 붙을 수 있게 핵심만 추릴 예정입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작성 기간동안은 블로그에 무료로 배포한 후, 반응이 좋으면 pdf나 책으로 출판할까 생각중입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;터미널에 설정을 해야하는 Lab문제에도 대응할 수 있게 LAB관련 내용도 포함할 예정입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새해 복 많이 받으세요 :)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- SweetDev&lt;/p&gt;</description>
      <category>Network/CCNA</category>
      <author>SweetDev</author>
      <guid isPermaLink="true">https://sweetdev.tistory.com/1275</guid>
      <comments>https://sweetdev.tistory.com/1275#entry1275comment</comments>
      <pubDate>Tue, 2 Jan 2024 04:20:53 +0900</pubDate>
    </item>
    <item>
      <title>[Flutter] 카카오 로그인 구현하기</title>
      <link>https://sweetdev.tistory.com/1271</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;a href=&quot;https://developers.kakao.com/console/app&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developers.kakao.com/console/app&lt;/a&gt; 에서 내 어플리케이션 추가하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. IOS - ios/Runner.xcodeproj/project.pbxproj 파일 -&amp;gt; PRODUCT_BUNDLE_IDENTIFIER 속성 복사해서 iOS 번들 ID에 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &amp;nbsp;카카오 로그인 활성화 해주기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-12-13 오후 4.52.07.png&quot; data-origin-width=&quot;1546&quot; data-origin-height=&quot;1512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cklUHo/btsBMUw6c0m/iFn958ZCD51TZKyvu9tmK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cklUHo/btsBMUw6c0m/iFn958ZCD51TZKyvu9tmK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cklUHo/btsBMUw6c0m/iFn958ZCD51TZKyvu9tmK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcklUHo%2FbtsBMUw6c0m%2FiFn958ZCD51TZKyvu9tmK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;505&quot; height=&quot;1512&quot; data-filename=&quot;스크린샷 2023-12-13 오후 4.52.07.png&quot; data-origin-width=&quot;1546&quot; data-origin-height=&quot;1512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 카카오 SDK 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: left;&quot;&gt;pubspec.yaml에 라이브러리를 추가한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: left;&quot;&gt;&lt;a href=&quot;https://developers.kakao.com/docs/latest/ko/flutter/getting-started&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developers.kakao.com/docs/latest/ko/flutter/getting-started&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;dts&quot; style=&quot;background-color: #f8f9f9; color: #222222; text-align: start;&quot;&gt;&lt;code&gt;dependencies:
  kakao_flutter_sdk: ^1.7.0 # 전체 추가
  kakao_flutter_sdk_user: ^1.7.0 # 카카오 로그인
  kakao_flutter_sdk_talk: ^1.7.0 # 카카오톡 메시지, 카카오톡 소셜(프로필 가져오기, 친구 목록 가져오기)
  kakao_flutter_sdk_share: ^1.7.0 # 카카오톡 공유
  kakao_flutter_sdk_navi: ^1.7.0 # 카카오내비
  kakao_flutter_sdk_friend: ^1.7.0 # 카카오톡 소셜(피커: 친구 선택하기)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background-color: #f8f9f9; color: #222222; text-align: start;&quot;&gt;&lt;code&gt;$ flutter pub get
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 코드&lt;/p&gt;
&lt;pre id=&quot;code_1702454295101&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import 'package:kakao_flutter_sdk_common/kakao_flutter_sdk_common.dart';

void main() {
    ...
    // 웹 환경에서 카카오 로그인을 정상적으로 완료하려면 runApp() 호출 전 아래 메서드 호출 필요
    WidgetsFlutterBinding.ensureInitialized();

    // runApp() 호출 전 Flutter SDK 초기화
    KakaoSdk.init(
        nativeAppKey: '${YOUR_NATIVE_APP_KEY}',
        javaScriptAppKey: '${YOUR_JAVASCRIPT_APP_KEY}',
    );
    runApp(MyApp());
    ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 버튼에 연동할 코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;dart&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;// 카카오 로그인 구현 예제

// 카카오톡 설치 여부 확인
// 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
if (await isKakaoTalkInstalled()) {
  try {
      await UserApi.instance.loginWithKakaoTalk();
      print('카카오톡으로 로그인 성공');
  } catch (error) {
    print('카카오톡으로 로그인 실패 $error');

    // 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
    // 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
    if (error is PlatformException &amp;amp;&amp;amp; error.code == 'CANCELED') {
        return;
    }
    // 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인
    try {
        await UserApi.instance.loginWithKakaoAccount();
        print('카카오계정으로 로그인 성공');
    } catch (error) {
        print('카카오계정으로 로그인 실패 $error');
    }
  }
} else {
  try {
    await UserApi.instance.loginWithKakaoAccount();
    print('카카오계정으로 로그인 성공');
  } catch (error) {
    print('카카오계정으로 로그인 실패 $error');
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>SweetDev</author>
      <guid isPermaLink="true">https://sweetdev.tistory.com/1271</guid>
      <comments>https://sweetdev.tistory.com/1271#entry1271comment</comments>
      <pubDate>Wed, 13 Dec 2023 17:24:25 +0900</pubDate>
    </item>
    <item>
      <title>Flutter 첫설치</title>
      <link>https://sweetdev.tistory.com/1270</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SDK 다운 받기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd&amp;nbsp;~/development&lt;br /&gt;unzip&amp;nbsp;~/Downloads/flutter_macos_3.16.3-stable.zip&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;export&amp;nbsp;PATH=&quot;$PATH:`pwd`/flutter/bin&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸로 안되면 zshrc파일 열어서 설정해주기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flutter doctor 로 설치 안된거 있나 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iOS 플랫폼 셋업&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flutter&amp;nbsp;create&amp;nbsp;my_app&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd&amp;nbsp;my_app&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flutter&amp;nbsp;run&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iOS 디바이스에서 런 하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo&amp;nbsp;gem&amp;nbsp;install&amp;nbsp;cocoapods&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>SweetDev</author>
      <guid isPermaLink="true">https://sweetdev.tistory.com/1270</guid>
      <comments>https://sweetdev.tistory.com/1270#entry1270comment</comments>
      <pubDate>Tue, 12 Dec 2023 13:33:47 +0900</pubDate>
    </item>
  </channel>
</rss>