<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>LeJus</title>
    <link>https://lejus.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 21 May 2026 15:01:42 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>LeJus</managingEditor>
    <item>
      <title>[RabbitMQ] 개념 및 사용법</title>
      <link>https://lejus.tistory.com/12</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;RabbitMQ란?&lt;/h2&gt;
&lt;p data-end=&quot;393&quot; data-start=&quot;233&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;RabbitMQ&lt;/b&gt;는 AMQP(Advanced Message Queuing Protocol)를 구현한 &lt;b&gt;오픈소스 메시지 브로커&lt;/b&gt;입니다.&lt;br /&gt;Producer(생산자)가 보낸 메시지를 Queue에 저장한 뒤, Consumer(소비자)에게 전달해주는 &lt;b&gt;비동기 메시징 시스템&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-end=&quot;393&quot; data-start=&quot;233&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;393&quot; data-start=&quot;233&quot; data-ke-size=&quot;size16&quot;&gt;AMQP와 함께 MQTT, STORMQ 등 여러 플러그인을 제공하여 다양한 프로토콜과의 결합도 가능하기 때문에 많이 사용합니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;438&quot; data-start=&quot;395&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;438&quot; data-start=&quot;397&quot; data-ke-size=&quot;size16&quot;&gt;마이크로서비스, 이벤트 기반 시스템, 비동기 처리 등에서 널리 사용됩니다.&lt;/p&gt;
&lt;/blockquote&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;h2 data-end=&quot;131&quot; data-start=&quot;108&quot; data-ke-size=&quot;size26&quot;&gt;RabbitMQ 실습 환경 구성&lt;/h2&gt;
&lt;p data-end=&quot;155&quot; data-start=&quot;133&quot; data-ke-size=&quot;size16&quot;&gt;실습에 사용되는 서버는 다음과 같습니다:&lt;/p&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;
&lt;div&gt;역할IP 주소OS 버전
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;453&quot; data-start=&quot;157&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;453&quot; data-start=&quot;257&quot;&gt;
&lt;tr data-end=&quot;318&quot; data-start=&quot;257&quot;&gt;
&lt;td data-end=&quot;278&quot; data-start=&quot;257&quot;&gt;  RabbitMQ Broker&lt;/td&gt;
&lt;td data-end=&quot;298&quot; data-start=&quot;278&quot;&gt;192.168.254.140&lt;/td&gt;
&lt;td data-end=&quot;318&quot; data-start=&quot;298&quot;&gt;Ubuntu 24.04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;385&quot; data-start=&quot;319&quot;&gt;
&lt;td data-end=&quot;345&quot; data-start=&quot;319&quot;&gt;  Publisher (Producer)&lt;/td&gt;
&lt;td data-end=&quot;365&quot; data-start=&quot;345&quot;&gt;192.168.254.144&lt;/td&gt;
&lt;td data-end=&quot;385&quot; data-start=&quot;365&quot;&gt;Ubuntu 22.04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;453&quot; data-start=&quot;386&quot;&gt;
&lt;td data-end=&quot;413&quot; data-start=&quot;386&quot;&gt;  Subscriber (Consumer)&lt;/td&gt;
&lt;td data-end=&quot;433&quot; data-start=&quot;413&quot;&gt;192.168.254.145&lt;/td&gt;
&lt;td data-end=&quot;453&quot; data-start=&quot;433&quot;&gt;Ubuntu 22.04&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;527&quot; data-start=&quot;455&quot; data-ke-size=&quot;size16&quot;&gt;RabbitMQ는 192.168.254.140 서버에 설치되어 있으며, 각 클라이언트는 네트워크를 통해 메시지를 송수신합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-end=&quot;527&quot; data-start=&quot;455&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;527&quot; data-start=&quot;455&quot; data-ke-size=&quot;size26&quot;&gt;RabbitMQ 설치 및 기본 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RabbitMQ를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1745454899652&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install rabbitmq-server&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;설치가 완료되면 서비스가 정상적으로 실행중인지 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1745455075445&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lejus@rbmq-1:~$ sudo service rabbitmq-server status
● rabbitmq-server.service - RabbitMQ Messaging Server
     Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2025-04-23 17:27:13 KST; 16h ago
   Main PID: 93430 (beam.smp)
      Tasks: 276 (limit: 4519)
     Memory: 177.5M
        CPU: 9min 21.254s
     CGroup: /system.slice/rabbitmq-server.service
             ├─93430 /usr/lib/erlang/erts-12.2.1/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -&amp;gt;
             ├─93442 erl_child_setup 65536
             ├─93996 inet_gethost 4
             ├─93997 inet_gethost 4
             └─94010 /bin/sh -s rabbit_disk_monitor

Apr 23 17:27:08 rbmq-1 systemd[1]: Starting RabbitMQ Messaging Server...
Apr 23 17:27:13 rbmq-1 systemd[1]: Started RabbitMQ Messaging Server.
lejus@rbmq-1:~$ ss -anltp
State         Recv-Q        Send-Q               Local Address:Port                  Peer Address:Port        Process
LISTEN        0             128                        0.0.0.0:25672                      0.0.0.0:*
LISTEN        0             1024                       0.0.0.0:15672                      0.0.0.0:*
LISTEN        0             128                        0.0.0.0:22                         0.0.0.0:*
LISTEN        0             4096                     127.0.0.1:40379                      0.0.0.0:*
LISTEN        0             4096                       0.0.0.0:31311                      0.0.0.0:*
LISTEN        0             4096                 127.0.0.53%lo:53                         0.0.0.0:*
LISTEN        0             128                              *:5672                             *:*
LISTEN        0             128                              *:1883                             *:*
LISTEN        0             4096                             *:4222                             *:*            users:((&quot;nats-server&quot;,pid=69840,fd=3))
LISTEN        0             128                           [::]:22                            [::]:*
LISTEN        0             4096                             *:4369                             *:*
LISTEN        0             4096                          [::]:31311                         [::]:*&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;서비스 Active가 active (running) 이고, TCP 포트 5672가 LISTEN 상태면 됩니다.&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;기본적으로 guest/guest 계정이 있지만 localhost 에서만 로그인되므로 신규 계정을 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1745455238759&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo rabbitmqctl add_user &amp;lt;계정명&amp;gt; &amp;lt;비밀번호&amp;gt;

lejus@rbmq-1:~$ sudo rabbitmqctl add_user myuser password
Adding user &quot;myuser&quot; ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
lejus@rbmq-1:~$&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;다음으로 권한을 부여합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1745457028032&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lejus@rbmq-1:~$ sudo rabbitmqctl set_permissions myuser &quot;.*&quot; &quot;.*&quot; &quot;.*&quot;
Setting permissions for user &quot;myuser&quot; in vhost &quot;/&quot; ...&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;myuser 계정으로 모든 권한을 허용 한다는 의미입니다.&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;다음으로 tag 설정을 해줍니다.&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;GUI와 같은 관리를 위해서는 관리자로 지정해주어야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1745457550306&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lejus@rbmq-1:~$ sudo rabbitmqctl set_user_tags myuser administrator
Setting tags for user &quot;myuser&quot; to [administrator] ...
lejus@rbmq-1:~$ sudo rabbitmqctl list_users
Listing users ...
user    tags
guest   [administrator]
myuser  [administrator]&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;다음으로 GUI Plugin을 활성화 합니다.&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;기본적으로 GUI 환경을 제공합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1745457234521&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lejus@rbmq-1:~$ sudo rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@rbmq-1:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_mqtt
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@rbmq-1...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.

lejus@rbmq-1:~$ ss -anltp
State                             Recv-Q                            Send-Q                                                       Local Address:Port                                                          Peer Address:Port                            Process
LISTEN                            0                                 128                                                                0.0.0.0:25672                                                              0.0.0.0:*
LISTEN                            0                                 1024                                                               0.0.0.0:15672                                                              0.0.0.0:*
LISTEN                            0                                 128                                                                0.0.0.0:22                                                                 0.0.0.0:*
LISTEN                            0                                 4096                                                             127.0.0.1:40379                                                              0.0.0.0:*
LISTEN                            0                                 4096                                                               0.0.0.0:31311                                                              0.0.0.0:*
LISTEN                            0                                 4096                                                         127.0.0.53%lo:53                                                                 0.0.0.0:*
LISTEN                            0                                 128                                                                      *:5672                                                                     *:*
LISTEN                            0                                 128                                                                      *:1883                                                                     *:*
LISTEN                            0                                 4096                                                                     *:4222                                                                     *:*                                users:((&quot;nats-server&quot;,pid=69840,fd=3))
LISTEN                            0                                 128                                                                   [::]:22                                                                    [::]:*
LISTEN                            0                                 4096                                                                     *:4369                                                                     *:*
LISTEN                            0                                 4096                                                                  [::]:31311                                                                 [::]:*&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;TCP 15672 포트가 GUI 포트입니다. LISTEN 상태로 되어있는지 확인합니다.&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;여기까지 설정이 완료되면 GUI 접속을 시도합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http://192.168.254.140:15672로 접속하면 아래와 같은 화면이 출력됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biCVGa/btsNwZF40O2/mbhM7YKUh7TGQlnKwG4kNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biCVGa/btsNwZF40O2/mbhM7YKUh7TGQlnKwG4kNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biCVGa/btsNwZF40O2/mbhM7YKUh7TGQlnKwG4kNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiCVGa%2FbtsNwZF40O2%2FmbhM7YKUh7TGQlnKwG4kNk%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;667&quot; height=&quot;436&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;436&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;위에서 생성한 계정으로 로그인이 되는지 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqdzA0/btsNxBEuToK/fN6s6k9ahPI6LPEsnhbj6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqdzA0/btsNxBEuToK/fN6s6k9ahPI6LPEsnhbj6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqdzA0/btsNxBEuToK/fN6s6k9ahPI6LPEsnhbj6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqdzA0%2FbtsNxBEuToK%2FfN6s6k9ahPI6LPEsnhbj6k%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;1347&quot; height=&quot;1068&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;AMQP를 활용한 통신 예제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 파이썬을 활용해서 두 클라이언트(Publisher, Subscriber)간의 메시지 전송 예제를 확인합니다.&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;Python으로 AMQP 통신을 진행하려면 pika 모듈을 설치해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1745457858926&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python -m pip install pika&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;Publisher 코드&lt;/p&gt;
&lt;pre id=&quot;code_1745457703060&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pika

credentials = pika.PlainCredentials('myuser', 'password')
parameters = pika.ConnectionParameters('192.168.254.140', 5672, '/', credentials)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()

channel.basic_publish(exchange='',
                      routing_key='hello',
                      body='Hello RabbitMQ with login!')
print(&quot; [x] Sent message with login&quot;)
connection.close()&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;RabbitMQ 서버에서 생성한 계정과 서버 접속 정보를 가지고 연결을 시도하며, hello라는 Queue에 메시지를 전송합니다.&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;기본적으로 exchange는 Direct로 되어있으며 body 부분에 전달할 정보를 입력합니다.&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;routing_key는 Direct Exhange 안의 Queue가 Binding될 때 사용한 Key값을 의미합니다.&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;지금 예제에서는 hello가 됩니다.&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;Subscriber 코드&lt;/p&gt;
&lt;pre id=&quot;code_1745457823985&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pika

credentials = pika.PlainCredentials('myuser', 'password')
parameters = pika.ConnectionParameters('192.168.254.140', 5672, '/', credentials)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()

channel.queue_declare(queue='hello')

def callback(ch, method, properties, body):
    print(f&quot; [x] Received: {body.decode()}&quot;)

channel.basic_consume(queue='hello',
                      on_message_callback=callback,
                      auto_ack=True)

print(' [*] Waiting for messages...')
channel.start_consuming()&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;Publisher와 마찬가지로 접속을 진행하며 hello라는 Queue를 구독(수신 대기) 합니다.&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;이후 Queue에 메시지가 등록되면 Subscriber는 해당 메시지를 수신하여 on_message_callback에 의해 처리하도록 합니다.&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;Callback Method 형식은 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1745460359419&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def on_message_callback(ch, method, properties, body):&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1281&quot; data-start=&quot;933&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1281&quot; data-start=&quot;977&quot;&gt;
&lt;tr data-end=&quot;1056&quot; data-start=&quot;977&quot;&gt;
&lt;td data-end=&quot;993&quot; data-start=&quot;977&quot;&gt;ch&lt;/td&gt;
&lt;td data-end=&quot;1056&quot; data-start=&quot;993&quot;&gt;메시지를 소비하는 &lt;b&gt;채널 객체&lt;/b&gt;입니다. 여기서 ack, nack, reject 등을 호출할 수 있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1140&quot; data-start=&quot;1057&quot;&gt;
&lt;td data-end=&quot;1073&quot; data-start=&quot;1057&quot;&gt;method&lt;/td&gt;
&lt;td data-end=&quot;1140&quot; data-start=&quot;1073&quot;&gt;메시지의 전달 정보 (delivery tag, exchange, routing key 등)를 담고 있는 객체입니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1207&quot; data-start=&quot;1141&quot;&gt;
&lt;td data-end=&quot;1157&quot; data-start=&quot;1141&quot;&gt;properties&lt;/td&gt;
&lt;td data-end=&quot;1207&quot; data-start=&quot;1157&quot;&gt;메시지 속성 (headers, content_type 등) 정보를 담은 객체입니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1281&quot; data-start=&quot;1208&quot;&gt;
&lt;td data-end=&quot;1224&quot; data-start=&quot;1208&quot;&gt;body&lt;/td&gt;
&lt;td data-end=&quot;1281&quot; data-start=&quot;1224&quot;&gt;큐에서 받은 &lt;b&gt;메시지 본문 (payload)&lt;/b&gt; 입니다. 일반적으로 bytes 타입입니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Subscriber를 실행한 후&lt;/p&gt;
&lt;pre id=&quot;code_1745458011355&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(venv) lejus@subscriber:~$ vi consumer.py
(venv) lejus@subscriber:~$ python consumer.py
 [*] Waiting for messages...&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;GUI에서 Queues 탭을 확인하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uePTD/btsNvczrRta/4PHDH6SRmjDl3QBidJBsfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uePTD/btsNvczrRta/4PHDH6SRmjDl3QBidJBsfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uePTD/btsNvczrRta/4PHDH6SRmjDl3QBidJBsfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuePTD%2FbtsNvczrRta%2F4PHDH6SRmjDl3QBidJBsfk%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;1347&quot; height=&quot;1068&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&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;hello라는 Queue가 생성된 것을 확인할 수 있습니다.&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;그리고 Connections 탭에 이동하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sLE1c/btsNw7jBkky/4VihfelvR1xbYXnzWvjQxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sLE1c/btsNw7jBkky/4VihfelvR1xbYXnzWvjQxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sLE1c/btsNw7jBkky/4VihfelvR1xbYXnzWvjQxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsLE1c%2FbtsNw7jBkky%2F4VihfelvR1xbYXnzWvjQxK%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;1347&quot; height=&quot;1068&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&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;현재 연결 중인 호스트에 대한 정보를 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 Exchanges 탭으로 이동하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MyaWE/btsNycROqvN/0DtQvQKTEnwQc1TEVnZl2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MyaWE/btsNycROqvN/0DtQvQKTEnwQc1TEVnZl2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MyaWE/btsNycROqvN/0DtQvQKTEnwQc1TEVnZl2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMyaWE%2FbtsNycROqvN%2F0DtQvQKTEnwQc1TEVnZl2k%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;1347&quot; height=&quot;1068&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(AMQP default) Name 옆에 Message rate in과 Message rate out에 값이 0.00/s 라는 값으로 확인되는데 아까 Python 코드에서 exchange가 빈 값이면 기본적으로 direct exchange를 사용한다고 했기 때문에 Type이 direct 기본 값이 선택됩니다.&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;그리고 Publisher 코드를 실행하면&lt;/p&gt;
&lt;pre id=&quot;code_1745458116356&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(venv) lejus@publisher:~$ python publisher.py
 [x] Sent message with login&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;RabbitMQ 서버의 로그 파일에 다음과 같은 로그가 확인 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1745458228512&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lejus@rbmq-1:~$ sudo tail /var/log/rabbitmq/rabbit@rbmq-1.log
2025-04-24 10:28:28.908034+09:00 [info] &amp;lt;0.28624.0&amp;gt; accepting AMQP connection &amp;lt;0.28624.0&amp;gt; (192.168.254.144:60346 -&amp;gt; 192.168.254.140:5672)
2025-04-24 10:28:28.911648+09:00 [info] &amp;lt;0.28624.0&amp;gt; connection &amp;lt;0.28624.0&amp;gt; (192.168.254.144:60346 -&amp;gt; 192.168.254.140:5672): user 'myuser' authenticated and granted access to vhost '/'
2025-04-24 10:28:28.917865+09:00 [info] &amp;lt;0.28624.0&amp;gt; closing AMQP connection &amp;lt;0.28624.0&amp;gt; (192.168.254.144:60346 -&amp;gt; 192.168.254.140:5672, vhost: '/', user: 'myuser')&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;그리고 GUI의 Queues탭에서 hello Queue를 선택하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s9TRa/btsNw0xYStO/XnG7EHcdsgikuAg5YglGH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s9TRa/btsNw0xYStO/XnG7EHcdsgikuAg5YglGH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s9TRa/btsNw0xYStO/XnG7EHcdsgikuAg5YglGH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs9TRa%2FbtsNw0xYStO%2FXnG7EHcdsgikuAg5YglGH1%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;1347&quot; height=&quot;1068&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&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;이처럼 hello Queue에 메시지가 publish된 것을 확인할 수 있으며 그래프로 확인도 가능합니다.&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;이후 Subscriber를 확인하면&lt;/p&gt;
&lt;pre id=&quot;code_1745458328332&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(venv) lejus@subscriber:~$ python consumer.py
 [*] Waiting for messages...
 [x] Received: Hello RabbitMQ with login!&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;정상적으로 메시지를 수신한 것을 확인할 수 있습니다.&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;이후 Subscriber의 코드를 중단하고 Publisher 코드를 여러&amp;nbsp; 실행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1745458383576&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(venv) lejus@subscriber:~$ python consumer.py
 [*] Waiting for messages...
 [x] Received: Hello RabbitMQ with login!
^CTraceback (most recent call last):
  File &quot;/home/lejus/consumer.py&quot;, line 18, in &amp;lt;module&amp;gt;
    channel.start_consuming()
  File &quot;/home/lejus/venv/lib/python3.10/site-packages/pika/adapters/blocking_connection.py&quot;, line 1883, in start_consuming
    self._process_data_events(time_limit=None)
  File &quot;/home/lejus/venv/lib/python3.10/site-packages/pika/adapters/blocking_connection.py&quot;, line 2044, in _process_data_events
    self.connection.process_data_events(time_limit=time_limit)
  File &quot;/home/lejus/venv/lib/python3.10/site-packages/pika/adapters/blocking_connection.py&quot;, line 842, in process_data_events
    self._flush_output(common_terminator)
  File &quot;/home/lejus/venv/lib/python3.10/site-packages/pika/adapters/blocking_connection.py&quot;, line 514, in _flush_output
    self._impl.ioloop.poll()
  File &quot;/home/lejus/venv/lib/python3.10/site-packages/pika/adapters/select_connection.py&quot;, line 579, in poll
    self._poller.poll()
  File &quot;/home/lejus/venv/lib/python3.10/site-packages/pika/adapters/select_connection.py&quot;, line 1184, in poll
    events = self._poll.poll(self._get_max_wait())
KeyboardInterrupt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1745458391725&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(venv) lejus@publisher:~$ python publisher.py
 [x] Sent message with login
(venv) lejus@publisher:~$ python publisher.py
 [x] Sent message with login
(venv) lejus@publisher:~$ python publisher.py
 [x] Sent message with login
(venv) lejus@publisher:~$ python publisher.py
 [x] Sent message with login
(venv) lejus@publisher:~$ python publisher.py
 [x] Sent message with login
(venv) lejus@publisher:~$ python publisher.py
 [x] Sent message with login&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;그리고 GUI의 Queues 탭에 hello Queue를 확인하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P7cfC/btsNwT0s1Fp/w6TA9xEmEqBdSY1Rr7PuWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P7cfC/btsNwT0s1Fp/w6TA9xEmEqBdSY1Rr7PuWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P7cfC/btsNwT0s1Fp/w6TA9xEmEqBdSY1Rr7PuWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP7cfC%2FbtsNwT0s1Fp%2Fw6TA9xEmEqBdSY1Rr7PuWk%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;1347&quot; height=&quot;1068&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&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;Details 부분에 Messages Ready와 In memory가 6으로 되어있는 것을 확인할 수 있습니다.&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;Queue에 저장된 메시지가 구독자에 의해 처리되어야 하는데 연결이 끊겨 아직 Queue에 쌓여 있는 것입니다.&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;이제 Subscriber를 실행하면&lt;/p&gt;
&lt;pre id=&quot;code_1745458720696&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(venv) lejus@subscriber:~$ python consumer.py
 [*] Waiting for messages...
 [x] Received: Hello RabbitMQ with login!
 [x] Received: Hello RabbitMQ with login!
 [x] Received: Hello RabbitMQ with login!
 [x] Received: Hello RabbitMQ with login!
 [x] Received: Hello RabbitMQ with login!
 [x] Received: Hello RabbitMQ with login!&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnpUOb/btsNx1prp0p/zKBRHz0ByrXPLKwIA2vD9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnpUOb/btsNx1prp0p/zKBRHz0ByrXPLKwIA2vD9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnpUOb/btsNx1prp0p/zKBRHz0ByrXPLKwIA2vD9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnpUOb%2FbtsNx1prp0p%2FzKBRHz0ByrXPLKwIA2vD9K%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;1347&quot; height=&quot;1068&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;1068&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;Queue에 쌓여 있던 메시지가 모두 수신되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 AMQP예제를 통해서 어떻게 메시지가 처리되는지에 대해 알 수 있었습니다.&lt;/p&gt;</description>
      <category>Study</category>
      <author>LeJus</author>
      <guid isPermaLink="true">https://lejus.tistory.com/12</guid>
      <comments>https://lejus.tistory.com/12#entry12comment</comments>
      <pubDate>Thu, 24 Apr 2025 11:50:14 +0900</pubDate>
    </item>
    <item>
      <title>[MQ] 에 대해서</title>
      <link>https://lejus.tistory.com/11</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;MQ&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 프로젝트를 진행하면서 MQ와 관련된 내용들이 많이 있어 정리하려고 합니다.&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;MQ(Message Queue)는 메시지를 큐에 저장하고, 필요한 시점에 꺼내어 처리할 수 있도록 해주는 시스템으로, 메시지를 효율적으로 주고받기 위한 MOM(Message-Oriented Middleware, 메시지 지향 미들웨어)의 한 종류입니다.&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;메시지 생성자(Producer)와 메시지 수신자(Consumer) 사이에서 중간에서 메시지를 받아 임시로 보관하고, 다시 전달하는 역할을 하므로 &lt;b&gt;Broker&lt;/b&gt;라고도 불립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;MQ를 사용하는 이유&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MQ를 사용하는 이유는 다음과 같습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;177&quot; data-start=&quot;157&quot; data-ke-size=&quot;size23&quot;&gt;1. &lt;b&gt;데이터 유실 방지&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;263&quot; data-start=&quot;179&quot; data-ke-size=&quot;size16&quot;&gt;기존 방식에서는 메시지를 직접 수신자(Consumer)에게 보내는 구조이기 때문에, 수신자가 꺼져 있거나 오류가 발생하면 메시지가 손실될 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;381&quot; data-start=&quot;265&quot; data-ke-size=&quot;size16&quot;&gt;하지만 MQ는 &lt;b&gt;중간에 Broker가 메시지를 받아 Queue에 저장&lt;/b&gt;하기 때문에, 수신자가 잠시 중단되어 있어도 나중에 다시 연결되었을 때 &lt;b&gt;누락 없이 모든 메시지를 순차적으로 수신&lt;/b&gt;할 수 있습니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;449&quot; data-start=&quot;383&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;449&quot; data-start=&quot;385&quot; data-ke-size=&quot;size16&quot;&gt;예시: IoT 센서가 주기적으로 데이터를 보내는데 서버가 재시작되는 상황에서도 데이터를 놓치지 않고 수신 가능.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-end=&quot;454&quot; data-start=&quot;451&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;484&quot; data-start=&quot;456&quot; data-ke-size=&quot;size23&quot;&gt;2. &lt;b&gt;비동기 처리로 시스템 효율 향상&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;648&quot; data-start=&quot;486&quot; data-ke-size=&quot;size16&quot;&gt;Producer와 Consumer가 직접 연결되어 있으면, Producer는 Consumer가 응답할 때까지 기다려야 합니다.&lt;br /&gt;하지만 MQ를 사용하면 Producer는 메시지만 큐에 넣고 바로 다음 작업을 처리할 수 있기 때문에, &lt;b&gt;처리 속도가 빨라지고 시스템이 훨씬 유연&lt;/b&gt;해집니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;731&quot; data-start=&quot;650&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;731&quot; data-start=&quot;652&quot; data-ke-size=&quot;size16&quot;&gt;예시: 사용자가 웹사이트에서 주문을 완료하면, 주문 정보는 MQ를 통해 백엔드 시스템으로 전달되고, 결제/배송 처리는 비동기적으로 진행됨.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-end=&quot;736&quot; data-start=&quot;733&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;774&quot; data-start=&quot;738&quot; data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;서비스 간 결합도 감소 (Decoupling)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;928&quot; data-start=&quot;776&quot; data-ke-size=&quot;size16&quot;&gt;Producer는 메시지를 큐에 넣기만 하면 되고, 누가 언제 어떻게 처리할지는 몰라도 됩니다.&lt;br /&gt;Consumer는 큐에 들어온 메시지를 처리할 뿐, 누가 메시지를 보냈는지는 몰라도 됩니다.&lt;br /&gt;이런 구조는 &lt;b&gt;서로 독립적인 서비스 개발과 유지보수에 매우 유리&lt;/b&gt;합니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;996&quot; data-start=&quot;930&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;996&quot; data-start=&quot;932&quot; data-ke-size=&quot;size16&quot;&gt;예시: 이메일 전송, SMS 알림, 푸시 메시지 등 다양한 알림 서비스가 동일한 메시지를 각각 처리할 수 있음.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-end=&quot;1001&quot; data-start=&quot;998&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1029&quot; data-start=&quot;1003&quot; data-ke-size=&quot;size23&quot;&gt;4. &lt;b&gt;확장성과 유연한 메시지 처리&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1175&quot; data-start=&quot;1031&quot; data-ke-size=&quot;size16&quot;&gt;MQ를 사용하면 Consumer 수를 자유롭게 늘릴 수 있어, 많은 양의 메시지가 동시에 들어와도 여러 Consumer가 병렬로 처리할 수 있습니다.&lt;br /&gt;또한 우선순위에 따라 다른 큐로 나누거나, 지연 처리(Delayed Queue) 등의 전략도 가능합니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;1243&quot; data-start=&quot;1177&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1243&quot; data-start=&quot;1179&quot; data-ke-size=&quot;size16&quot;&gt;예시: 대규모 이벤트 등록 시 수천 개의 요청을 동시에 받아도, Worker 수를 조절해 탄력적으로 처리 가능.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-end=&quot;1248&quot; data-start=&quot;1245&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1275&quot; data-start=&quot;1250&quot; data-ke-size=&quot;size23&quot;&gt;5. &lt;b&gt;재시도 및 장애 복구 지원&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1379&quot; data-start=&quot;1277&quot; data-ke-size=&quot;size16&quot;&gt;Consumer가 일시적으로 장애가 나도 MQ는 메시지를 큐에 보관하고 재시도할 수 있습니다.&lt;br /&gt;또한 메시지 처리가 실패하면 다시 큐에 넣어 재전송하는 등의 정책 설정도 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;152&quot; data-start=&quot;142&quot; data-ke-size=&quot;size26&quot;&gt;MQ 프로토콜&lt;/h2&gt;
&lt;p data-end=&quot;310&quot; data-start=&quot;154&quot; data-ke-size=&quot;size16&quot;&gt;MQ는 단순한 메시지 송수신 구조가 아니라, &lt;b&gt;중간에 메시지를 전달하고 분배하는 역할&lt;/b&gt;을 하는 &lt;b&gt;Broker&lt;/b&gt;가 개입합니다.&lt;/p&gt;
&lt;p data-end=&quot;310&quot; data-start=&quot;154&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;310&quot; data-start=&quot;154&quot; data-ke-size=&quot;size16&quot;&gt;이 구조에서는 메시지를 어떤 기준으로 어떤 Queue에 전달할지를 정해야 하며, 이를 위해 &lt;b&gt;명확한 메시징 프로토콜과 구성 요소&lt;/b&gt;가 필요합니다.&lt;/p&gt;
&lt;hr data-end=&quot;315&quot; data-start=&quot;312&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;332&quot; data-start=&quot;317&quot; data-ke-size=&quot;size23&quot;&gt;기본 용어 정리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;827&quot; data-start=&quot;334&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;403&quot; data-start=&quot;334&quot;&gt;&lt;b&gt;Producer (Publisher)&lt;/b&gt;&lt;br /&gt;메시지를 생성하여 MQ에 전송하는 주체입니다.&lt;/li&gt;
&lt;li data-end=&quot;475&quot; data-start=&quot;405&quot;&gt;&lt;b&gt;Consumer (Subscriber)&lt;/b&gt;&lt;br /&gt;메시지를 MQ에서 받아서 처리하는 주체입니다. 예: 결제 처리 서비스&lt;/li&gt;
&lt;li data-end=&quot;545&quot; data-start=&quot;477&quot;&gt;&lt;b&gt;Queue&lt;/b&gt;&lt;br /&gt;메시지를 임시로 저장하는 공간입니다. 메시지는 여기서 대기하다가 Consumer가 처리합니다.&lt;/li&gt;
&lt;li data-end=&quot;633&quot; data-start=&quot;547&quot;&gt;&lt;b&gt;Exchange&lt;/b&gt;&lt;br /&gt;메시지를 받아 어떤 Queue에 보낼지를 결정하는 라우팅 역할을 합니다.&lt;br /&gt;(중간 관리자 느낌이라고 보면 됩니다.)&lt;/li&gt;
&lt;li data-end=&quot;724&quot; data-start=&quot;635&quot;&gt;&lt;b&gt;Binding&lt;/b&gt;&lt;br /&gt;Exchange와 Queue를 연결할 때 사용하는 규칙입니다.&lt;br /&gt;어떤 조건의 메시지를 어떤 Queue에 보낼지를 정합니다.&lt;/li&gt;
&lt;li data-end=&quot;827&quot; data-start=&quot;726&quot;&gt;&lt;b&gt;routing_key&lt;/b&gt;&lt;br /&gt;Producer가 메시지를 보낼 때 함께 지정하는 &quot;주소&quot; 같은 역할입니다.&lt;br /&gt;Exchange는 이 값을 기준으로 메시지를 라우팅합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;832&quot; data-start=&quot;829&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;852&quot; data-start=&quot;834&quot; data-ke-size=&quot;size26&quot;&gt;Exchange의 종류&lt;/h2&gt;
&lt;h3 data-end=&quot;876&quot; data-start=&quot;854&quot; data-ke-size=&quot;size23&quot;&gt;1. Direct Exchange&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;984&quot; data-start=&quot;878&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;928&quot; data-start=&quot;878&quot;&gt;&lt;b&gt;정확히 일치하는 routing_key&lt;/b&gt;를 가진 Queue에만 메시지를 전달합니다.&lt;/li&gt;
&lt;li data-end=&quot;984&quot; data-start=&quot;929&quot;&gt;마치 편지 봉투에 '서울시 강남구'라고 써 있으면, 정확히 그 주소의 집으로만 가는 느낌입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;996&quot; data-start=&quot;986&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;예시:&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1745452110855&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;routing_key = &quot;email.send&quot; 
Binding Key = &quot;email.send&quot;
&amp;rarr; 전달됨&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745452134576&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;routing_key = &quot;email.update&quot; 
Binding Key = &quot;email.send&quot; 
&amp;rarr; 전달 안 됨&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1152&quot; data-start=&quot;1149&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1176&quot; data-start=&quot;1154&quot; data-ke-size=&quot;size23&quot;&gt;2. Fanout Exchange&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1256&quot; data-start=&quot;1178&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1208&quot; data-start=&quot;1178&quot;&gt;&lt;b&gt;모든 연결된 Queue에 무조건 전달&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li data-end=&quot;1230&quot; data-start=&quot;1209&quot;&gt;routing_key는 무시됩니다.&lt;/li&gt;
&lt;li data-end=&quot;1256&quot; data-start=&quot;1231&quot;&gt;마치 방송국이 전파를 퍼뜨리는 느낌입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1268&quot; data-start=&quot;1258&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;예시:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1365&quot; data-start=&quot;1270&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1365&quot; data-start=&quot;1270&quot;&gt;알림 시스템에서 &quot;새 게시물 생성됨&quot; 이벤트를 보내면:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1365&quot; data-start=&quot;1305&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1313&quot; data-start=&quot;1305&quot;&gt;이메일 알림&lt;/li&gt;
&lt;li data-end=&quot;1325&quot; data-start=&quot;1316&quot;&gt;앱 푸시 알림&lt;/li&gt;
&lt;li data-end=&quot;1365&quot; data-start=&quot;1328&quot;&gt;슬랙 메시지&lt;br /&gt;이 3개 Queue에 동시에 메시지 전달됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1370&quot; data-start=&quot;1367&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1393&quot; data-start=&quot;1372&quot; data-ke-size=&quot;size23&quot;&gt;3. Topic Exchange&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1496&quot; data-start=&quot;1395&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1452&quot; data-start=&quot;1395&quot;&gt;&lt;b&gt;패턴 기반으로 routing_key와 Binding Key를 비교&lt;/b&gt;하여 메시지를 라우팅합니다.&lt;/li&gt;
&lt;li data-end=&quot;1496&quot; data-start=&quot;1453&quot;&gt;와일드카드(*, #)를 사용할 수 있어 유연한 라우팅이 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;
&lt;div&gt;와일드카드의미
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1704&quot; data-start=&quot;1498&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1704&quot; data-start=&quot;1609&quot;&gt;
&lt;tr data-end=&quot;1655&quot; data-start=&quot;1609&quot;&gt;
&lt;td data-end=&quot;1622&quot; data-start=&quot;1609&quot;&gt;*&lt;/td&gt;
&lt;td data-end=&quot;1655&quot; data-start=&quot;1622&quot;&gt;정확히 하나의 단어와 일치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1704&quot; data-start=&quot;1656&quot;&gt;
&lt;td data-end=&quot;1669&quot; data-start=&quot;1656&quot;&gt;#&lt;/td&gt;
&lt;td data-end=&quot;1704&quot; data-start=&quot;1669&quot;&gt;0개 이상의 단어와 일치&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1716&quot; data-start=&quot;1706&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;예시:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2020&quot; data-start=&quot;1718&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1880&quot; data-start=&quot;1718&quot;&gt;Binding Key: sensor.*&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1880&quot; data-start=&quot;1746&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-start=&quot;1910&quot; data-end=&quot;1945&quot;&gt;routing_key =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #9d9d9d; color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp;sensor.temp&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; ✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;전달됨&lt;/li&gt;
&lt;li data-end=&quot;1831&quot; data-start=&quot;1788&quot;&gt;routing_key = &lt;span style=&quot;background-color: #9d9d9d; color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp;sensor.humidity &lt;/span&gt;&amp;nbsp; &amp;rarr; ✅ 전달됨&lt;/li&gt;
&lt;li data-end=&quot;1880&quot; data-start=&quot;1834&quot;&gt;routing_key = &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #9d9d9d; color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp;sensor.temp.rom1&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&amp;rarr; ❌ 전달 안 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2020&quot; data-start=&quot;1882&quot;&gt;Binding Key: sensor.#
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2020&quot; data-start=&quot;1910&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-start=&quot;1992&quot; data-end=&quot;2020&quot;&gt;routing_key = &lt;span style=&quot;color: #ffffff; background-color: #9d9d9d;&quot;&gt;&amp;nbsp;sensor&amp;nbsp;&lt;/span&gt; &amp;rarr; ✅ 전달됨&lt;/li&gt;
&lt;li data-end=&quot;1945&quot; data-start=&quot;1910&quot;&gt;routing_key = &lt;span style=&quot;background-color: #9d9d9d; color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp;sensor.temp&amp;nbsp;&lt;/span&gt; &amp;rarr; ✅ 전달됨&lt;/li&gt;
&lt;li data-end=&quot;2020&quot; data-start=&quot;1992&quot;&gt;routing_key = &lt;span style=&quot;background-color: #9d9d9d; color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp;sensor.temp.rom1&amp;nbsp;&lt;/span&gt; &amp;rarr; ✅ 전달됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;2025&quot; data-start=&quot;2022&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;2050&quot; data-start=&quot;2027&quot; data-ke-size=&quot;size23&quot;&gt;4. Headers Exchange&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2203&quot; data-start=&quot;2052&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2116&quot; data-start=&quot;2052&quot;&gt;&lt;b&gt;routing_key를 사용하지 않고&lt;/b&gt;, 메시지에 포함된 &lt;b&gt;헤더 값&lt;/b&gt;을 기준으로 메시지를 라우팅합니다.&lt;/li&gt;
&lt;li data-end=&quot;2170&quot; data-start=&quot;2117&quot;&gt;조건은 헤더에 지정된 키-값 쌍이 &lt;b&gt;Queue의 Binding 조건&lt;/b&gt;과 일치해야 합니다.&lt;/li&gt;
&lt;li data-end=&quot;2203&quot; data-start=&quot;2171&quot;&gt;보다 복잡하거나 유연한 조건 기반 라우팅에 유리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2215&quot; data-start=&quot;2205&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;예시:&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;2224&quot; data-start=&quot;2217&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2224&quot; data-start=&quot;2217&quot; data-ke-size=&quot;size16&quot;&gt;메시지 헤더:&lt;/p&gt;
&lt;pre id=&quot;code_1745452885595&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;type&quot;: &quot;email&quot;,
  &quot;priority&quot;: &quot;high&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;2303&quot; data-start=&quot;2283&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2303&quot; data-start=&quot;2283&quot; data-ke-size=&quot;size16&quot;&gt;Queue A의 Binding 조건:&lt;/p&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745452904148&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{ 
  &quot;x-match&quot;: &quot;all&quot;, 
  &quot;type&quot;: &quot;email&quot;, 
  &quot;priority&quot;: &quot;high&quot; 
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2405&quot; data-start=&quot;2382&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 조건이 모두 일치하므로 메시지 전달됨.&lt;/p&gt;
&lt;p data-end=&quot;2457&quot; data-start=&quot;2407&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9d9d9d; color: #ffffff;&quot;&gt;&amp;nbsp;x-match: any &lt;/span&gt;로 설정하면 조건 중 &lt;b&gt;하나만 일치해도&lt;/b&gt; 메시지가 전달됩니다.&lt;/p&gt;
&lt;hr data-end=&quot;1437&quot; data-start=&quot;1434&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1460&quot; data-start=&quot;1439&quot; data-ke-size=&quot;size26&quot;&gt;대표적인 MQ 프로토콜 및 시스템&lt;/h2&gt;
&lt;h3 data-end=&quot;1506&quot; data-start=&quot;1462&quot; data-ke-size=&quot;size23&quot;&gt;AMQP (Advanced Message Queuing Protocol)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1584&quot; data-start=&quot;1508&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1544&quot; data-start=&quot;1508&quot;&gt;다양한 시스템 간의 메시지를 안정적으로 전달하기 위한 프로토콜&lt;/li&gt;
&lt;li data-end=&quot;1584&quot; data-start=&quot;1545&quot;&gt;&lt;b&gt;RabbitMQ&lt;/b&gt;는 AMQP를 사용하는 대표적인 메시징 시스템&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1632&quot; data-start=&quot;1586&quot; data-ke-size=&quot;size23&quot;&gt;MQTT (Message Queuing Telemetry Transport)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1763&quot; data-start=&quot;1634&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1673&quot; data-start=&quot;1634&quot;&gt;사물인터넷(IoT) 환경에서 많이 사용되는 경량 메시징 프로토콜&lt;/li&gt;
&lt;li data-end=&quot;1698&quot; data-start=&quot;1674&quot;&gt;낮은 대역폭과 낮은 전력 환경에서 효과적&lt;/li&gt;
&lt;li data-end=&quot;1731&quot; data-start=&quot;1699&quot;&gt;&lt;b&gt;Publish/Subscribe&lt;/b&gt; 구조를 채택&lt;/li&gt;
&lt;li data-end=&quot;1763&quot; data-start=&quot;1732&quot;&gt;대표적인 브로커: Mosquitto, HiveMQ 등&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1774&quot; data-start=&quot;1765&quot; data-ke-size=&quot;size23&quot;&gt;Kafka&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1871&quot; data-start=&quot;1776&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1811&quot; data-start=&quot;1776&quot;&gt;대용량 데이터 스트림 처리에 최적화된 분산 메시징 시스템&lt;/li&gt;
&lt;li data-end=&quot;1871&quot; data-start=&quot;1812&quot;&gt;메시지를 토픽(Topic) 단위로 분류하며, &lt;b&gt;로그 수집/분석, 실시간 데이터 처리&lt;/b&gt;에 자주 사용됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1881&quot; data-start=&quot;1873&quot; data-ke-size=&quot;size23&quot;&gt;NATS&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1944&quot; data-start=&quot;1883&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1919&quot; data-start=&quot;1883&quot;&gt;경량화된 메시지 브로커로, 빠른 속도와 단순한 구조가 장점&lt;/li&gt;
&lt;li data-end=&quot;1944&quot; data-start=&quot;1920&quot;&gt;Microservices 간 통신에 적합&lt;/li&gt;
&lt;li data-end=&quot;1944&quot; data-start=&quot;1920&quot;&gt;대용량 처리에 적합함&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;662&quot; data-start=&quot;653&quot; data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-end=&quot;761&quot; data-start=&quot;664&quot; data-ke-size=&quot;size16&quot;&gt;MQ를 몰랐던 때에는 로그 손실에 대한 걱정을 많이 했었는데 이번 프로젝트를 맡게 되면서 좋은 시스템을 알게 되었습니다.&lt;/p&gt;</description>
      <category>Study</category>
      <category>amqp</category>
      <category>Exchange</category>
      <category>Kafka</category>
      <category>MQ</category>
      <category>MQTT</category>
      <category>NATS</category>
      <category>Queue</category>
      <author>LeJus</author>
      <guid isPermaLink="true">https://lejus.tistory.com/11</guid>
      <comments>https://lejus.tistory.com/11#entry11comment</comments>
      <pubDate>Thu, 24 Apr 2025 09:10:07 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] Ubuntu 24.04 Pacemaker 설정</title>
      <link>https://lejus.tistory.com/10</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;개요&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Ubuntu 24.04 환경에서 Pacemaker를 이용한 이중화 클러스터를 구성하려고 여러 블로그의 게시글을 참고했지만, &lt;/span&gt;&lt;/p&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설정이 제대로 이루어지지 않는 문제가 발생했습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그 이유는 &lt;/span&gt;&lt;span&gt;pcs cluster&lt;/span&gt;&lt;span&gt; 설정 방식이 변경되었기 때문입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 글에서는 Ubuntu 24.04에서 제대로 Pacemaker를 설정하는 방법을 설명하도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-pm-slice=&quot;1 1 []&quot; data-ke-style=&quot;style2&quot;&gt;테스트 환경&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-pm-slice=&quot;3 5 []&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;OS&lt;/b&gt;&lt;/span&gt;&lt;span&gt;: Ubuntu 24.04&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;IP 설정&lt;/b&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;master: &lt;/span&gt;&lt;span&gt;192.168.172.101&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;slave: &lt;/span&gt;&lt;span&gt;192.168.172.102&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;설치 및 설정&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. pacemaker, pcs 패키지 설치(master, slave)&lt;/p&gt;
&lt;pre id=&quot;code_1741942957410&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo su -
apt install pacemaker pcs&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;2. 호스트 파일 수정 (master, slave)&lt;/p&gt;
&lt;pre id=&quot;code_1741943007026&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi /etc/hosts

192.168.172.101 master
192.168.172.102 slave

:wq&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. Corosync 서비스 설정 파일 수정 (master, slave)&lt;/p&gt;
&lt;pre id=&quot;code_1741943084398&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi /usr/lib/systemd/system/corosync.service

Type=simple # Type을 simple로 수정

:wq&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. Pcsd 서비스 활성화 및 인증 (master, slave)&lt;/p&gt;
&lt;pre id=&quot;code_1741943128542&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl start pcsd
systemctl enable pcsd

passwd hacluster
New passwd: 

pcs host auth master slave -u hacluster&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. Cluster 설정 (master)&lt;/p&gt;
&lt;pre id=&quot;code_1741943262984&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pcs cluster setup my_cluster_name \
  master addr=192.168.172.101 \
  slave addr=192.168.172.102&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. Cluster 활성화 (master, slave)&lt;/p&gt;
&lt;pre id=&quot;code_1741943289939&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pcs cluster start --all
pcs cluster enable --all&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;설정 확인&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pcs status 명령어를 입력해 제대로 설정 되었는지 확인합니다.&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;Node List에&amp;nbsp;&amp;nbsp; * Online: [&amp;nbsp; master slave&amp;nbsp; ] 가 확인되면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1741943586952&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@master:~# pcs cluster status
Cluster Status:
 Cluster Summary:
   * Stack: corosync (Pacemaker is running)
   * Current DC: master (version 2.1.6-6fdc9deea29) - partition with quorum
   * Last updated:  Fri Mar 14 08:57:31 2025 on master
   * Last change:   Fri Mar 14 08:39:42 2025 by my_cluster_name via crmd on master
   * 2 nodes configured
   * 0 resources instances configured
 Node List:
   * Online: [  master slave  ]
   
PCSD Status:
  slave: Online
  master: Online&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1741943629179&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@slave:~# pcs cluster status
Cluster Status:
 Cluster Summary:
   * Stack: corosync (Pacemaker is running)
   * Current DC: master (version 2.1.6-6fdc9deea29) - partition with quorum
   * Last updated:  Fri Mar 14 08:57:31 2025 on slave
   * Last change:   Fri Mar 14 08:39:42 2025 by my_cluster_name via crmd on master
   * 2 nodes configured
   * 0 resources instances configured
 Node List:
   * Online: [  master slave  ]
   
PCSD Status:
  slave: Online
  master: Online&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;마무리&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로써 HA 구성 설정이 완료되었습니다.&lt;/p&gt;</description>
      <category>Ha</category>
      <category>Linux</category>
      <category>pacemaker</category>
      <category>PCS</category>
      <category>pcsd</category>
      <category>ubuntu 24.04</category>
      <category>이중화</category>
      <author>LeJus</author>
      <guid isPermaLink="true">https://lejus.tistory.com/10</guid>
      <comments>https://lejus.tistory.com/10#entry10comment</comments>
      <pubDate>Fri, 14 Mar 2025 18:17:02 +0900</pubDate>
    </item>
    <item>
      <title>[보안] 암호화 알고리즘</title>
      <link>https://lejus.tistory.com/9</link>
      <description>&lt;h1 data-end=&quot;108&quot; data-start=&quot;78&quot;&gt;&lt;b&gt;암호화 알고리즘이란? 종류와 특징을 알아보자&lt;/b&gt;&lt;/h1&gt;
&lt;p data-end=&quot;283&quot; data-start=&quot;110&quot; data-ke-size=&quot;size16&quot;&gt;데이터 보안은 오늘날 디지털 세상에서 매우 중요한 문제입니다. 다양한 형태의 정보를 안전하게 보호하고, 불법적인 접근을 막기 위해 사용되는 기술 중 하나가 바로 **암호화(Encryption)**입니다. 이 글에서는 암호화의 기본 개념과 다양한 암호화 알고리즘의 종류를 소개하고, 각각의 특징을 살펴보겠습니다.&lt;/p&gt;
&lt;h2 data-end=&quot;297&quot; data-start=&quot;285&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;암호화란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;445&quot; data-start=&quot;299&quot; data-ke-size=&quot;size16&quot;&gt;암호화란 &lt;b&gt;데이터를 읽을 수 없는 형태로 변환하는 과정&lt;/b&gt;입니다. 이를 통해 민감한 정보를 보호하고, 인가되지 않은 사용자가 해당 데이터를 열람하지 못하도록 합니다. 암호화된 데이터는 오직 정해진 키를 가진 사람만 복호화하여 원본 데이터로 되돌릴 수 있습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;465&quot; data-start=&quot;447&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;암호화의 기본 요소&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;626&quot; data-start=&quot;466&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;502&quot; data-start=&quot;466&quot;&gt;&lt;b&gt;평문(Plaintext)&lt;/b&gt;: 암호화되지 않은 원본 데이터&lt;/li&gt;
&lt;li data-end=&quot;550&quot; data-start=&quot;503&quot;&gt;&lt;b&gt;암호문(Ciphertext)&lt;/b&gt;: 암호화된 데이터, 사람이 읽을 수 없는 형태&lt;/li&gt;
&lt;li data-end=&quot;582&quot; data-start=&quot;551&quot;&gt;&lt;b&gt;키(Key)&lt;/b&gt;: 암호화 및 복호화에 사용되는 값&lt;/li&gt;
&lt;li data-end=&quot;626&quot; data-start=&quot;583&quot;&gt;&lt;b&gt;복호화(Decryption)&lt;/b&gt;: 암호문을 다시 평문으로 되돌리는 과정&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;647&quot; data-start=&quot;628&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;암호화 알고리즘의 종류&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;715&quot; data-start=&quot;649&quot; data-ke-size=&quot;size16&quot;&gt;암호화 알고리즘은 크게 두 가지 주요 방식으로 나눌 수 있습니다: &lt;b&gt;대칭키 암호화&lt;/b&gt;와 &lt;b&gt;비대칭키 암호화&lt;/b&gt;입니다.&lt;/p&gt;
&lt;h3 data-end=&quot;761&quot; data-start=&quot;717&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 대칭키 암호화(Symmetric Key Encryption)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;845&quot; data-start=&quot;763&quot; data-ke-size=&quot;size16&quot;&gt;대칭키 암호화에서는 암호화와 복호화에 &lt;b&gt;같은 키&lt;/b&gt;를 사용합니다. 이 방식은 빠르고 효율적이지만, 키를 안전하게 교환하는 것이 중요한 문제입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1278&quot; data-start=&quot;847&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1278&quot; data-start=&quot;847&quot;&gt;&lt;b&gt;주요 알고리즘&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1278&quot; data-start=&quot;864&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;978&quot; data-start=&quot;864&quot;&gt;&lt;b&gt;AES (Advanced Encryption Standard)&lt;/b&gt;: 현재 가장 널리 사용되는 대칭키 암호화 알고리즘. 보안성과 속도 면에서 뛰어나며, 128, 192, 256 비트 키를 지원합니다.&lt;/li&gt;
&lt;li data-end=&quot;1068&quot; data-start=&quot;981&quot;&gt;&lt;b&gt;DES (Data Encryption Standard)&lt;/b&gt;: 과거에 사용되었으나 현재는 보안 취약성으로 사용되지 않습니다. 56비트 키를 사용합니다.&lt;/li&gt;
&lt;li data-end=&quot;1132&quot; data-start=&quot;1071&quot;&gt;&lt;b&gt;3DES (Triple DES)&lt;/b&gt;: DES를 3번 적용하여 보안을 강화한 방식이지만 속도가 느립니다.&lt;/li&gt;
&lt;li data-end=&quot;1215&quot; data-start=&quot;1135&quot;&gt;&lt;b&gt;Blowfish&lt;/b&gt;: 빠르고 효율적인 암호화 알고리즘, 다양한 키 길이를 지원하지만 보안성에서는 AES에 비해 다소 부족할 수 있습니다.&lt;/li&gt;
&lt;li data-end=&quot;1278&quot; data-start=&quot;1218&quot;&gt;&lt;b&gt;RC4&lt;/b&gt;: 스트림 암호화 알고리즘으로 빠르지만 보안상의 취약점이 발견되어 현재는 사용되지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1326&quot; data-start=&quot;1280&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 비대칭키 암호화(Asymmetric Key Encryption)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1443&quot; data-start=&quot;1328&quot; data-ke-size=&quot;size16&quot;&gt;비대칭키 암호화에서는 &lt;b&gt;서로 다른 두 키&lt;/b&gt;(공개키와 개인키)를 사용합니다. 공개키로 암호화된 데이터는 오직 개인키로 복호화할 수 있습니다. 이 방식은 보안성이 뛰어나지만 처리 속도가 상대적으로 느립니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1719&quot; data-start=&quot;1445&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1719&quot; data-start=&quot;1445&quot;&gt;&lt;b&gt;주요 알고리즘&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1719&quot; data-start=&quot;1462&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1526&quot; data-start=&quot;1462&quot;&gt;&lt;b&gt;RSA&lt;/b&gt;: 가장 널리 사용되는 비대칭키 암호화 알고리즘으로, 큰 소수의 곱을 이용하여 보안성을 제공합니다.&lt;/li&gt;
&lt;li data-end=&quot;1626&quot; data-start=&quot;1529&quot;&gt;&lt;b&gt;ECC (Elliptic Curve Cryptography)&lt;/b&gt;: RSA보다 작은 키로도 높은 보안성을 제공하며, 특히 모바일 장치와 IoT 환경에서 많이 사용됩니다.&lt;/li&gt;
&lt;li data-end=&quot;1719&quot; data-start=&quot;1629&quot;&gt;&lt;b&gt;DSA (Digital Signature Algorithm)&lt;/b&gt;: 디지털 서명에 사용되며, RSA와 비슷하지만 서명 생성 및 검증에 특화된 알고리즘입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1758&quot; data-start=&quot;1721&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 혼합형 암호화(Hybrid Encryption)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1895&quot; data-start=&quot;1760&quot; data-ke-size=&quot;size16&quot;&gt;혼합형 암호화는 &lt;b&gt;대칭키와 비대칭키 암호화&lt;/b&gt;를 결합한 방식입니다. 보통 비대칭키 알고리즘을 사용하여 대칭키를 안전하게 교환하고, 실제 데이터 암호화에는 대칭키 알고리즘을 사용합니다. 이 방식은 보안성과 성능을 동시에 만족시킬 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1996&quot; data-start=&quot;1897&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1996&quot; data-start=&quot;1897&quot;&gt;&lt;b&gt;예시&lt;/b&gt;: &lt;b&gt;SSL/TLS&lt;/b&gt; - 웹에서 보안 통신을 제공하는 프로토콜로, 서버와 클라이언트 간에 비대칭키로 세션 키를 교환한 뒤, 대칭키로 실제 데이터를 암호화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;2029&quot; data-start=&quot;1998&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 해시 함수(Hash Function)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2134&quot; data-start=&quot;2031&quot; data-ke-size=&quot;size16&quot;&gt;해시 함수는 데이터를 고정된 크기의 해시값으로 변환하는 알고리즘입니다. 해시 함수는 &lt;b&gt;복호화가 불가능&lt;/b&gt;하므로, 주로 데이터의 무결성을 검사하거나 디지털 서명을 생성할 때 사용됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2356&quot; data-start=&quot;2136&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2356&quot; data-start=&quot;2136&quot;&gt;&lt;b&gt;주요 알고리즘&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2356&quot; data-start=&quot;2153&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2245&quot; data-start=&quot;2153&quot;&gt;&lt;b&gt;SHA (Secure Hash Algorithm)&lt;/b&gt;: SHA-1, SHA-256, SHA-512 등 다양한 버전이 있으며, 블록체인 등에서 많이 사용됩니다.&lt;/li&gt;
&lt;li data-end=&quot;2307&quot; data-start=&quot;2248&quot;&gt;&lt;b&gt;MD5&lt;/b&gt;: 과거에 널리 사용되었으나, 현재는 충돌 공격에 취약하여 보안 용도로 사용되지 않습니다.&lt;/li&gt;
&lt;li data-end=&quot;2356&quot; data-start=&quot;2310&quot;&gt;&lt;b&gt;RIPEMD&lt;/b&gt;: SHA와 비슷한 방식으로 해시값을 생성하는 알고리즘입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;2379&quot; data-start=&quot;2358&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;암호화 알고리즘 선택 기준&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;2419&quot; data-start=&quot;2381&quot; data-ke-size=&quot;size16&quot;&gt;암호화 알고리즘을 선택할 때는 다음과 같은 요소들을 고려해야 합니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2654&quot; data-start=&quot;2420&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;2466&quot; data-start=&quot;2420&quot;&gt;&lt;b&gt;보안성&lt;/b&gt;: 알고리즘이 얼마나 안전한지, 해킹에 대한 저항력을 확인합니다.&lt;/li&gt;
&lt;li data-end=&quot;2500&quot; data-start=&quot;2467&quot;&gt;&lt;b&gt;성능&lt;/b&gt;: 암호화 및 복호화 속도가 얼마나 빠른지.&lt;/li&gt;
&lt;li data-end=&quot;2612&quot; data-start=&quot;2501&quot;&gt;&lt;b&gt;용도&lt;/b&gt;: 사용하려는 용도에 맞는 알고리즘을 선택합니다. 예를 들어, 데이터 전송이 중요한 경우 비대칭키 암호화가 사용될 수 있고, 대용량 데이터에는 대칭키 암호화가 더 적합할 수 있습니다.&lt;/li&gt;
&lt;li data-end=&quot;2654&quot; data-start=&quot;2613&quot;&gt;&lt;b&gt;키 관리&lt;/b&gt;: 키를 안전하게 관리할 수 있는 시스템이 필요합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-end=&quot;2665&quot; data-start=&quot;2656&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;결론&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;2853&quot; data-start=&quot;2667&quot; data-ke-size=&quot;size16&quot;&gt;암호화 알고리즘은 데이터를 안전하게 보호하는 데 중요한 역할을 합니다. 각 암호화 방식은 특정 상황에서 더 유리할 수 있으며, &lt;b&gt;대칭키&lt;/b&gt;와 &lt;b&gt;비대칭키&lt;/b&gt; 암호화 방식은 서로 장단점이 다릅니다. &lt;b&gt;혼합형 암호화&lt;/b&gt;는 두 방식의 장점을 결합하여 더 높은 보안을 제공합니다. &lt;b&gt;해시 함수&lt;/b&gt;는 무결성 검사에 중요한 역할을 합니다.&lt;/p&gt;
&lt;p data-end=&quot;2937&quot; data-start=&quot;2855&quot; data-ke-size=&quot;size16&quot;&gt;올바른 암호화 알고리즘을 선택하는 것은 보안 시스템의 핵심이므로, 사용 목적에 맞는 알고리즘을 선택하고, 최신 보안 표준을 따르는 것이 중요합니다.&lt;/p&gt;</description>
      <category>Secure</category>
      <author>LeJus</author>
      <guid isPermaLink="true">https://lejus.tistory.com/9</guid>
      <comments>https://lejus.tistory.com/9#entry9comment</comments>
      <pubDate>Wed, 5 Mar 2025 09:47:29 +0900</pubDate>
    </item>
    <item>
      <title>[Ubuntu 24.04] Python 3.6 설치 및 venv 설정</title>
      <link>https://lejus.tistory.com/8</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;개요&lt;/blockquote&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;p data-ke-size=&quot;size16&quot;&gt;다른 블로그에도 잘 기술되어 있지만 사전에 필요한 라이브러리나 패키지에 대한 설명이 없어 해당 내용도 기술합니다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;환경&lt;/blockquote&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;OS : Ubuntu 24.04&lt;/li&gt;
&lt;li&gt;VM&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;사전 준비&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python을 설치하는 방법은 여러 가지가 있지만, 오늘은 Python 공식 홈페이지에서 3.6 버전 tgz을 받아 설치합니다&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;make 과정이 필요하므로 필수 라이브러리를 먼저 설치합니다&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;b&gt;1. apt update&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736384097817&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo apt update
$ sudo apt-get update&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;&lt;b&gt;2. 필수 라이브러리 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736384249045&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo apt install build-essential zlib1g-dev libssl-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev libffi-dev liblzma-dev tk-dev libgdbm-dev libnss3-dev libssl-dev&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;파이썬 설치&lt;/blockquote&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 파이썬 설치 파일 다운로드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736384369188&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz&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;&lt;b&gt;2. 압축 해제 및 이동&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736384417727&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ tar xzvf Python-3.6.0.tgz
$ cd Python-3.6.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;&lt;b&gt;3. 설치 경로 설정 및 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736384453363&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ./configure --prefix=/usr/local/python3.6
$ sudo make &amp;amp;&amp;amp; sudo make install&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;&lt;b&gt;4. Symbolic Link 연결&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736384509759&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo ln -s /usr/local/python3.6/bin/python3.6 /usr/bin/&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;&lt;b&gt;5. python3.6 동작 테스트&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736384543125&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ python3.6 --version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;가상환경 만들기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 사용하던 Python 버전과는 별개의 테스트 환경이 필요하므로 가상환경을 만들어 사용합니다&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;만약 설치되어있는 Python 버전이 다양하다면 여러 가상 환경을 만들어서 버전 별로 테스트가 가능합니다&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;1. venv 만들기(venv를 만들면 현재 경로에 디렉토리가 하나 생성됩니다. 위치는 본인 환경에 맞게 설정해주세요)&lt;/p&gt;
&lt;pre id=&quot;code_1736384827629&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ cd ~
$ python3.6 -m venv venv3.6&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;2. venv 환경 활성화&lt;/p&gt;
&lt;pre id=&quot;code_1736384918851&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ source venv3.6/bin/activate
(venv3.6) lejus@localhost:~$ python --version
Python 3.6.0
(venv3.6) lejus@localhost:~$&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;가상환경 활용&lt;/blockquote&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;p data-ke-size=&quot;size16&quot;&gt;가상 환경이 활성화 되어있다고 해도 외부 라이브러리를 사용할 수 있기 때문에 pip등과 같은 프로그램은 반드시 조심해야 합니다&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;가상 환경 상태에서 python3를 사용하게 되면 외부 라이브러리를 사용하기 때문에 아래와 같이 해당 환경에서만 사용할 pip 패키지를 설치할 수 있도록 합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1736390093551&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(venv3.6) lejus@localhost:~$ python -m pip --version
pip 21.3.1 from /home/lejus/ralph/lib/python3.6/site-packages/pip (python 3.6)
(venv3.6) lejus@localhost:~$ python -m pip install requests

(venv3.6) lejus@localhost:~$ python -m pip list installed
Package            Version
------------------ ----------
certifi            2024.12.14
charset-normalizer 2.0.12
idna               3.10
pip                21.3.1
requests           2.27.1
setuptools         28.8.0
urllib3            1.26.20​&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;마무리&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로써 Python 3.6 설치 및 가상환경 설정이 완료되었습니다.&lt;/p&gt;</description>
      <category>Server/Linux</category>
      <category>Python</category>
      <category>python3.6</category>
      <category>venv</category>
      <author>LeJus</author>
      <guid isPermaLink="true">https://lejus.tistory.com/8</guid>
      <comments>https://lejus.tistory.com/8#entry8comment</comments>
      <pubDate>Thu, 9 Jan 2025 11:48:11 +0900</pubDate>
    </item>
    <item>
      <title>[Network] Juniper OS LACP 구성</title>
      <link>https://lejus.tistory.com/7</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;개요&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Juniper OS는 LACP(Port Channel 혹은 Ether Channel 등)을 구성하려면 반드시 드라이버를 활성화 시켜야 합니다&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;p data-ke-size=&quot;size16&quot;&gt;그래서 오늘은 Juniper OS에서 LACP를 구성하는 방법에 대해 기술합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;LACP Driver 활성화&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;configure 모드 접속 가능한 계정 로그인 후 아래 명령어 입력해주면 됩니다&lt;/p&gt;
&lt;pre id=&quot;code_1735203028807&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{master:0}[edit]
root# set chassis aggregated-devices ethernet device-count 5

{master:0}[edit]
root# commit
configuration check succeeds
commit complete

{master:0}[edit]
root# exit
Exiting configuration mode

{master:0}
root&amp;gt; show lacp interfaces ae?
Possible completions:
  &amp;lt;interface-name&amp;gt;     Name of interface
  ae0
  ae1
  ae2
  ae3
  ae4
{master:0}
root&amp;gt; show lacp interfaces ae&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;해당 명령어는 Port Channel을 사용할 수 있는 개수를 설정하는 명령어로 최소 1개부터 최대 32개까지 활성화 가능합니다&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;color: #ee2323;&quot;&gt;&lt;b&gt;위 명령어를 입력하지 않으면 절대 활성화가 되지 않으니 나머지 설정을 해도 무용지물입니다&lt;/b&gt;&lt;/span&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;적용하게 되면 위처럼 ae(LACP) 인터페이스가 ae0 ~ ae4까지 생성됩니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;LACP 설정할 인터페이스 unit 제거&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Juniper OS에서 LACP 설정을 할 경우 먼저 인터페이스의 unit을 제거해야 합니다&lt;/p&gt;
&lt;pre id=&quot;code_1735203613718&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{master:0}[edit]
root# set interfaces ge-0/0/0 ether-options 802.3ad ae0

{master:0}[edit]
root# set interfaces ge-0/0/2 ether-options 802.3ad ae0

{master:0}[edit]
root# commit
[edit interfaces ge-0/0/0]
  'unit 0'
     logical unit is not allowed on aggregated links
error: configuration check-out failed&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;제거되지 않으면 위처럼 적용할 수 없으니 반드시 제거해줍니다&lt;/p&gt;
&lt;pre id=&quot;code_1735203184923&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{master:0}[edit]
root# delete interfaces ge-0/0/0 unit 0

{master:0}[edit]
root# delete interfaces ge-0/0/2 unit 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;예제에서는 ge-0/0/0, ge0/0/2 포트를 구성할 예정이므로 위와 같이 설정했습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;인터페이스 LACP 설정&lt;/blockquote&gt;
&lt;pre id=&quot;code_1735203343095&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{master:0}[edit]
root# set interfaces ge-0/0/0 ether-options 802.3ad ae0

{master:0}[edit]
root# set interfaces ge-0/0/2 ether-options 802.3ad ae0&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;인터페이스에 802.3ad 채널을 개방한 후 ae0(Juniper OS에서 사용하는 LACP 인터페이스) 를 적용해줍니다&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;이렇게 되면 두 인터페이스가 하나의 ae0 인터페이스로 묶이게 됩니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;LACP 인터페이스 설정&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 LACP로 묶었으니 설정을 진행합니다&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;맨 뒤에 active인지, passive인지를 확인 후 설정해줍니다&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;active&lt;br /&gt;- 해당 포트를 통해 데이터를 &lt;b&gt;전송&lt;/b&gt;하는 역할&lt;br /&gt;&lt;br /&gt;passive&lt;br /&gt;- 해당 포트를 통해 데이터를 &lt;b&gt;수신 후 응답&lt;/b&gt;하는 역할&lt;/blockquote&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;b&gt;1. Active 모드 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735203761860&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{master:0}[edit]
root# set interfaces ae0 aggregated-ether-options lacp active&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;&lt;b&gt;2. Passive 모드 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735206313670&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{master:0}[edit]
root# set interfaces ae0 aggregated-ether-options lacp passive&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;이후 switching 모드를 사용할 지 아니면 non switching 모드를 사용할 지, switching 모드를 사용한다면 access인지 trunk인지를 확인해줍니다&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;switching 모드&lt;br /&gt;- 쉽게 말해 vlan을 사용하는 인터페이스를 만들겠다는 의미&lt;br /&gt;&lt;br /&gt;non switching 모드&lt;br /&gt;- 인터페이스에 vlan을 사용하지 않겠다는 의미로 직접 IP를 할당하는 설정이 가능&lt;/blockquote&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;&lt;b&gt;1. switching 모드(Access) 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735206160229&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{master:0}[edit]
root# set interfaces ae0 unit 0 family ethernet-switching port-mode access&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;&lt;b&gt;2. switching 모드(Trunk) 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735206226142&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{master:0}[edit]
root# set interfaces ae0 vlan-tagging

{master:0}[edit]
root# set interfaces ae0 unit 0 family ethernet-switching port-mode trunk&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;&lt;b&gt;3. non switching 모드 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735206283683&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{master:0}[edit]
root# set interfaces ae0 unit 0 family inet&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;LACP 구성&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LACP가 잘 설정되었는지 확인하기 위해서는 configure 모드를 나간 후 명령어를 입력해야 합니다&lt;/p&gt;
&lt;pre id=&quot;code_1735206468781&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{master:0}[edit]
root# exit
Exiting configuration mode

{master:0}
root&amp;gt; show lacp interfaces
Aggregated interface: ae0
    LACP state:       Role   Exp   Def  Dist  Col  Syn  Aggr  Timeout  Activity
      ge-0/0/0       Actor    No   Yes    No   No   No   Yes     Fast    Active
      ge-0/0/0     Partner    No   Yes    No   No   No   Yes     Fast   Passive
      ge-0/0/2       Actor    No   Yes    No   No   No   Yes     Fast    Active
      ge-0/0/2     Partner    No   Yes    No   No   No   Yes     Fast   Passive
    LACP protocol:        Receive State  Transmit State          Mux State
      ge-0/0/0            Port disabled     No periodic           Detached
      ge-0/0/2            Port disabled     No periodic           Detached&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;링크 연결을 안해서 Receive State와 Transmit State가 Port disabled 와 Noperiodic으로 되어있지만 위처럼 결과가 나온다면 정상적인 설정이 완료된 것입니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;마무리&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로써 LACP 구성이 완료되었습니다&lt;/p&gt;</description>
      <category>Network/Switch</category>
      <author>LeJus</author>
      <guid isPermaLink="true">https://lejus.tistory.com/7</guid>
      <comments>https://lejus.tistory.com/7#entry7comment</comments>
      <pubDate>Thu, 26 Dec 2024 18:49:42 +0900</pubDate>
    </item>
    <item>
      <title>[Rack Tables] 설치</title>
      <link>https://lejus.tistory.com/5</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;개요&lt;/blockquote&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;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.racktables.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.racktables.org/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1735000292899&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;RackTables&quot; data-og-description=&quot;RackTables is a nifty and robust solution for datacenter and server room asset management. It helps document hardware assets, network addresses, space in racks, networks configuration and much much more!&quot; data-og-host=&quot;www.racktables.org&quot; data-og-source-url=&quot;https://www.racktables.org/&quot; data-og-url=&quot;https://www.racktables.org/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Ip4Gz/hyXOjH2VYl/A9kSQ4NH61LOP6tbXq5sV1/img.png?width=471&amp;amp;height=313&amp;amp;face=0_0_471_313&quot;&gt;&lt;a href=&quot;https://www.racktables.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.racktables.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Ip4Gz/hyXOjH2VYl/A9kSQ4NH61LOP6tbXq5sV1/img.png?width=471&amp;amp;height=313&amp;amp;face=0_0_471_313');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;RackTables&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;RackTables is a nifty and robust solution for datacenter and server room asset management. It helps document hardware assets, network addresses, space in racks, networks configuration and much much more!&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.racktables.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;설치 환경&lt;/blockquote&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;VMware&lt;/li&gt;
&lt;li&gt;OS : Ubuntu 20.04&lt;/li&gt;
&lt;li&gt;CPU : 2vCPU&lt;/li&gt;
&lt;li&gt;Memory : 4GB&lt;/li&gt;
&lt;li&gt;HDD : 50GB&lt;/li&gt;
&lt;li&gt;IP : 192.168.111.50&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;OS 설치&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 Rack Tables에서 제공되는 메뉴얼을 살펴보면 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1735000477667&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;RackTables uses a web-server with PHP (7.0 is the minimum required version, 7.1
is the minimum tested version, 7.3 is the recommended version) for front-end and
a MySQL/MariaDB server version 5 or later for back-end. The most commonly used
web-server for RackTables is Apache httpd.

- PHP 버전 7.0 이상 7.3 권장
- MySQL/MariaDB는 5버전 이상을 권장
- Web Server는 어떠한 것을 사용해도 되지만, Apache를 보편적으로 가장 많이 사용함&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;위 조건만 충족되면 어떠한 OS에서 진행해도 무방하며, 저는 Ubuntu 20.04 버전을 설치했습니다&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;a href=&quot;https://releases.ubuntu.com/focal/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://releases.ubuntu.com/focal/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1735000521978&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Ubuntu 20.04.6 LTS (Focal Fossa)&quot; data-og-description=&quot;Select an image Ubuntu is distributed on three types of images described below. Desktop image The desktop image allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of image is what m&quot; data-og-host=&quot;releases.ubuntu.com&quot; data-og-source-url=&quot;https://releases.ubuntu.com/focal/&quot; data-og-url=&quot;https://releases.ubuntu.com/focal/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://releases.ubuntu.com/focal/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://releases.ubuntu.com/focal/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu 20.04.6 LTS (Focal Fossa)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Select an image Ubuntu is distributed on three types of images described below. Desktop image The desktop image allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of image is what m&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;releases.ubuntu.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS 설치 과정은 특별한 부분이 없으니 넘어가겠습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Rack Tables 의존 패키지 설치&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 OS 및 버전 별로 지원되는 설치 명령어 및 설정이 상이하니 참고하여 설치합니다&lt;/p&gt;
&lt;pre id=&quot;code_1735000976665&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;### 1.1. Install MySQL/MariaDB server

| Distribution       | How to do                                                               |
| ------------------ | ----------------------------------------------------------------------- |
| Debian 7           | `aptitude install mysql-server-5.1`                                     |
| Fedora 26          | `dnf install mariadb-server mariadb`                                    |
| Fedora 32          | `dnf install mariadb-server`                                            |
| FreeBSD 10         | `pkg install mysql56-server`                                            |
| openSUSE 42.1      | `zypper install mysql-community-server`                                 |
| Scientific&amp;amp;nbsp;Linux&amp;amp;nbsp;6 | `yum install mysql-server mysql` |
| Ubuntu 18.04       | `apt-get install mysql-server`                                          |
| Ubuntu 20.04       | `apt-get install mariadb-server`                                        |
| RHEL 7             | `yum install -y mariadb-server mariadb`                                 |

### 1.2. Enable Unicode in the MySQL/MariaDB server

| Distribution       | How to do                                                                                                          |
| ------------------ | ------------------------------------------------------------------------------------------------------------------ |
| Debian 7           | add `character-set-server=utf8` line to `[mysqld]` section of `/etc/mysql/my.cnf` file and restart mysqld          |
| Fedora 26-32       | ```printf &quot;[mysqld]\ncharacter-set-server=utf8\n&quot; &amp;gt; /etc/my.cnf.d/mysqld-charset.cnf; systemctl restart mariadb``` |
| openSUSE 42.1      | No action required, comes configured for UTF-8 by default.                                                         |
| Scientific&amp;amp;nbsp;Linux&amp;amp;nbsp;6 | add `character-set-server=utf8` line to `[mysqld]` section of `/etc/my.cnf` file and restart mysqld |
| Ubuntu 18.04       | ```printf &quot;[mysqld]\ncharacter-set-server=utf8\n&quot; &amp;gt; /etc/mysql/conf.d/charset.cnf; service mysql restart```        |
| Ubuntu 20.04       | No action required, comes configured for UTF-8 by default.                                                         |
| RHEL 7             | add `character-set-server=utf8` line to `[server]` section of `/etc/my.cnf.d/server.cnf` file and restart mysqld   |

### 1.3. Install PHP and Apache httpd (or nginx)

| Distribution       | How to do                                                                            |
| ------------------ | ------------------------------------------------------------------------------------ |
| Debian 7 (nginx)   | `aptitude install nginx php5-fpm` **(see note below)**                               |
| Fedora 26-32       | `dnf install httpd php php-mysqlnd php-pdo php-gd php-snmp php-mbstring php-bcmath`  |
| FreeBSD 10         | see note 1.3.c                                                                       | 
| openSUSE 42.1      | `zypper install apache2-mod_php5 php5-gd php5-mbstring php5-mysql php5-bcmath`       |
| Scientific&amp;amp;nbsp;Linux&amp;amp;nbsp;6 | `yum install httpd php php-mysql php-pdo php-gd php-mbstring php-bcmath` |
| Ubuntu 18.04       | `apt-get install apache2-bin libapache2-mod-php7.2 php7.2-gd php7.2-mysql php7.2-mbstring php7.2-bcmath php7.2-json php7.2-snmp`
| Ubuntu 20.04       | `apt-get install apache2-bin libapache2-mod-php7.4 php7.4-gd php7.4-mysql php7.4-mbstring php7.4-bcmath php7.4-json php7.4-snmp`
| RHEL 7             | `subscription-manager repos --enable=rhel-server-rhscl-7-rpms`
|                    | `yum install httpd24 rh-php70 rh-php70-php-mysqlnd rh-php70-php-pdo rh-php70-php-gd rh-php70-php-snmp rh-php70-php-mbstring rh-php70-php-bcmath rh-php70-php-ldap rh-php70-php`&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;저는 Ubuntu 20.04이므로 mariadb-server와 apache2, php-7.4 하위 의존 패키지를 설치했습니다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Rack Tables 설치 및 설정&lt;/blockquote&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;pre id=&quot;code_1735004371970&quot; class=&quot;n1ql&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;##### Common install steps
Apache users should create a racktables.conf file under their apache
Includes directory with the following contents:
```
AddType  application/x-httpd-php         .php
AddType  application/x-httpd-php-source  .phps

&amp;lt;Directory /usr/local/www/racktables/wwwroot&amp;gt;
	DirectoryIndex index.php
	Require all granted
&amp;lt;/Directory&amp;gt;
Alias /racktables /usr/local/www/racktables/wwwroot
```

Start services:
```
# echo 'apache24_enable=&quot;YES&quot;' &amp;gt;&amp;gt; /etc/rc.conf
# service apache24 start
# echo 'mysql_enable=&quot;YES&quot;' &amp;gt;&amp;gt; /etc/rc.conf
# service mysql-server start
```

Browse to http://address.to.your.server/racktables/index.php and follow the instructions.

Note: set `secret.php` permissions when prompted.
```
# chown www:www /usr/local/www/racktables/wwwroot/inc/secret.php
# chmod 400 /usr/local/www/racktables/wwwroot/inc/secret.php
```&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;&lt;b&gt;1. 설치 파일 다운로드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735000824875&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ cd /var/www
$ sudo wget https://sourceforge.net/projects/racktables/files/RackTables-0.22.0.tar.gz&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;&lt;b&gt;2. 압축해제&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735000854843&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo tar xzvf RackTables-0.22.0.tar.gz&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;&lt;b&gt;3. 소프트 링크 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735002748585&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo ln -s RackTables-0.22.0 racktables&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;&lt;b&gt;4. Apache 디렉토리에 racktables.conf 파일을 생성한 후 내용을 추가합니다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735003066199&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ cd /etc/apache2/
$ sudo vi racktables.conf

AddType  application/x-httpd-php         .php
AddType  application/x-httpd-php-source  .phps

&amp;lt;Directory /var/www/racktables/wwwroot&amp;gt;
	DirectoryIndex index.php
	Require all granted
&amp;lt;/Directory&amp;gt;
Alias /racktables /var/www/racktables/wwwroot

:wq&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;&lt;b&gt;5. apache2.conf 설정 파일에 내용을 추가합니다&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735004642430&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ pwd
/etc/apache2
$ sudo vi apache2.conf

...
LogLevel warn

# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# Include list of ports to listen on
Include ports.conf
Include racktables.conf ## 해당 내용 추가!!!!

...

:wq&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;&lt;b&gt;6. http://192.168.111.50/racktables/ 접속을 확인한 후 하이퍼링크 되어있는 here를 클릭합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyD80N/btsLyUGqBGU/wIVQNnIICDDVgELC0SbERk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyD80N/btsLyUGqBGU/wIVQNnIICDDVgELC0SbERk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyD80N/btsLyUGqBGU/wIVQNnIICDDVgELC0SbERk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyD80N%2FbtsLyUGqBGU%2FwIVQNnIICDDVgELC0SbERk%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;960&quot; height=&quot;1032&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&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;&lt;b&gt;7. 설치 마법사 화면이 출력되면 proceed를 누릅니다&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOQBMB/btsLzrRxDhD/wqTG7KHC1ZhuMNr7dTkRk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOQBMB/btsLzrRxDhD/wqTG7KHC1ZhuMNr7dTkRk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOQBMB/btsLzrRxDhD/wqTG7KHC1ZhuMNr7dTkRk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOQBMB%2FbtsLzrRxDhD%2FwqTG7KHC1ZhuMNr7dTkRk1%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;960&quot; height=&quot;760&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;760&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;&lt;b&gt;8. 패키지 설치가 되어있는지 확인하는 화면인데 노란색(LDAP, curl, pcntl, https)으로 칠해진 부분은 필수는 아니고 추후 설정이 가능하므로 이번에는 그냥 넘어갑니다&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;787&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s8nZF/btsLzqdZr4t/DLhzztZxi54xreERIL3N31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s8nZF/btsLzqdZr4t/DLhzztZxi54xreERIL3N31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s8nZF/btsLzqdZr4t/DLhzztZxi54xreERIL3N31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs8nZF%2FbtsLzqdZr4t%2FDLhzztZxi54xreERIL3N31%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;960&quot; height=&quot;787&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;787&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;&lt;b&gt;9. 화면에 적힌 touch ~ 부분을 복사해서 파일을 생성한 후 retry를 눌러줍니다&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735014184682&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo touch /var/www/racktables/wwwroot/inc/secret.php
$ sudo chmod a=rw /var/www/racktables/wwwroot/inc/secret.php&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NAmVx/btsLzwSPtev/ts3DGCq7xbyh9kQ2RnzVKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NAmVx/btsLzwSPtev/ts3DGCq7xbyh9kQ2RnzVKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NAmVx/btsLzwSPtev/ts3DGCq7xbyh9kQ2RnzVKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNAmVx%2FbtsLzwSPtev%2Fts3DGCq7xbyh9kQ2RnzVKK%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;960&quot; height=&quot;600&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&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;&lt;b&gt;10. mysql 접속 후 초록색 하이라이트 부분을 복사해 입력해줍니다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735013153566&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo mysql

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 38
Server version: 10.3.39-MariaDB-0ubuntu0.20.04.2 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql&amp;gt; CREATE DATABASE racktables_db CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.001 sec)

mysql&amp;gt; CREATE USER racktables_user@localhost IDENTIFIED BY 'MY_SECRET_PASSWORD';
Query OK, 1 row affected (0.001 sec)

mysql&amp;gt; GRANT ALL PRIVILEGES ON racktables_db.* TO racktables_user@localhost;
Query OK, 1 row affected (0.001 sec)

mysql&amp;gt; exit&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNsruq/btsLw8lEW9Y/56VWMuC0hoMwrRlOc0WKQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNsruq/btsLw8lEW9Y/56VWMuC0hoMwrRlOc0WKQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNsruq/btsLw8lEW9Y/56VWMuC0hoMwrRlOc0WKQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNsruq%2FbtsLw8lEW9Y%2F56VWMuC0hoMwrRlOc0WKQ0%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;960&quot; height=&quot;600&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;비밀번호는 수정하여 화면에 기입한 후 retry를 눌러줍니다&lt;/b&gt;&lt;/span&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;&lt;b&gt;11. 데이터베이스 연결 설정이 완료되었다는 문구가 뜨면 proceed를 눌러줍니다&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nK4bQ/btsLx3DNiCK/TOoOXpOVfoFpkMqDkLx7hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nK4bQ/btsLx3DNiCK/TOoOXpOVfoFpkMqDkLx7hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nK4bQ/btsLx3DNiCK/TOoOXpOVfoFpkMqDkLx7hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnK4bQ%2FbtsLx3DNiCK%2FTOoOXpOVfoFpkMqDkLx7hk%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;960&quot; height=&quot;600&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&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;&lt;b&gt;12. secret.php 파일에 대한 권한을 재설정한 후 retry를 누릅니다&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1735013377134&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo chown www-data:nogroup /var/www/racktables/wwwroot/inc/secret.php
$ sudo chmod 440 /var/www/racktables/wwwroot/inc/secret.php&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQPtjj/btsLz3W8rvd/2qpGIYCN9HBm5okLHgI7RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQPtjj/btsLz3W8rvd/2qpGIYCN9HBm5okLHgI7RK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQPtjj/btsLz3W8rvd/2qpGIYCN9HBm5okLHgI7RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQPtjj%2FbtsLz3W8rvd%2F2qpGIYCN9HBm5okLHgI7RK%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;960&quot; height=&quot;600&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&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;&lt;b&gt;13. secret.php 파일에 대한 권한 설정이 완료되었다는 문구가 뜨면 proceed를 누릅니다&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpDXol/btsLyvGVd6K/uTbtuGxQCnUuKmQYzl2qb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpDXol/btsLyvGVd6K/uTbtuGxQCnUuKmQYzl2qb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpDXol/btsLyvGVd6K/uTbtuGxQCnUuKmQYzl2qb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpDXol%2FbtsLyvGVd6K%2FuTbtuGxQCnUuKmQYzl2qb1%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;960&quot; height=&quot;600&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&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;&lt;b&gt;14. 데이터베이스 초기화가 완료되었다는 문구가 뜨면 proceed를 누릅니다&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eGdPn9/btsLyEqjmqa/j0hWT8KPDTjJ3kOOJi6Vr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eGdPn9/btsLyEqjmqa/j0hWT8KPDTjJ3kOOJi6Vr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eGdPn9/btsLyEqjmqa/j0hWT8KPDTjJ3kOOJi6Vr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeGdPn9%2FbtsLyEqjmqa%2Fj0hWT8KPDTjJ3kOOJi6Vr0%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;960&quot; height=&quot;600&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&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;&lt;b&gt;15. 관리자 계정 비밀번호가 설정되어있지 않아 설정하라는 화면입니다&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 비밀번호를 입력하고 retry를 누릅니다&lt;span style=&quot;color: #006dd7;&quot;&gt;(오타나지 않게 조심히 해주세요)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfp8N2/btsLAcsNSQg/ViRsTuLDkKh9DdRxNPR9i1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfp8N2/btsLAcsNSQg/ViRsTuLDkKh9DdRxNPR9i1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfp8N2/btsLAcsNSQg/ViRsTuLDkKh9DdRxNPR9i1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfp8N2%2FbtsLAcsNSQg%2FViRsTuLDkKh9DdRxNPR9i1%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;960&quot; height=&quot;600&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&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;&lt;b&gt;16. 관리자 비밀번호 설정이 완료되었다는 문구가 뜨면 proceed를 누릅니다&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzPyW0/btsLzd0e3M3/kzgazUFnL2PFKE62CxpKwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzPyW0/btsLzd0e3M3/kzgazUFnL2PFKE62CxpKwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzPyW0/btsLzd0e3M3/kzgazUFnL2PFKE62CxpKwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzPyW0%2FbtsLzd0e3M3%2FkzgazUFnL2PFKE62CxpKwK%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;960&quot; height=&quot;600&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&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;&lt;b&gt;17. RackTables에 대한 초기 설정이 완료되었다는 문구가 뜨고 관리자 계정의 ID는 admin이라고 알려주네요&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; proceed를 누릅니다&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ERsdl/btsLzrqunxX/V1TyE2MBI543nRPZ4RCNhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ERsdl/btsLzrqunxX/V1TyE2MBI543nRPZ4RCNhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ERsdl/btsLzrqunxX/V1TyE2MBI543nRPZ4RCNhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FERsdl%2FbtsLzrqunxX%2FV1TyE2MBI543nRPZ4RCNhK%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;960&quot; height=&quot;600&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;600&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;&lt;b&gt;18. 완료&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CmyVi/btsLzt2TdMy/qZKOglYY5C2O9PKMW9mKh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CmyVi/btsLzt2TdMy/qZKOglYY5C2O9PKMW9mKh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CmyVi/btsLzt2TdMy/qZKOglYY5C2O9PKMW9mKh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCmyVi%2FbtsLzt2TdMy%2FqZKOglYY5C2O9PKMW9mKh0%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;1920&quot; height=&quot;1032&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1032&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;마무리&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RackTables에서 제공하는 기능이 너무 많습니다&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;</description>
      <category>Study</category>
      <author>LeJus</author>
      <guid isPermaLink="true">https://lejus.tistory.com/5</guid>
      <comments>https://lejus.tistory.com/5#entry5comment</comments>
      <pubDate>Tue, 24 Dec 2024 13:25:05 +0900</pubDate>
    </item>
    <item>
      <title>[Network] mDNS로 인한 멀티캐스트 스톰</title>
      <link>https://lejus.tistory.com/4</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;개요&lt;/blockquote&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;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;mDNS : &lt;br /&gt;- Apple에서 개발한 근접 호스트 탐색 프로토콜 입니다.&lt;br /&gt;- UDP 5353 포트를 통해 통신하고 자신의 호스트 명과 IP를 멀티캐스트(IPv4: 224.0.0.251, IPv6: ff02::fb)를 통해 알립니다.&lt;br /&gt;- 만약 호스트 이름이 동일한 장치가 있을 경우 동일한 호스트 전체 목록에 뒤에 숫자를 붙여 구분한 뒤 각 호스트에 대한 IP 주소를 전부 멀티캐스트를 통해 전달합니다.(호스트명이 같은 장비가 200대가 있다면 host(1): 1.1.1.1 host(2): 1.1.1.2 ... 이런 식으로 패킷을 만들어 전달합니다. 패킷이 길어져 패킷 크기가 1514를 초과한다면 패킷을 분리해 전송합니다.)&lt;/li&gt;
&lt;li&gt;멀티캐스트 스톰&lt;br /&gt;-&amp;nbsp; 초당 발생할 수 있는 멀티캐스트량이 기준치를 초과하면 패킷 과다 발생으로 판단하고 이 상태를 Storm이라 칭합니다.&lt;br /&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;이번 글에서는 강의실 두 군데에서 모두 동일한 호스트명을 사용하게 되면서 약 100여대의 PC에서 mDNS 패킷을 과다 발생시키고 조치하는 과정에 대해서 설명하려 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Trouble Shooting 과정&lt;/blockquote&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;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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1238&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTrs5c/btsLmR3G7sz/WyEuCvtJWxVU68aN78mFbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTrs5c/btsLmR3G7sz/WyEuCvtJWxVU68aN78mFbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTrs5c/btsLmR3G7sz/WyEuCvtJWxVU68aN78mFbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTrs5c%2FbtsLmR3G7sz%2FWyEuCvtJWxVU68aN78mFbk%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;1238&quot; height=&quot;532&quot; data-origin-width=&quot;1238&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&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;네트워크 장비에 직접 붙여서 사용하는 사람이 있는 반면에, 허브를 사용하는 사용자도 있습니다.&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;증상은 다음과 같습니다.&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;네트워크 장비에 &lt;b&gt;직접 연결한 사용자&lt;/b&gt;는 네트워크에 &lt;b&gt;이상이 없다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;허브를 사용하는 사용자들 중 &lt;b&gt;1G급 이상 장비&lt;/b&gt;를 사용하는 사용자는 &lt;b&gt;이상이 없다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;허브를 사용하는 사용자들 중 &lt;b&gt;100M급 장비&lt;/b&gt;를 사용하는 사용자는 &lt;b&gt;네트워크가 불안정하다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;강의실에서 &lt;b&gt;강의가 진행&lt;/b&gt;될 경우 위 허브를 사용하는 사용자들의 네&lt;b&gt;트워크가 불안정하다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;강의실의 &lt;b&gt;PC가 모두 꺼지면&lt;/b&gt; 네트워크에 &lt;b&gt;이상이 없다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 바탕으로 각 사용자들의 장비에 이상이 없는 것을 확인하고 패킷 검사를 진행했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mrl2K/btsLmUTUEoy/GlD3lyKjbEj3A2VOPbniWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mrl2K/btsLmUTUEoy/GlD3lyKjbEj3A2VOPbniWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mrl2K/btsLmUTUEoy/GlD3lyKjbEj3A2VOPbniWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmrl2K%2FbtsLmUTUEoy%2FGlD3lyKjbEj3A2VOPbniWK%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;1920&quot; height=&quot;1032&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1032&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;해당 패킷은 네트워크 장비에서 모니터링한 것이 아니라 클라이언트 PC에서 1분간 모니터링한 결과입니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;20&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SoeKh/btsLmRW98NF/2ZqAfk1a6pIij58GbZuopk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SoeKh/btsLmRW98NF/2ZqAfk1a6pIij58GbZuopk/img.png&quot; data-alt=&quot;MDNS 패킷만 피터링한 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SoeKh/btsLmRW98NF/2ZqAfk1a6pIij58GbZuopk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSoeKh%2FbtsLmRW98NF%2F2ZqAfk1a6pIij58GbZuopk%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;460&quot; height=&quot;20&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;20&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;MDNS 패킷만 피터링한 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무려 1분에 발생한 패킷이, 그것도 클라이언트에서 발생한 패킷이 77만건이 넘어가고 MDNS 관련 패킷만 확인한 결과 98.2%를 차지하고 있습니다. ㄷㄷㄷ&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dT0pQ5/btsLk9ZvR9f/nIIxwcBKypKDMtrFbEM9n0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dT0pQ5/btsLk9ZvR9f/nIIxwcBKypKDMtrFbEM9n0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dT0pQ5/btsLk9ZvR9f/nIIxwcBKypKDMtrFbEM9n0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdT0pQ5%2FbtsLk9ZvR9f%2FnIIxwcBKypKDMtrFbEM9n0%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;790&quot; height=&quot;324&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;324&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;패킷 내용은 보안상의 이유로 보여드릴 수는 없지만 모두 MDNS를 통해 자신을 알리고, 동일한 PC명을 가진 호스트들의 전체적인 정보가 멀티캐스트로 뿌려지고 있습니다. 그 내용이 너무 커서 PDU 사이즈를 초과해 여러 개의 패킷으로 나누어져 보내지고 있는것이 보입니다.&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;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;그것은 바로 대역폭이었습니다.&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;p data-ke-size=&quot;size16&quot;&gt;그 이유는 저렇게 많은 MDNS 패킷을 전달하는 과정에서 대역폭을 모두 사용했기 때&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;blockquote data-ke-style=&quot;style2&quot;&gt;조치 및 결과&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1차 조치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 장비에서 해당 클라이언트까지의 MDNS 패킷을 차단해보았습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRWqd2/btsLmlxUZZ6/eSschNbjHrHt9nFszJ0ppK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRWqd2/btsLmlxUZZ6/eSschNbjHrHt9nFszJ0ppK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRWqd2/btsLmlxUZZ6/eSschNbjHrHt9nFszJ0ppK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRWqd2%2FbtsLmlxUZZ6%2FeSschNbjHrHt9nFszJ0ppK%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;1920&quot; height=&quot;1032&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1032&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;20&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Tztwm/btsLnbagmrg/v6TY0Moak4kJkZhCdC02f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Tztwm/btsLnbagmrg/v6TY0Moak4kJkZhCdC02f0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Tztwm/btsLnbagmrg/v6TY0Moak4kJkZhCdC02f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTztwm%2FbtsLnbagmrg%2Fv6TY0Moak4kJkZhCdC02f0%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;426&quot; height=&quot;20&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;20&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;1차 조치 결과 아주 많이 패킷이 줄어든 것이 확인되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2차 조치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MDNS 패킷 차단 후 눈에 띄게 패킷이 줄어든 것이 확인되었고 강의실 내부의 MDNS 서비스를 모두 끄기로 했습니다.&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;391&quot; data-origin-height=&quot;18&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RBnZF/btsLmnJjOwb/JNHZ5MFwZjf7qYtJnTIInk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RBnZF/btsLmnJjOwb/JNHZ5MFwZjf7qYtJnTIInk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RBnZF/btsLmnJjOwb/JNHZ5MFwZjf7qYtJnTIInk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRBnZF%2FbtsLmnJjOwb%2FJNHZ5MFwZjf7qYtJnTIInk%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;391&quot; height=&quot;18&quot; data-origin-width=&quot;391&quot; data-origin-height=&quot;18&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;MDNS 패킷의 비중이 거의 사라졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;마무리&lt;/blockquote&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;</description>
      <category>Network</category>
      <category>mDNS</category>
      <author>LeJus</author>
      <guid isPermaLink="true">https://lejus.tistory.com/4</guid>
      <comments>https://lejus.tistory.com/4#entry4comment</comments>
      <pubDate>Wed, 18 Dec 2024 13:16:54 +0900</pubDate>
    </item>
    <item>
      <title>[Zabbix] Docker-Compose로 Active Proxy 연동 하기</title>
      <link>https://lejus.tistory.com/3</link>
      <description>&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;작업 환경&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;VMware&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;OS : Ubuntu 24.04(LTS)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;CPU : 4vCPU&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Memory : 8GB&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Zabbix : ubuntu-7.0-latest&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Database: Postgres 14&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;사용 계정 : zabbix: uid=1001(zabbix)&amp;nbsp;gid=1001(zabbix)&amp;nbsp;groups=1001(zabbix),4(adm),27(sudo)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;프록시 서버 IP : 192.168.111.90, 192.168.111.91&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Zabbix 서버 IP : 192.168.111.80&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Zabbix의 Proxy&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Proxy는 요청을 대신 처리하는 대리자 정도로 생각하면 된다.&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;그 중 Zabbix에서 사용하는 Proxy 모드가 두 가지 있는데 Passive와 Active가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Active Proxy&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I079i/btsLkV7t6IT/gEHFiBvZL1hmB1wBhOAsa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I079i/btsLkV7t6IT/gEHFiBvZL1hmB1wBhOAsa0/img.png&quot; data-alt=&quot;출처: https://www.zabbix.com/documentation/current/en/manual/distributed_monitoring/proxies&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I079i/btsLkV7t6IT/gEHFiBvZL1hmB1wBhOAsa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI079i%2FbtsLkV7t6IT%2FgEHFiBvZL1hmB1wBhOAsa0%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;871&quot; height=&quot;342&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://www.zabbix.com/documentation/current/en/manual/distributed_monitoring/proxies&lt;/figcaption&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;Active Proxy는 Zabbix Server가 수행할 작업을 대신 수행한 후 결과를 서버에 돌려주는 역할을 한다. 만약 호스트가 200대가 있는데 SNMP 모니터링을 해야 한다고 했을 때, Proxy가 없다면 서버가 200대의 호스트에 SNMP 요청을 보내고, 가져온 데이터를 처리하는 과정까지 모두 진행하기 때문에 서버에 부담이 가게 됩니다.&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;이 부담을 줄여주는 것이 바로 Active Proxy로 200대에 대한 SNMP 요청을 Proxy 서버가 대신 수행하고 결과를 리턴하면 Server는 처리만 하면 되기 때문에 Zabbix Server의 성능을 고려한다면 반드시 사용하는 것이 좋습니다.&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;참고로 Active Proxy는 제약사항이 있다. (당연한 거지만)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SNMP, agent 통신 등 요청을 통한 데이터 수집은 가능하지만, SNMP Trap과 같이 Agent에서 전달받는 데이터는 처리가 되지 않습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Passive Proxy&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Passive Proxy는 Zabbix Server가 외부에 공개되는 것을 방지하고, Agent가 보내는 요청을 Passive Proxy가 대신 받아 처리한 후 전달하는 역할을 합니다.&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;b&gt;Active Proxy&lt;/b&gt;에 대한 설치 및 설정 작업을 진행합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;Docker 설치 및 테스트&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Docker의 설치는 공식 홈페이지의 가이드를 따라 진행했습니다&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;더욱 자세한 내용을 알고 싶으시면 아래 링크 참고해주세요&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot;&gt;https://docs.docker.com/engine/install/ubuntu/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1734414493267&quot; style=&quot;color: #333333; text-align: start;&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4U2zP/hyXKk76Q5B/uzBbEktf6f0GWyzGJq0OUK/img.jpg?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260&quot; data-og-url=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; data-og-source-url=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; data-og-host=&quot;docs.docker.com&quot; data-og-description=&quot;Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.&quot; data-og-title=&quot;Ubuntu&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; data-source-url=&quot;https://docs.docker.com/engine/install/ubuntu/&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 설치 전 충돌 가능성이 있는 패키지를 제거&lt;/b&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;$ for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 레포지토리 등록&lt;/b&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;# Add Docker's official GPG key:&lt;br /&gt;$ sudo apt-get update&lt;br /&gt;$ sudo apt-get install ca-certificates curl&lt;br /&gt;$ sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;$ sudo curl -fsSL &lt;a href=&quot;https://download.docker.com/linux/ubuntu/gpg&quot;&gt;https://download.docker.com/linux/ubuntu/gpg&lt;/a&gt; -o /etc/apt/keyrings/docker.asc&lt;br /&gt;$ sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;&lt;br /&gt;# Add the repository to Apt sources:&lt;br /&gt;$ echo \ &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] &lt;a href=&quot;https://download.docker.com/linux/ubuntu&quot;&gt;https://download.docker.com/linux/ubuntu&lt;/a&gt; \&lt;br /&gt;$(. /etc/os-release &amp;amp;&amp;amp; echo &quot;$VERSION_CODENAME&quot;) stable&quot; | \&lt;br /&gt;sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null sudo apt-get update&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 패키지 설치&lt;/b&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Docker Test&lt;/b&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;$ sudo docker run hello-world&lt;br /&gt;Unable to find image 'hello-world:latest' locally # 이미지가 현재 로컬에 설치되어 있지 않음을 알림&lt;br /&gt;latest: Pulling from library/hello-world # 자동으로 hello-world를 찾고 image를 latest 태그로 설치함&lt;br /&gt;c1ec31eb5944: Pull complete # 설치 완료&lt;br /&gt;Digest: sha256:553c995e16e3178003c1227821318999dad22dac3dbb877aac3c28182255c736&lt;br /&gt;Status: Downloaded newer image for hello-world:latest&lt;br /&gt;&lt;br /&gt;Hello from Docker!&lt;br /&gt;This message shows that your installation appears to be working correctly.&lt;br /&gt;&lt;br /&gt;To generate this message, Docker took the following steps:&lt;br /&gt;1. The Docker client contacted the Docker daemon.&lt;br /&gt;2. The Docker daemon pulled the &quot;hello-world&quot; image from the Docker Hub. (amd64)&lt;br /&gt;3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.&lt;br /&gt;4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.&lt;br /&gt;&lt;br /&gt;To try something more ambitious, you can run an Ubuntu container with:&lt;br /&gt;&amp;nbsp; $ docker run -it ubuntu bash&lt;br /&gt;&lt;br /&gt;Share images, automate workflows, and more with a free Docker ID:&lt;br /&gt;&amp;nbsp; &lt;a href=&quot;https://hub.docker.com/&quot;&gt;https://hub.docker.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For more examples and ideas, visit:&lt;br /&gt;&amp;nbsp; &lt;a href=&quot;https://docs.docker.com/get-started/&quot;&gt;https://docs.docker.com/get-started/&lt;/a&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. Docker Process 확인&lt;/b&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;$ sudo docker images&lt;br /&gt;REPOSITORY TAG&amp;nbsp; &amp;nbsp; IMAGE&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ID&amp;nbsp; &amp;nbsp;CREATED&amp;nbsp; &amp;nbsp; SIZE&lt;br /&gt;hello-world&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; latest&amp;nbsp; d2c94e258dcb 19&amp;nbsp; &amp;nbsp; months ago&amp;nbsp; 13.3kB&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;Docker Compose 설치 및 테스트&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. docker-compose 패키지 설치&lt;/b&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;$ sudo apt install docker-compose&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. compose 파일 만들기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;!! compose 파일은 반드시 작업 디렉토리에서 만들어야 합니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;!! compose 파일은 이름을 반드시 맞춰 주어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp; &amp;nbsp;- compose.yaml(권장) **&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp; &amp;nbsp;- compose.yml&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp; &amp;nbsp;- docker-compose.yaml&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp; &amp;nbsp;- docker-compose.yml&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;!! compose 파일에서 하위 항목의 구분은 공백 2칸씩 늘려가기 때문에 반드시 지켜야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;!! compose 파일에서 ${변수명} 형식은 .env파일에 작성해주어야 사용 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1734414536308&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vi ~/compose.yaml

services:
  mysql:
    image: mysql:8.0.30
    container_name: zabbix-mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DB}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - zabbix-network

  zabbix-proxy:
    image: zabbix/zabbix-proxy-mysql:latest
    container_name: zabbix-proxy
    mem_limit: 8g
    environment:
      ZBX_PROXY_MODE: 1
      ZBX_SERVER_HOST: 192.168.111.80  # Zabbix Server의 IP 주소
      ZBX_HOSTNAME: zabbix-proxy # 해당 이름이 가장 중요!!!
      DB_SERVER_HOST: zabbix-mysql
      MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_DBNAME: ${MYSQL_DB}
      # 아래는 zabbix_proxy.conf 파일에 대한 값을 수정할 수 있다.
      ZBX_CONFIGFREQUENCY: 300​
      ZBX_CACHESIZE: 1G
      ZBX_HISTORYCACHESIZE: 384M
      ZBX_HISTORYINDEXCACHESIZE: 96M
      ZBX_STARTPOLLERS: 150
      ZBX_STARTPOLLERSUNREACHABLE: 30
      ZBX_STARTVMWARECOLLECTORS: 5
      ZBX_VMWAREFREQUENCY: 120
      ZBX_VMWAREPERFFREQUENCY: 120
      ZBX_VMWARECACHESIZE: 32M
      ZBX_VMWARETIMEOUT: 10
    depends_on:
      - mysql
    volumes:
      - proxy-data:/var/lib/zabbix
    ports:
      - &quot;10051:10051&quot;
    networks:
      - zabbix-network

  zabbix-agent:
    image: zabbix/zabbix-agent:latest
    container_name: zabbix-agent
    restart: unless-stopped
    privileged: true
    ports:
      - '10050:10050'
    environment:
      ZBX_SERVER_HOST: 192.168.111.80
      ZBX_HOSTNAME: Zabbix proxy
    networks:
      - zabbix-network

volumes:
  mysql-data:
  proxy-data:

networks:
  zabbix-network:
    driver: bridge&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. .env 파일 만들기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1734414592721&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vi ~/.env
MYSQL_USER=zabbix
MYSQL_PASSWORD=Input youer password
MYSQL_DB=zabbix_proxy&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. docker compose 구동&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1734414693147&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo docker-compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 컨테이너 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1734414698643&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo docker ps -a
CONTAINER ID   IMAGE                              COMMAND                  CREATED       STATUS      PORTS                                           NAMES
15850c85c9a6   zabbix/zabbix-proxy-mysql:latest   &quot;/usr/bin/docker-ent&amp;hellip;&quot;   2 weeks ago   Up 7 days   0.0.0.0:10051-&amp;gt;10051/tcp, :::10051-&amp;gt;10051/tcp   zabbix-proxy
002bd58c61cd   zabbix/zabbix-agent:latest         &quot;/usr/bin/docker-ent&amp;hellip;&quot;   2 weeks ago   Up 7 days   0.0.0.0:10050-&amp;gt;10050/tcp, :::10050-&amp;gt;10050/tcp   zabbix-agent
8e721d31b1d2   mysql:8.0.30                       &quot;docker-entrypoint.s&amp;hellip;&quot;   2 weeks ago   Up 7 days   3306/tcp, 33060/tcp                             zabbix-mysql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Zabbix 설정&lt;/blockquote&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;b&gt;1. 왼쪽 메뉴 중 관리 - 프록시에서 우측 상단의 프록시 생성 버튼 클릭&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;909&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNHhm8/btsLmM2fjLO/AGCp7aTZMfk1YLVPMg6r8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNHhm8/btsLmM2fjLO/AGCp7aTZMfk1YLVPMg6r8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNHhm8/btsLmM2fjLO/AGCp7aTZMfk1YLVPMg6r8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNHhm8%2FbtsLmM2fjLO%2FAGCp7aTZMfk1YLVPMg6r8K%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;1920&quot; height=&quot;909&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;909&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;&lt;b&gt;2. 위에서 설정한 compose.yaml 파일에서 zabbix-proxy의 ZBX_HOSTNAME인 zabbix-proxy를 입력&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcYDhJ/btsLmqyoQED/CFF6Rnv7eeVmetcjLhgIN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcYDhJ/btsLmqyoQED/CFF6Rnv7eeVmetcjLhgIN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcYDhJ/btsLmqyoQED/CFF6Rnv7eeVmetcjLhgIN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcYDhJ%2FbtsLmqyoQED%2FCFF6Rnv7eeVmetcjLhgIN1%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;724&quot; height=&quot;404&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;404&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;정상적으로 등록되면 아래와 같이 연결되었다고 나옵니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1qsuN/btsLlO1ggiv/rSlLM8uJ1WcDQr8id8cIuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1qsuN/btsLlO1ggiv/rSlLM8uJ1WcDQr8id8cIuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1qsuN/btsLlO1ggiv/rSlLM8uJ1WcDQr8id8cIuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1qsuN%2FbtsLlO1ggiv%2FrSlLM8uJ1WcDQr8id8cIuk%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;1736&quot; height=&quot;190&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;190&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;&lt;b&gt;3. 데이터 수집 - 호스트에서 호스트 중 데이터를 수집할 호스트를 선택하고, 감시용 서버를 프록시로 변경하고 선택 클릭&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3vxz3/btsLlajlDkH/WMas64KpbbDbgyyJXptByk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3vxz3/btsLlajlDkH/WMas64KpbbDbgyyJXptByk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3vxz3/btsLlajlDkH/WMas64KpbbDbgyyJXptByk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3vxz3%2FbtsLlajlDkH%2FWMas64KpbbDbgyyJXptByk%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;1046&quot; height=&quot;675&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;675&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;&lt;b&gt;4. 생성한 zabbix-proxy 선택&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;672&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uIFtx/btsLl072jqe/h7udR1TqdtIs159Z2Kd9J0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uIFtx/btsLl072jqe/h7udR1TqdtIs159Z2Kd9J0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uIFtx/btsLl072jqe/h7udR1TqdtIs159Z2Kd9J0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuIFtx%2FbtsLl072jqe%2Fh7udR1TqdtIs159Z2Kd9J0%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;1048&quot; height=&quot;672&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;672&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;&lt;b&gt;5. 갱신 버튼 클릭&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;674&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pj78Z/btsLmVLygFE/nNpKEKajq51DrzA6N3a6PK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pj78Z/btsLmVLygFE/nNpKEKajq51DrzA6N3a6PK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pj78Z/btsLmVLygFE/nNpKEKajq51DrzA6N3a6PK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpj78Z%2FbtsLmVLygFE%2FnNpKEKajq51DrzA6N3a6PK%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;1046&quot; height=&quot;674&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;674&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;&lt;b&gt;6. 적용 확인 및 에이전트 통신 확인&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1329&quot; data-origin-height=&quot;25&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dga4kf/btsLmswnFGv/y2lk0dR4H1KdTkF3fSXnnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dga4kf/btsLmswnFGv/y2lk0dR4H1KdTkF3fSXnnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dga4kf/btsLmswnFGv/y2lk0dR4H1KdTkF3fSXnnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdga4kf%2FbtsLmswnFGv%2Fy2lk0dR4H1KdTkF3fSXnnk%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;1329&quot; height=&quot;25&quot; data-origin-width=&quot;1329&quot; data-origin-height=&quot;25&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Zabbix Proxy Group 설정&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능상의 이유로 여러 대의 Proxy 서버를 두고 사용한다면 Proxy Group을 사용할 수 있다.&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;Proxy를 하나의 Group에 모아두고 여러 호스트에 Proxy Group을 설정하면 Zabbix Server에서 자동으로 Load Balancing을 진행해 Proxy 서버를 적절하게 나누어 배치하도록 설정되어 있습니다.&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;참고로 위에서 설정한 것과 동일하게 zabbix-proxy2라는 호스트를 만들어 두었습니다.&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;b&gt;1. 왼쪽 메뉴 중 관리 - proxy groups에서 create proxy group 클릭합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;910&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eE0xBN/btsLmUeWHsL/9tFqx5OjLkLhCYjCyHd8t0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eE0xBN/btsLmUeWHsL/9tFqx5OjLkLhCYjCyHd8t0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eE0xBN/btsLmUeWHsL/9tFqx5OjLkLhCYjCyHd8t0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeE0xBN%2FbtsLmUeWHsL%2F9tFqx5OjLkLhCYjCyHd8t0%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;1920&quot; height=&quot;910&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;910&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;&lt;b&gt;2. Proxy Group 이름 작성 후 추가 버튼 클릭한다. 여기서는 Switch proxy라는 이름을 사용하겠습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk9gJ7/btsLlMI9ull/SyYTx2f7bvpjKkM2P6Tp71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk9gJ7/btsLlMI9ull/SyYTx2f7bvpjKkM2P6Tp71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk9gJ7/btsLlMI9ull/SyYTx2f7bvpjKkM2P6Tp71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk9gJ7%2FbtsLlMI9ull%2FSyYTx2f7bvpjKkM2P6Tp71%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;722&quot; height=&quot;308&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;308&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nudmo/btsLlN2jY3y/FiBNTc9iGEKh6xlMciK0V0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nudmo/btsLlN2jY3y/FiBNTc9iGEKh6xlMciK0V0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nudmo/btsLlN2jY3y/FiBNTc9iGEKh6xlMciK0V0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnudmo%2FbtsLlN2jY3y%2FFiBNTc9iGEKh6xlMciK0V0%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;1206&quot; height=&quot;92&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;92&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;&lt;b&gt;3. 왼쪽 메뉴 중 관리 - 프록시에서 만들어 둔 프록시 호스트를 선택하고 Proxy Group을 Switch Proxy로 변경하면 Address for active agents라는 항목이 나온는데 이곳에 Proxy 서버의 IP를 작성합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;475&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpQAVI/btsLlNgYOHs/Xybbhz2IrZYZqOS6PG6WF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpQAVI/btsLlNgYOHs/Xybbhz2IrZYZqOS6PG6WF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpQAVI/btsLlNgYOHs/Xybbhz2IrZYZqOS6PG6WF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpQAVI%2FbtsLlNgYOHs%2FXybbhz2IrZYZqOS6PG6WF1%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;723&quot; height=&quot;475&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;475&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;&lt;b&gt;4. 왼쪽 메뉴 중 데이터 수집 - 호스트에서 각 호스트들의 감시용 서버를 Proxy group으로 변경한 후 Switch proxy를 선택한다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;711&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boV3A3/btsLli9jqXh/0hGwpF9R9iuEyH2Q41Hw00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boV3A3/btsLli9jqXh/0hGwpF9R9iuEyH2Q41Hw00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boV3A3/btsLli9jqXh/0hGwpF9R9iuEyH2Q41Hw00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboV3A3%2FbtsLli9jqXh%2F0hGwpF9R9iuEyH2Q41Hw00%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;1048&quot; height=&quot;711&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;711&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;&lt;b&gt;5. 각 호스트들의 proxy가 잘 분산되었는지 확인합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N9Zrp/btsLkXYQvoj/PYDwITIp25Kzd2ktI0T9AK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N9Zrp/btsLkXYQvoj/PYDwITIp25Kzd2ktI0T9AK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N9Zrp/btsLkXYQvoj/PYDwITIp25Kzd2ktI0T9AK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN9Zrp%2FbtsLkXYQvoj%2FPYDwITIp25Kzd2ktI0T9AK%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;740&quot; height=&quot;864&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;864&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1qsuN/btsLlO1ggiv/rSlLM8uJ1WcDQr8id8cIuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1qsuN/btsLlO1ggiv/rSlLM8uJ1WcDQr8id8cIuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1qsuN/btsLlO1ggiv/rSlLM8uJ1WcDQr8id8cIuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1qsuN%2FbtsLlO1ggiv%2FrSlLM8uJ1WcDQr8id8cIuk%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;1736&quot; height=&quot;190&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;190&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;마무리&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로써 Zabbix Proxy(Active)에 대한 설정이 완료되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Zabbix</category>
      <category>active proxy</category>
      <category>Proxy</category>
      <category>ZABBIX</category>
      <author>LeJus</author>
      <guid isPermaLink="true">https://lejus.tistory.com/3</guid>
      <comments>https://lejus.tistory.com/3#entry3comment</comments>
      <pubDate>Tue, 17 Dec 2024 17:23:03 +0900</pubDate>
    </item>
    <item>
      <title>[Zabbix] Docker-Compose로 구축하기</title>
      <link>https://lejus.tistory.com/2</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;작업 환경&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VMware&lt;/li&gt;
&lt;li&gt;OS : Ubuntu 24.04(LTS)&lt;/li&gt;
&lt;li&gt;CPU : 4vCPU&lt;/li&gt;
&lt;li&gt;Memory : 8GB&lt;/li&gt;
&lt;li&gt;Zabbix : ubuntu-7.0-latest&lt;/li&gt;
&lt;li&gt;Database: Postgres 14&lt;/li&gt;
&lt;li&gt;사용 계정 : zabbix: uid=1001(zabbix)&amp;nbsp;gid=1001(zabbix)&amp;nbsp;groups=1001(zabbix),4(adm),27(sudo)&lt;/li&gt;
&lt;li&gt;서버 IP: 192.168.111.80&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Docker 설치 및 테스트&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker의 설치는 공식 홈페이지의 가이드를 따라 진행했습니다&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;&lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.docker.com/engine/install/ubuntu/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1734307904834&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Ubuntu&quot; data-og-description=&quot;Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.&quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; data-og-url=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4U2zP/hyXKk76Q5B/uzBbEktf6f0GWyzGJq0OUK/img.jpg?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260&quot;&gt;&lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.docker.com/engine/install/ubuntu/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4U2zP/hyXKk76Q5B/uzBbEktf6f0GWyzGJq0OUK/img.jpg?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;b&gt;1. 설치 전 충돌 가능성이 있는 패키지를 제거&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;$ for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done&lt;/blockquote&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;b&gt;2. 레포지토리 등록&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;# Add Docker's official GPG key: &lt;br /&gt;$ sudo apt-get update&lt;br /&gt;$ sudo apt-get install ca-certificates curl&lt;br /&gt;$ sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;$ sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;&lt;br /&gt;# Add the repository to Apt sources:&lt;br /&gt;$ echo \ &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ &lt;br /&gt;$(. /etc/os-release &amp;amp;&amp;amp; echo &quot;$VERSION_CODENAME&quot;) stable&quot; | \ &lt;br /&gt;sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null sudo apt-get update&lt;/blockquote&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;b&gt;3. 패키지 설치&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;/blockquote&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;b&gt;4. Docker Test&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;zabbix@zabbix-docker:~$ sudo docker run hello-world&lt;br /&gt;Unable to find image 'hello-world:latest' locally&lt;br /&gt;latest: Pulling from library/hello-world&lt;br /&gt;c1ec31eb5944: Pull complete &lt;br /&gt;Digest: sha256:553c995e16e3178003c1227821318999dad22dac3dbb877aac3c28182255c736&lt;br /&gt;Status: Downloaded newer image for hello-world:latest &lt;br /&gt;&lt;br /&gt;Hello from Docker! &lt;br /&gt;This message shows that your installation appears to be working correctly. &lt;br /&gt;&lt;br /&gt;To generate this message, Docker took the following steps: &lt;br /&gt;1. The Docker client contacted the Docker daemon. &lt;br /&gt;2. The Docker daemon pulled the &quot;hello-world&quot; image from the Docker Hub. (amd64) &lt;br /&gt;3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. &lt;br /&gt;4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. &lt;br /&gt;&lt;br /&gt;To try something more ambitious, you can run an Ubuntu container with: &lt;br /&gt;&amp;nbsp; $ docker run -it ubuntu bash &lt;br /&gt;&lt;br /&gt;Share images, automate workflows, and more with a free Docker ID: &lt;br /&gt;&amp;nbsp; https://hub.docker.com/ &lt;br /&gt;&lt;br /&gt;For more examples and ideas, visit: &lt;br /&gt;&amp;nbsp; https://docs.docker.com/get-started/&lt;/blockquote&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;b&gt;5. Docker Process 확인&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;zabbix@zabbix-docker:~$ sudo docker images&lt;br /&gt;REPOSITORY TAG&amp;nbsp; &amp;nbsp; IMAGE&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ID&amp;nbsp; &amp;nbsp;CREATED&amp;nbsp; &amp;nbsp; SIZE&lt;br /&gt;hello-world&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; latest&amp;nbsp; d2c94e258dcb 19&amp;nbsp; &amp;nbsp; months ago&amp;nbsp; 13.3kB&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Docker Compose 설치 및 테스트&lt;/blockquote&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;b&gt;1. docker-compose 패키지 설치&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;$ sudo apt install docker-compose&lt;/blockquote&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;b&gt;2. compose 파일 만들기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;!! compose 파일은 반드시 작업 디렉토리에서 만들어야 합니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;!! compose 파일은 이름을 반드시 맞춰 주어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp; &amp;nbsp;- compose.yaml(권장) **&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp; &amp;nbsp;- compose.yml&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp; &amp;nbsp;- docker-compose.yaml&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp; &amp;nbsp;- docker-compose.yml&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;!! compose 파일에서 하위 항목의 구분은 공백 2칸씩 늘려가기 때문에 반드시 지켜야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;!! compose 파일에서 ${변수명} 형식은 .env파일에 작성해주어야 사용 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1734330751074&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;services:
  postgres-server:
    container_name: postgres-server
    image: postgres:14.0-alpine
    restart: always
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
      PG_DATA: /var/lib/postgresql/data/pgdata
    volumes:
      - postgres-data:/var/lib/postgresql/data
      - ./public/postgres/postgresql.conf:/var/lib/postgresql/data/postgresql.conf
    networks:
      zabbix-network:
        ipv4_address: 172.26.0.10

  zabbix-server:
    container_name: zabbix-server
    image: zabbix/zabbix-server-pgsql:ubuntu-7.0-latest
    restart: always
    mem_limit: 12g
    ports:
      - '10051:10051'
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
      ZBX_HISTORYSTORAGETYPES: log,text
      ZBX_DEBUGLEVEL: 1
      ZBX_HOUSEKEEPINGFREQUENCY: 1
      ZBX_MAXHOUSEKEEPERDELETE: 5000
    depends_on:
      - postgres-server
    volumes:
      - ./public/server/zabbix_server.conf:/etc/zabbix/zabbix_server.conf:ro
      - zabbix-data:/var/lib/zabbix
    networks:
      zabbix-network:
        ipv4_address: 172.26.0.20

  zabbix-frontend:
    container_name: zabbix-frontend
    image: zabbix/zabbix-web-nginx-pgsql:ubuntu-7.0-latest
    restart: always
    ports:
      - '80:8080'
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
      ZBX_SERVER_HOST: zabbix-server
      ZBX_POSTMAXSIZE: 64M
      PHP_TZ: ${TZ}
      ZBX_MAXEXECUTIONTIME: 500
      TZ: &quot;Asia/Seoul&quot;
    depends_on:
      - postgres-server
      - zabbix-server
    volumes:
      - zabbix-frontend-data:/usr/share/zabbix
      # 리포트 연동으로 필요 시 주석 해제
      # - ./public/frontend/zabbix-pdf-report:/usr/share/zabbix/zabbix-pdf-report 
    networks:
      zabbix-network:
        ipv4_address: 172.26.0.30

  zabbix-agent:
    container_name: zabbix-agent
    image: zabbix/zabbix-agent:latest
    ports:
      - '10050:10050'
    privileged: true
    restart: unless-stopped
    environment:
      ZBX_SERVER_HOST: 172.26.0.20
      ZBX_HOSTNAME: Zabbix server
    volumes:
      # Syslog 연동으로 필요 시 주석 해제
      # - ./public/agent/syslog.log:/etc/zabbix/logs/syslog.log 
    networks:
      zabbix-network:
        ipv4_address: 172.26.0.40

networks:
  zabbix-network:
    ipam:
      driver: default
      config:
        - subnet: 172.26.0.0/16

volumes:
  postgres-data:
  zabbix-data:
  zabbix-frontend-data:&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;&lt;b&gt;3. .env 파일 만들기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1734331925401&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;POSTGRES_USER=zabbix
POSTGRES_PASSWORD=Input your password
POSTGRES_DB=zabbix
TZ=Asia/Seoul&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;&lt;b&gt;4. 의존 파일 및 디렉토리 생성하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1734332016785&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ mkdir -p ~/public/server
$ mkdir -p ~/public/frontend
$ mkdir -p ~/public/postgress
$ mkdir -p ~/public/agent&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;&lt;span style=&quot;color: #ee2323;&quot;&gt;!! 아래 config 파일 내용은 각 서버 환경에 맞게 수정이 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1734334058904&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;### postgres-server ### &amp;lt;- wal size 관리를 위한 config 파일 수정
$ vi ~/public/postgres/postgresql.conf

listen_addresses = '*' 
max_wal_size = 4GB
min_wal_size = 80MB
log_timezone = 'KST'
datestyle = 'iso, mdy'
timezone = 'KST'
default_text_search_config = 'pg_catalog.english'

### zabbix-server ### &amp;lt;- 메모리 관리를 위한 config 파일 수정
$ vi ~/public/server/zabbix_server.conf
LogType=console
DebugLevel=1
SocketDir=/tmp/
DBHost=postgres-server
DBName=zabbix
DBSchema=public
DBUser=zabbix
DBPassword=&amp;lt;Input your password&amp;gt;
DBPort=5432
HistoryStorageTypes=log,text
HousekeepingFrequency=1
MaxHousekeeperDelete=5000
CacheSize=4096M
HistoryCacheSize=1024M
HistoryIndexCacheSize=1024M
TrendCacheSize=256M
TrendFunctionCacheSize=256M
ValueCacheSize=1024M

AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/bin/fping
SSHKeyLocation=/var/lib/zabbix/ssh_keys
User=zabbix

SSLCertLocation=/var/lib/zabbix/ssl/certs/
SSLKeyLocation=/var/lib/zabbix/ssl/keys/
SSLCALocation=/var/lib/zabbix/ssl/ssl_ca/
LoadModulePath=/var/lib/zabbix/modules/

### zabbix-frontend ### &amp;lt;- Zabbix PDF Reporting 사용 시 관련 파일
### zabbix-agent ### &amp;lt;- Syslog 연동&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;&lt;b&gt;5. docker compose 구동&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;$ sudo docker-compose up -d&lt;/blockquote&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;b&gt;6. 컨테이너 확인&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;$ sudo docker ps -a&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Zabbix 기본 설정&lt;/blockquote&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;b&gt;1. http://192.168.111.80 접속 후 로그인(기본 계정 Admin/zabbix)&lt;/b&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;&lt;b&gt;2. 왼쪽 메뉴 중 Adminitration - General - GUI에서 Default language를 English (en_US)에서 Korean (ko_KR)로 변경&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;659&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bI5S76/btsLlY3ftSy/dDrPk8Fr8mROmYZiMPmETk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bI5S76/btsLlY3ftSy/dDrPk8Fr8mROmYZiMPmETk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bI5S76/btsLlY3ftSy/dDrPk8Fr8mROmYZiMPmETk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbI5S76%2FbtsLlY3ftSy%2FdDrPk8Fr8mROmYZiMPmETk%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;1200&quot; height=&quot;659&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;659&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;&lt;b&gt;3. 왼쪽 메뉴 중 데이터 수집 - 호스트에서 Zabbix server 항목의 interfaces &amp;gt; 에이전트의 IP 주소를 172.26.0.40으로 수정&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;673&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UAO6N/btsLj3ycksR/SvYwFDPI80z5fVldJzUBk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UAO6N/btsLj3ycksR/SvYwFDPI80z5fVldJzUBk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UAO6N/btsLj3ycksR/SvYwFDPI80z5fVldJzUBk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUAO6N%2FbtsLj3ycksR%2FSvYwFDPI80z5fVldJzUBk1%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;1042&quot; height=&quot;673&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;673&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;blockquote data-ke-style=&quot;style2&quot;&gt;마무리&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로써 모니터링 툴 Zabbix 설치가 완료되었습니다.&lt;/p&gt;</description>
      <category>Zabbix</category>
      <author>LeJus</author>
      <guid isPermaLink="true">https://lejus.tistory.com/2</guid>
      <comments>https://lejus.tistory.com/2#entry2comment</comments>
      <pubDate>Tue, 17 Dec 2024 13:59:22 +0900</pubDate>
    </item>
  </channel>
</rss>