<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Byeon-gun's Igloo Blog</title>
    <link>https://anti1346.tistory.com/</link>
    <description>다양한 기술 주제를 다루며 명료하게 정리된 글과 유용한 프로젝트 및 튜토리얼을 제공하는 기술 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Sat, 1 Aug 2026 07:19:27 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>변군이글루</managingEditor>
    <image>
      <title>Byeon-gun's Igloo Blog</title>
      <url>https://tistory1.daumcdn.net/tistory/1542983/attach/5691bf6fe6d3431c8f1d9f6dade2a1bf</url>
      <link>https://anti1346.tistory.com</link>
    </image>
    <item>
      <title>삼성 등 사용 미국 포티넷 보안장비 해킹당했다</title>
      <link>https://anti1346.tistory.com/711149</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;삼성 등 사용 미국 포티넷 보안장비 해킹당했다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;포티넷 보안장비 대규모 해킹&lt;/b&gt;: 삼성 등 글로벌 기업들이 사용하는 미국 보안기업 '포티넷'의 방화벽&amp;middot;VPN 장비 수만 대가 해킹당하는 사건이 발생했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;'포티블리드'로 명명&lt;/b&gt;: 이번 대규모 해킹 사고는 '포티블리드(FortiBleed)'로 명명되었으며, 현재도 피해가 이어지고 있는 진행형 상태입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &lt;b&gt;수만 대의 장비 침해 추정&lt;/b&gt;: 조사 결과 최소 7만 3,000개 이상의 URL이 침해되었으며, 실제 해킹된 장비는 최대 8만 6,000여 대에 이를 것으로 추정됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.&lt;b&gt; 글로벌 대기업 무더기 피해:&lt;/b&gt; 피해 명단에는 한국의 삼성을 비롯해 액센추어, 폭스콘, 레노버, 오라클, 지멘스 등 세계적인 기업들이 대거 포함되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. &lt;b&gt;민감한 계정 정보 유출&lt;/b&gt;: 이번 해킹으로 인해 장비를 이용하는 사용자 이름과 이메일 주소는 물론, 암호화되지 않은 평문 상태의 비밀번호까지 유출되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. &lt;b&gt;취약점 아닌 관리 소홀이 원인&lt;/b&gt;: 시스템의 새로운 기술적 결함 때문이 아니라, 기업들이 기본 비밀번호를 바꾸지 않거나 계정 관리를 소홀히 한 점이 원인이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. &lt;b&gt;자동화된 대입 공격 활용&lt;/b&gt;: 해커들은 인터넷에 노출된 장비를 자동으로 찾아낸 뒤, 과거에 유출되었던 비밀번호 목록을 무차별 대입하는 방식을 썼습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. &lt;b&gt;기본 계정 방치가 화근&lt;/b&gt;: 실제로 탈취된 전체 계정의 약 63.3%는 변경 없이 그대로 방치된 일반 관리자 계정이나 포티넷의 기본 시스템 계정이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. &lt;b&gt;인도&amp;middot;미국 등 타격, 러시아 배후 추정&lt;/b&gt;: 국가별로는 인도, 미국, 대만 등의 피해가 가장 컸으며, 보안 전문가들은 이번 공격의 배후 세력으로 러시아를 의심하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. &lt;b&gt;보안 당국의 긴급 조치 권고&lt;/b&gt;: 미국 사이버보안청(CISA) 등은 포티넷 장비를 사용하는 모든 기업에 즉각 관리 권한을 잠그고 계정 비밀번호를 재설정하라고 강력히 권고했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;원본 기사&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- ZDNET Korea : &lt;a href=&quot;https://zdnet.co.kr/view/?no=20260620201326&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;삼성 등 사용 미국 포티넷 보안장비 해킹당했다&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;mttContainer&quot; class=&quot;notranslate&quot; style=&quot;transform: translate(644px, 841px);&quot; contenteditable=&quot;false&quot; data-mtt=&quot;1&quot; aria-expanded=&quot;false&quot;&gt;
&lt;div id=&quot;tippy-1&quot; class=&quot;notranslate&quot; style=&quot;z-index: 100000200; visibility: hidden; position: absolute; inset: auto auto 0px 0px; margin: 0px; transform: translate(474px, -15px);&quot; translate=&quot;no&quot; data-tippy-root=&quot;&quot;&gt;
&lt;div class=&quot;tippy-box&quot; style=&quot;max-width: 350px; transition-duration: 250ms;&quot; tabindex=&quot;-1&quot; role=&quot;mtttooltip&quot; data-state=&quot;hidden&quot; data-theme=&quot;custom&quot; data-animation=&quot;fade&quot; data-placement=&quot;top&quot;&gt;
&lt;div class=&quot;tippy-content&quot; style=&quot;transition-duration: 250ms;&quot; data-state=&quot;hidden&quot;&gt;&lt;span&gt;CISA&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;tippy-arrow&quot; style=&quot;position: absolute; left: 0px; transform: translate(17px, 0px);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>이슈(보안)</category>
      <category>CISA</category>
      <category>FortiBleed</category>
      <category>ZDNet Korea</category>
      <category>사이버보안청</category>
      <category>삼성</category>
      <category>포티넷 보안장비 해킹</category>
      <category>포티넷 해킹</category>
      <category>포티블리드</category>
      <category>해킹</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711149</guid>
      <comments>https://anti1346.tistory.com/711149#entry711149comment</comments>
      <pubDate>Mon, 22 Jun 2026 21:10:28 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04 Fluent Bit 최신 패키지 설치 및 다운그레이드 방법</title>
      <link>https://anti1346.tistory.com/711148</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04 Fluent Bit 최신 패키지 설치 및 다운그레이드 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 24.04에서 Fluent Bit 공식 Repository를 이용하여 최신 버전을 설치하고 특정 버전(4.2.5)으로 다운그레이드하는 방법입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS 정보 확인&lt;/p&gt;
&lt;pre id=&quot;code_1782112540282&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -d
Description:	Ubuntu 24.04.3 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Fluent Bit 최신 패키지 설치&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Fluent Bit Repository 등록&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fluent Bit 패키지는 공식 APT Repository를 통해 설치할 수 있습니다.&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;GPG Key 등록&lt;/p&gt;
&lt;pre id=&quot;code_1782112562870&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo curl -fsSL https://packages.fluentbit.io/fluentbit.key \
    | gpg --dearmor \
    | sudo tee /usr/share/keyrings/fluentbit-keyring.gpg &amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fluent Bit Repository 추가&lt;/p&gt;
&lt;pre id=&quot;code_1782112577540&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo &quot;deb [signed-by=/usr/share/keyrings/fluentbit-keyring.gpg] \
    https://packages.fluentbit.io/ubuntu/$(lsb_release -cs) $(lsb_release -cs) main&quot; \
    | sudo tee /etc/apt/sources.list.d/fluent-bit.list&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Fluent Bit 최신 버전 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;APT Repository 정보를 갱신합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1782112595408&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fluent Bit 설치&lt;/p&gt;
&lt;pre id=&quot;code_1782112603889&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y fluent-bit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1782112620090&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/opt/fluent-bit/bin/fluent-bit --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1782112636900&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Fluent Bit v5.0.7
Git commit:&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Fluent Bit 다운그레이드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치된 Fluent Bit 버전을 5.0.7에서 4.2.5로 변경합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 기존 설정 파일 백업&lt;/h4&gt;
&lt;pre id=&quot;code_1782113022996&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo cp -r /etc/fluent-bit /etc/fluent-bit.backup&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Fluent Bit 서비스 중지&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 변경 전 Fluent Bit 서비스를 중지합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1782113032659&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl stop fluent-bit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1782113039403&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl status fluent-bit&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 기존 Fluent Bit 패키지 제거&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치된 Fluent Bit 패키지를 제거합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1782113047714&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt remove -y fluent-bit&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 설치 가능한 Fluent Bit 버전 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Repository에서 제공하는 Fluent Bit 버전을 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1782113059467&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1782113067141&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt-cache policy fluent-bit&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1782113104760&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fluent-bit:
  Installed: 4.2.5
  Candidate: 5.0.7
  Version table:
     5.0.7 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages
     5.0.6 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages
     5.0.5 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages
     5.0.4 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages
     5.0.3 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages
     5.0.2 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages
     5.0.0 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages
 *** 4.2.5 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages
        100 /var/lib/dpkg/status
     4.2.4 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages
     4.2.3 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages
     4.2.2 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages
     4.2.1 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages
     4.2.0 500
        500 https://packages.fluentbit.io/ubuntu/noble noble/main amd64 Packages&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt-cache policy 명령은 설치 가능한 패키지 버전과 Repository 정보를 확인할 때 사용합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. Fluent Bit 4.2.5 버전 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 버전을 지정하여 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1782113128415&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y fluent-bit=4.2.5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1782113135505&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/opt/fluent-bit/bin/fluent-bit --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1782113145934&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Fluent Bit v4.2.5
Git commit:&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. Fluent Bit 서비스 시작&lt;/h4&gt;
&lt;pre id=&quot;code_1782112508191&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl start fluent-bit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1782112497829&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl status fluent-bit&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. 패키지 버전 고정 (운영 환경 권장)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 서버에서는 이후 apt upgrade 과정에서 Fluent Bit 버전이 다시 변경될 수 있습니다.&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;pre id=&quot;code_1782112380830&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-mark hold fluent-bit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인&lt;/p&gt;
&lt;pre id=&quot;code_1782112386732&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt-mark showhold&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해제&lt;/p&gt;
&lt;pre id=&quot;code_1782112395431&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-mark unhold fluent-bit&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;우분투 24.04 환경에서는 Fluent Bit 공식 Repository를 통해 최신 패키지를 설치할 수 있으며 필요 시 패키지 버전을 지정하여 원하는 버전으로 다운그레이드할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>Fluent Bit 최신 패키지 설치</category>
      <category>fluent-bit 설치</category>
      <category>fluent-bit 패키지 설치</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711148</guid>
      <comments>https://anti1346.tistory.com/711148#entry711148comment</comments>
      <pubDate>Mon, 22 Jun 2026 16:29:55 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04에서 운영체제를 최신 상태로 업데이트하는 방법</title>
      <link>https://anti1346.tistory.com/711147</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04에서 운영체제를 최신 상태로 업데이트하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 서버 운영 환경에서는 보안 패치, 버그 수정, 최신 패키지 적용을 위해 주기적인 시스템 업데이트가 필요합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업데이트 전 현재 우분투 버전을 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781676822210&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -d
Description:	Ubuntu 24.04.1 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781677446443&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ uname -r
6.8.0-41-generic&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 패키지 목록 최신화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투는 APT(Advanced Package Tool)를 사용하여 패키지를 관리합니다.&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;pre id=&quot;code_1781676892151&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt update는 설치된 패키지를 변경하지 않고 패키지 저장소 정보를 최신 상태로 갱신합니다&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 설치된 패키지 업그레이드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드한 패키지 정보를 기준으로 설치된 패키지를 최신 버전으로 업데이트합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781676932796&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt upgrade -y&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 업데이트 완료 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업데이트가 완료되면 우분투 버전을 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781676976320&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -d
Description:	Ubuntu 24.04.4 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781677359525&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ uname -r
6.8.0-124-generic&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 시스템 재부팅&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커널 업데이트나 시스템 라이브러리가 변경된 경우 재부팅이 필요할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781677051644&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo reboot&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 불필요한 패키지 정리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업데이트 과정에서 더 이상 사용하지 않는 패키지를 제거합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781677116387&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt autoremove -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 캐시 정리&lt;/p&gt;
&lt;pre id=&quot;code_1781677123069&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt clean&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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 변군이글루 : &lt;a href=&quot;https://scbyun.com/711130&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;우분투 24.04에서 자동 업그레이드 및 자동 재부팅을 비활성화 방법&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;mttContainer&quot; class=&quot;notranslate&quot; style=&quot;transform: translate(872px, 1363px);&quot; contenteditable=&quot;false&quot; data-mtt=&quot;1&quot; aria-expanded=&quot;true&quot;&gt;
&lt;div id=&quot;tippy-1&quot; class=&quot;notranslate&quot; style=&quot;z-index: 100000200; visibility: visible; position: absolute; inset: auto auto 0px 0px; margin: 0px; transform: translate(399px, -15px);&quot; translate=&quot;no&quot; data-tippy-root=&quot;&quot;&gt;
&lt;div class=&quot;tippy-box&quot; style=&quot;max-width: 350px; transition-duration: 300ms;&quot; tabindex=&quot;-1&quot; role=&quot;mtttooltip&quot; data-state=&quot;visible&quot; data-theme=&quot;custom&quot; data-animation=&quot;fade&quot; data-placement=&quot;top&quot;&gt;
&lt;div class=&quot;tippy-content&quot; style=&quot;transition-duration: 300ms;&quot; data-state=&quot;visible&quot;&gt;&lt;span&gt;$ 이름 없음 -r 6.8.0-41-일반&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;tippy-arrow&quot; style=&quot;position: absolute; left: 0px; transform: translate(83px, 0px);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>리눅스</category>
      <category>ubuntu upgrade</category>
      <category>변군</category>
      <category>변군이글루</category>
      <category>우분투 운영체제 업데이트</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711147</guid>
      <comments>https://anti1346.tistory.com/711147#entry711147comment</comments>
      <pubDate>Wed, 17 Jun 2026 15:21:22 +0900</pubDate>
    </item>
    <item>
      <title>CentOS 7에서 Python 3 버전을 소스 코드로 직접 컴파일하여 설치하는 방법</title>
      <link>https://anti1346.tistory.com/711146</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;CentOS 7에서 Python 3 버전을 소스 코드로 직접 컴파일하여 설치하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CentOS 7은 기본적으로 Python 2.7이 설치되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 최신 애플리케이션 개발 환경이나 자동화 도구 사용을 위해 Python 3 환경이 필요한 경우가 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제 정보&lt;/p&gt;
&lt;pre id=&quot;code_1781668355975&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenSSL 버전 정보&lt;/p&gt;
&lt;pre id=&quot;code_1784685087424&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python 정보&lt;/p&gt;
&lt;pre id=&quot;code_1781668378501&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ which python
/bin/python

$ python --version
Python 2.7.5&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;주의&lt;br /&gt;CentOS 7 시스템 명령 중 일부는 Python 2.7에 의존하고 있기 때문에 기존 /usr/bin/python을 변경하지 않는 것이 안전합니다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Python 빌드에 필요한 패키지 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python을 소스 컴파일하기 위해 필요한 개발 라이브러리를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781668482356&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install -y zlib-devel&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&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;pre id=&quot;code_1781668460283&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install -y \
  gcc \
  make \
  wget \
  openssl-devel \
  bzip2-devel \
  libffi-devel \
  zlib-devel&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 후 버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1781668509729&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gcc --version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OpenSSL 설치&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Python 3.9는 SSL 모듈 빌드에 OpenSSL 1.1.1 이상을 권장합니다.&lt;br /&gt;CentOS 7 기본 openssl은 1.0.2라서 pip가 최신 PyPI(TLS 1.2+ 필수)에 접속 못 할 수 있습니다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1784685368613&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /usr/local/src
sudo wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
sudo tar xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
sudo ./config --prefix=/usr/local/openssl11 --openssldir=/usr/local/openssl11 shared zlib
sudo make -j$(nproc)
sudo make install&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ldconfig 등록&lt;/p&gt;
&lt;pre id=&quot;code_1784686454333&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo &quot;/usr/local/openssl11/lib&quot; | sudo tee /etc/ld.so.conf.d/openssl11.conf
sudo ldconfig&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenSSL 버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1784686464570&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/openssl11/bin/openssl version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1784686477756&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;OpenSSL 1.1.1w  11 Sep 2023&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Python 소스 다운로드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python 공식 사이트에서 원하는 버전의 소스를 다운로드합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781668542325&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /usr/local/src
sudo wget https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tgz
sudo tar xzf Python-3.9.13.tgz
cd Python-3.9.13&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 기존 빌드 설정 초기화(빌드 실패 후 초기화)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 빌드한 기록이 있다면 설정 파일과 생성된 결과물을 제거합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781668589284&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo make clean&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781671964828&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo rm -rf build&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. Python 빌드 환경 설정(OpenSSL 1.1.1 빌드했다면 경로 지정)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 경로를 /usr/local/python3으로 지정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781668616691&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ./configure \
  --with-openssl=/usr/local/openssl11 \
  --prefix=/usr/local/python3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션 설명&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;--prefix : Python 설치 경로 지정&lt;/li&gt;
&lt;li&gt;--enable-optimizations : 성능 최적화 빌드 활성화&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. Python 컴파일 및 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴파일&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;CPU 코어 수만큼 병렬 빌드하여 설치 시간을 줄입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1781668655875&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo make -j$(nproc)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;make install 대신 make altinstall을 사용하는 이유는 기존 시스템 Python 명령을 덮어쓰지 않기 위해서입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;반드시 make altinstall 사용 (make install 아님).&lt;br /&gt;install을 쓰면 시스템 기본 python3, pip3를 덮어써서 yum 등 시스템 도구가 깨질 수 있습니다.&lt;br /&gt;altinstall은 python3.9라는 별도 이름으로 설치되어 안전합니다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1781668664973&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo make altinstall&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781668723116&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
Installing collected packages: setuptools, pip
  WARNING: The script pip3.9 is installed in '/usr/local/python3/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-22.0.4 setuptools-58.1.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager.
It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되면 다음 위치에 Python이 생성됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781668822683&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/python3/bin/python3.9&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 확인&lt;/p&gt;
&lt;pre id=&quot;code_1784685760212&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/python3/bin/python3.9 --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1784685857275&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Python 3.9.13&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. Python3 명령어 등록&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;편리하게 python3 명령으로 실행할 수 있도록 심볼릭 링크를 생성합니다.&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 명령어로 실행 가능하게 설정&lt;/p&gt;
&lt;pre id=&quot;code_1781668879743&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/bin/python3.9 /usr/local/bin/python3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pip3 명령어로 바로 설치 가능하게 설정&lt;/p&gt;
&lt;pre id=&quot;code_1781668891003&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/bin/pip3.9 /usr/local/bin/pip3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSL 동작 확인&lt;/p&gt;
&lt;pre id=&quot;code_1784690147883&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python3 -c &quot;import ssl; print(ssl.OPENSSL_VERSION)&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1784690131750&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;OpenSSL 1.1.1w  11 Sep 2023&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PIP 동작 확인&lt;/p&gt;
&lt;pre id=&quot;code_1784690526900&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python3 -m ensurepip&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1784690541050&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python3 -m pip install --upgrade pip&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. 설치 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python3 버전을 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781668952701&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;which python3&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781668977786&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/bin/python3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;python3 버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1781668957047&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python3 --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781669007472&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Python 3.9.13&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pip 설치 확인&lt;/p&gt;
&lt;pre id=&quot;code_1781669028480&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip3 --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781669043812&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip 22.0.4 from /usr/local/python3/lib/python3.9/site-packages/pip (python 3.9)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. 기존 Python 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 시스템 Python은 그대로 유지됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781669135238&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781669154027&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Python 2.7.5&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;CentOS 7 환경에서는 시스템 Python 2.7을 유지하면서 별도의 Python 3 환경을 구성하는 방식이 안정적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;make altinstall 방식을 사용하면 OS 기본 Python 환경을 보호하면서 최신 Python 버전을 독립적으로 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- Python Downloads : &lt;a href=&quot;https://www.python.org/downloads/source/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Python Source Releases&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- OpenSSL Old 1.1.1 Downloads : &lt;a href=&quot;https://openssl-library.org/source/old/1.1.1/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://openssl-library.org/source/old/1.1.1/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>centos</category>
      <category>centos 7</category>
      <category>CentOS7</category>
      <category>Linux</category>
      <category>Python Download</category>
      <category>python3 설치</category>
      <category>Python3.9 설치</category>
      <category>리눅스</category>
      <category>변군</category>
      <category>변군이글루</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711146</guid>
      <comments>https://anti1346.tistory.com/711146#entry711146comment</comments>
      <pubDate>Wed, 17 Jun 2026 13:06:35 +0900</pubDate>
    </item>
    <item>
      <title>macOS에서 diskutil과 터미널 명령어로 우분투 설치 USB 만드는 방법</title>
      <link>https://anti1346.tistory.com/711145</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;macOS에서 diskutil과 터미널 명령어로 우분투 설치 USB 만드는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;macOS 환경에서는 별도의 USB 제작 프로그램 없이 기본 제공되는 diskutil, hdiutil, dd 명령어를 이용하여 우분투 설치용 부팅 USB를 만들 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. ISO 이미지 다운로드&lt;/h4&gt;
&lt;pre id=&quot;code_1781402129132&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd ~/Downloads&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781402109858&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget https://releases.ubuntu.com/resolute/ubuntu-26.04-desktop-amd64.iso&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 확인&lt;/p&gt;
&lt;pre id=&quot;code_1781402500795&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls -lh | grep ubuntu&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781402519482&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-rw-r--r--@  1 staff  staff   6.1G  6월 14 10:02 ubuntu-26.04-desktop-amd64.iso&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. USB 디스크 식별하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;USB 메모리를 Mac에 연결한 후 디스크 목록을 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781399106549&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;diskutil list&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781399117144&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/dev/disk4 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *61.5 GB    disk4
   1:             Windows_FAT_32 UBUNTU-SERV             61.5 GB    disk4s1&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;주의: 이후 작업에서 disk4 번호는 환경마다 다릅니다.&lt;br /&gt;잘못된 디스크를 지정하면 Mac 내부 디스크가 삭제될 수 있습니다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. USB 디스크 마운트 해제 (Unmount)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스크를 굽기 전에 먼저 해당 디스크의 마운트를 해제해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781399140589&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;diskutil unmountDisk /dev/disk4&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781399164454&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Unmount of all volumes on disk4 was successful&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. ISO 이미지를 IMG 형식으로 변환&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;macOS의 dd 명령으로 ISO 파일을 바로 기록할 수도 있지만, 일반적으로 hdiutil을 이용해 IMG 형식으로 변환 후 기록하는 방식을 사용합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781399238799&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;hdiutil convert -format UDRW -o ubuntu-26.04-usb.img ubuntu-26.04-desktop-amd64.iso&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781399355566&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Protective Master Boot Record(MBR : 0) 읽는 중&amp;hellip;
GPT Header(Primary GPT Header : 1) 읽는 중&amp;hellip;
GPT Partition Data(Primary GPT Table : 2) 읽는 중&amp;hellip;
ISO9660(DOS_FAT : 3) 읽는 중&amp;hellip;
..........................................................................................
Appended2(C12A7328-F81F-11D2-BA4B-00A0C93EC93B : 4) 읽는 중&amp;hellip;
..........................................................................................
Gap1(DOS_FAT : 5) 읽는 중&amp;hellip;
..........................................................................................
Ubuntu 26.04 amd64              (Apple_ISO : 6) 읽는 중&amp;hellip;
..........................................................................................
GPT Partition Data(Backup GPT Table : 7) 읽는 중&amp;hellip;
..........................................................................................
GPT Header(Backup GPT Header : 8) 읽는 중&amp;hellip;
..........................................................................................
경과 시간:  2.425s
속도: 2.5GB/초
저장: 0.0%
created: ubuntu-26.04-usb.img.dmg&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변환 후 생성된 파일&lt;/p&gt;
&lt;pre id=&quot;code_1781402692394&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls -lh | grep ubuntu&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781402709710&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-rw-r--r--@  1 staff  staff   6.1G  6월 14 10:02 ubuntu-26.04-desktop-amd64.iso
-rw-r--r--   1 staff  staff   6.1G  6월 14 10:08 ubuntu-26.04-usb.img.dmg&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;파일 확장자: hdiutil은 macOS에서 자동으로 .img 파일 뒤에 .dmg를 붙이는 경우가 있습니다.&lt;/blockquote&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. USB에 Ubuntu 이미지 기록하기 (Flash)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 변환된 이미지를 USB 메모리에 직접 기록합니다. disk4 대신 rdisk4를 사용하면 쓰기 속도가 훨씬 빠릅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781399691469&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo dd if=ubuntu-26.04-usb.img.dmg of=/dev/rdisk4 bs=1m status=progress&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781401841111&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Password:
  6512705536 bytes (6513 MB, 6211 MiB) transferred 504.028s, 13 MB/s
6216+1 records in
6216+1 records out
6518974464 bytes transferred in 504.523138 secs (12921061 bytes/sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션 설명&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;if : 입력 파일(ISO 이미지)&lt;/li&gt;
&lt;li&gt;of : 출력 대상 USB 디스크&lt;/li&gt;
&lt;li&gt;bs=1m : 한 번에 기록하는 블록 크기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo를 사용했으므로 Mac의 관리자 비밀번호를 입력해야 합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. USB 디스크 꺼내기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복사가 완료되면 디스크를 안전하게 꺼냅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781402057381&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;diskutil eject /dev/disk4&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781402836341&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Disk /dev/disk4 ejected&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. USB 생성 결과 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 연결한 뒤 확인하면 우분투 부팅 이미지 구조로 변경되어 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1781402885904&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;diskutil list&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1781402207208&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/dev/disk4 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *61.5 GB    disk4
   1:       Microsoft Basic Data                         6.5 GB     disk4s1
   2:                        EFI ESP                     5.3 MB     disk4s2
   3:       Microsoft Basic Data                         307.2 KB   disk4s3
                    (free space)                         55.0 GB    -&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ISO 이미지 기반 부팅 USB이므로 기존 FAT32 단일 파티션 구조와 다르게 보이는 것이 정상입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- ubuntu releases : &lt;a href=&quot;https://releases.ubuntu.com/resolute/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Ubuntu 26.04 LTS (Resolute Raccoon)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>맥(솔라리스)</category>
      <category>diskutil</category>
      <category>ISO 이미지</category>
      <category>ISO 이미지 USB 부팅</category>
      <category>ISO 이미지 USB 생성</category>
      <category>MacOS</category>
      <category>macOS ISO USB booting Disk</category>
      <category>macOS USB 부팅 디스크</category>
      <category>usb 부팅 디스크</category>
      <category>USB 부팅 디스크 생성 방법</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711145</guid>
      <comments>https://anti1346.tistory.com/711145#entry711145comment</comments>
      <pubDate>Sun, 14 Jun 2026 11:10:37 +0900</pubDate>
    </item>
    <item>
      <title>rsync 동기화 쉘 스크립트</title>
      <link>https://anti1346.tistory.com/711144</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;rsync 동기화 쉘 스크립트&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zTXwN/dJMcabkebqN/Kakdxf5dt1vUgaQdcxqZl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zTXwN/dJMcabkebqN/Kakdxf5dt1vUgaQdcxqZl0/img.png&quot; data-alt=&quot;rsync&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zTXwN/dJMcabkebqN/Kakdxf5dt1vUgaQdcxqZl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzTXwN%2FdJMcabkebqN%2FKakdxf5dt1vUgaQdcxqZl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;505&quot; height=&quot;253&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;rsync&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;node-02 서버&lt;/h4&gt;
&lt;pre id=&quot;code_1682658393649&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim sync_script.sh&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1682658401624&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/bin/bash

# 현재 날짜 구하기
today=$(date +%Y%m%d)

# 년, 월, 일
year=${today:0:4}
month=${today:4:2}
day=${today:6:2}

# 동기화할 디렉토리 목록
directories=(
  &quot;/app/www/data&quot;
  &quot;/app/www/data2&quot;
  &quot;/app/www/data3&quot;
)

# rsync 명령어로 다른 서버로 동기화하기
for directory in &quot;${directories[@]}&quot;
do
  mkdir -p $directory/$year/$month/$day
  rsync -azp root@node-01:&quot;$directory/$year/$month/$day/&quot; &quot;$directory/$year/$month/$day/&quot;
done

# .jpg 파일과 빈 디렉토리 삭제하기
for dir in &quot;${directories[@]}&quot;
do
  # .jpg 파일 삭제
  find &quot;$dir&quot; -type f -name &quot;*.jpg&quot; -mtime +7 -delete

  # 빈 디렉토리 삭제
  find &quot;$dir&quot; -type d -empty -mtime +7 -delete
done&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1682658415423&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod +x sync_script.sh&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1682658424326&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bash sync_script.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 스크립트는 다음을 수행합니다&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;현재 날짜를 구하고 년, 월, 일을 추출합니다.&lt;/li&gt;
&lt;li&gt;동기화할 디렉토리 목록을 지정합니다.&lt;/li&gt;
&lt;li&gt;rsync 명령어를 사용하여 지정된 디렉토리를 다른 서버로 동기화합니다.&lt;/li&gt;
&lt;li&gt;.jpg 파일과 빈 디렉토리를 삭제합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크립트의 각 부분을 자세히 살펴보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1682683054788&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;today=$(date +%Y%m%d)
year=${today:0:4}
month=${today:4:2}
day=${today:6:2}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;date 명령어를 사용하여 현재 날짜를 가져옵니다. %Y%m%d 형식을 사용하여 날짜를 연도, 월, 일로 표시합니다. 그런 다음 today 변수에 결과를 할당하고, year, month, day 변수에 각각 연도, 월, 일 부분을 할당합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1682683063238&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;directories=(
  &quot;/app/www/data&quot;
  &quot;/app/www/data2&quot;
  &quot;/app/www/data3&quot;
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;directories 배열에 동기화할 디렉토리 목록을 저장합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1682683074712&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for directory in &quot;${directories[@]}&quot;
do
  mkdir -p $directory/$year/$month/$day
  rsync -azp root@192.168.0.51:&quot;$directory/$year/$month/$day/&quot; &quot;$directory/$year/$month/$day/&quot;
done&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for 루프를 사용하여 directories 배열에서 각 디렉토리를 반복합니다. mkdir -p 명령어를 사용하여 디렉토리가 존재하지 않는 경우 새 디렉토리를 만듭니다. 그런 다음 rsync 명령어를 사용하여 지정된 디렉토리를 다른 서버로 동기화합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1682683083665&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for dir in &quot;${directories[@]}&quot;
do
  find &quot;$dir&quot; -type f -name &quot;*.jpg&quot; -mtime +7 -delete
  find &quot;$dir&quot; -type d -empty -mtime +7 -delete
done&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for 루프를 사용하여 directories 배열에서 각 디렉토리를 반복합니다. find 명령어를 사용하여 .jpg 확장자를 가진 파일과 빈 디렉토리를 찾고 -mtime 옵션을 사용하여 7일 이전에 수정된 파일과 디렉토리를 선택합니다. 그런 다음 -delete 옵션을 사용하여 선택된 파일과 디렉토리를 삭제합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>스크립트</category>
      <category>FIND</category>
      <category>find 명령</category>
      <category>find 명령어</category>
      <category>RSYNC</category>
      <category>rsync 동기화</category>
      <category>rsync 명령</category>
      <category>rsync 명령어</category>
      <category>rsync 스크립트</category>
      <category>변군</category>
      <category>변군이글루</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711144</guid>
      <comments>https://anti1346.tistory.com/711144#entry711144comment</comments>
      <pubDate>Mon, 8 Jun 2026 17:27:40 +0900</pubDate>
    </item>
    <item>
      <title>HP(HPE) 서버에서 사용 중인 RAID 컨트롤러를 확인하는 방법</title>
      <link>https://anti1346.tistory.com/711143</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;HP(HPE) 서버에서 사용 중인 RAID 컨트롤러를 확인하는 방법&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OS 상에서 명령어로 확인하는 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1780635598988&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lspci | grep -i -E &quot;raid|storage&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780635610538&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lspci | grep -i -E &quot;raid|storage&quot;
05:00.0 RAID bus controller: Hewlett-Packard Company Smart Array G6 controllers (rev 01)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1782802016232&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lspci | grep -i -E &quot;raid|storage&quot;
47:00.0 Serial Attached SCSI controller: Adaptec Smart Storage PQI SAS (rev 01)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780635620429&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lspci | grep -i -E &quot;raid|storage&quot;
3a:00.0 RAID bus controller: Broadcom / LSI MegaRAID 12GSAS/PCIe Secure SAS39xx&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력 결과별 매칭 소프트웨어&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Smart Array Gen10 계열 (예: P408i, E208i 등) : HPE ssacli 설치 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Smart Array G6/G7/Gen8 계열 (예: P410, P420 등) : HPE hpacucli 또는 hpssacli 설치 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MegaRAID/LSI/Broadcom 계열 (예: SAS39xx, MR416i 등) : Broadcom storcli 설치 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Adaptec/Microchip Smart Storage 계열 : HPE ssacli 또는 Arcconf 설치 필요&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;HPE Smart Array 관리 툴 (ssacli)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HPE는 데비안/우분투 계열을 위해 MCP(Management Component Pack) 리포지토리를 제공합니다.&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;pre id=&quot;code_1780642784833&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget https://downloads.linux.hpe.com/SDR/repo/mcp/ubuntu/pool/non-free/ssacli-6.45-8.0_amd64.deb

sudo apt update
sudo apt install -y ./ssacli-6.45-8.0_amd64.deb&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1780642748744&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 컨트롤러 인식 및 상태 확인
sudo ssacli ctrl all show status

# 물리 디스크 및 논리 드라이브(RAID) 구성 보기
sudo ssacli ctrl all show config

# 물리 디스크(PD)의 상세 상태 및 에러 카운트 확인 (장애 디스크 특정 시 유용)
sudo ssacli ctrl slot=0 pd all show status

# 특정 논리 드라이브(LD)의 상세 정보 및 상태 확인
sudo ssacli ctrl slot=0 ld all show&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Broadcom/LSI MegaRAID 관리 툴 (storcli)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;storcli는 우분투 공식 저장소나 HPE APT 저장소에 포함되어 있지 않으므로 Broadcom 공식 홈페이지에서 최신 릴리즈 패키지(.deb)를 받아 설치해야 합니다.&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;pre id=&quot;code_1780642799032&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget https://downloads.linux.hpe.com/SDR/repo/mcp/ubuntu/pool/non-free/storcli-007.3210.0000.0000-1_amd64.deb

sudo apt update
sudo apt install -y ./storcli-007.3210.0000.0000-1_amd64.deb

sudo ln -s /opt/MegaRAID/storcli/storcli64 /usr/local/bin/storcli&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1780642758568&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 장착된 섀시 및 컨트롤러 번호(ID) 확인
sudo storcli show

# 0번 컨트롤러의 전반적인 요약 정보 및 RAID 상태 확인
sudo storcli /c0 show

# 0번 컨트롤러에 연결된 하드디스크(물리 드라이브) 상태 확인
sudo storcli /c0 /eall /sall show

# Rebuilding(동기화) 진행 상황 확인 (디스크 교체 후 필수 명령어)
sudo storcli /c0 /sall show rebuild

# 장애가 발생한 디스크(경고등 켜진 디스크) 위치 물리적으로 찾기 (LED 깜빡임 시작/종료)
sudo storcli /c0 /eall /s0 start locate
sudo storcli /c0 /eall /s0 stop locate&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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- HPE Repository Listing : &lt;a href=&quot;https://downloads.linux.hpe.com/SDR/repo/mcp/ubuntu/pool/non-free/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Software Delivery Repository&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;mttContainer&quot; class=&quot;notranslate&quot; style=&quot;transform: translate(409px, 711px);&quot; contenteditable=&quot;false&quot; data-mtt=&quot;1&quot; aria-expanded=&quot;true&quot;&gt;
&lt;div id=&quot;tippy-1&quot; class=&quot;notranslate&quot; style=&quot;z-index: 100000200; visibility: visible; position: absolute; inset: auto auto 0px 0px; margin: 0px; transform: translate3d(399px, -20px, 0px);&quot; translate=&quot;no&quot; data-tippy-root=&quot;&quot;&gt;
&lt;div class=&quot;tippy-box&quot; style=&quot;max-width: 350px; transition-duration: 300ms;&quot; tabindex=&quot;-1&quot; role=&quot;mtttooltip&quot; data-state=&quot;visible&quot; data-theme=&quot;custom&quot; data-animation=&quot;fade&quot; data-placement=&quot;top&quot;&gt;
&lt;div class=&quot;tippy-content&quot; style=&quot;transition-duration: 300ms;&quot; data-state=&quot;visible&quot;&gt;&lt;span&gt;$ lspci | grep -i -E &quot;raid|storage&quot; 3a:00.0 RAID 버스 컨트롤러: Broadcom / LSI MegaRAID 12GSAS/PCIe Secure SAS39xx&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;tippy-arrow&quot; style=&quot;position: absolute; left: 0px; transform: translate3d(92px, 0px, 0px);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>리눅스</category>
      <category>broadcom</category>
      <category>HP Smart Array</category>
      <category>LSI</category>
      <category>MegaRAID</category>
      <category>RAID 컨트롤러 확인</category>
      <category>smart array</category>
      <category>Smart Storage Administrator</category>
      <category>SSA</category>
      <category>ssacli 명령어</category>
      <category>storcli 명령어</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711143</guid>
      <comments>https://anti1346.tistory.com/711143#entry711143comment</comments>
      <pubDate>Fri, 5 Jun 2026 14:09:48 +0900</pubDate>
    </item>
    <item>
      <title>SSL 인증서 체인(Bundle) 구성</title>
      <link>https://anti1346.tistory.com/711142</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;SSL 인증서 체인(Bundle) 구성(Apache SSL 인증서를 Nginx SSL 인증서로 변환)&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. SSL 인증서 및 개인키 다운로드&lt;/h4&gt;
&lt;pre id=&quot;code_1780632309759&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir -p /etc/nginx/ssl/wildcard_scbyun_com&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780632334014&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -sSfL https://pkg.scbyun.com/ssl/nginx/wildcard_scbyun_com/cert.pem \
 -o /etc/nginx/ssl/wildcard_scbyun_com/cert.pem

curl -sSfL https://pkg.scbyun.com/ssl/nginx/wildcard_scbyun_com/key.pem \
 -o /etc/nginx/ssl/wildcard_scbyun_com/key.pem&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 개인키 정상 여부 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1780632390962&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl rsa -in /etc/nginx/ssl/wildcard_scbyun_com/key.pem -check&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 인증서 체인(Bundle) 구성&lt;/h4&gt;
&lt;pre id=&quot;code_1780632412249&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /etc/nginx/ssl/wildcard_scbyun_com/cert.pem \
 /etc/nginx/ssl/wildcard_scbyun_com/TuringSIgnCA.pem \
 &amp;gt; /etc/nginx/ssl/wildcard_scbyun_com/nginx_bundle.crt&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 인증서 체인 포함 여부 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증서 개수 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780632462110&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grep &quot;BEGIN CERTIFICATE&quot; /etc/nginx/ssl/wildcard_scbyun_com/nginx_bundle.crt | wc -l&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780632479588&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;2&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780634293833&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-----BEGIN CERTIFICATE-----
서버 인증서
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
중간 인증서
-----END CERTIFICATE-----&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 인증서 + 중간 CA 인증서&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 기존 인증서 백업 후 적용&lt;/h4&gt;
&lt;pre id=&quot;code_1780632500707&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cp /etc/nginx/ssl/wildcard_scbyun_com/cert.pem /etc/nginx/ssl/wildcard_scbyun_com/cert.pem.bak&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 Bundle 인증서를 Nginx 인증서로 적용&lt;/p&gt;
&lt;pre id=&quot;code_1780632521498&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mv /etc/nginx/ssl/wildcard_scbyun_com/nginx_bundle.crt /etc/nginx/ssl/wildcard_scbyun_com/cert.pem&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. 인증서/개인키 매칭 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증서 Modulus 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780632552772&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl x509 -noout -modulus -in /etc/nginx/ssl/wildcard_scbyun_com/cert.pem | openssl md5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인키 Modulus 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780632573202&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl rsa -noout -modulus -in /etc/nginx/ssl/wildcard_scbyun_com/key.pem | openssl md5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 MD5 값이 동일하면 인증서와 개인키가 정상적으로 매칭됨&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. Nginx 설정 검증&lt;/h4&gt;
&lt;pre id=&quot;code_1780634314378&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chown root:root /etc/nginx/ssl/wildcard_scbyun_com/*
chmod 600 /etc/nginx/ssl/wildcard_scbyun_com/key.pem
chmod 644 /etc/nginx/ssl/wildcard_scbyun_com/cert.pem&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780632583371&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nginx -t&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. Nginx 인증서 적용&lt;/h4&gt;
&lt;pre id=&quot;code_1780632592338&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nginx -s reload&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;9. 작업 완료 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1780632635271&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl s_client -connect web.scbyun.com:443 -servername web.scbyun.com -showcerts&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780634339904&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl x509 \
 -in /etc/nginx/ssl/wildcard_scbyun_com/cert.pem \
 -noout -dates&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>Full Chain 인증서 변환</category>
      <category>Nginx Full Chain 인증서 변환</category>
      <category>RSA 인증서</category>
      <category>SSL 인증서 병합</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711142</guid>
      <comments>https://anti1346.tistory.com/711142#entry711142comment</comments>
      <pubDate>Fri, 5 Jun 2026 13:10:54 +0900</pubDate>
    </item>
    <item>
      <title>보안 권고문</title>
      <link>https://anti1346.tistory.com/711141</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;보안 권고문&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://knvd.krcert.or.kr/info/vuln/notice&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;KISA 보안 공지&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://knvd.krcert.or.kr/info/vuln/public&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;KISA 공개된 취약점&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://asec.ahnlab.com/ko/security-advisory-ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AhnLab 보안 권고문&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>이슈(보안)</category>
      <category>AhnLab</category>
      <category>KISA</category>
      <category>KISA 취약점</category>
      <category>보안 권고문</category>
      <category>안랩 취약점</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711141</guid>
      <comments>https://anti1346.tistory.com/711141#entry711141comment</comments>
      <pubDate>Thu, 4 Jun 2026 15:36:44 +0900</pubDate>
    </item>
    <item>
      <title>우분투에서 jq 보안 취약점 대응 - apt 업데이트 및 정적 바이너리 적용 방법</title>
      <link>https://anti1346.tistory.com/711140</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투에서 jq 보안 취약점 대응 - apt 업데이트 및 정적 바이너리 적용 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 환경에서 JSON 데이터를 처리하는 CLI 도구인 jq는 시스템 운영 자동화, 모니터링, API 연동 등에 많이 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안 취약점 대응을 위해 jq 패키지 버전을 확인하고 우분투 패키지 업데이트 방식과 공식 Release 바이너리 교체 방식을 비교한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;우분투 패키지를 이용한 jq 업데이트&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제 정보&lt;/p&gt;
&lt;pre id=&quot;code_1780548655414&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -d
Description:	Ubuntu 24.04.1 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치된 jq 버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780548668581&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ jq --version
jq-1.7&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780548680523&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ dpkg -l | grep jq
ii  jq                                   1.7.1-3build1                           amd64        lightweight and flexible command-line JSON processor
ii  libjq1:amd64                         1.7.1-3build1                           amd64        lightweight and flexible command-line JSON processor - shared library
ii  libjs-jquery                         3.6.1+dfsg+~3.5.14-1                    all          JavaScript library for dynamic web applications&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;jq 업데이트&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 서버에서 전체 패키지를 업데이트하지 않고 jq 관련 패키지만 업데이트한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;--only-upgrade 옵션은 설치되지 않은 패키지를 새로 설치하지 않고 이미 설치된 패키지만 업그레이드한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1780548719788&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt --only-upgrade install jq&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업데이트 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780548739058&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ jq --version
jq-1.7&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780548753969&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ dpkg -l | grep jq
ii  jq                                   1.7.1-3ubuntu0.24.04.1                  amd64        lightweight and flexible command-line JSON processor
ii  libjq1:amd64                         1.7.1-3ubuntu0.24.04.1                  amd64        lightweight and flexible command-line JSON processor - shared library
ii  libjs-jquery                         3.6.1+dfsg+~3.5.14-1                    all          JavaScript library for dynamic web applications&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;참고&lt;br /&gt;jq 프로그램 자체의 내장 명령어인 jq --version은 패키지의 상세 빌드 번호(우분투가 자체 패치한 세부 버전)까지 보여주지 않고, 개발 소스 코드 기준의 메이저.마이너 버전(1.7)만 출력하도록 설계되어 있기 때문입니다.&lt;/blockquote&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;우분투 22.04에서 공식 Release 바이너리 적용&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제 정보&lt;/p&gt;
&lt;pre id=&quot;code_1780548787099&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -d
Description:	Ubuntu 22.04.3 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치된 jq 버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780548831919&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ jq --version
jq-1.6&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780549134108&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ dpkg -l | grep jq
ii  jq                                     1.6-2.1ubuntu3.1                        amd64        lightweight and flexible command-line JSON processor
ii  libjq1:amd64                           1.6-2.1ubuntu3.1                        amd64        lightweight and flexible command-line JSON processor - shared library
ii  libjs-jquery                           3.6.0+dfsg+~3.5.13-1                    all          JavaScript library for dynamic web applications
ii  libjs-jquery-ui                        1.13.1+dfsg-1                           all          JavaScript UI library for dynamic web applications&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브러리 확인&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;기존 jq는 OS 라이브러리를 사용하는 동적 링크 방식이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1780548892105&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ldd /usr/bin/jq
	linux-vdso.so.1 (0x00007fff183e2000)
	/usr/lib/x86_64-linux-gnu/libjemalloc.so (0x00007f3c72f24000)
	libjq.so.1 =&amp;gt; /lib/x86_64-linux-gnu/libjq.so.1 (0x00007f3c72ecd000)
	libc.so.6 =&amp;gt; /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3c72ca4000)
	libm.so.6 =&amp;gt; /lib/x86_64-linux-gnu/libm.so.6 (0x00007f3c72bbd000)
	libstdc++.so.6 =&amp;gt; /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f3c72991000)
	libgcc_s.so.1 =&amp;gt; /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f3c72971000)
	libonig.so.5 =&amp;gt; /lib/x86_64-linux-gnu/libonig.so.5 (0x00007f3c728dc000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f3c73209000)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 바이너리 백업&lt;/p&gt;
&lt;pre id=&quot;code_1780548907241&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mv /usr/bin/jq /usr/bin/jq_1.6&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jq 공식 Release 바이너리 다운로드&lt;/p&gt;
&lt;pre id=&quot;code_1780548931263&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo wget -O /usr/bin/jq https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-amd64&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 권한 설정&lt;/p&gt;
&lt;pre id=&quot;code_1780548940139&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo chmod +x /usr/bin/jq&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780548948823&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ jq --version
jq-1.7.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브러리 확인&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;jq 바이너리가 필요한 라이브러리를 포함한 정적 링크 방식으로 빌드되었다는 의미이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1780548961592&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ldd /usr/bin/jq
	not a dynamic executable&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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- AhnLab 보안 권고문 : &lt;a href=&quot;https://asec.ahnlab.com/ko/79296/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jq 프로세서 보안 업데이트 권고 (CVE-2023-50268)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- GitHub(jqlang.org) : &lt;a href=&quot;https://github.com/jqlang/jq/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jq Releases&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>이슈(보안)</category>
      <category>CVE-2023-50268</category>
      <category>jq 보안 취약점 대응</category>
      <category>jq 업데이트</category>
      <category>jq 프로세서 보안 업데이트 권고</category>
      <category>리눅스</category>
      <category>변군</category>
      <category>변군이글루</category>
      <category>우분투</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711140</guid>
      <comments>https://anti1346.tistory.com/711140#entry711140comment</comments>
      <pubDate>Thu, 4 Jun 2026 14:42:46 +0900</pubDate>
    </item>
    <item>
      <title>systemd-logind Power Key 이벤트로 인한 서버 비정상 종료 분석 및 해결 방법</title>
      <link>https://anti1346.tistory.com/711139</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;systemd-logind Power Key 이벤트로 인한 서버 비정상 종료 분석 및 해결 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 중인 서버가 관리자 작업이나 물리적인 전원 버튼 조작 없이 종료되는 현상이 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그 확인 결과 systemd-logind에서 Power Key 이벤트를 감지한 이후 시스템 종료 동작이 수행된 것을 확인했다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어 모델&lt;/p&gt;
&lt;pre id=&quot;code_1780544208944&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ dmidecode -t system | grep &quot;Product Name&quot;
	Product Name: ProLiant DL360 Gen9&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제 정보&lt;/p&gt;
&lt;pre id=&quot;code_1780544218347&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -d
Description:	Ubuntu 24.04.1 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;장애 로그 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1780542913621&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /var/log/auth.log | grep systemd-logind&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780542927779&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Jun  3 01:49:32 testServer-24 systemd-logind[1275]: Power key pressed.
Jun  3 01:49:32 testServer-24 systemd-logind[1275]: Powering Off...
Jun  3 01:49:32 testServer-24 systemd-logind[1275]: System is powering down.&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;로그 흐름&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1904&quot; data-origin-height=&quot;177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XcKGS/dJMcada6wXH/bpEqLGz6xLLQSi9Jwv05qK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XcKGS/dJMcada6wXH/bpEqLGz6xLLQSi9Jwv05qK/img.png&quot; data-alt=&quot;로그 흐름&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XcKGS/dJMcada6wXH/bpEqLGz6xLLQSi9Jwv05qK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXcKGS%2FdJMcada6wXH%2FbpEqLGz6xLLQSi9Jwv05qK%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;1904&quot; height=&quot;177&quot; data-origin-width=&quot;1904&quot; data-origin-height=&quot;177&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그 흐름&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제는 전원 버튼 입력 이벤트를 정상적으로 수신했고 systemd-logind 설정에 따라 시스템 종료(poweroff)를 수행한 상황이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;systemd-logind 전원 버튼 처리 설정 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;systemd-logind는 전원 버튼, 절전 버튼, 덮개 닫힘 등의 하드웨어 이벤트를 관리한다.&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;pre id=&quot;code_1780543180828&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/etc/systemd/logind.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 설정 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780543190856&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grep -E &quot;^#?HandlePowerKey&quot; /etc/systemd/logind.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780543199202&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HandlePowerKey=poweroff
HandlePowerKeyLongPress=ignore&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 의미&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;HandlePowerKey=poweroff : 전원 버튼을 짧게 누르면 systemd-logind가 정상 종료 절차를 수행한다.&lt;/li&gt;
&lt;li&gt;HandlePowerKeyLongPress=ignore : 전원 버튼을 길게 눌렀을 때 systemd-logind 레벨에서는 별도의 동작을 수행하지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;해결 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 서버에서는 실수로 Power Key가 입력되어 시스템이 종료되는 상황을 방지하기 위해 Power 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;1. 기존 설정 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780543342568&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grep -E &quot;^#?HandlePowerKey&quot; /etc/systemd/logind.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780543359951&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#HandlePowerKey=poweroff
#HandlePowerKeyLongPress=ignore&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 설정 변경&lt;/p&gt;
&lt;pre id=&quot;code_1780543402096&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo sed -i.bak 's/^#\?\s*\(HandlePowerKey=\).*/\1ignore/' /etc/systemd/logind.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 설정 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780543479577&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grep -E &quot;^#?HandlePowerKey&quot; /etc/systemd/logind.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780543491014&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HandlePowerKey=ignore&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. systemd-logind 재시작&lt;/p&gt;
&lt;pre id=&quot;code_1780543501736&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart systemd-logind&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 적용 확인&lt;/p&gt;
&lt;pre id=&quot;code_1780543523797&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;loginctl show-session | grep HandlePowerKey&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780543533079&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HandlePowerKey=ignore
HandlePowerKeyLongPress=ignore&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;물리 전원 버튼 강제 종료와의 차이&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;랙 서버 전면의 물리 전원 버튼을 4~5초 이상 길게 누르는 동작은 systemd-logind 설정과 관계없이 동작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방식은 서버 메인보드의 전원 관리 기능(ACPI 기반 전원 제어)을 통해 하드웨어 레벨에서 강제 종료 명령이 수행된다.&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;운영 서버에서는 의도하지 않은 Power Key 입력으로 인한 장애를 예방하기 위해 HandlePowerKey=ignore 설정을 검토할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>HandlePowerKey</category>
      <category>Linux</category>
      <category>Linux 서버 전원 버튼 오동작 방지 설정</category>
      <category>Power key pressed</category>
      <category>Power Key 이벤트</category>
      <category>Powering Off</category>
      <category>리눅스</category>
      <category>변군</category>
      <category>변군이글루</category>
      <category>우분투</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711139</guid>
      <comments>https://anti1346.tistory.com/711139#entry711139comment</comments>
      <pubDate>Thu, 4 Jun 2026 12:29:26 +0900</pubDate>
    </item>
    <item>
      <title>VMware ESXi 8.0에서 물리 네트워크 어댑터의 현재 링크 속도(Speed)를 변경하는 방법</title>
      <link>https://anti1346.tistory.com/711138</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;VMware ESXi 8.0에서 물리 네트워크 어댑터(vmnic)의 현재 링크 속도를 확인하고 속도(Speed)를 변경하는 방법&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. ESXi Web UI (Host Client)에서 변경하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 속도 확인&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ESXi Host Client에 로그인합니다.&lt;/li&gt;
&lt;li&gt;왼쪽 탐색 창에서 네트워킹(Networking)을 클릭한 후 물리 어댑터(Physical adapters) 탭으로 이동합니다.&lt;/li&gt;
&lt;li&gt;목록에서 확인하려는 어댑터(예: vmnic0)의 속도(Speed) 열을 보면 현재 링크 속도와 전이중(Full Duplex) 여부를 확인할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2540&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1nB8C/dJMcahknzNc/BAS0BCCNISCubVdugLTvJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1nB8C/dJMcahknzNc/BAS0BCCNISCubVdugLTvJK/img.png&quot; data-alt=&quot;VMware ESXi 8.0&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1nB8C/dJMcahknzNc/BAS0BCCNISCubVdugLTvJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1nB8C%2FdJMcahknzNc%2FBAS0BCCNISCubVdugLTvJK%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;2540&quot; height=&quot;626&quot; data-origin-width=&quot;2540&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VMware ESXi 8.0&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속도를 1Gbps로 고정 변경&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;변경하려는 물리 어댑터를 선택하고 상단의 설정 편집(Edit settings)을 클릭합니다.&lt;/li&gt;
&lt;li&gt;구성 속도(Configured speed) 드롭다운 메뉴를 클릭합니다.&lt;/li&gt;
&lt;li&gt;자동 협상(Auto negotiate) 대신 1000Mbps, 전이중(1000 Mbps, Full Duplex)을 선택합니다.&lt;/li&gt;
&lt;li&gt;저장(Save)을 누르면 적용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zEHs6/dJMcaaMf0ha/ORFXgoahY6PKOqFuUNmMtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zEHs6/dJMcaaMf0ha/ORFXgoahY6PKOqFuUNmMtK/img.png&quot; data-alt=&quot;VMware ESXi 8.0&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zEHs6/dJMcaaMf0ha/ORFXgoahY6PKOqFuUNmMtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzEHs6%2FdJMcaaMf0ha%2FORFXgoahY6PKOqFuUNmMtK%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;1720&quot; height=&quot;700&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VMware ESXi 8.0&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. ESXi Shell 또는 SSH 접속하기&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;현재 vmnic 링크 속도 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템의 물리 어댑터 목록과 현재 상태를 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779838758359&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;esxcli network nic list&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779838970401&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Name    PCI Device    Driver  Admin Status  Link Status  Speed  Duplex  MAC Address         MTU  Description
------  ------------  ------  ------------  -----------  -----  ------  -----------------  ----  -----------
vmnic0  0000:48:00.0  ntg3    Up            Up             100  Full    6c:92:cf:0e:59:62  1500  Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet
vmnic1  0000:48:00.1  ntg3    Up            Up            1000  Full    6c:92:cf:0e:59:63  1500  Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet
vmnic2  0000:48:00.2  ntg3    Up            Down             0  Half    6c:92:cf:0e:59:64  1500  Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet
vmnic3  0000:48:00.3  ntg3    Up            Down             0  Half    6c:92:cf:0e:59:65  1500  Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Speed : 현재 링크 속도(Mbps)&lt;/li&gt;
&lt;li&gt;Duplex : Half / Full&lt;/li&gt;
&lt;li&gt;Link Status : 물리 연결 상태&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;특정 vmnic 상세 정보 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1779839100910&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;esxcli network nic get -n vmnic0&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779839106497&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;   Advertised Auto Negotiation: true
   Advertised Link Modes: Auto, 1000BaseT/Full, 100BaseT/Half, 100BaseT/Full, 10BaseT/Half, 10BaseT/Full
   Auto Negotiation: true
   Backing DPUId: N/A
   Cable Type: Twisted Pair
   Current Message Level: 7
   Driver Info:
         Bus Info: 0000:48:00:0
         Driver: ntg3
         Firmware Version: bc 1.48 ncsi 1.5.52.0
         Version: 4.1.14.0
   Link Detected: true
   Link Status: Up
   Name: vmnic0
   PHYAddress: 0
   Pause Autonegotiate: true
   Pause RX: true
   Pause TX: true
   Supported Ports: TP
   Supports Auto Negotiation: true
   Supports Pause: true
   Supports Wakeon: true
   Transceiver: internal
   Virtual Address: 00:50:56:5d:28:62
   Wakeon: MagicPacket(tm)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지원 가능한 속도 모드 확인&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;어댑터를 강제로 변경하기 전에 해당 NIC가 1Gbps 고정 설정을 지원하는지 확인하는 것이 안전합니다. (vmnic0 자리에 대상 어댑터 이름 입력)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1779839173023&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Advertised Link Modes: Auto, 1000BaseT/Full, 100BaseT/Half, 100BaseT/Full, 10BaseT/Half, 10BaseT/Full&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;vmnic 속도를 1Gbps로 변경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Auto Negotiation 사용 (권장)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;대부분의 경우 Auto Negotiation 활성화가 가장 안정적입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1779862616422&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;esxcli network nic set -n vmnic0 -a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 확인&lt;/p&gt;
&lt;pre id=&quot;code_1779862628266&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;esxcli network nic get -n vmnic0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수동으로 1Gbps Full 설정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;속도를 1000Mbps, 전이중 모드로 강제 설정합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1779838812449&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;esxcli network nic set -n vmnic0 -s 1000 -d full&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;-n : 네트워크 인터페이스 이름 (vmnicX)&lt;/li&gt;
&lt;li&gt;-s : 속도 (Mbps 단위, 1Gbps는 1000)&lt;/li&gt;
&lt;li&gt;-d : 전이중 모드 (full)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변경 사항 확인&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Link Speed가 정상적으로 고정되었는지 확인합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1779838836455&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;esxcli network nic list&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780372109318&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Name    Link Status  Speed  Duplex
------  -----------  -----  ------
vmnic0  Up           1000   Full&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>Auto Negotiation</category>
      <category>Duplex mismatch 발생 가능성이 있음</category>
      <category>ESXi 1000/Full</category>
      <category>ESXi NIC</category>
      <category>변군</category>
      <category>변군이글루</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711138</guid>
      <comments>https://anti1346.tistory.com/711138#entry711138comment</comments>
      <pubDate>Wed, 27 May 2026 08:47:04 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04에서 MySQL 8.4 LTS 바이너리(Binary) 방식으로 설치하는 방법</title>
      <link>https://anti1346.tistory.com/711137</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04에서 MySQL 8.4 LTS 바이너리(Binary) 방식으로 설치하는 방법&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제 정보&lt;/p&gt;
&lt;pre id=&quot;code_1779372676354&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -d
Description:	Ubuntu 24.04.1 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779372695254&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ uname -m
aarch64&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 기본 패키지 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 실행 및 압축 해제를 위한 필수 패키지를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779372324762&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt update
apt install -y lsb-release wget gzip xz-utils&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. MySQL 패키지 설치&lt;/h4&gt;
&lt;pre id=&quot;code_1779372380444&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt install -y libaio1t64 libnuma1 libncurses6&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;libaio 심볼릭 링크 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 24.04에서는 libaio.so.1 대신 libaio.so.1t64 형태로 제공되므로 심볼릭 링크를 생성해야 합니다.&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;ARM64(aarch64)&lt;/p&gt;
&lt;pre id=&quot;code_1779372829263&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ln -s /usr/lib/aarch64-linux-gnu/libaio.so.1t64 \
  /usr/lib/aarch64-linux-gnu/libaio.so.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x86_64&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;pre id=&quot;code_1779373351679&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt install -y libaio1&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779373367384&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 \
  /usr/lib/x86_64-linux-gnu/libaio.so.1&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;CPU 아키텍처에 맞는 경로만 적용하면 됩니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-size: 1.25em; letter-spacing: -1px; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif;&quot;&gt;2. MySQL 계정 및 그룹 생성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 전용 계정 및 그룹을 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779372929841&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;groupadd -g 28 mysql

useradd -m -c &quot;MySQL Server&quot; -d /usr/local/mysql -s /usr/sbin/nologin -u 28 -g 28 mysql&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. MySQL 바이너리 다운로드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스 디렉터리로 이동 후 MySQL 8.4 LTS 바이너리를 다운로드합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779372949968&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /usr/local/src/

wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.9-linux-glibc2.28-aarch64.tar.xz&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;ARM64(aarch64) 환경 기준 바이너리입니다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. MySQL 설치 디렉터리 생성 및 압축 해제&lt;/h4&gt;
&lt;pre id=&quot;code_1779372969258&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir -p /usr/local/mysql

tar xf mysql-8.4.9-linux-glibc2.28-aarch64.tar.xz -C /usr/local/mysql --strip-components=1&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 데이터 및 로그 디렉터리 생성&lt;/h4&gt;
&lt;pre id=&quot;code_1779372982917&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir -p /usr/local/mysql/{data,log}

chown -R mysql:mysql /usr/local/mysql&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. MySQL 설정 파일 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/usr/local/mysql/my.cnf 파일을 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779373007154&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/mysql/my.cnf
[mysqld]

# MySQL 실행 계정
user = mysql

# 기본 디렉터리
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data

# 소켓 및 PID
socket = /tmp/mysql.sock
pid-file = /usr/local/mysql/data/mysqld.pid

# 에러 로그
log-error = /usr/local/mysql/log/error.log

# MySQL 8.4 인증 정책
authentication_policy = *

[client]
socket = /tmp/mysql.sock
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. MySQL 데이터베이스 초기화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 데이터베이스를 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779373031370&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/mysql/bin/mysqld \
  --defaults-file=/usr/local/mysql/my.cnf \
  --initialize-insecure \
  --user=mysql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션 설명&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;--initialize-insecure : root 비밀번호 없이 초기화&lt;/li&gt;
&lt;li&gt;--user=mysql : mysql 계정으로 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. MySQL 서버 실행&lt;/h4&gt;
&lt;pre id=&quot;code_1779373060329&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/mysql/bin/mysqld \
  --defaults-file=/usr/local/mysql/my.cnf \
  --user=mysql &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상 실행 여부 확인&lt;/p&gt;
&lt;pre id=&quot;code_1779373068290&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ps -ef | grep -v grep | grep mysqld&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779373075414&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql     3235     1  0 13:55 pts/0    00:00:01 /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf --user=mysql&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;9. MySQL 접속&lt;/h4&gt;
&lt;pre id=&quot;code_1779373089118&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/mysql/bin/mysql -u root -S /tmp/mysql.sock&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;10. root 비밀번호 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 설치 후 root 비밀번호를 설정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779373101805&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPassword123!';

FLUSH PRIVILEGES;
EXIT;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;11. 비밀번호 적용 후 재접속&lt;/h4&gt;
&lt;pre id=&quot;code_1779373109975&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/mysql/bin/mysql -u root -p&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;12. MySQL 종료&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상 종료 방법&lt;/p&gt;
&lt;pre id=&quot;code_1779373122921&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kill $(cat /usr/local/mysql/data/mysqld.pid) 2&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종료 여부 확인&lt;/p&gt;
&lt;pre id=&quot;code_1779373128447&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ps -ef | grep -v grep | grep mysqld&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;13. 트러블슈팅&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 디렉터리 초기화 오류 발생 시&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;초기화 실패 또는 권한 오류가 발생한 경우 아래 절차로 재초기화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1779373153855&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rm -rf /usr/local/mysql/data/*

chown -R mysql:mysql /usr/local/mysql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 다시 초기화 수행&lt;/p&gt;
&lt;pre id=&quot;code_1779373160996&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/mysql/bin/mysqld \
--defaults-file=/usr/local/mysql/my.cnf \
--initialize-insecure \
--user=mysql&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;14. PATH 환경 변수 등록 (선택)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자주 사용하는 경우 PATH 등록을 권장합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779373176079&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
EOF

source /etc/profile.d/mysql.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용 확인&lt;/p&gt;
&lt;pre id=&quot;code_1779373187316&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779373215026&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql  Ver 8.4.9 for Linux on aarch64 (MySQL Community Server - GPL)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;15. 설치 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1779373193168&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql -u root -p -e &quot;SHOW DATABASES;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779373270477&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Enter password:
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+&lt;/code&gt;&lt;/pre&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;div id=&quot;mttContainer&quot; class=&quot;notranslate&quot; style=&quot;transform: translate(720px, 6081px);&quot; aria-expanded=&quot;false&quot;&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>리눅스</category>
      <category>Linux</category>
      <category>mysql</category>
      <category>Mysql 8</category>
      <category>mysql 8.4</category>
      <category>mysql 바이너리</category>
      <category>mysql 바이너리 설치</category>
      <category>ubuntu</category>
      <category>변군</category>
      <category>변군이글루</category>
      <category>우분투</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711137</guid>
      <comments>https://anti1346.tistory.com/711137#entry711137comment</comments>
      <pubDate>Thu, 21 May 2026 23:24:56 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04에서 사용하는 systemd-resolved DNS 캐시 관리 방법</title>
      <link>https://anti1346.tistory.com/711136</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04에서 사용하는 systemd-resolved DNS 캐시 관리 방법&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. systemd-resolved DNS 캐시 구조&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;systemd-resolved는 내부적으로 다음을 캐싱합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;DNS query 결과 (A / AAAA / CNAME 등)&lt;/li&gt;
&lt;li&gt;negative cache (존재하지 않는 도메인 NXDOMAIN)&lt;/li&gt;
&lt;li&gt;LLMNR / mDNS 응답 (옵션)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, OS 레벨에서 DNS 응답을 임시 저장합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. DNS 캐시 플러시 (Flush)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 캐시 초기화&lt;/p&gt;
&lt;pre id=&quot;code_1779350086189&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo resolvectl flush-caches&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는 (구버전 호환)&lt;/p&gt;
&lt;pre id=&quot;code_1779350091461&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemd-resolve --flush-caches&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인&lt;/p&gt;
&lt;pre id=&quot;code_1779350181810&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl statistics | grep &quot;Current Cache Size&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779350101958&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;                         Current Cache Size:   6&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. DNS 상태 및 캐시 통계 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1779350118677&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl statistics&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779350206030&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Transactions
                       Current Transactions:   0
                         Total Transactions: 185

Cache
                         Current Cache Size:  11
                                 Cache Hits:  58
                               Cache Misses: 127

Failure Transactions
                             Total Timeouts:   0
         Total Timeouts (Stale Data Served):   0
                    Total Failure Responses:   0
Total Failure Responses (Stale Data Served):   0

DNSSEC Verdicts
                                     Secure:   0
                                   Insecure:   0
                                      Bogus:   0
                              Indeterminate:   0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인 가능한 항목&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Cache Hits / Misses&lt;/li&gt;
&lt;li&gt;Cache Size&lt;/li&gt;
&lt;li&gt;DNSSEC 성공 여부&lt;/li&gt;
&lt;li&gt;Query 실패율&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 특정 인터페이스 DNS 관리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스 기준으로 DNS를 따로 확인 가능&lt;/p&gt;
&lt;pre id=&quot;code_1779350259192&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl status eno1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는 전체&lt;/p&gt;
&lt;pre id=&quot;code_1779350266401&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl status&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. DNS 서버 변경 (런타임 테스트)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Netplan 변경 없이 임시 테스트 가능&lt;/p&gt;
&lt;pre id=&quot;code_1779350280224&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo resolvectl dns eno1 8.8.8.8 1.1.1.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인&lt;/p&gt;
&lt;pre id=&quot;code_1779350312895&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl status eno1&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779350669365&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Link 2 (eno1)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 1.1.1.1
       DNS Servers: 8.8.8.8 1.1.1.1&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;resolvectl dns eno1 ... 같은 런타임 설정은 Netplan보다 우선권이 높고 persistent처럼 유지됨&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;런타임 DNS 초기화(Netplan DNS로 변경)&lt;/h4&gt;
&lt;pre id=&quot;code_1779350967543&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo resolvectl revert eno1&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779350987423&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl status eno1&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. 특정 도메인 강제 확인 (디버깅용)&lt;/h4&gt;
&lt;pre id=&quot;code_1779350359532&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl query google.com&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779350365015&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;google.com: 142.250.197.46                     -- link: eno1
            2404:6800:4005:81f::200e           -- link: eno1

-- Information acquired via protocol DNS in 172.6ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는 상세&lt;/p&gt;
&lt;pre id=&quot;code_1779350434590&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl query google.com -i eno1&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779350418861&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;google.com: 142.250.197.46                     -- link: eno1
            2404:6800:4005:81f::200e           -- link: eno1

-- Information acquired via protocol DNS in 1.4ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: cache&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. 캐시 + DNS 문제 트러블슈팅 순서&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNS 장애 발생 시 보통 아래 순서로 확인합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 캐시 제거&lt;/p&gt;
&lt;pre id=&quot;code_1779350543172&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo resolvectl flush-caches&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) DNS 상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1779350551160&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl status&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 실제 질의 테스트&lt;/p&gt;
&lt;pre id=&quot;code_1779350559138&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl query google.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 인터페이스 DNS 확인&lt;/p&gt;
&lt;pre id=&quot;code_1779350565513&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl status eno1&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. systemd-resolved 재시작 (강력 초기화)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐시 + 상태 모두 리셋&lt;/p&gt;
&lt;pre id=&quot;code_1779350572760&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart systemd-resolved&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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 변군이글루 : &lt;a href=&quot;https://scbyun.com/711135&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;우분투 24.04 Stub Resolver 동작 및 설정 정리&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>/etc/resolv.conf</category>
      <category>DNS 캐시</category>
      <category>DNS 캐시 플러시</category>
      <category>Stub DNS</category>
      <category>stub resolver</category>
      <category>systemd-resolved</category>
      <category>변군</category>
      <category>변군이글루</category>
      <category>우분투</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711136</guid>
      <comments>https://anti1346.tistory.com/711136#entry711136comment</comments>
      <pubDate>Thu, 21 May 2026 17:13:40 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04 Stub Resolver 동작 및 설정 정리</title>
      <link>https://anti1346.tistory.com/711135</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04 Stub Resolver(systemd-resolved) 동작 및 설정 정리&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Stub Resolver 개념 (127.0.0.53)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 24.04를 포함한 최신 Linux 시스템에서는 DNS 처리를 위해 systemd-resolved 서비스를 사용하는 구조가 일반적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 /etc/resolv.conf에 설정되는 127.0.0.53은 실제 외부 DNS 서버가 아니라, 로컬에서 동작하는 Stub Resolver(중계용 DNS 서비스) 주소입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제 정보&lt;/p&gt;
&lt;pre id=&quot;code_1779349136796&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -d
Description:	Ubuntu 24.04.1 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;동작 구조&lt;/h4&gt;
&lt;pre id=&quot;code_1779348958091&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Application
   &amp;darr;
127.0.0.53 (Stub Resolver)
   &amp;darr;
systemd-resolved
   &amp;darr;
실제 DNS 서버 (예: 8.8.8.8, 1.1.1.1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 애플리케이션은 항상 로컬 DNS(127.0.0.53)만 바라보고, 실제 DNS 서버로의 질의 전달은 systemd-resolved가 담당합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 현재 상태 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1779349040162&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl is-active systemd-resolved&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779349048329&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl is-enabled systemd-resolved&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인된 상태&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;masked 상태 &amp;rarr; 서비스 사용 불가&lt;/li&gt;
&lt;li&gt;inactive (dead) &amp;rarr; 실행되지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 Stub 파일도 존재하지 않는 상태&lt;/p&gt;
&lt;pre id=&quot;code_1779349092835&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls -l /run/systemd/resolve/stub-resolv.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779349103332&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls: cannot access /run/systemd/resolve/stub-resolv.conf&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 기존 설정 초기화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 DNS 충돌 방지를 위해 resolv.conf 제거&lt;/p&gt;
&lt;pre id=&quot;code_1779349390644&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo rm -f /etc/resolv.conf&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. systemd-resolved 설치&lt;/h4&gt;
&lt;pre id=&quot;code_1779349396212&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 install -y systemd-resolved&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. systemd-resolved 활성화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.1 Mask 해제&lt;/p&gt;
&lt;pre id=&quot;code_1779349401971&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl unmask systemd-resolved&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.2 서비스 활성화&lt;/p&gt;
&lt;pre id=&quot;code_1779349408295&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1779349417699&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl status systemd-resolved&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. Stub Resolver 연결 (resolv.conf 설정)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;systemd-resolved가 관리하는 Stub 파일을 /etc/resolv.conf에 연결합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779349438593&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인&lt;/p&gt;
&lt;pre id=&quot;code_1779349445105&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls -l /etc/resolv.conf&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. Netplan DNS 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 인터페이스에서 실제 DNS 서버를 지정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779349460585&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/netplan/50-cloud-init.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779349466682&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;network:
  version: 2
  ethernets:
    eno1:
      dhcp4: no
      addresses:
        - 192.168.0.10/24
      gateway4: 192.168.0.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 1.1.1.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용&lt;/p&gt;
&lt;pre id=&quot;code_1779349476368&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo netplan try&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779349516757&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Do you want to keep these settings?

Press ENTER before the timeout to accept the new configuration

Changes will revert in 120 seconds

Configuration accepted.&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779349483964&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo netplan apply&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. DNS 동작 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1779349526252&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl status&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 인터페이스 확인&lt;/p&gt;
&lt;pre id=&quot;code_1779349532237&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resolvectl status eno1&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1779349544636&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Link 2 (eno1)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 8.8.8.8
       DNS Servers: 8.8.8.8 1.1.1.1&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. DNS 캐시 플러시 (Flush)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 캐시 초기화&lt;/p&gt;
&lt;pre id=&quot;code_1779349567897&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo resolvectl flush-caches&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는 (구버전 호환):&lt;/p&gt;
&lt;pre id=&quot;code_1779349582128&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemd-resolve --flush-caches&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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 변군이글루 : &lt;a href=&quot;https://scbyun.com/711136&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;우분투 24.04에서 사용하는 systemd-resolved DNS 캐시 관리 방법&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>/etc/resolv.conf</category>
      <category>DNS 캐시 플러시</category>
      <category>Stub DNS</category>
      <category>stub resolver</category>
      <category>systemd-resolved</category>
      <category>변군</category>
      <category>변군이글루</category>
      <category>우분투</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711135</guid>
      <comments>https://anti1346.tistory.com/711135#entry711135comment</comments>
      <pubDate>Thu, 21 May 2026 16:50:31 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 특정 TTY 세션 제외 후 전체 SSH 세션 종료 방법</title>
      <link>https://anti1346.tistory.com/711134</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;리눅스 특정 TTY 세션 제외 후 전체 SSH 세션 종료 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 서버 작업 중 현재 접속 중인 SSH 세션은 유지하면서 나머지 사용자 세션만 강제로 종료해야 하는 경우가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;오래된 SSH 세션 정리&lt;/li&gt;
&lt;li&gt;작업자 세션 초기화&lt;/li&gt;
&lt;li&gt;비정상 세션 강제 종료&lt;/li&gt;
&lt;li&gt;서버 점검 전 세션 정리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등의 상황에서 유용하게 사용할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 현재 접속 중인 내 세션 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 사용 중인 TTY 정보를 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1778654345577&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tty&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 결과&lt;/p&gt;
&lt;pre id=&quot;code_1778654351472&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/dev/pts/5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 유지해야 할 세션은 pts/5 입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 현재 로그인된 SSH 세션 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1778654364204&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;who -u&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 결과&lt;/p&gt;
&lt;pre id=&quot;code_1778654372857&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu pts/1  2026-04-23 11:36   ?   330593 (192.168.0.44)
ubuntu pts/3  2026-04-24 08:15   ?   375624 (192.168.0.44)
ubuntu pts/4  2026-05-13 15:09   .  1480384 (192.168.0.44)
ubuntu pts/5  2026-05-13 15:09   .  1480641 (192.168.0.44)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PID(Process ID) 확인&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;who -u 명령의 마지막 PID 컬럼을 기준으로 세션 프로세스를 종료할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 현재 세션 제외 후 전체 SSH 세션 종료&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 세션(pts/5)을 제외한 나머지 세션을 강제 종료합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1778654438312&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;who -u | grep -v &quot;pts/5&quot; | awk '{print $6}' | xargs -I{} kill -9 {}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 결과&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;현재 세션 자동 제외 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TTY 값을 변수로 받아 자동으로 제외할 수도 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;kill -15(SIGTERM) 사용 권장&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778674531214&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MYTTY=$(tty | awk -F/ '{print $NF}')

who -u | grep -v &quot;$MYTTY&quot; | awk '{print $6}' | xargs -I{} kill -15 {}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;kill -9(SIGKILL) 강제 종료&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778654471910&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MYTTY=$(tty | awk -F/ '{print $NF}')

who -u | grep -v &quot;$MYTTY&quot; | awk '{print $6}' | xargs -I{} kill -9 {}&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;운영 중인 Linux 서버에서는 불필요한 SSH 세션 정리가 필요한 경우가 자주 발생합니다.&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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 변군이글루 : &lt;a href=&quot;https://scbyun.com/1743&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;리눅스 터미널 세션을 확인하고 끊는 방법&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>tty 세션 종료</category>
      <category>리눅스</category>
      <category>리눅스 터미널 세션 끊기</category>
      <category>변군이글루</category>
      <category>세션 종료</category>
      <category>터미널 세션 강제 종료</category>
      <category>터미널 세션 종료</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711134</guid>
      <comments>https://anti1346.tistory.com/711134#entry711134comment</comments>
      <pubDate>Wed, 13 May 2026 15:41:50 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 프로세스를 강제 종료하지 않고 정상 종료하는 방법</title>
      <link>https://anti1346.tistory.com/711133</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;MySQL 프로세스를 강제 종료하지 않고 정상 종료하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL root 패스워드를 분실했을 경우 --skip-grant-tables 옵션으로 인증을 우회하여 패스워드를 재설정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 kill -9 같은 강제 종료 방식 대신 mysqladmin shutdown 명령을 사용하면 안전하게 MySQL을 종료할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 로그 디렉토리 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 에러 로그 디렉토리가 없는 경우 생성한다.&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;pre id=&quot;code_1778558568345&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -p /usr/local/mysql/log

sudo touch /usr/local/mysql/log/error.log&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소유권 및 권한 설정&lt;/p&gt;
&lt;pre id=&quot;code_1778558590424&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo chown -R mysql:mysql /usr/local/mysql/log

sudo chmod 755 /usr/local/mysql/log
sudo chmod 644 /usr/local/mysql/log/error.log&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. MySQL 인증 우회 모드로 기동&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--skip-grant-tables 옵션으로 권한 검사를 비활성화하여 MySQL을 실행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1778558604637&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/mysql/bin/mysqld_safe \
  --defaults-file=/usr/local/mysql/my.cnf \
  --skip-grant-tables \
  --skip-networking &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션 설명&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;--skip-grant-tables 사용자 인증 비활성화&lt;/li&gt;
&lt;li&gt;--skip-networking TCP 네트워크 접속 차단 (보안 강화)&lt;/li&gt;
&lt;li&gt;mysqld_safe 장애 발생 시 자동 재시작 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. MySQL 접속&lt;/h4&gt;
&lt;pre id=&quot;code_1778558622488&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/mysql/bin/mysql \
  -uroot \
  --socket=/tmp/mysql-3306.sock&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. root 패스워드 재설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 8.x 기준&lt;/p&gt;
&lt;pre id=&quot;code_1778558660211&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FLUSH PRIVILEGES;

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';

FLUSH PRIVILEGES;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysql_native_password 방식 사용 시&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;일부 구버전 애플리케이션 또는 PHP 연동 환경에서는 mysql_native_password 플러그인이 필요할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778558678469&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword';&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. MySQL 정상 종료 (중요)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에는 아래와 같이 PID 기반 kill 명령으로 종료하는 경우가 많다.&lt;/p&gt;
&lt;pre id=&quot;code_1778558689537&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo kill `cat /usr/local/mysql/data/mysqld.pid`&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이 방식은 비정상 종료로 이어질 수 있으며 InnoDB Recovery가 발생할 가능성이 있다.&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;따라서 아래와 같이 mysqladmin shutdown 명령으로 정상 종료하는 것을 권장한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;권장 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778558703189&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/mysql/bin/mysqladmin \
  -uroot \
  --socket=/tmp/mysql-3306.sock \
  shutdown&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;InnoDB Flush 정상 처리&lt;/li&gt;
&lt;li&gt;Binary Log 안전 종료&lt;/li&gt;
&lt;li&gt;데이터 손상 위험 감소&lt;/li&gt;
&lt;li&gt;Crash Recovery 방지&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. MySQL 정상 모드로 재기동&lt;/h4&gt;
&lt;pre id=&quot;code_1778558773056&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/mysql/bin/mysqld \
  --defaults-file=/usr/local/mysql/my.cnf \
  --user=mysql &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. 변경된 패스워드로 접속 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1778558781764&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/mysql/bin/mysql \
  -uroot -p \
  --socket=/tmp/mysql-3306.sock&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 인증 플러그인 확인&lt;/p&gt;
&lt;pre id=&quot;code_1778559332477&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT user, host, plugin FROM mysql.user;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;unix_socket이면 &amp;rarr; 비밀번호 없이 OS 로그인으로 인증됨&lt;/li&gt;
&lt;li&gt;mysql_native_password면 &amp;rarr; 비밀번호 인증&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;DB가 응답 없을 때 (단계적 접근)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1단계: 정상 종료 시도 (30초 정도 기다림)&lt;/p&gt;
&lt;pre id=&quot;code_1778559095678&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo kill `cat /var/run/mysqld/mysqld.pid`&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2단계: 그래도 안 되면 (1-2분 후)&lt;/p&gt;
&lt;pre id=&quot;code_1778559108210&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo kill -15 `cat /var/run/mysqld/mysqld.pid`&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3단계: 진짜 최후의 수단 (수 분 후에도 반응 없을 때)&lt;/p&gt;
&lt;pre id=&quot;code_1778559116400&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo kill -9 `cat /var/run/mysqld/mysqld.pid`&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;kill -9 사용 후 반드시 해야 할 일&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 잔여 파일 정리&lt;/p&gt;
&lt;pre id=&quot;code_1778559124051&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo rm -f /var/run/mysqld/mysqld.pid

sudo rm -f /var/lib/mysql/mysql.sock&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 테이블 검사/복구&lt;/p&gt;
&lt;pre id=&quot;code_1778559135218&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/mysql/bin/mysqld \
  --defaults-file=/usr/local/mysql/my.cnf \
  --user=mysql &amp;amp;

mysqlcheck --all-databases --auto-repair&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 로그 확인&lt;/p&gt;
&lt;pre id=&quot;code_1778559224173&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tail -f /var/log/mysql/error.log&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>Kill</category>
      <category>mysql</category>
      <category>mysql 강제 종료</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711133</guid>
      <comments>https://anti1346.tistory.com/711133#entry711133comment</comments>
      <pubDate>Tue, 12 May 2026 13:18:04 +0900</pubDate>
    </item>
    <item>
      <title>Linux Bash 명령어 이력을 Syslog로 중앙 수집하는 방법</title>
      <link>https://anti1346.tistory.com/711132</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Linux Bash 명령어 이력을 Syslog로 중앙 수집하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스 서버 운영 환경에서는 사용자의 쉘(Bash) 명령어 이력을 안전하게 기록하고 중앙 로그 서버로 전송하는 것이 매우 중요합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제 : Ubuntu 22.04/24.04&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Syslog : rsyslog&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Shell : bash&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;아키텍처&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;543&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/busArd/dJMcajvpyLL/ZvsBFZ6fUwEfhDrf5Hy2Y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/busArd/dJMcajvpyLL/ZvsBFZ6fUwEfhDrf5Hy2Y1/img.png&quot; data-alt=&quot;출처-claude.ai&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/busArd/dJMcajvpyLL/ZvsBFZ6fUwEfhDrf5Hy2Y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbusArd%2FdJMcajvpyLL%2FZvsBFZ6fUwEfhDrf5Hy2Y1%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;526&quot; height=&quot;543&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;543&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처-claude.ai&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. rsyslog 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bash History 전용 로그 설정&lt;/p&gt;
&lt;pre id=&quot;code_1778501711479&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tee /etc/rsyslog.d/00-history.conf &amp;lt;&amp;lt;'EOF'
if $programname == 'bash_history' then {
    # 로컬 파일 저장
    action(type=&quot;omfile&quot;
           file=&quot;/var/log/bash_history.log&quot;)

    # 중앙 로그 서버로 TCP 전송 (UDP보다 신뢰성 높음)
    action(type=&quot;omfwd&quot;
           target=&quot;logserv.scbyun.com&quot;
           port=&quot;514&quot;
           protocol=&quot;tcp&quot;)

    # 이 규칙에서 처리 완료 &amp;mdash; 다른 규칙 중복 방지
    stop
}
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 로그 로테이션 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그 파일이 무한히 증가하지 않도록 logrotate 설정을 추가합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1778501720288&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tee /etc/logrotate.d/bash_history &amp;lt;&amp;lt;'EOF'
/var/log/bash_history.log {
    daily            # 매일 순환
    missingok        # 파일 없어도 오류 없음
    rotate 90        # 90개 보관 (= 약 3개월)
    compress         # gzip 압축
    delaycompress    # 최신 1개는 압축 지연 (rsyslog 접근 충돌 방지)
    notifempty       # 빈 파일은 순환 건너뜀
    create 0600 root root  # 새 파일 권한 (root만 읽기)
    sharedscripts    # postrotate를 한 번만 실행
    postrotate
        # rsyslog에 HUP 신호 &amp;rarr; 새 파일로 재오픈
        /usr/bin/systemctl kill -s HUP rsyslog.service &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true
    endscript
}
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 문법 검사&lt;/p&gt;
&lt;pre id=&quot;code_1778502167319&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo rsyslogd -N1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용&lt;/p&gt;
&lt;pre id=&quot;code_1778501742155&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart rsyslog&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. Bash 명령어 감사 스크립트 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;profile 스크립트 생성&lt;/p&gt;
&lt;pre id=&quot;code_1778501728287&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tee /etc/profile.d/history.sh &amp;lt;&amp;lt;'EOF'
# 인터랙티브 셸에서만 활성화 (스크립트 실행 시 성능 영향 방지)
if [[ $- != *i* ]]; then
    return
fi

function history_to_syslog()
{
    # 재귀 방지: trap 일시 해제
    trap - DEBUG

    local cmd=&quot;${BASH_COMMAND}&quot;

    # 기록 제외 대상 (내부 함수 / 노이즈 명령)
    case &quot;$cmd&quot; in
        history_to_syslog*|\
        logger*|\
        trap*|\
        local\ cmd*|\
        who\ am\ i*|\
        tty|\
        pwd|\
        ls*|\
        return*)
            trap 'history_to_syslog' DEBUG
            return
            ;;
    esac

    logger -p local6.notice -t bash_history \
    &quot;USER=$(whoami) \
IP=$(who am i | awk '{print $5}') \
PWD=$(pwd) \
TTY=$(tty) \
CMD=${cmd}&quot;

    # trap 재등록
    trap 'history_to_syslog' DEBUG
}

# 모든 인터랙티브 셸에서 trap 활성화
trap 'history_to_syslog' DEBUG
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용&lt;/p&gt;
&lt;pre id=&quot;code_1778501755140&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source /etc/profile.d/history.sh&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 로그 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬 로그 확인&lt;/p&gt;
&lt;pre id=&quot;code_1778502193486&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tail -f /var/log/bash_history.log&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. 원격 로그 서버 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중앙 로그 서버에서 다음과 같이 수신 여부를 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1778502201318&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tcpdump -i any port 514&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre id=&quot;code_1778502209325&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tail -f /var/log/syslog&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>bash trap 기능</category>
      <category>logrotate</category>
      <category>rsyslog</category>
      <category>rsyslog와 bash trap 기능을 활용</category>
      <category>감사 로그(Audit Log)</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711132</guid>
      <comments>https://anti1346.tistory.com/711132#entry711132comment</comments>
      <pubDate>Mon, 11 May 2026 21:24:16 +0900</pubDate>
    </item>
    <item>
      <title>리눅스에서 사용자 명령어(history)를 rsyslog 중앙 로그 서버로 전송하는 방법</title>
      <link>https://anti1346.tistory.com/711131</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스에서 사용자 명령어(history)를 rsyslog 중앙 로그 서버로 전송하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스에서 사용자의 bash 명령 이력을 실시간으로 수집하여 중앙 syslog 서버로 전송하는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안 감사(audit), 사용자 행위 추적, 운영 이력 관리에 활용할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전체 흐름&lt;/h4&gt;
&lt;pre id=&quot;code_1778398586547&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[클라이언트 서버]
  bash trap (DEBUG)
      &amp;darr;
  logger 명령어
      &amp;darr;
  rsyslog (local6.notice)
      &amp;darr; TCP/UDP 514
[중앙 로그 서버]
  rsyslog (imtcp / imudp)
      &amp;darr;
  /var/log/clients/&amp;lt;HOSTNAME&amp;gt;/bash_history.log&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Bash History &amp;rarr; syslog 연동&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;trap 'function' DEBUG 를 이용하면 bash에서 명령어를 실행할 때마다 지정한 함수를 호출할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 함수 안에서 logger로 syslog에 기록하는 방식이다.&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;/etc/profile.d/history.sh 작성&lt;/p&gt;
&lt;pre id=&quot;code_1778392985019&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;'EOF' &amp;gt; /etc/profile.d/history.sh

function history_to_syslog()
{
    # 재귀 호출 방지: 함수 진입 시 trap을 먼저 해제
    trap - DEBUG

    local cmd=&quot;${BASH_COMMAND}&quot;

    # logger, trap 등 내부 명령어는 로깅에서 제외
    case &quot;$cmd&quot; in
        history_to_syslog*|\
        logger*|\
        trap*|\
        local\ cmd*|\
        who\ am\ i*|\
        tty|\
        pwd|\
        return*)
            trap 'history_to_syslog' DEBUG
            return
            ;;
    esac

    # SSH 접속 시 IP는 &quot;(192.168.1.100)&quot; 형태로 반환되므로 괄호 제거
    local ip
    ip=$(who am i | awk '{gsub(/[()]/,&quot;&quot;); print $5}')
    ip=${ip:-&quot;local&quot;}   # 콘솔 직접 로그인 시 fallback

    logger -p local6.notice -t bash_history \
    &quot;USER=$(whoami) \
IP=${ip} \
TTY=$(tty) \
PWD=$(pwd) \
CMD=${cmd}&quot;

    # 함수 종료 시 trap 복원
    trap 'history_to_syslog' DEBUG
}

trap 'history_to_syslog' DEBUG

EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;권한 설정 및 적용&lt;/p&gt;
&lt;pre id=&quot;code_1778393000094&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 644 /etc/profile.d/history.sh&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778393005958&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source /etc/profile.d/history.sh&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. rsyslog 클라이언트 설정&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;TCP vs UDP 비교&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;b&gt;TCP&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;b&gt;UDP&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;전송 보장&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;O (재전송)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;X (유실 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;서버 장애 대응&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;queue 버퍼링 가능&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;불가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;성능 오버헤드&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;상대적으로 높음&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;운영 환경 권장&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;권장&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;내부망 경량 수집 시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 환경에서는 TCP를 권장한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2-1. 로컬 저장 + 중앙 서버 전송&lt;/h4&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;rsyslog 설정(TCP 사용 시)&lt;/p&gt;
&lt;pre id=&quot;code_1778393073558&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/rsyslog.d/history.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778393026431&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if $programname == 'bash_history' then {
    action(type=&quot;omfile&quot;
           file=&quot;/var/log/bash_history.log&quot;)

    action(type=&quot;omfwd&quot;
           target=&quot;logserv.scbyun.com&quot;
           port=&quot;514&quot;
           protocol=&quot;tcp&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UDP 사용 시&lt;/p&gt;
&lt;pre id=&quot;code_1778393060358&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/rsyslog.d/history.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778393047840&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if $programname == 'bash_history' then {
    action(type=&quot;omfile&quot;
           file=&quot;/var/log/bash_history.log&quot;)

    action(type=&quot;omfwd&quot;
           target=&quot;logserv.scbyun.com&quot;
           port=&quot;514&quot;
           protocol=&quot;udp&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2-2. 중앙 서버로만 전송 (로컬 저장 없음)&lt;/h4&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;rsyslog 설정(TCP 사용 시)&lt;/p&gt;
&lt;pre id=&quot;code_1778393189970&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/rsyslog.d/history.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778393196938&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if $programname == 'bash_history' then {
    action(type=&quot;omfwd&quot;
           target=&quot;logserv.scbyun.com&quot;
           port=&quot;514&quot;
           protocol=&quot;tcp&quot;)
    stop
}&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UDP 사용 시&lt;/p&gt;
&lt;pre id=&quot;code_1778393209633&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/rsyslog.d/history.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778393218570&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if $programname == 'bash_history' then {
    action(type=&quot;omfwd&quot;
           target=&quot;logserv.scbyun.com&quot;
           port=&quot;514&quot;
           protocol=&quot;udp&quot;)
    stop
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;stop 옵션 설정이 중요하다.&lt;br /&gt;이 옵션이 있어야 /var/log/messages, /var/log/syslog 같은 로컬 로그 파일에 기록되지 않는다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2-3. 운영 환경 권장 설정 (TCP + Disk-Assisted Queue)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;linkedList(메모리 큐)는 rsyslog 재시작 시 데이터가 유실된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 환경에서는 disk-Assisted 큐를 사용하여 재시작 후에도 미전송 로그를 복구할 수 있도록 구성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1778399084724&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/rsyslog.d/history.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778399099556&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if $programname == 'bash_history' then {
    action(
        type=&quot;omfwd&quot;
        target=&quot;logserv.scbyun.com&quot;
        port=&quot;514&quot;
        protocol=&quot;tcp&quot;

        # 서버 장애 시 무한 재시도
        action.resumeRetryCount=&quot;-1&quot;

        # 메모리+디스크 혼합 큐 (재시작 후 복구 가능)
        queue.type=&quot;disk-Assisted&quot;
        queue.filename=&quot;bash_history_fwd&quot;   # 스풀 파일명 (필수)
        queue.size=&quot;10000&quot;
        queue.maxDiskSpace=&quot;100m&quot;
    )
    stop
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rsyslog 재시작&lt;/p&gt;
&lt;pre id=&quot;code_1778399113756&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart rsyslog&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 기존 rsyslog 설정과 중복 전송 방지&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 설정에 아래와 같이 전체 전송 룰이 있다면&lt;/p&gt;
&lt;pre id=&quot;code_1778393315968&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;*.info;mail.none;authpriv.none;cron.none    @logserv.scbyun.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;local6.notice 로그도 함께 전송되어 중앙 서버에 중복으로 기록될 수 있다.&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;해결 방법: history.conf 에 stop을 추가하면 rsyslog의 rule 처리 흐름이 해당 시점에서 중단된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 *.info 룰까지 처리가 넘어가지 않으므로 중복 전송이 방지된다.&lt;/p&gt;
&lt;pre id=&quot;code_1778393329536&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if $programname == 'bash_history' then {
    action(type=&quot;omfwd&quot;
           target=&quot;logserv.scbyun.com&quot;
           port=&quot;514&quot;
           protocol=&quot;tcp&quot;)
    stop    # &amp;larr; 이 줄이 있어야 이후 룰로 넘어가지 않음
}&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;/etc/rsyslog.d/ 디렉터리의 파일은 파일명 알파벳 순서로 로드된다.&lt;br /&gt;history.conf가 기존 전송 룰보다 먼저 처리되도록 00-history.conf처럼 접두사를 붙이는 것도 좋은 방법이다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 중앙 로그 서버(수신 측) 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중앙 서버에서 클라이언트 로그를 수신하려면 imtcp 또는 imudp 모듈을 활성화해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1778399294497&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/rsyslog.d/00-server.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778393340429&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# TCP 수신 활성화
module(load=&quot;imtcp&quot;)
input(type=&quot;imtcp&quot; port=&quot;514&quot;)

# 호스트별 디렉터리로 분리 저장
if $programname == 'bash_history' then {
    action(type=&quot;omfile&quot;
           file=&quot;/var/log/clients/%HOSTNAME%/bash_history.log&quot;
           dirCreateMode=&quot;0750&quot;
           fileCreateMode=&quot;0640&quot;
           dirOwner=&quot;root&quot;
           fileOwner=&quot;root&quot;)
    stop
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778399317496&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart rsyslog&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;UDP를 사용할 경우 imtcp 대신 imudp를 로드하고 protocol=&quot;udp&quot;로 맞춰준다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 로그 로테이션 (logrotate)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬 또는 서버에 파일로 저장하는 경우 로테이션 설정이 필요하다. 미설정 시 단일 파일이 무한정 커진다.&lt;/p&gt;
&lt;pre id=&quot;code_1778399340873&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/logrotate.d/bash_history&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778399346932&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/var/log/bash_history.log {
    daily
    rotate 90
    compress
    missingok
    notifempty
    postrotate
        systemctl kill -s HUP rsyslog
    endscript
}

# 중앙 서버 호스트별 로그 로테이션
/var/log/clients/*/bash_history.log {
    daily
    rotate 90
    compress
    missingok
    notifempty
    sharedscripts
    postrotate
        systemctl kill -s HUP rsyslog
    endscript
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. 로그 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트 로컬&lt;/p&gt;
&lt;pre id=&quot;code_1778399354878&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tail -f /var/log/bash_history.log&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중앙 로그 서버&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;특정 호스트 로그 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778399361906&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tail -f /var/log/clients/web01/bash_history.log&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;전체 서버 로그에서 검색&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778399385241&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grep bash_history /var/log/messages&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778399368918&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;May 10 10:23:45 web01 bash_history: USER=scbyun IP=192.168.1.100 TTY=/dev/pts/0 PWD=/home/scbyun CMD=ls -al
May 10 10:23:48 web01 bash_history: USER=scbyun IP=192.168.1.100 TTY=/dev/pts/0 PWD=/home/scbyun CMD=cat /etc/passwd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>History</category>
      <category>history 추적</category>
      <category>history 추적 방식</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711131</guid>
      <comments>https://anti1346.tistory.com/711131#entry711131comment</comments>
      <pubDate>Sun, 10 May 2026 15:12:10 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04에서 자동 업그레이드 및 자동 재부팅을 비활성화 방법</title>
      <link>https://anti1346.tistory.com/711130</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04에서 자동 업그레이드(Unattended-Upgrades) 및 자동 재부팅을 비활성화 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 24.04는 기본적으로 unattended-upgrades 서비스와 apt-daily 타이머를 통해 자동 패키지 업데이트 및 보안 업그레이드를 수행합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;자동 패키지 목록 갱신 (apt update)&lt;/li&gt;
&lt;li&gt;자동 보안 업데이트&lt;/li&gt;
&lt;li&gt;자동 패키지 업그레이드&lt;/li&gt;
&lt;li&gt;커널 업데이트 후 자동 재부팅&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 서버 환경에서는 예기치 않은 패키지 변경 및 재부팅을 방지하기 위해 자동 업그레이드를 비활성화하는 경우가 많습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제 정보&lt;/p&gt;
&lt;pre id=&quot;code_1778155647877&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lsb_release -d | grep Description&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778154689996&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Description:	Ubuntu 24.04.4 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 현재 자동 업그레이드 동작 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cron.daily 확인&lt;/p&gt;
&lt;pre id=&quot;code_1778154464344&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /etc/crontab | grep daily&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778154458281&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;25 6 * * * root test -x /usr/sbin/anacron || { cd / &amp;amp;&amp;amp; run-parts --report /etc/cron.daily; }&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;우분투 24.04에서는 대부분 systemd timer 기반으로 동작하지만 일부 환경에서는 cron.daily도 함께 사용됩니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;unattended-upgrades 로그 확인&lt;/p&gt;
&lt;pre id=&quot;code_1778154492037&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /var/log/unattended-upgrades/unattended-upgrades-dpkg.log&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;APT 패키지 이력 확인&lt;/p&gt;
&lt;pre id=&quot;code_1778154498767&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /var/log/apt/history.log&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;자동 업그레이드가 실제 수행되었는지 확인할 수 있습니다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. unattended-upgrades 서비스 비활성화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1778154536546&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl status unattended-upgrades&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 중지 및 비활성화&lt;/p&gt;
&lt;pre id=&quot;code_1778154121802&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl disable --now unattended-upgrades&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1778154192451&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl is-enabled unattended-upgrades&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778159000578&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;disabled&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;자동 패키지 업그레이드 대부분 중지&lt;/li&gt;
&lt;li&gt;자동 보안 패치 중지&lt;/li&gt;
&lt;li&gt;자동 재부팅도 일반적으로 중지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 설정으로 대부분의 자동 패키지 업그레이드와 자동 보안 패치가 중지됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 우분투 24.04에서는 apt-daily.timer 및 apt-daily-upgrade.timer가 여전히 동작할 수 있으므로 운영 서버에서는 추가 비활성화를 권장합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. APT 자동 업데이트 설정 비활성화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 파일 수정&lt;/p&gt;
&lt;pre id=&quot;code_1778154352055&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/apt/apt.conf.d/20auto-upgrades&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 설정&lt;/p&gt;
&lt;pre id=&quot;code_1778154358871&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;APT::Periodic::Update-Package-Lists &quot;1&quot;;
APT::Periodic::Unattended-Upgrade &quot;1&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 변경합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1778154624196&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;APT::Periodic::Update-Package-Lists &quot;0&quot;;
APT::Periodic::Unattended-Upgrade &quot;0&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 값 설명&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Update-Package-Lists : 자동 apt update 수행 여부&lt;/li&gt;
&lt;li&gt;Unattended-Upgrade : 자동 업그레이드 수행 여부&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. systemd APT Timer 비활성화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 24.04에서는 아래 systemd timer가 자동 APT 작업을 수행합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;pt-daily.timer : 패키지 목록 자동 갱신&lt;/li&gt;
&lt;li&gt;apt-daily-upgrade.timer : 자동 업그레이드 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt-daily.timer 비활성화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;상태 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778154791481&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl status apt-daily.timer&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;비활성화&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778154338165&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl disable --now apt-daily.timer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt-daily-upgrade.timer 비활성화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;상태 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778154807253&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl status apt-daily-upgrade.timer&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;비활성화&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778154327388&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl disable --now apt-daily-upgrade.timer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;활성화된 APT Timer 확인&lt;/p&gt;
&lt;pre id=&quot;code_1778154303274&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl list-timers | grep apt&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;비활성화 후 출력되지 않거나 inactive 상태이면 정상입니다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 자동 재부팅 비활성화&lt;/h4&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;pre id=&quot;code_1778155107367&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo sed -i.bak \
's|//Unattended-Upgrade::Automatic-Reboot &quot;false&quot;;|Unattended-Upgrade::Automatic-Reboot &quot;false&quot;;|' \
/etc/apt/apt.conf.d/50unattended-upgrades&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 확인&lt;/p&gt;
&lt;pre id=&quot;code_1778155224201&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grep &quot;Automatic-Reboot&quot; /etc/apt/apt.conf.d/50unattended-upgrades | grep -v '//'&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. unattended-upgrades 패키지 제거&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동 업그레이드를 완전히 사용하지 않을 경우 패키지를 제거할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1778154898896&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt remove -y unattended-upgrades&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;설정 파일까지 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778154293227&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt purge -y unattended-upgrades&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7.&amp;nbsp; 운영 서버 권장 설정&lt;/h4&gt;
&lt;pre id=&quot;code_1778155259412&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl disable --now unattended-upgrades

sudo systemctl disable --now apt-daily.timer
sudo systemctl disable --now apt-daily-upgrade.timer&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778155270674&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo sed -i.bak \
's|//Unattended-Upgrade::Automatic-Reboot &quot;false&quot;;|Unattended-Upgrade::Automatic-Reboot &quot;false&quot;;|' \
/etc/apt/apt.conf.d/50unattended-upgrades&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. 수동 패치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 목록 갱신 및 패키지 업그레이드&lt;/p&gt;
&lt;pre id=&quot;code_1778155003760&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 upgrade&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업그레이드 가능한 패키지 확인&lt;/p&gt;
&lt;pre id=&quot;code_1778155027348&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt list --upgradable&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;mttContainer&quot; class=&quot;notranslate&quot; style=&quot;transform: translate(119px, 4720px);&quot; aria-expanded=&quot;true&quot;&gt;
&lt;div id=&quot;tippy-1&quot; style=&quot;z-index: 100000200; visibility: visible; position: absolute; inset: auto auto 0px 0px; margin: 0px; transform: translate(399px, -15px);&quot; data-tippy-root=&quot;&quot;&gt;
&lt;div class=&quot;tippy-box&quot; style=&quot;max-width: 350px; transition-duration: 300ms;&quot; tabindex=&quot;-1&quot; role=&quot;mtttooltip&quot; data-state=&quot;visible&quot; data-theme=&quot;custom&quot; data-animation=&quot;fade&quot; data-placement=&quot;top&quot;&gt;
&lt;div class=&quot;tippy-content&quot; style=&quot;transition-duration: 300ms;&quot; data-state=&quot;visible&quot;&gt;&lt;span&gt;grep &quot;자동 재부팅&quot; /etc/apt/apt.conf.d/50unattended-upgrades | grep -v '//'&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;tippy-arrow&quot; style=&quot;position: absolute; left: 0px; transform: translate(92px, 0px);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>리눅스</category>
      <category>unattended-upgrades 서비스 비활성화</category>
      <category>리눅스</category>
      <category>변군이글루</category>
      <category>우분투</category>
      <category>우분투 자동 업그레이드 비활성화</category>
      <category>자동 업그레이드 비활성화</category>
      <category>자동 업데이트 비활성화</category>
      <category>자동 업데이트 확인</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711130</guid>
      <comments>https://anti1346.tistory.com/711130#entry711130comment</comments>
      <pubDate>Thu, 7 May 2026 21:15:10 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04에서 최신 버전의 BIND9를 설치하는 방법</title>
      <link>https://anti1346.tistory.com/711129</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04에서 최신 버전의 BIND9를 설치하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 24.04 기본 저장소의 BIND9는 최신 버전이 아닐 수 있으므로 ISC 공식 저장소(PPA)를 활용하여 최신 안정 버전을 설치하고 DNS 서버를 구성합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;BIND9를 Authoritative DNS 서버(Master/Slave)로 구성&lt;/li&gt;
&lt;li&gt;Zone Transfer 시 TSIG(Key 기반 인증) 적용으로 보안 강화&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Master DNS - 192.168.10.101&lt;/li&gt;
&lt;li&gt;Slave DNS - 192.168.10.102&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제 정보&lt;/p&gt;
&lt;pre id=&quot;code_1766471005709&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -d
Description:    Ubuntu 24.04.3 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 시스템 업데이트 및 필수 패키지 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템을 최신 상태로 업데이트하고 PPA 관리에 필요한 도구를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1778066328552&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778066335812&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y software-properties-common&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제 정보&lt;/p&gt;
&lt;pre id=&quot;code_1778073087012&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -d
No LSB modules are available.
Description:	Ubuntu 24.04.4 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. ISC 공식 저장소 추가&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 기본 저장소의 BIND는 버전(BIND 9.18.39)이 낮을 수 있으므로 최신 안정화 버전을 제공하는 ISC의 공식 PPA를 추가합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1778066516102&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo add-apt-repository -y ppa:isc/bind&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1766470365505&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. BIND9 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신 버전의 BIND9와 유틸리티를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1766470359687&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y bind9 bind9-utils bind9-doc dnsutils&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1766470371453&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;named -v&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1766470383981&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BIND 9.20.22-1+ubuntu24.04.1+deb.sury.org+1-Ubuntu (Stable Release) &amp;lt;id:&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 방화벽 설정 (UFW) - 선택 사항&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNS 서버는 UDP/TCP 53번 포트를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방화벽이 활성화되어 있다면 외부 통신을 위해 해당 포트를 열어주어야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1778066958557&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# DNS 관련 포트 허용
sudo ufw allow Bind9

# 또는 포트 번호로 직접 허용
sudo ufw allow 53/tcp
sudo ufw allow 53/udp

# 방화벽 상태 확인
sudo ufw status&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. BIND9 기본 설정 구조&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BIND9의 설정 파일들은 /etc/bind/ 디렉토리에 위치합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;/etc/bind/named.conf : 메인 설정 파일&lt;/li&gt;
&lt;li&gt;/etc/bind/named.conf.options : DNS 쿼리 제한(ACL), 포워딩, 보안 설정 등 전역 옵션&lt;/li&gt;
&lt;li&gt;/etc/bind/named.conf.local : 로컬 존(Zone) 정의 (도메인 설정)&lt;/li&gt;
&lt;li&gt;/etc/bind/named.conf.root-hints : 루트 네임서버&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. 메인 설정 파일 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1766470404729&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/bind/named.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1766470434940&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include &quot;/etc/bind/named.conf.options&quot;;
include &quot;/etc/bind/named.conf.local&quot;;
include &quot;/etc/bind/named.conf.root-hints&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;캐시 DNS 전용이라면&lt;br /&gt;named.conf.local에는 아무 존(Zone)도 정의하지 않는 것이 정석입니다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. TSIG Key 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Master에서 생성 후 Slave에 동일하게 복사(배포)&lt;/p&gt;
&lt;pre id=&quot;code_1778076781727&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tsig-keygen -a hmac-sha256 transfer-key&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778076788769&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;key &quot;transfer-key&quot; {
	algorithm hmac-sha256;
	secret &quot;BFYHmjF86JLMwGbIri9R+GHi2Q2yNWvuIiNBZntQR2w=&quot;;
};&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;해당 key 블록을 Master/Slave 모두 동일하게 설정&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Key 파일 분리 관리&lt;/p&gt;
&lt;pre id=&quot;code_1778076804742&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -p /etc/bind/keys
sudo vim /etc/bind/keys/tsig.key&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778076817105&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo chown root:bind /etc/bind/keys/tsig.key
sudo chmod 640 /etc/bind/keys/tsig.key&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;named.conf에 tsig.key 파일을 포함(include)&lt;/p&gt;
&lt;pre id=&quot;code_1778076930360&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo 'include &quot;/etc/bind/keys/tsig.key&quot;;' | sudo tee -a /etc/bind/named.conf&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. DNS 설정(named.conf.options)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Master - 192.168.10.101&lt;/p&gt;
&lt;pre id=&quot;code_1766470490560&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tee /etc/bind/named.conf.options &amp;gt; /dev/null &amp;lt;&amp;lt; 'EOF'
acl &quot;trusted&quot; {
    127.0.0.0/8;
    192.168.10.0/24;
};

options {
    listen-on { any; };
    listen-on-v6 { any; };

    version none;
    directory &quot;/etc/bind&quot;;
    dump-file &quot;/etc/bind/data/cache_dump.db&quot;;
    statistics-file &quot;/etc/bind/data/named_stats.txt&quot;;

    allow-query { any; };

    recursion yes;
    allow-recursion { &quot;trusted&quot;; };
    allow-query-cache { &quot;trusted&quot;; };

    empty-zones-enable no;

    allow-transfer { key transfer-key; };
    also-notify { 192.168.10.102; };
    allow-update { none; };

    forwarders {
        8.8.8.8;
        8.8.4.4;
    };

    dnssec-validation auto;
};
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Master Zone 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778072297524&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /etc/bind/named.conf.local&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778072290121&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;zone &quot;scbyun.com&quot; {
    type master;
    file &quot;/etc/bind/zones/scbyun.com.zone&quot;;
};&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;scbyun.com.zone 파일 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;pre id=&quot;code_1778079769756&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -p /etc/bind/zones&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778079774385&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/bind/zones/scbyun.com.zone&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778079668055&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$TTL 60
@					IN      SOA     localhost. root.localhost. (
				               2026050602	  ; Serial
						   604800         ; Refresh
						    86400         ; Retry
						  2419200         ; Expire
						   604800 )       ; Negative Cache TTL
;
@				       IN      NS      ns1.scbyun.com.
@				       IN      NS      ns2.scbyun.com.
ns1				       IN      A       192.168.10.101
ns2				       IN      A       192.168.10.102
;
@				       IN      A       192.168.10.100
www				       IN      A       192.168.10.100&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Slave - 192.168.10.102&lt;/p&gt;
&lt;pre id=&quot;code_1778072738556&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tee /etc/bind/named.conf.options &amp;gt; /dev/null &amp;lt;&amp;lt; 'EOF'
acl &quot;trusted&quot; {
    127.0.0.0/8;
    192.168.10.0/24;
};

options {
    listen-on { any; };
    listen-on-v6 { any; };

    version none;
    directory &quot;/etc/bind&quot;;
    dump-file &quot;/etc/bind/data/cache_dump.db&quot;;
    statistics-file &quot;/etc/bind/data/named_stats.txt&quot;;

    allow-query { any; };

    recursion yes;
    allow-recursion { &quot;trusted&quot;; };
    allow-query-cache { &quot;trusted&quot;; };

    empty-zones-enable no;

    allow-notify { 192.168.10.101; };
    allow-transfer { none; };
    allow-update { none; };
    masterfile-format text;

    forwarders {
        8.8.8.8;
        8.8.4.4;
    };

    dnssec-validation auto;
};
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Slave Zone 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1778072301417&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /etc/bind/named.conf.local&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778072315195&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;zone &quot;scbyun.com&quot; {
    type slave;
    masters { 192.168.10.101 key transfer-key; };    
    file &quot;/etc/bind/zones/scbyun.com.zone&quot;;
};&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;recursion yes; &amp;rarr; 캐시 DNS의 핵심&lt;/li&gt;
&lt;li&gt;forwarders &amp;rarr; 상위 DNS 지정 (Google/Cloudflare/내부 DNS)&lt;/li&gt;
&lt;li&gt;allow-recursion &amp;rarr; 내부 사용자만 캐시 사용 제한 (보안 중요)&lt;/li&gt;
&lt;li&gt;allow-transfer/allow-update &amp;rarr; Slave 서버만 허용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. 쿼리 로깅 활성화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐시 DNS 운영 시 queries 로그만 있어도 충분합니다.&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;pre id=&quot;code_1766470596880&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -p /etc/bind/log
sudo chown bind:bind /etc/bind/log
sudo chmod 775 /etc/bind/log&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778080362011&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ln -sf /etc/bind/log /var/log/named
sudo chown -h bind:bind /var/log/named&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간결한 로깅 설정(named.conf.logging)&lt;/p&gt;
&lt;pre id=&quot;code_1766470614016&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tee /etc/bind/named.conf.logging &amp;gt; /dev/null &amp;lt;&amp;lt; 'EOF'
logging {
        channel general_log {
                file &quot;/var/log/named/general.log&quot; versions 3 size 20m;
                severity notice;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
        channel query_log {
                file &quot;/var/log/named/queries.log&quot; versions 5 size 50m;
                severity info;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
        channel security_log {
                file &quot;/var/log/named/security.log&quot; versions 3 size 20m;
                severity warning;
                print-time yes;
                print-severity yes;
                print-category yes;
        };

        category queries  { query_log; };
        category general  { general_log; };
        category security { security_log; };
};
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;named.conf에 named.conf.logging 파일을 포함(include)&lt;/p&gt;
&lt;pre id=&quot;code_1767336715422&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo 'include &quot;/etc/bind/named.conf.logging&quot;;' | sudo tee -a /etc/bind/named.conf&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;9. AppArmor 설정(우분투 필수)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투의 보안 모듈인 AppArmor가 BIND의 로그 기록을 차단할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1778068822241&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tee /etc/apparmor.d/local/usr.sbin.named &amp;gt; /dev/null &amp;lt;&amp;lt; 'EOF'
/etc/bind/** rw,
/var/cache/bind/** rw,
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AppArmor 재시작&lt;/p&gt;
&lt;pre id=&quot;code_1778068829485&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart apparmor&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;10. 설정 파일 검증&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 설정 검사&lt;/p&gt;
&lt;pre id=&quot;code_1766470821324&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo named-checkconf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778077223128&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo named-checkzone scbyun.com /etc/bind/zones/scbyun.com.zone&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;11. BIND9 서비스 시작&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 활성화 및 시작&lt;/p&gt;
&lt;pre id=&quot;code_1766470827721&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl enable --now named&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1766470850469&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl status named&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;12. DNS 동작 테스트&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬 테스트&lt;/p&gt;
&lt;pre id=&quot;code_1778079183184&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dig @127.0.0.1 scbyun.com&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1766470860999&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dig @127.0.0.1 google.com&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Zone Transfer 테스트 (TSIG 적용)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Slave에서 확인&lt;/p&gt;
&lt;pre id=&quot;code_1766470871499&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dig @192.168.10.101 scbyun.com axfr -k /etc/bind/keys/tsig.key&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778078725851&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.20.22-1+ubuntu24.04.1+deb.sury.org+1-Ubuntu &amp;lt;&amp;lt;&amp;gt;&amp;gt; @192.168.10.101 scbyun.com axfr -k /etc/bind/keys/tsig.key
; (1 server found)
;; global options: +cmd
scbyun.com.		60	IN	SOA	localhost. root.localhost. 2026050602 604800 86400 2419200 604800
scbyun.com.		60	IN	NS	ns1.scbyun.com.
scbyun.com.		60	IN	NS	ns2.scbyun.com.
scbyun.com.		60	IN	A	192.168.10.100
ns1.scbyun.com.		60	IN	A	192.168.10.101
ns2.scbyun.com.		60	IN	A	192.168.10.102
www.scbyun.com.		60	IN	A	192.168.10.100
scbyun.com.		60	IN	SOA	localhost. root.localhost. 2026050602 604800 86400 2419200 604800
transfer-key.		0	ANY	TSIG	hmac-sha256. 1778078626 300 32 TAnDNtCFFye6Z7N7oQMY+ctsxx3gcGIH3CbZdkve4F4= 61010 NOERROR 0
;; Query time: 3 msec
;; SERVER: 192.168.10.101#53(192.168.10.101) (TCP)
;; WHEN: Wed May 06 23:43:46 KST 2026
;; XFR size: 8 records (messages 1, bytes 342)&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;정상 시 zone 데이터 전체 조회됨&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;TSIG 미사용 테스트&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TSIG 없이 시도 (실패해야 정상)&lt;/p&gt;
&lt;pre id=&quot;code_1766470886961&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dig @192.168.10.101 scbyun.com axfr&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1778078738451&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.20.22-1+ubuntu24.04.1+deb.sury.org+1-Ubuntu &amp;lt;&amp;lt;&amp;gt;&amp;gt; @192.168.10.101 scbyun.com axfr
; (1 server found)
;; global options: +cmd
; Transfer failed.&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Transfer failed&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;13. 디버깅&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강제 재전송&lt;/p&gt;
&lt;pre id=&quot;code_1778078951194&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo rndc retransfer scbyun.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그 확인&lt;/p&gt;
&lt;pre id=&quot;code_1778078958807&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo journalctl -u named -f&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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- BIND 9 Documentation : &lt;a href=&quot;https://kb.isc.org/docs/aa-01526&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BIND Logging&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>네임서버</category>
      <category>Authoritative DNS</category>
      <category>bind install</category>
      <category>bind9</category>
      <category>bind9 설치</category>
      <category>dns install</category>
      <category>tsig</category>
      <category>TSIG 적용</category>
      <category>ubuntu bind9 install</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711129</guid>
      <comments>https://anti1346.tistory.com/711129#entry711129comment</comments>
      <pubDate>Wed, 6 May 2026 20:39:28 +0900</pubDate>
    </item>
    <item>
      <title>우분투에서 pbzip2를 설치하고 사용하는 방법</title>
      <link>https://anti1346.tistory.com/711128</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투에서 pbzip2를 설치하고 사용하는 방법 (병렬 압축 최적화)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pbzip2는 기존 bzip2를 확장한 도구로 멀티코어 CPU를 활용한 병렬 압축/해제를 지원합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대용량 로그, 백업 파일 처리 시 성능 차이가 크게 발생합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 패키지 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 패키지 관리자를 사용하여 pbzip2 패키지를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685058398553&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1685058407348&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y pbzip2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 확인&lt;/p&gt;
&lt;pre id=&quot;code_1777899464926&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pbzip2 --version&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. pbzip2 사용법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 압축&lt;/p&gt;
&lt;pre id=&quot;code_1777899630255&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pbzip2 파일명&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1777899635983&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pbzip2 example.txt&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1777899641643&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;example.txt.bz2 생성&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 압축 해제&lt;/p&gt;
&lt;pre id=&quot;code_1777899650115&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pbzip2 -d 파일명.bz2&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1777899658119&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pbzip2 -d example.txt.bz2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주요 옵션&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;-pN : 병렬 작업 수 지정 (예: -p4)&lt;/li&gt;
&lt;li&gt;-bN : 블록 크기 (기본 900KB)&lt;/li&gt;
&lt;li&gt;-d : 압축 해제&lt;/li&gt;
&lt;li&gt;-f : 기존 파일 덮어쓰기&lt;/li&gt;
&lt;li&gt;-v : 상세 출력&lt;/li&gt;
&lt;li&gt;-k : 원본 파일 유지&lt;/li&gt;
&lt;li&gt;-c : stdout 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 실무 활용 예시&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.1 CPU 코어 제한하여 압축&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;서버 부하를 줄이고 싶을 때&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1777899714740&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pbzip2 -p4 example.txt&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;전체 코어 대신 일부만 사용&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.2 원본 파일 유지하면서 압축&lt;/p&gt;
&lt;pre id=&quot;code_1777899738830&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pbzip2 -k example.txt&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;example.txt 유지 + example.txt.bz2 생성&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.3 여러 파일 동시 압축&lt;/p&gt;
&lt;pre id=&quot;code_1777899755569&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pbzip2 *.log&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.4 tar와 함께 사용 (실무 핵심)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;대용량 디렉토리 백업 시&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1777899770231&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tar cf - /data | pbzip2 &amp;gt; data.tar.bz2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해제&lt;/p&gt;
&lt;pre id=&quot;code_1777899789020&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pbzip2 -dc data.tar.bz2 | tar xf -&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;tar + pbzip2 조합이 가장 많이 사용됨&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 참고 명령어&lt;/h4&gt;
&lt;pre id=&quot;code_1777899809999&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;man pbzip2
pbzip2 --help&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 정리&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;pbzip2는 bzip2의 병렬 버전&lt;/li&gt;
&lt;li&gt;대용량 파일 처리 시 필수 도구&lt;/li&gt;
&lt;li&gt;tar와 조합 시 효과 극대화&lt;/li&gt;
&lt;li&gt;CPU 자원을 적극 활용하는 환경에 최적&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;mttContainer&quot; class=&quot;notranslate&quot; style=&quot;transform: translate(389px, 1443px);&quot; aria-expanded=&quot;true&quot;&gt;
&lt;div id=&quot;tippy-1&quot; style=&quot;z-index: 100000200; visibility: visible; position: absolute; inset: auto auto 0px 0px; margin: 0px; transform: translate(399px, -20px);&quot; data-tippy-root=&quot;&quot;&gt;
&lt;div class=&quot;tippy-box&quot; style=&quot;max-width: 350px; transition-duration: 300ms;&quot; tabindex=&quot;-1&quot; role=&quot;mtttooltip&quot; data-state=&quot;visible&quot; data-theme=&quot;custom&quot; data-animation=&quot;fade&quot; data-placement=&quot;top&quot;&gt;
&lt;div class=&quot;tippy-content&quot; style=&quot;transition-duration: 300ms;&quot; data-state=&quot;visible&quot;&gt;&lt;span&gt;pbzip2 -dc data.tar.bz2 | 타르 xf -&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;tippy-arrow&quot; style=&quot;position: absolute; left: 0px; transform: translate(92px, 0px);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>리눅스</category>
      <category>pbzip2</category>
      <category>pbzip2 install</category>
      <category>pbzip2 명령</category>
      <category>pbzip2 명령어</category>
      <category>pbzip2 설치</category>
      <category>변군이글루</category>
      <category>병렬 압축</category>
      <category>압축</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711128</guid>
      <comments>https://anti1346.tistory.com/711128#entry711128comment</comments>
      <pubDate>Mon, 4 May 2026 22:05:08 +0900</pubDate>
    </item>
    <item>
      <title>VIM에서 Visual 모드를 비활성화하는 방법</title>
      <link>https://anti1346.tistory.com/711127</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;VIM에서 Visual 모드를 비활성화하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vim을 사용하다 보면 v, V, Ctrl+v 입력 실수로 인해 의도치 않게 Visual 모드로 진입하는 경우가 많습니다. 특히 서버 운영, 로그 분석, 설정 파일 수정처럼 커서 이동과 빠른 편집이 중요한 작업에서는 오히려 흐름을 끊는 요소가 될 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Visual 모드 진입 키 비활성화 (가장 직관적인 방법)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Visual 모드는 아래 키로 진입합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;v : 문자 단위 Visual 모드&lt;/li&gt;
&lt;li&gt;V : 라인 단위 Visual 모드&lt;/li&gt;
&lt;li&gt;Ctrl + v : 블록 단위 Visual 모드&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이 키들을 아예 동작하지 않도록 매핑 해제하면 Visual 모드로 들어갈 수 없게 됩니다.&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;~/.vimrc 또는 /etc/vim/vimrc에 아래 내용을 추가합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1777521663641&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim ~/.vimrc&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1777521680742&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot; Visual 모드 진입 키 비활성화
nnoremap v &amp;lt;Nop&amp;gt;
nnoremap V &amp;lt;Nop&amp;gt;
nnoremap &amp;lt;C-v&amp;gt; &amp;lt;Nop&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;효과&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Normal 모드에서 Visual 모드로 진입 불가&lt;/li&gt;
&lt;li&gt;실수로 선택 영역이 생기는 문제 방지&lt;/li&gt;
&lt;li&gt;Vim 사용 흐름이 끊기지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;필요하다면 특정 키(예: V만)는 남기고 부분 적용도 가능합니다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Visual 모드 상태 복원 기능 비활성화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vim은 종료 시의 상태(커서 위치, 일부 선택 상태 등)를 저장하고 다음 실행 시 이를 복원하는 기능이 있습니다.&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;viminfo 옵션에서 Visual 상태 저장(v)을 제거합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1777521745708&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim ~/.vimrc&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1777521752016&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot; Visual 모드 상태 복원 비활성화
set viminfo-=v&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 후 즉시 반영&lt;/p&gt;
&lt;pre id=&quot;code_1777521769714&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source ~/.vimrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;효과&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Vim 재실행 시 항상 Normal 모드로 시작&lt;/li&gt;
&lt;li&gt;이전 선택 영역 자동 복원 방지&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 추천 설정 (최소 + 안전)&lt;/h4&gt;
&lt;pre id=&quot;code_1777521827253&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim ~/.vimrc&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1777521837458&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot; Visual 모드 진입 키 비활성화
nnoremap v &amp;lt;Nop&amp;gt;
nnoremap V &amp;lt;Nop&amp;gt;
nnoremap &amp;lt;C-v&amp;gt; &amp;lt;Nop&amp;gt;

&quot; Visual 모드 상태 복원 비활성화
set viminfo-=v&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>vim</category>
      <category>VIM Visual Mode</category>
      <category>vimrc 설정</category>
      <category>Visual 모드</category>
      <category>변군</category>
      <category>변군이글루</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711127</guid>
      <comments>https://anti1346.tistory.com/711127#entry711127comment</comments>
      <pubDate>Thu, 30 Apr 2026 13:26:05 +0900</pubDate>
    </item>
    <item>
      <title>HPE ProLiant 서버에서 iLO(Integrated Lights-Out)를 설정하고 접속하는 방법</title>
      <link>https://anti1346.tistory.com/711126</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;HPE ProLiant 서버에서 iLO(Integrated Lights-Out)를 설정하고 접속하는 방법&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;iLO 초기 네트워크 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버를 처음 세팅하거나 IP를 모를 때 사용하는 방법입니다.&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. 서버 전원을 켜고 포스트(POST) 화면이 뜰 때까지 기다립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 부팅 시 [F9] (System Utilities)를 누릅니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;545&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IcukX/dJMcaarBpLz/EhaINKrJ3KI1kziYzBWT0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IcukX/dJMcaarBpLz/EhaINKrJ3KI1kziYzBWT0K/img.png&quot; data-alt=&quot;HPE iLO&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IcukX/dJMcaarBpLz/EhaINKrJ3KI1kziYzBWT0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIcukX%2FdJMcaarBpLz%2FEhaINKrJ3KI1kziYzBWT0K%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;719&quot; height=&quot;545&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;545&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HPE iLO&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. System Configuration -&amp;gt; iLO 4 Configuration Utility -&amp;gt; Network Options로 이동합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M8lIW/dJMcacQsWzw/cdJEkHKgediXkAwsM90D5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M8lIW/dJMcacQsWzw/cdJEkHKgediXkAwsM90D5k/img.png&quot; data-alt=&quot;HPE iLO&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M8lIW/dJMcacQsWzw/cdJEkHKgediXkAwsM90D5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM8lIW%2FdJMcacQsWzw%2FcdJEkHKgediXkAwsM90D5k%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;544&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;544&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HPE iLO&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BB10c/dJMcaiiQaS0/ROoogqh1xEmKOicgoqvE1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BB10c/dJMcaiiQaS0/ROoogqh1xEmKOicgoqvE1K/img.png&quot; data-alt=&quot;HPE iLO&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BB10c/dJMcaiiQaS0/ROoogqh1xEmKOicgoqvE1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBB10c%2FdJMcaiiQaS0%2FROoogqh1xEmKOicgoqvE1K%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;727&quot; height=&quot;546&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;546&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HPE iLO&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9ElE4/dJMcadBLjVj/0mmk6yHOSXRWdWtU2V8vE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9ElE4/dJMcadBLjVj/0mmk6yHOSXRWdWtU2V8vE1/img.png&quot; data-alt=&quot;HPE iLO&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9ElE4/dJMcadBLjVj/0mmk6yHOSXRWdWtU2V8vE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9ElE4%2FdJMcadBLjVj%2F0mmk6yHOSXRWdWtU2V8vE1%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;726&quot; height=&quot;549&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;549&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HPE iLO&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;DHCP를 Off로 바꾸고&lt;/b&gt;&lt;/span&gt;, 사용할 Static IP, Subnet Mask, Gateway를 입력합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnqTEC/dJMcajhIKSM/rBzSqZJWeSXtk0TCmQqan1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnqTEC/dJMcajhIKSM/rBzSqZJWeSXtk0TCmQqan1/img.png&quot; data-alt=&quot;HPE iLO&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnqTEC/dJMcajhIKSM/rBzSqZJWeSXtk0TCmQqan1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnqTEC%2FdJMcajhIKSM%2FrBzSqZJWeSXtk0TCmQqan1%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;729&quot; height=&quot;548&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HPE iLO&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. [F10]을 눌러 저장하고 나옵니다.&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;iLO 웹 인터페이스 접속 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 설정이 완료되었다면 관리용 PC에서 접속할 수 있습니다.&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. 물리 연결: 서버 뒷면의 iLO 전용 포트(보통 마우스 그림이 있거나 'iLO'라고 적힌 단독 포트)에 랜 케이블을 꽂습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;245&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zEvZV/dJMcagSSK0G/KPcQ0bNTg5mLbf1FZYLz41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zEvZV/dJMcagSSK0G/KPcQ0bNTg5mLbf1FZYLz41/img.png&quot; data-alt=&quot;HPE iLO&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zEvZV/dJMcagSSK0G/KPcQ0bNTg5mLbf1FZYLz41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzEvZV%2FdJMcagSSK0G%2FKPcQ0bNTg5mLbf1FZYLz41%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;245&quot; height=&quot;154&quot; data-origin-width=&quot;245&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HPE iLO&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 브라우저 접속: 주소창에 설정한 IP를 입력합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1777464372084&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;https://192.168.0.100&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OJmEP/dJMcaaZpzPj/B0EQZLXAoIRoYYysQ2KPp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OJmEP/dJMcaaZpzPj/B0EQZLXAoIRoYYysQ2KPp1/img.png&quot; data-alt=&quot;HPE iLO&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OJmEP/dJMcaaZpzPj/B0EQZLXAoIRoYYysQ2KPp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOJmEP%2FdJMcaaZpzPj%2FB0EQZLXAoIRoYYysQ2KPp1%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;843&quot; height=&quot;434&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HPE iLO&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 로그인:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ID: Administrator (기본값)&lt;/li&gt;
&lt;li&gt;Password: 서버 상단이나 전면 탭(SLA)에 붙어 있는 종이 태그(Default Password)에 적힌 8자리 영문/숫자 조합을 입력합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnPmV2/dJMcajhIK5g/KuZlKCKzOknwUqkC5ubwCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnPmV2/dJMcajhIK5g/KuZlKCKzOknwUqkC5ubwCk/img.png&quot; data-alt=&quot;HPE iLO&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnPmV2/dJMcajhIK5g/KuZlKCKzOknwUqkC5ubwCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnPmV2%2FdJMcajhIK5g%2FKuZlKCKzOknwUqkC5ubwCk%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;424&quot; height=&quot;324&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HPE iLO&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRMhEB/dJMcagFmVn5/omlwzpByaASQGU37OaWAuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRMhEB/dJMcagFmVn5/omlwzpByaASQGU37OaWAuK/img.png&quot; data-alt=&quot;HPE iLO&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRMhEB/dJMcagFmVn5/omlwzpByaASQGU37OaWAuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRMhEB%2FdJMcagFmVn5%2FomlwzpByaASQGU37OaWAuK%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;735&quot; height=&quot;412&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HPE iLO&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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 2swan : &lt;a href=&quot;https://2-swan.tistory.com/369&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HPE ProLiant 서버 iLO 서버 설정&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- IT : &lt;a href=&quot;https://seop-it.tistory.com/51&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[HP] Proliant 서버 iLO4 접속 방법&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>HP iLO IP 설정</category>
      <category>HP iLO 설정 및 접속 방법</category>
      <category>HP iLO 접속 방법</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711126</guid>
      <comments>https://anti1346.tistory.com/711126#entry711126comment</comments>
      <pubDate>Wed, 29 Apr 2026 21:14:26 +0900</pubDate>
    </item>
    <item>
      <title>Zabbix로 디스크 I/O 사용자 체감 성능을 확인하는 방법</title>
      <link>https://anti1346.tistory.com/711125</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Zabbix로 디스크 I/O 사용자 체감 성능을 확인하는 방법&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Disk Average Waiting Time (await) 기준 분석&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 디스크 성능은 단순히 사용률(%util)만으로 판단하기 어렵습니다. 실제 사용자가 느끼는 &amp;ldquo;느림&amp;rdquo;, &amp;ldquo;멈춤&amp;rdquo;, &amp;ldquo;버벅임&amp;rdquo; 은 디스크 요청이 얼마나 오래 대기했는지와 밀접한 관련이 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. await 지표란?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스크 I/O 요청이 발생한 뒤 처리가 완료될 때까지 평균적으로 걸린 시간(ms) 입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Disk read request avg waiting time (r_await) &amp;rarr; 디스크 읽기 요청의 평균 응답 시간(ms)&lt;/li&gt;
&lt;li&gt;Disk write request avg waiting time (w_await) &amp;rarr; 디스크 쓰기 요청의 평균 응답 시간(ms)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;323&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dngZlP/dJMcahEaFMq/bqbtr2eoaQA82tX3KUkpN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dngZlP/dJMcahEaFMq/bqbtr2eoaQA82tX3KUkpN0/img.png&quot; data-alt=&quot;Zabbix&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dngZlP/dJMcahEaFMq/bqbtr2eoaQA82tX3KUkpN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdngZlP%2FdJMcahEaFMq%2Fbqbtr2eoaQA82tX3KUkpN0%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;1060&quot; height=&quot;323&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;323&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Zabbix&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 수치가 높을수록 디스크가 바쁘거나 병목이 발생하고 있다는 의미입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 체감 성능 기준 (실무 판단)&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.6356%; text-align: center;&quot;&gt;&lt;b&gt;응답 시간(ms)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%; text-align: center;&quot;&gt;&lt;b&gt;체감 수준&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.938%; text-align: center;&quot;&gt;&lt;b&gt;상태&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.6356%; text-align: center;&quot;&gt;1ms 이하&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%; text-align: center;&quot;&gt;매우 빠름&lt;/td&gt;
&lt;td style=&quot;width: 36.938%; text-align: center;&quot;&gt;최상&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.6356%; text-align: center;&quot;&gt;1 ~ 10ms&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%; text-align: center;&quot;&gt;빠름&lt;/td&gt;
&lt;td style=&quot;width: 36.938%; text-align: center;&quot;&gt;양호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.6356%; text-align: center;&quot;&gt;10 ~ 20ms&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%; text-align: center;&quot;&gt;보통&lt;/td&gt;
&lt;td style=&quot;width: 36.938%; text-align: center;&quot;&gt;주시 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.6356%; text-align: center;&quot;&gt;20 ~ 50ms&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%; text-align: center;&quot;&gt;느림 체감 시작&lt;/td&gt;
&lt;td style=&quot;width: 36.938%; text-align: center;&quot;&gt;경고&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.6356%; text-align: center;&quot;&gt;50ms 이상&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%; text-align: center;&quot;&gt;확실한 지연&lt;/td&gt;
&lt;td style=&quot;width: 36.938%; text-align: center;&quot;&gt;위험&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.6356%; text-align: center;&quot;&gt;100ms 이상&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%; text-align: center;&quot;&gt;멈춤처럼 느껴짐&lt;/td&gt;
&lt;td style=&quot;width: 36.938%; text-align: center;&quot;&gt;심각&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;SSD 기준으로는 10ms 이상 지속 시 점검 대상이며 HDD는 환경에 따라 기준이 다소 완화될 수 있습니다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. Disk Average Waiting Time 지표&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/quK6u/dJMcadBIcPz/zjksTAZrnnACUJq3u8Bqx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/quK6u/dJMcadBIcPz/zjksTAZrnnACUJq3u8Bqx1/img.png&quot; data-alt=&quot;A_Server&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/quK6u/dJMcadBIcPz/zjksTAZrnnACUJq3u8Bqx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FquK6u%2FdJMcadBIcPz%2FzjksTAZrnnACUJq3u8Bqx1%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;1470&quot; height=&quot;360&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;A_Server&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfYqaX/dJMcacXaQOn/lztLtV1Uil716tYy8KpKOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfYqaX/dJMcacXaQOn/lztLtV1Uil716tYy8KpKOK/img.png&quot; data-alt=&quot;B_Server&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfYqaX/dJMcacXaQOn/lztLtV1Uil716tYy8KpKOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfYqaX%2FdJMcacXaQOn%2FlztLtV1Uil716tYy8KpKOK%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;1470&quot; height=&quot;360&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;B_Server&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;A Server 분석 : 평온한 상태&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지표 : 읽기(r_await) 평균 약 11.6ms, 쓰기(w_await) &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;평균 약 0.38ms&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태 : 매우 양호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;쓰기 대기 시간이 1ms 미만으로 거의 즉시 처리되고 있습니다.&lt;/li&gt;
&lt;li&gt;읽기 대기 시간이 가끔 20ms 위로 튀긴 하지만(최대 23ms) 평균적으로는 10ms 초반대를 유지하고 있어 사용자가 성능 저하를 거의 느끼지 못하는 수준입니다.&lt;/li&gt;
&lt;li&gt;그래프의 변동폭이 비교적 일정하여 예측 가능한 성능을 보여줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;B Server 분석: 위험 상태 (쓰기 지연 발생)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지표 : 쓰기(w_await) 평균 약 42.8ms, 최대 206ms&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;쓰기 지연 시간 폭발 : 쓰기 대기 시간(w_await)이 읽기보다 압도적으로 높습니다. 평균 42ms는 사용자가 &quot;느리다&quot;고 느끼기 충분한 수치이며 최대 200ms까지 튀는 지점에서는 서비스가 순간적으로 멈춘 것처럼 보일 수 있습니다.&lt;/li&gt;
&lt;li&gt;패턴 분석 : 특정 주기마다 쓰기 대기 시간이 치솟는 날카로운 스파이크 패턴이 보입니다. 이는 대량의 로그 기록, DB 체크포인트 작업, 혹은 백업 스케줄이 돌아가고 있을 가능성이 큽니다.&lt;/li&gt;
&lt;li&gt;읽기 전이 : 쓰기 작업이 디스크를 꽉 잡고 있기 때문에 평소에 거의 0에 가깝던 읽기 성능마저 간헐적으로 함께 영향을 받고 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;두 서버의 비교 및 조치 제안&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.6821%; text-align: center;&quot;&gt;&lt;b&gt;비교 항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.0078%; text-align: center;&quot;&gt;&lt;b&gt;A Server&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.31%; text-align: center;&quot;&gt;&lt;b&gt;B Server&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.6821%; text-align: center;&quot;&gt;주요 부하&lt;/td&gt;
&lt;td style=&quot;width: 36.0078%; text-align: center;&quot;&gt;읽기 위주 (Read-heavy)&lt;/td&gt;
&lt;td style=&quot;width: 40.31%; text-align: center;&quot;&gt;쓰기 위주 (Write-heavy)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.6821%; text-align: center;&quot;&gt;체감 성능&lt;/td&gt;
&lt;td style=&quot;width: 36.0078%; text-align: center;&quot;&gt;쾌적함&lt;/td&gt;
&lt;td style=&quot;width: 40.31%; text-align: center;&quot;&gt;간헐적 끊김(Stuttering) 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.6821%; text-align: center;&quot;&gt;권장 조치&lt;/td&gt;
&lt;td style=&quot;width: 36.0078%; text-align: center;&quot;&gt;현재 상태 유지&lt;/td&gt;
&lt;td style=&quot;width: 40.31%; text-align: center;&quot;&gt;원인 파악 및 최적화 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 실무 개선 권고 사항&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원인 프로세스 확인 : 현재 쓰기 부하를 일으키는 주범이 무엇인지 확인해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1777091375887&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;iotop -o&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;실시간으로 디스크 I/O를 많이 사용하는 프로세스를 확인합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1777091384660&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pidstat -d 1&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1777091392086&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dstat -dny&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어 점검 : A Server과 동일한 하드웨어인데 B Server만 이렇다면 디스크의 물리적 노후화나 RAID 컨트롤러의 캐시 배터리 이상 등을 의심해 볼 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1777091401579&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;smartctl -a /dev/sdX&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Zabbix 트리거 설정 : B Server의 w_await가 50ms를 넘을 때 Warning 알람이 오도록 설정하여 선제적으로 대응하시길 권장합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Warning&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1777091421000&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;w_await &amp;gt; 30ms (5분 지속)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;High&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1777091427603&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;w_await &amp;gt; 50ms&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Disaster&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1777091436186&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;w_await &amp;gt; 100ms&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. RAID 컨트롤러 교체&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A Server의 RAID 컨트롤러를 Smart HBA H240ar에서 Smart Array P440ar로 교체한 이후 그래프를 보면 디스크 대기시간(Latency) 구조가 전반적으로 크게 개선된 것으로 확인됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbigmN/dJMcaakLtWc/kD7YuKjl9zOPJUdokHs3Ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbigmN/dJMcaakLtWc/kD7YuKjl9zOPJUdokHs3Ak/img.png&quot; data-alt=&quot;A_Server&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbigmN/dJMcaakLtWc/kD7YuKjl9zOPJUdokHs3Ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbigmN%2FdJMcaakLtWc%2FkD7YuKjl9zOPJUdokHs3Ak%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;1470&quot; height=&quot;350&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;A_Server&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐시 상태&lt;/p&gt;
&lt;pre id=&quot;code_1777098174456&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssacli ctrl slot=0 show detail&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인 항목&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Cache Status: OK&lt;/li&gt;
&lt;li&gt;Battery/Capacitor: OK&lt;/li&gt;
&lt;li&gt;Write Cache Enabled&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RAID 컨트롤러 차이가 SSD 교체만큼 체감되기도 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- Linux by Zabbix agent : &lt;a href=&quot;https://www.zabbix.com/integrations/linux&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Item prototypes for Block devices discovery&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>Average Wait</category>
      <category>await</category>
      <category>Disk Average Waiting Time</category>
      <category>zabbix</category>
      <category>zabbix await</category>
      <category>디스크 I/O 대기 시간</category>
      <category>변군이글루</category>
      <category>병목 현상</category>
      <category>사용자 체감 성능</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711125</guid>
      <comments>https://anti1346.tistory.com/711125#entry711125comment</comments>
      <pubDate>Sat, 25 Apr 2026 13:42:36 +0900</pubDate>
    </item>
    <item>
      <title>dd 명령어로 사용자 체감 속도 기준 디스크 성능 테스트하기</title>
      <link>https://anti1346.tistory.com/711124</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;dd 명령어로 사용자 체감 속도 기준 디스크 성능 테스트하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스 서버에서 저장장치 성능을 간단히 확인할 때 가장 많이 사용하는 도구 중 하나가 dd 명령어입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 많은 경우 측정값이 실제 체감 속도와 다르게 보일 수 있습니다. 이유는 운영체제(OS)의 페이지 캐시(Page Cache) 와 버퍼(Buffer Cache) 가 개입하기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 사용자가 파일을 복사하거나 서비스를 운영하면서 느끼는 속도는 순수 디스크 성능 + OS 캐시 효과가 반영된 체감 성능입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 사용자 체감 쓰기 성능 테스트 (Write)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플리케이션이 데이터를 저장할 때 OS는 먼저 메모리에 기록한 뒤 빠르게 응답합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 실제 디스크 반영 시간까지 포함하려면 fdatasync 옵션을 사용하는 것이 좋습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1776929158769&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dd if=/dev/zero of=~/speed_test_file bs=1M count=2048 conv=fdatasync status=progress&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션 설명&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;if=/dev/zero : 0으로 채워진 데이터 생성&lt;/li&gt;
&lt;li&gt;of=파일명 : 출력 파일&lt;/li&gt;
&lt;li&gt;bs=1M : 블록 크기&lt;/li&gt;
&lt;li&gt;1MB count=2048 : 총 2GB 생성&lt;/li&gt;
&lt;li&gt;conv=fdatasync : 종료 전 디스크 동기화&lt;/li&gt;
&lt;li&gt;status=progress : 진행률 표시&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 사용자 체감 읽기 성능 테스트 (Read)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽기 성능은 두 가지로 나눠야 정확합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;A. 처음 읽는 속도 (Cold Read)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일이 메모리에 없는 상태에서 읽는 성능입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1776929175689&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 먼저 캐시를 비웁니다 (관리자 권한 필요)
sudo sh -c &quot;sync; echo 3 &amp;gt; /proc/sys/vm/drop_caches&quot;

# 읽기 테스트
dd if=~/speed_test_file of=/dev/null bs=1M status=progress&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;B. 다시 읽는 속도 (Hot Read)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 한 번 읽어서 RAM 캐시에 올라간 상태입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1776929209025&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 캐시를 비우지 않고 곧바로 다시 읽기
dd if=~/speed_test_file of=/dev/null bs=1M status=progress&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;결과 해석: 보통 GB/s 단위의 압도적인 속도가 나옵니다. 실제 운영 환경에서 반복적으로 접근하는 데이터의 속도라고 보시면 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 정확한 테스트 팁&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 파일 크기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RAM보다 너무 작은 파일은 전부 캐시되므로 현실성이 떨어집니다.&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;RAM 16GB &amp;rarr; 테스트 파일&lt;/li&gt;
&lt;li&gt;8GB RAM 32GB &amp;rarr; 테스트 파일 16GB&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 메모리의 절반 정도 크기가 적절합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 후 파일 삭제&lt;/h4&gt;
&lt;pre id=&quot;code_1776930904668&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rm -f ~/speed_test_file&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 실제 물리 디스크 성능 측정 (Direct I/O)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐시 영향을 제거하고 디스크 자체 성능만 확인하려면 Direct I/O를 사용합니다.&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;물리 쓰기 성능(Write) 측정&lt;/p&gt;
&lt;pre id=&quot;code_1776929363942&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물리 읽기 성능(Read) 측정&lt;/p&gt;
&lt;pre id=&quot;code_1776929374856&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sync; echo 3 | sudo tee /proc/sys/vm/drop_caches&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776929380065&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dd if=/tmp/testfile of=/dev/null bs=1G count=1 iflag=direct&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;서버별 성능 비교표&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일 샤시 : ProLiant DL360 Gen9&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.4651%; text-align: center;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.5117%; text-align: center;&quot;&gt;&lt;b&gt;서버 1&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.9767%; text-align: center;&quot;&gt;&lt;b&gt;서버 2&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 31.0465%; text-align: center;&quot;&gt;&lt;b&gt;서버 3&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.4651%; text-align: center;&quot;&gt;&lt;b&gt;컨트롤러&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.5117%; text-align: center;&quot;&gt;Smart HBA H240ar&lt;/td&gt;
&lt;td style=&quot;width: 26.9767%; text-align: center;&quot;&gt;Smart Array P440ar&lt;/td&gt;
&lt;td style=&quot;width: 31.0465%; text-align: center;&quot;&gt;Smart HBA H240ar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.4651%; text-align: center;&quot;&gt;&lt;b&gt;디스크&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.5117%; text-align: center;&quot;&gt;SAS HDD&lt;/td&gt;
&lt;td style=&quot;width: 26.9767%; text-align: center;&quot;&gt;SAS HDD&lt;/td&gt;
&lt;td style=&quot;width: 31.0465%; text-align: center;&quot;&gt;SATA SSD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.4651%; text-align: center;&quot;&gt;&lt;b&gt;쓰기 (Write)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.5117%; text-align: center;&quot;&gt;142 MB/s&lt;/td&gt;
&lt;td style=&quot;width: 26.9767%; text-align: center;&quot;&gt;446 MB/s&lt;/td&gt;
&lt;td style=&quot;width: 31.0465%; text-align: center;&quot;&gt;446 MB/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.4651%; text-align: center;&quot;&gt;&lt;b&gt;읽기 (Cold)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.5117%; text-align: center;&quot;&gt;175 MB/s&lt;/td&gt;
&lt;td style=&quot;width: 26.9767%; text-align: center;&quot;&gt;406 MB/s&lt;/td&gt;
&lt;td style=&quot;width: 31.0465%; text-align: center;&quot;&gt;845 MB/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.4651%; text-align: center;&quot;&gt;&lt;b&gt;읽기 (Hot)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.5117%; text-align: center;&quot;&gt;4.4 GB/s&lt;/td&gt;
&lt;td style=&quot;width: 26.9767%; text-align: center;&quot;&gt;4.4 GB/s&lt;/td&gt;
&lt;td style=&quot;width: 31.0465%; text-align: center;&quot;&gt;7.6 GB/s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 명령어&lt;/h4&gt;
&lt;pre id=&quot;code_1776930713540&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 체감 쓰기
dd if=/dev/zero of=~/speed_test_file bs=1M count=2048 conv=fdatasync

# 실제 읽기
sync; echo 3 &amp;gt; /proc/sys/vm/drop_caches
dd if=~/speed_test_file of=/dev/null bs=1M

# 캐시 읽기
dd if=~/speed_test_file of=/dev/null bs=1M&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 1&lt;/p&gt;
&lt;pre id=&quot;code_1776930045571&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ dmidecode -t system | grep &quot;Product Name&quot;
	Product Name: ProLiant DL360 Gen9

$ ssacli ctrl all show config

Smart HBA H240ar in Slot 0 (Embedded) (RAID Mode)  (sn: --)

$ dd if=/dev/zero of=~/speed_test_file bs=1M count=2048 conv=fdatasync status=progress
2080374784 bytes (2.1 GB, 1.9 GiB) copied, 1 s, 2.1 GB/s
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 15.0991 s, 142 MB/s

$ sudo sh -c &quot;sync; echo 3 &amp;gt; /proc/sys/vm/drop_caches&quot;
$ dd if=~/speed_test_file of=/dev/null bs=1M status=progress
2085617664 bytes (2.1 GB, 1.9 GiB) copied, 12 s, 174 MB/s
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 12.2839 s, 175 MB/s

$ dd if=~/speed_test_file of=/dev/null bs=1M status=progress
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 0.486127 s, 4.4 GB/s&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 2&lt;/p&gt;
&lt;pre id=&quot;code_1776930068836&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ dmidecode -t system | grep &quot;Product Name&quot;
	Product Name: ProLiant DL360 Gen9

$ ssacli ctrl all show config

Smart Array P440ar in Slot 0 (Embedded)   (sn: --)

$ dd if=/dev/zero of=~/speed_test_file bs=1M count=2048 conv=fdatasync status=progress
2043674624 bytes (2.0 GB, 1.9 GiB) copied, 1 s, 2.0 GB/s
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 4.81932 s, 446 MB/s

$ sudo sh -c &quot;sync; echo 3 &amp;gt; /proc/sys/vm/drop_caches&quot;
$ dd if=~/speed_test_file of=/dev/null bs=1M status=progress
1699741696 bytes (1.7 GB, 1.6 GiB) copied, 5 s, 340 MB/s
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 5.28722 s, 406 MB/s

$ dd if=~/speed_test_file of=/dev/null bs=1M status=progress
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 0.489472 s, 4.4 GB/s&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 3&lt;/p&gt;
&lt;pre id=&quot;code_1776930083709&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ dmidecode -t system | grep &quot;Product Name&quot;
	Product Name: ProLiant DL360 Gen9

$ ssacli ctrl all show config

Smart HBA H240ar in Slot 0 (Embedded) (RAID Mode)  (sn: --)

$ dd if=/dev/zero of=~/speed_test_file bs=1M count=2048 conv=fdatasync status=progress
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 4.81845 s, 446 MB/s

$ sudo sh -c &quot;sync; echo 3 &amp;gt; /proc/sys/vm/drop_caches&quot;
$ dd if=~/speed_test_file of=/dev/null bs=1M status=progress
1685061632 bytes (1.7 GB, 1.6 GiB) copied, 2 s, 842 MB/s
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 2.54195 s, 845 MB/s

$ dd if=~/speed_test_file of=/dev/null bs=1M status=progress
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 0.280739 s, 7.6 GB/s&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dd 테스트 결과가 GB/s 로 나온다고 해서 디스크가 그 속도인 것은 아닙니다.&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;</description>
      <category>리눅스</category>
      <category>dd 명령어</category>
      <category>RAID 컨트롤러</category>
      <category>SSD</category>
      <category>디스크 속도</category>
      <category>리눅스</category>
      <category>변군이글루</category>
      <category>서버별 성능</category>
      <category>우분투</category>
      <category>캐시</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711124</guid>
      <comments>https://anti1346.tistory.com/711124#entry711124comment</comments>
      <pubDate>Thu, 23 Apr 2026 16:57:10 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 arping 명령어 사용법 정리</title>
      <link>https://anti1346.tistory.com/711123</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스 arp 명령어 사용법 정리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;arping은 ARP(Address Resolution Protocol) 요청을 보내 대상 IP의 MAC 주소 응답 여부를 확인하는 네트워크 진단 도구입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 ping이 ICMP를 사용하는 반면 arping은 2계층(L2) ARP 통신을 사용하므로 같은 LAN/VLAN 대역에서 유용합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 기본 개념&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ARP는 IP 주소에 대응되는 MAC 주소를 찾기 위한 프로토콜입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;IP: 192.168.0.10&lt;/li&gt;
&lt;li&gt;MAC: 00:11:22:33:44:55&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버가 같은 네트워크에 있을 때 ping이 안 되더라도 arping으로 NIC 상태, 스위치 연결, ARP 응답 여부 등을 확인할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 설치 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ubuntu/Debian&lt;/p&gt;
&lt;pre id=&quot;code_1776658930722&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install iputils-arping&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RHEL/CentOS/Rocky/AlmaLinux&lt;/p&gt;
&lt;pre id=&quot;code_1776658937054&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install arping&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre id=&quot;code_1776658667790&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo dnf install arping&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 기본 사용법&lt;/h4&gt;
&lt;pre id=&quot;code_1776658660450&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping 대상IP&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시&lt;/p&gt;
&lt;pre id=&quot;code_1776658950307&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping 192.168.0.10&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776658961374&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ARPING 192.168.0.10
Unicast reply from 192.168.0.10 [00:11:22:33:44:55]  1.123ms&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자주 사용하는 옵션&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;-I eth0 : 사용할 인터페이스 지정&lt;/li&gt;
&lt;li&gt;-c 3 : 3회만 전송&lt;/li&gt;
&lt;li&gt;-w 5 : 5초 후 종료&lt;/li&gt;
&lt;li&gt;-f : 첫 응답 받으면 종료&lt;/li&gt;
&lt;li&gt;-D : Duplicate Address Detection&lt;/li&gt;
&lt;li&gt;-U : Gratuitous ARP 전송&lt;/li&gt;
&lt;li&gt;-A : ARP Reply 형태로 전송&lt;/li&gt;
&lt;li&gt;-b : Broadcast 방식 사용&lt;/li&gt;
&lt;li&gt;-q : 출력 최소화&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 실무 예제&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 NIC로 ARP 확인&lt;/p&gt;
&lt;pre id=&quot;code_1776659052468&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping -I eno1 192.168.0.10&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;멀티 NIC 서버에서 자주 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3번만 보내기&lt;/p&gt;
&lt;pre id=&quot;code_1776659062569&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping -c 3 -I eno1 192.168.0.10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;응답 오면 바로 종료&lt;/p&gt;
&lt;pre id=&quot;code_1776659071795&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping -f -I eno1 192.168.0.10&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;장애 점검 시 빠르게 확인 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IP 중복 체크&lt;/p&gt;
&lt;pre id=&quot;code_1776659077533&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping -D -I eno1 192.168.0.10&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이미 누군가 사용 중이면 응답 옴&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VIP Failover 후 ARP 갱신&lt;/p&gt;
&lt;pre id=&quot;code_1776659085508&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping -U -I eno1 192.168.0.10&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Keepalived/HAProxy/Pacemaker 환경에서 매우 중요&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HA 구성 후 VIP 절체&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Active 서버 장애 &amp;rarr; Standby 서버가 VIP 인계 후&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1776659309898&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping -U -I eno1 192.168.0.10&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;스위치/게이트웨이 ARP 캐시 갱신&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 살아있는지 확인&lt;/p&gt;
&lt;pre id=&quot;code_1776659331601&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping -I eno1 192.168.0.10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MAC 주소 확인&lt;/p&gt;
&lt;pre id=&quot;code_1776659339194&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping -c 1 192.168.0.10&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776659347566&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;reply from 192.168.0.10 [AA:BB:CC:DD:EE:FF]&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. ARP 갱신&lt;/h4&gt;
&lt;pre id=&quot;code_1776659454339&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping -U -c 3 -I eno1 192.168.0.203&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre id=&quot;code_1776659703150&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping -A -c 3 -I eno1 192.168.0.203&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의미:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;3회 전송&lt;/li&gt;
&lt;li&gt;중복 감지 모드&lt;/li&gt;
&lt;li&gt;eno1 인터페이스 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. 실무적으로 가장 많이 쓰는 3개&lt;/h4&gt;
&lt;pre id=&quot;code_1776659502590&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arping -I eno1 IP
arping -c 3 -I eno1 IP
arping -U -I eno1 VIP&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>arp</category>
      <category>arp 명령어</category>
      <category>arping</category>
      <category>arping 명령어</category>
      <category>리눅스</category>
      <category>변군이글루</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711123</guid>
      <comments>https://anti1346.tistory.com/711123#entry711123comment</comments>
      <pubDate>Mon, 20 Apr 2026 13:36:22 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04에서 APT로 최신 HAProxy를 설치하고 상태 페이지를 구성하는 방법</title>
      <link>https://anti1346.tistory.com/711122</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04에서 APT로 최신 HAProxy를 설치하고 상태 페이지를 구성하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 24.04 환경에서 최신 HAProxy 3.3 버전을 설치하고 통계(Stats) 페이지까지 구성하는 방법입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 사전 준비&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 목록을 최신 상태로 갱신하고 기본 도구를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1776325140552&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 install -y wget gnupg ca-certificates&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. HAProxy 공식 저장소 등록&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Keyring 디렉터리 생성&lt;/p&gt;
&lt;pre id=&quot;code_1776324867445&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo install -d -m 0755 /usr/share/keyrings&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPG 키 다운로드&lt;/p&gt;
&lt;pre id=&quot;code_1776324874413&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo wget -qO /usr/share/keyrings/HAPROXY-key-community.asc https://pks.haproxy.com/linux/community/RPM-GPG-KEY-HAProxy&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장소 추가 (HAProxy 3.3)&lt;/p&gt;
&lt;pre id=&quot;code_1776324881048&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo &quot;deb [arch=amd64 signed-by=/usr/share/keyrings/HAPROXY-key-community.asc] https://www.haproxy.com/download/haproxy/performance/ubuntu/ha32 noble main&quot; | sudo tee /etc/apt/sources.list.d/haproxy.list&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. HAProxy 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적화 빌드(AWS-LC TLS 라이브러리 적용 버전)를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1776325536744&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776325227605&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get install haproxy-awslc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1776325252590&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;haproxy -v&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776325262637&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HAProxy version 3.3.6-0+ha33+ubuntu24.04u3 2026/03/23 - https://haproxy.org/
Status: stable branch - will stop receiving fixes around Q1 2027.
Known bugs: http://www.haproxy.org/bugs/bugs-3.3.6.html
Running on: Linux 6.8.0-41-generic #41-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug  2 20:41:06 UTC 2024 x86_64&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. HAProxy 계정 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안 강화를 위해 서비스 전용 계정을 생성할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1776324808072&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo groupadd --system haproxy&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776324800238&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo useradd --system -g haproxy -d /var/lib/haproxy -s /sbin/nologin haproxy&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. HAProxy 설정 파일 수정&lt;/h4&gt;
&lt;pre id=&quot;code_1776324908677&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim /etc/haproxy/haproxy.cfg&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776324926112&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;listen stats
    bind *:9999
    mode http
    stats enable
    stats uri /monitor
    stats refresh 5s
    stats realm Haproxy\ Statistics
    stats auth admin:admin
    stats admin if LOCALHOST&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. 설정 파일 문법 검사&lt;/h4&gt;
&lt;pre id=&quot;code_1776325339969&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo haproxy -c -f /etc/haproxy/haproxy.cfg&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. 서비스 시작 및 자동 실행 등록&lt;/h4&gt;
&lt;pre id=&quot;code_1776325349972&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl enable --now haproxy&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1776325354865&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl status haproxy&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. 상태 진단&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스 확인&lt;/p&gt;
&lt;pre id=&quot;code_1776326195569&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ps -ef | grep haproxy&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트 확인&lt;/p&gt;
&lt;pre id=&quot;code_1776326188559&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ss -nltp | grep 9999&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그 확인&lt;/p&gt;
&lt;pre id=&quot;code_1776326180053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo journalctl -u haproxy -n 50 --no-pager&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;9. 웹 통계 페이지 접속&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저에서 아래 주소로 접속합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1776324934756&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://서버IP:9999/monitor&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 계정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ID : admin&lt;/li&gt;
&lt;li&gt;PW : admin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;303&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkBDnt/dJMcajaNpu9/RG07dE4gJZ6k2q0L6vKpd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkBDnt/dJMcajaNpu9/RG07dE4gJZ6k2q0L6vKpd0/img.png&quot; data-alt=&quot;haproxy monitor&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkBDnt/dJMcajaNpu9/RG07dE4gJZ6k2q0L6vKpd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkBDnt%2FdJMcajaNpu9%2FRG07dE4gJZ6k2q0L6vKpd0%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;1138&quot; height=&quot;303&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;303&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;haproxy monitor&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;우분투 기본 저장소보다 공식 저장소를 사용하면 최신 기능과 성능 개선 버전을 빠르게 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 L4/L7 로드밸런서, Reverse Proxy, SSL Offloading 환경에서는 최신 버전 사용을 권장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- HAProxy : &lt;a href=&quot;https://www.haproxy.com/downloads#downloadsiface&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HAProxy Repository Setup for Ubuntu&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>HAProxy</category>
      <category>HAProxy 설치</category>
      <category>HAProxy 최신 버전 설치</category>
      <category>Ubuntu HAProxy Install</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711122</guid>
      <comments>https://anti1346.tistory.com/711122#entry711122comment</comments>
      <pubDate>Thu, 16 Apr 2026 16:50:23 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04에서 Keycloak HA 클러스터를 구성하는 방법</title>
      <link>https://anti1346.tistory.com/711121</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04에서 Keycloak을 3개의 노드로 HA 구성하는 방법&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제 정보&lt;/p&gt;
&lt;pre id=&quot;code_1776263549193&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -d
Description:	Ubuntu 24.04.1 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Keycloak HA 아키텍처 다이어그램&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zSRvi/dJMcacitq3W/Y4C2PRWTppEyy1YvT6GBAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zSRvi/dJMcacitq3W/Y4C2PRWTppEyy1YvT6GBAk/img.png&quot; data-alt=&quot;다이어그램&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zSRvi/dJMcacitq3W/Y4C2PRWTppEyy1YvT6GBAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzSRvi%2FdJMcacitq3W%2FY4C2PRWTppEyy1YvT6GBAk%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;860&quot; height=&quot;505&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;다이어그램&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 사전 준비 (전체 노드 공통)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hosts 파일 설정&lt;/p&gt;
&lt;pre id=&quot;code_1776261395241&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/hosts

##### Keycloak
192.168.10.101 cb1
192.168.10.102 cb2
192.168.10.103 cb3
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팰수 패키지 설치&lt;/p&gt;
&lt;pre id=&quot;code_1776263492456&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y unzip curl wget gnupg2 software-properties-common&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java 21 설치&lt;/p&gt;
&lt;pre id=&quot;code_1776261337250&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y openjdk-21-jdk&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776261344972&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;java -version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776262499321&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openjdk version &quot;21.0.10&quot; 2026-01-20
OpenJDK Runtime Environment (build 21.0.10+7-Ubuntu-124.04)
OpenJDK 64-Bit Server VM (build 21.0.10+7-Ubuntu-124.04, mixed mode, sharing)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. PostgreSQL 구성 (cb1 또는 별도 서버에 설치)&lt;/h4&gt;
&lt;pre id=&quot;code_1776261405017&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt install -y postgresql postgresql-contrib&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 및 유저 생성&lt;/p&gt;
&lt;pre id=&quot;code_1776261412007&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo -u postgres psql &amp;lt;&amp;lt;EOF
CREATE USER keycloak WITH PASSWORD 'keycloak_pass';
CREATE DATABASE keycloak OWNER keycloak;
GRANT ALL PRIVILEGES ON DATABASE keycloak TO keycloak;
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 접속 허용&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;설정 파일 수정 (postgresql.conf)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1776261469555&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/postgresql/*/main/postgresql.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776261477486&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;listen_addresses = '*'&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;접근 제어 파일 수정 (pg_hba.conf)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1776261564031&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/postgresql/*/main/pg_hba.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776261544054&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# IPv4 local connections:
host    all             all             0.0.0.0/0		        scram-sha-256&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 재시작&lt;/p&gt;
&lt;pre id=&quot;code_1776261579626&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl restart postgresql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 상태&lt;/p&gt;
&lt;pre id=&quot;code_1776262212075&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl status postgresql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속 테스트&lt;/p&gt;
&lt;pre id=&quot;code_1776262156455&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;psql -h 192.168.10.101 -U keycloak -d keycloak -c &quot;\l&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. Keycloak 설치 (cb1, cb2, cb3 동일 반복)&lt;/h4&gt;
&lt;pre id=&quot;code_1776262660049&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;useradd -r -s /sbin/nologin keycloak
chown -R keycloak:keycloak /opt/keycloak&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776261653670&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget https://github.com/keycloak/keycloak/releases/download/26.6.0/keycloak-26.6.0.tar.gz
tar -xzf keycloak-26.6.0.tar.gz -C /opt/

ln -s /opt/keycloak-26.6.0 /opt/keycloak
chown -R keycloak:keycloak /opt/keycloak&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;data/tmp 디렉토리 생성&lt;/p&gt;
&lt;pre id=&quot;code_1776262311718&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir -p /opt/keycloak/data/tmp
chown -R keycloak:keycloak /opt/keycloak/data/tmp&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. Keycloak 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 노드별로 KC_HOSTNAME과 jgroups.bind.address 만 IP 변경&lt;/p&gt;
&lt;pre id=&quot;code_1776261695082&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /opt/keycloak/conf/keycloak.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776261784733&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# DB 설정
db=postgres
db-username=keycloak
db-password=keycloak_pass
db-url=jdbc:postgresql://192.168.10.101:5432/keycloak

# 프록시 설정
proxy=edge
http-enabled=true
http-port=8080

# 호스트명 (LB의 공인 도메인)
hostname=https://keycloak.scbyun.com
hostname-strict=false

# 클러스터링
cache=ispn
cache-stack=tcp&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. JGroups 클러스터 설정 (핵심)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Keycloak은 내부적으로 Infinispan + JGroups로 세션을 클러스터링합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JDBC_PING을 사용하면 별도 멀티캐스트 없이 DB를 통해 노드를 발견합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1776261836440&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /opt/keycloak/conf/cache-ispn.xml&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776261855677&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;infinispan&amp;gt;
  &amp;lt;jgroups&amp;gt;
    &amp;lt;stack name=&quot;jdbc-ping-tcp&quot; extends=&quot;tcp&quot;&amp;gt;
      &amp;lt;JDBC_PING
        connection_url=&quot;jdbc:postgresql://192.168.10.101:5432/keycloak&quot;
        connection_username=&quot;keycloak&quot;
        connection_password=&quot;keycloak_pass&quot;
        connection_driver=&quot;org.postgresql.Driver&quot;
        initialize_sql=&quot;CREATE TABLE IF NOT EXISTS JGROUPSPING (own_addr VARCHAR(200) NOT NULL, cluster_name VARCHAR(200) NOT NULL, ping_data BYTEA, constraint PK_JGROUPSPING PRIMARY KEY (own_addr, cluster_name))&quot;
        insert_single_sql=&quot;INSERT INTO JGROUPSPING (own_addr, cluster_name, ping_data) VALUES (?, ?, ?)&quot;
        delete_single_sql=&quot;DELETE FROM JGROUPSPING WHERE own_addr=? AND cluster_name=?&quot;
        select_all_pingdata_sql=&quot;SELECT ping_data FROM JGROUPSPING WHERE cluster_name=?&quot;
        stack.combine=&quot;REPLACE&quot;
        stack.position=&quot;MPING&quot;/&amp;gt;
    &amp;lt;/stack&amp;gt;
  &amp;lt;/jgroups&amp;gt;
  &amp;lt;cache-container name=&quot;keycloak&quot;&amp;gt;
    &amp;lt;transport lock-timeout=&quot;60000&quot; stack=&quot;jdbc-ping-tcp&quot;/&amp;gt;
    &amp;lt;!-- 이하 기본 캐시 설정 유지 --&amp;gt;
  &amp;lt;/cache-container&amp;gt;
&amp;lt;/infinispan&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 keycloak.conf에 추가&lt;/p&gt;
&lt;pre id=&quot;code_1776261881935&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /opt/keycloak/conf/keycloak.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776261893971&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cache-config-file=cache-ispn.xml&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. systemd 서비스 등록&lt;/h4&gt;
&lt;pre id=&quot;code_1776261921839&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/systemd/system/keycloak.service&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776261931275&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Unit]
Description=Keycloak Identity and Access Management
After=network.target

[Service]
User=keycloak
Group=keycloak
WorkingDirectory=/opt/keycloak

Environment=&quot;JAVA_OPTS_APPEND=-Xms512m -Xmx2g -Djgroups.bind.address=192.168.10.101&quot;

ExecStart=/opt/keycloak/bin/kc.sh start
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;jgroups.bind.address는 각 노드 IP로 변경 (cb2 &amp;rarr; 192.168.10.102, cb3 &amp;rarr; 192.168.10.103)&lt;/blockquote&gt;
&lt;pre id=&quot;code_1776261954690&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl daemon-reload
systemctl enable --now keycloak&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그 확인&lt;/p&gt;
&lt;pre id=&quot;code_1776263002938&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;journalctl -u keycloak -f&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;상세 로그 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1776262051282&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;journalctl -u keycloak -n 100 --no-pager&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;또는 직접 build 실행해서 에러 바로 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1776262128615&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo -u keycloak /opt/keycloak/bin/kc.sh build 2&amp;gt;&amp;amp;1&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. HAProxy 로드밸런서 설정(cb1 또는 별도 서버에 설치)&lt;/h4&gt;
&lt;pre id=&quot;code_1776261971633&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt install -y haproxy&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776263144070&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;haproxy -v&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776263151956&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HAProxy version 2.8.16-0ubuntu0.24.04.1 2025/12/03 - https://haproxy.org/
Status: long-term supported branch - will stop receiving fixes around Q2 2028.
Known bugs: http://www.haproxy.org/bugs/bugs-2.8.16.html
Running on: Linux 6.8.0-107-generic #107-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 13 19:51:50 UTC 2026 x86_64&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HAProxy 설정&lt;/p&gt;
&lt;pre id=&quot;code_1776261985005&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/haproxy/haproxy.cfg&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776261992229&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;frontend keycloak_front
    bind *:443 ssl crt /etc/haproxy/keycloak.pem
    default_backend keycloak_back

backend keycloak_back
    balance leastconn
    option httpchk GET /health/ready
    http-check expect status 200
    cookie KC_SESSION insert indirect nocache
    server cb1 192.168.10.101:8080 check cookie cb1
    server cb2 192.168.10.102:8080 check cookie cb2
    server cb3 192.168.10.103:8080 check cookie cb3&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776262003761&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl restart haproxy&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. 클러스터 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Keycloak 헬스체크&lt;/p&gt;
&lt;pre id=&quot;code_1776262012334&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl http://192.168.10.101:8080/health/ready
curl http://192.168.10.102:8080/health/ready
curl http://192.168.10.103:8080/health/ready&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클러스터 멤버 확인 (Keycloak 로그에서)&lt;/p&gt;
&lt;pre id=&quot;code_1776262023433&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;journalctl -u keycloak -f | grep &quot;GMS: received view&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>keycloak</category>
      <category>Keycloak HA</category>
      <category>Keycloak High Availability</category>
      <category>Keycloak 이중화</category>
      <category>Keycloak 클러스터</category>
      <category>StatefulSet과 Infinispan 캐시를 활용한 클러스터링</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711121</guid>
      <comments>https://anti1346.tistory.com/711121#entry711121comment</comments>
      <pubDate>Wed, 15 Apr 2026 23:36:53 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04에서 OpenLDAP를 Multi-Master로 구성하는 방법</title>
      <link>https://anti1346.tistory.com/711120</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04에서 OpenLDAP를 Multi-Master로 구성하는 방법&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;660&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cceXnt/dJMb990mD61/p0tzenYNOd0m1iOGkqHWN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cceXnt/dJMb990mD61/p0tzenYNOd0m1iOGkqHWN0/img.png&quot; data-alt=&quot;OpenLDAP&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cceXnt/dJMb990mD61/p0tzenYNOd0m1iOGkqHWN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcceXnt%2FdJMb990mD61%2Fp0tzenYNOd0m1iOGkqHWN0%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;860&quot; height=&quot;660&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;660&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;OpenLDAP&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 기존 LDAP 완전 제거&lt;/h4&gt;
&lt;pre id=&quot;code_1776166309027&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl stop slapd
sudo apt purge -y slapd ldap-utils ldap-account-manager
sudo apt autoremove -y
sudo rm -rf /var/lib/ldap /etc/ldap/slapd.d&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 호스트명 및 hosts 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 1 (cb1)&lt;/p&gt;
&lt;pre id=&quot;code_1776166318736&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;hostnamectl set-hostname ldap1.scbyun.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 2 (cb2)&lt;/p&gt;
&lt;pre id=&quot;code_1776166325610&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;hostnamectl set-hostname ldap2.scbyun.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/etc/hosts 설정&lt;/p&gt;
&lt;pre id=&quot;code_1776166331358&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/hosts
192.168.10.101 ldap1.scbyun.com cb1
192.168.10.102 ldap2.scbyun.com cb2
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 패키지 설치 및 기본 설정&lt;/h4&gt;
&lt;pre id=&quot;code_1776169297365&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt update
apt install -y slapd ldap-utils ldap-account-manager&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. slapd 초기 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;slapd 기본 설정 (도메인: scbyun.com, 관리자 비번 설정 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 후 DNS domain name을 scbyun.com으로 Organization을 scbyun으로 설정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1776169308347&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dpkg-reconfigure -plow slapd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정값&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;DNS domain: scbyun.com&lt;/li&gt;
&lt;li&gt;Organization: scbyun&lt;/li&gt;
&lt;li&gt;Database backend: MDB&lt;/li&gt;
&lt;li&gt;Remove database when slapd is purged: No&lt;/li&gt;
&lt;li&gt;Move old database: Yes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1241&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wCv7q/dJMcaiCW75Z/r6HDAj2qfe8sSZRhAtXwWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wCv7q/dJMcaiCW75Z/r6HDAj2qfe8sSZRhAtXwWK/img.png&quot; data-alt=&quot;slapd&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wCv7q/dJMcaiCW75Z/r6HDAj2qfe8sSZRhAtXwWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwCv7q%2FdJMcaiCW75Z%2Fr6HDAj2qfe8sSZRhAtXwWK%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;1241&quot; height=&quot;228&quot; data-origin-width=&quot;1241&quot; data-origin-height=&quot;228&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;slapd&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R0BbF/dJMcabcKuDN/kzrKqRPClxRVzysARS7nx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R0BbF/dJMcabcKuDN/kzrKqRPClxRVzysARS7nx0/img.png&quot; data-alt=&quot;slapd&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R0BbF/dJMcabcKuDN/kzrKqRPClxRVzysARS7nx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR0BbF%2FdJMcabcKuDN%2FkzrKqRPClxRVzysARS7nx0%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;860&quot; height=&quot;209&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;209&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;slapd&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xYV1P/dJMcahKQrBr/CY9Ek7cIAjPmwFfslkA37k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xYV1P/dJMcahKQrBr/CY9Ek7cIAjPmwFfslkA37k/img.png&quot; data-alt=&quot;slapd&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xYV1P/dJMcahKQrBr/CY9Ek7cIAjPmwFfslkA37k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxYV1P%2FdJMcahKQrBr%2FCY9Ek7cIAjPmwFfslkA37k%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;860&quot; height=&quot;196&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;slapd&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eEJoqI/dJMcaiiE2aQ/hkvlu4Nk31OpwMQPsUegbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eEJoqI/dJMcaiiE2aQ/hkvlu4Nk31OpwMQPsUegbK/img.png&quot; data-alt=&quot;slapd&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eEJoqI/dJMcaiiE2aQ/hkvlu4Nk31OpwMQPsUegbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeEJoqI%2FdJMcaiiE2aQ%2Fhkvlu4Nk31OpwMQPsUegbK%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;860&quot; height=&quot;193&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;slapd&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1239&quot; data-origin-height=&quot;201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w1fhf/dJMcaf7iAWx/vpoViPTgGiTJSfG4tzHHe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w1fhf/dJMcaf7iAWx/vpoViPTgGiTJSfG4tzHHe0/img.png&quot; data-alt=&quot;slapd&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w1fhf/dJMcaf7iAWx/vpoViPTgGiTJSfG4tzHHe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw1fhf%2FdJMcaf7iAWx%2FvpoViPTgGiTJSfG4tzHHe0%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;1239&quot; height=&quot;201&quot; data-origin-width=&quot;1239&quot; data-origin-height=&quot;201&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;slapd&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 방화벽/포트 설정&lt;/h4&gt;
&lt;pre id=&quot;code_1776169824181&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 양쪽 서버 공통
ufw allow 389/tcp
# 또는 서버 간만 허용
ufw allow from 192.168.10.101 to any port 389
ufw allow from 192.168.10.102 to any port 389&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. SyncProv 모듈 로드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이중화(Replication)를 위한 모듈 로드&lt;/p&gt;
&lt;pre id=&quot;code_1776169340597&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; syncprov_mod.ldif
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용&lt;/p&gt;
&lt;pre id=&quot;code_1776169347865&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f syncprov_mod.ldif&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. ServerID 설정 (중요: 전체 노드 정의)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 1 (cb1) 설정&lt;/p&gt;
&lt;pre id=&quot;code_1776169356900&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; serverid.ldif
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 2 (cb2) 설정&lt;/p&gt;
&lt;pre id=&quot;code_1776169364067&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; serverid.ldif
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 2
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용&lt;/p&gt;
&lt;pre id=&quot;code_1776169371179&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f serverid.ldif&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. 관리자 비밀번호 SSHA 생성&lt;/h4&gt;
&lt;pre id=&quot;code_1776169378129&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;slappasswd&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;credentials와 동일 비번 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB RootPW 설정&lt;/p&gt;
&lt;pre id=&quot;code_1776169385579&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; rootpw.ldif
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}chfRUKVC1C1WuOv5SrYVQTnmFEJn/WIJ
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용&lt;/p&gt;
&lt;pre id=&quot;code_1776169397727&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f rootpw.ldif&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;9. 기본 구조 생성&lt;/h4&gt;
&lt;pre id=&quot;code_1776169405174&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; base.ldif
dn: ou=People,dc=scbyun,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=scbyun,dc=com
objectClass: organizationalUnit
ou: Group
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용&lt;/p&gt;
&lt;pre id=&quot;code_1776169413083&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ldapadd -x -D &quot;cn=admin,dc=scbyun,dc=com&quot; -W -f base.ldif&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;10. Multi-Master Replication 설정&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;credentials 평문 노출(credentials=qwer1234)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버1 (ldap1)&lt;/p&gt;
&lt;pre id=&quot;code_1776169434766&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; replication.ldif
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
  provider=ldap://192.168.10.102
  bindmethod=simple
  binddn=&quot;cn=admin,dc=scbyun,dc=com&quot;
  credentials=qwer1234
  searchbase=&quot;dc=scbyun,dc=com&quot;
  scope=sub
  schemachecking=on
  type=refreshAndPersist
  retry=&quot;60 +&quot;
-
add: olcMirrorMode
olcMirrorMode: TRUE

dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버2 (ldap2)&lt;/p&gt;
&lt;pre id=&quot;code_1776169442931&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; replication.ldif
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=002
  provider=ldap://192.168.10.101
  bindmethod=simple
  binddn=&quot;cn=admin,dc=scbyun,dc=com&quot;
  credentials=qwer1234
  searchbase=&quot;dc=scbyun,dc=com&quot;
  scope=sub
  schemachecking=on
  type=refreshAndPersist
  retry=&quot;60 +&quot;
-
add: olcMirrorMode
olcMirrorMode: TRUE

dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776169473585&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 600 replication.ldif&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용&lt;/p&gt;
&lt;pre id=&quot;code_1776169482675&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f replication.ldif&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776169498671&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rm -f replication.ldif&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;11. slapd 재시작&lt;/h4&gt;
&lt;pre id=&quot;code_1776170175392&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart slapd&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;12. 동기화 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1776169511825&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ldapsearch -x -LLL -b dc=scbyun,dc=com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버1 (ldap 1) 실행&lt;/p&gt;
&lt;pre id=&quot;code_1776171608347&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ldapadd -x -D &quot;cn=admin,dc=scbyun,dc=com&quot; -W &amp;lt;&amp;lt;EOF
dn: ou=ha-test,dc=scbyun,dc=com
objectClass: organizationalUnit
ou: ha-test
EOF
Enter LDAP Password:&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776171644781&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;adding new entry &quot;ou=ha-test,dc=scbyun,dc=com&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버2 (ldap 2) 실행&lt;/p&gt;
&lt;pre id=&quot;code_1776171626469&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ldapsearch -x -b &quot;dc=scbyun,dc=com&quot; &quot;(ou=ha-test)&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776171631430&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# extended LDIF
#
# LDAPv3
# base &amp;lt;dc=scbyun,dc=com&amp;gt; with scope subtree
# filter: (ou=ha-test)
# requesting: ALL
#

# ha-test, scbyun.com
dn: ou=ha-test,dc=scbyun,dc=com
objectClass: organizationalUnit
ou: ha-test

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;13. LDAP Account Manager 설정&lt;/h4&gt;
&lt;pre id=&quot;code_1776169527000&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://192.168.10.101/lam&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>LDAP</category>
      <category>openldap</category>
      <category>slapd</category>
      <category>우분투</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711120</guid>
      <comments>https://anti1346.tistory.com/711120#entry711120comment</comments>
      <pubDate>Tue, 14 Apr 2026 20:25:04 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04에서 HashiCorp Vault SSH OTP를 설치하고 PAM을 연동하는 방법</title>
      <link>https://anti1346.tistory.com/711119</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04에서 HashiCorp Vault SSH OTP (vault-ssh-helper)를 설치하고 PAM을 연동하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HashiCorp Vault의 SSH OTP(One-Time Password) 기능을 활용하여 서버 SSH 로그인 시 일회용 비밀번호 기반 인증을 적용하는 방법입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Vault 서버 설정 (Vault Cluster)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vault 서버에서 SSH Secrets Engine을 활성화하고 권한을 설정합니다.&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.1 Vault 환경 변수 설정&lt;/p&gt;
&lt;pre id=&quot;code_1775729711965&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export VAULT_ADDR=http://127.0.0.1:8200
export VAULT_TOKEN=&quot;hvs.WKz6o9e787ckjxVdOkPucQSs&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vault 로그인(Root 토큰)&lt;/p&gt;
&lt;pre id=&quot;code_1775729650685&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault login &quot;$VAULT_TOKEN&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.2 SSH Secrets Engine 활성화 (경로: ssh-otp)&lt;/p&gt;
&lt;pre id=&quot;code_1775729366815&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault secrets enable -path=ssh-otp ssh&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775729977838&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Success! Enabled the ssh secrets engine at: ssh-otp/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.3 OTP 역할(Role) 생성&lt;/p&gt;
&lt;pre id=&quot;code_1775729376200&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault write ssh-otp/roles/otp-role \
    key_type=otp \
    default_user=ubuntu \
    cidr_list=0.0.0.0/0&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775730070459&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Success! Data written to: ssh-otp/roles/otp-role&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.4 사용자 정책(Policy) 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 사용자가 자신의 권한으로 OTP를 발급받을 수 있도록 정책을 설정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1775730833139&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tee ssh-policy.hcl &amp;lt;&amp;lt;EOF
path &quot;ssh-otp/creds/otp-role&quot; {
  capabilities = [&quot;create&quot;, &quot;read&quot;, &quot;update&quot;]
}
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정책 업데이트&lt;/p&gt;
&lt;pre id=&quot;code_1775730843941&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault policy write ssh-user-policy ssh-policy.hcl&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775731013624&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Success! Uploaded policy: ssh-user-policy&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. vault-ssh-helper 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.1 의존성 패키지 설치&lt;/p&gt;
&lt;pre id=&quot;code_1775730108191&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 install -y unzip curl jq&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.2 바이너리 다운로드 및 설치&lt;/p&gt;
&lt;pre id=&quot;code_1775722305187&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget https://releases.hashicorp.com/vault-ssh-helper/0.2.1/vault-ssh-helper_0.2.1_linux_amd64.zip
unzip vault-ssh-helper_0.2.1_linux_amd64.zip
sudo mv vault-ssh-helper /usr/local/bin/
sudo chmod +x /usr/local/bin/vault-ssh-helper
vault-ssh-helper --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775737028580&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rm -f vault-ssh-helper_0.2.1_linux_amd64.zip&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.3 설정 파일 생성&lt;/p&gt;
&lt;pre id=&quot;code_1775722290229&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -p /etc/vault-ssh-helper.d&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775722373542&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tee /etc/vault-ssh-helper.d/config.hcl &amp;lt;&amp;lt;EOF
vault_addr = &quot;http://192.168.10.101:8200&quot;
ssh_mount_point = &quot;ssh-otp&quot;

# TLS 환경에서는 ca_cert 설정 권장
ca_cert = &quot;&quot;
tls_skip_verify = true

allowed_roles = &quot;*&quot;
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.4 설정 검증&lt;/p&gt;
&lt;pre id=&quot;code_1775730330985&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault-ssh-helper -dev -verify-only -config=/etc/vault-ssh-helper.d/config.hcl&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775737097305&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;2026/04/09 21:18:03 ==&amp;gt; WARNING: Dev mode is enabled!
2026/04/09 21:18:03 [INFO] using SSH mount point: ssh-otp
2026/04/09 21:18:03 [INFO] using namespace:
2026/04/09 21:18:03 [INFO] vault-ssh-helper verification successful!&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. PAM 및 SSHD 연동&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.1 PAM(Pluggable Authentication Modules) 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백업&lt;/p&gt;
&lt;pre id=&quot;code_1775735984536&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo cp /etc/pam.d/sshd /etc/pam.d/sshd_$(date '+%Y%m%d-%H%M%S')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 인증 비활성화&lt;/p&gt;
&lt;pre id=&quot;code_1775738008522&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo sed -i.$(date '+%Y%m%d-%H%M%S') \
'/^[[:space:]]*#/! s/^[[:space:]]*@include[[:space:]]\+common-auth/#&amp;amp;/' \
/etc/pam.d/sshd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vault OTP 인증 추가 (최상단)&lt;/p&gt;
&lt;pre id=&quot;code_1775738129818&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo sed -i.$(date '+%Y%m%d-%H%M%S') '1i\
auth requisite pam_exec.so quiet expose_authtok log=/var/log/vault-ssh.log /usr/local/bin/vault-ssh-helper -config=/etc/vault-ssh-helper.d/config.hcl\
auth optional pam_unix.so not_set_pass use_first_pass nodelay
' /etc/pam.d/sshd&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;pre id=&quot;code_1775729251612&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/pam.d/sshd&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775729263186&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# @include common-auth  &amp;lt;-- 기존 라인 주석 처리
auth requisite pam_exec.so quiet expose_authtok log=/var/log/vault-ssh.log \
    /usr/local/bin/vault-ssh-helper -dev -config=/etc/vault-ssh-helper.d/config.hcl
auth optional pam_unix.so not_set_pass use_first_pass nodelay&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.2 SSHD 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백업&lt;/p&gt;
&lt;pre id=&quot;code_1775736013967&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_$(date '+%Y%m%d-%H%M%S')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSHD 수정&lt;/p&gt;
&lt;pre id=&quot;code_1775737885909&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo sed -i.$(date '+%Y%m%d-%H%M%S') \
-e 's/^#\?KbdInteractiveAuthentication.*/KbdInteractiveAuthentication yes/' \
-e 's/^#\?ChallengeResponseAuthentication.*/ChallengeResponseAuthentication yes/' \
-e 's/^#\?UsePAM.*/UsePAM yes/' \
-e 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' \
/etc/ssh/sshd_config&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;pre id=&quot;code_1775729289903&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/ssh/sshd_config&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775729297155&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;KbdInteractiveAuthentication yes
ChallengeResponseAuthentication yes
UsePAM yes

# OTP만 사용할 경우
PasswordAuthentication no

# 병행 사용 시
# PasswordAuthentication yes&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 검증&lt;/p&gt;
&lt;pre id=&quot;code_1775737792860&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo sshd -t&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.3 SSH 재시작&lt;/p&gt;
&lt;pre id=&quot;code_1775730398226&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart ssh&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 사용자 접속 테스트(Client)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4-1. Vault 로그인&lt;/p&gt;
&lt;pre id=&quot;code_1775736589478&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault login -method=userpass username=vault_user&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.2 Role 확인&lt;/p&gt;
&lt;pre id=&quot;code_1775731158488&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault list ssh-otp/roles&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775731166984&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault read ssh-otp/roles/otp-role&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.3 OTP 발급&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 서버 접속을 위한 일회용 비번 요청&lt;/p&gt;
&lt;pre id=&quot;code_1775729419475&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault write ssh-otp/creds/otp-role ip=192.168.10.201&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775738864793&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Key                Value
---                -----
lease_id           ssh-otp/creds/otp-role/xC0aX3yCeQL2ZCUx3obMGMzK
lease_duration     768h
lease_renewable    false
ip                 192.168.10.201
key                9fd5a1d5-780e-d2bd-d8db-90b36ea35c7c
key_type           otp
port               22
username           ubuntu&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.4 SSH 접속&lt;/p&gt;
&lt;pre id=&quot;code_1775729426103&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh ubuntu@192.168.10.201&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;비밀번호 입력 시 OTP(key) 입력&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 로그 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1775737321606&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tail -f /var/log/vault-ssh.log&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;참고&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 제한&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;cidr_list를 내부망으로 제한&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TLS 적용 권장&lt;/p&gt;
&lt;pre id=&quot;code_1775737361431&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tls_skip_verify = false
ca_cert = &quot;/etc/ssl/certs/ca.pem&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>Audit log</category>
      <category>One-Time Password</category>
      <category>Vault</category>
      <category>vault ssh otp</category>
      <category>일회용 패스워드로 SSH 로그인</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711119</guid>
      <comments>https://anti1346.tistory.com/711119#entry711119comment</comments>
      <pubDate>Thu, 9 Apr 2026 17:14:19 +0900</pubDate>
    </item>
    <item>
      <title>HashiCorp Vault Userpass 인증 방식을 활성화하고 특정 사용자에게 관리자 권한을 부여하는 방법</title>
      <link>https://anti1346.tistory.com/711118</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;HashiCorp Vault Userpass 인증 방식을 활성화하고 특정 사용자에게 관리자(Admin) 권한을 부여하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vault에서 기본적으로 사용하는 Root Token 대신 아이디/패스워드 기반 로그인(Userpass)을 활성화하고 특정 사용자에게 관리자 권한(Admin Policy)을 부여하는 방법입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Userpass 인증 방식 활성화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vault에서 사용자 ID/Password 로그인 기능을 사용하려면 먼저 인증 방식을 활성화해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1775567487447&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault auth enable userpass&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인&lt;/p&gt;
&lt;pre id=&quot;code_1775567908433&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault auth list&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775567919245&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Path         Type        Accessor                  Description                Version
----         ----        --------                  -----------                -------
token/       token       auth_token_4cb116c0       token based credentials    n/a
userpass/    userpass    auth_userpass_6745a362    n/a                        n/a&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 관리자 정책(Admin Policy) 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vault에서 권한은 Policy 기반으로 관리됩니다.&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;pre id=&quot;code_1775567502882&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim admin-policy.hcl&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775567510296&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 모든 경로에 대해 전체 권한 허용
path &quot;*&quot; {
  capabilities = [
    &quot;create&quot;,
    &quot;read&quot;,
    &quot;update&quot;,
    &quot;delete&quot;,
    &quot;list&quot;,
    &quot;sudo&quot;
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775567973480&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Success! Uploaded policy: admin-policy&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;정책 등록&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1775567529437&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault policy write admin-policy admin-policy.hcl&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등록 확인&lt;/p&gt;
&lt;pre id=&quot;code_1775567983963&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault policy list&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775567992929&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;admin-policy
default
root&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 사용자 생성 및 정책 할당&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 Userpass 인증을 통해 로그인할 사용자를 생성하고 앞에서 만든 admin-policy를 연결합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;아이디 : my-admin&lt;/li&gt;
&lt;li&gt;비번 : password123&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775567538919&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault write auth/userpass/users/my-admin \
    password=&quot;password123&quot; \
    policies=&quot;admin-policy&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Token TTL 설정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Userpass 로그인 시 발급되는 토큰의 TTL도 관리해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775568203801&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault write auth/userpass/users/my-admin \
    password=&quot;password123&quot; \
    policies=&quot;admin-policy&quot; \
    token_ttl=&quot;1h&quot; \
    token_max_ttl=&quot;4h&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1775568039575&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Success! Data written to: auth/userpass/users/my-admin&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 로그인 테스트&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Root Token 대신 새로 만든 계정으로 로그인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1775567562628&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault login -method=userpass username=my-admin&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775568076057&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Password (will be hidden):&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;비밀번호 입력창에 password123 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 권한 확인 (추천)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 후 실제 권한이 제대로 적용되었는지 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1775568117862&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault token lookup&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre id=&quot;code_1775568127017&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault token capabilities secret/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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 변군이글루 블로그 : &lt;a href=&quot;https://scbyun.com/710718&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HashiCorp Vault UI에 접속할 수 있는 사용자 계정 및 비밀번호를 생성하는 방법&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>hashicorp</category>
      <category>HashiCorp Vault</category>
      <category>HashiCorp Vault Userpass</category>
      <category>userpass</category>
      <category>Userpass 인증 활성화</category>
      <category>Vault</category>
      <category>vault ui</category>
      <category>Vault Userpass</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711118</guid>
      <comments>https://anti1346.tistory.com/711118#entry711118comment</comments>
      <pubDate>Tue, 7 Apr 2026 22:26:05 +0900</pubDate>
    </item>
    <item>
      <title>PHP에서 현재 날짜와 시간을 출력하는 테스트 페이지를 생성하는 방법</title>
      <link>https://anti1346.tistory.com/711117</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;PHP에서 현재 날짜와 시간을 출력하는 테스트 페이지를 생성하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버에서 PHP가 정상적으로 동작하는지 확인할 때 가장 간단한 방법은 현재 날짜/시간을 출력하는 테스트 페이지를 만드는 방법입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 가장 기본적인 날짜 출력&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 PHP만으로 현재 시간을 출력하는 방법입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1775534839265&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim index.php&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775534850382&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?php
  // &quot;연-월-일 시:분:초&quot; 형태로 출력
  echo date(&quot;Y-m-d H:i:s&quot;);
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. HTML과 함께 사용하는 테스트 페이지&lt;/h4&gt;
&lt;pre id=&quot;code_1775534843967&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim index.php&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775534856750&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;ko&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;title&amp;gt;PHP 날짜 출력 페이지&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        body { font-family: sans-serif; text-align: center; padding-top: 50px; }
        .date-box { border: 2px solid #333; display: inline-block; padding: 20px; border-radius: 10px; }
        h1 { color: #007bff; }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

    &amp;lt;div class=&quot;date-box&quot;&amp;gt;
        &amp;lt;h1&amp;gt;현재 시간 안내&amp;lt;/h1&amp;gt;
        &amp;lt;p&amp;gt;오늘의 날짜와 시간은 다음과 같습니다:&amp;lt;/p&amp;gt;
        &amp;lt;h2&amp;gt;
            &amp;lt;?php
                // 한국 시간대로 설정
                date_default_timezone_set('Asia/Seoul');

                echo date(&quot;Y년 m월 d일 H시 i분 s초&quot;);
            ?&amp;gt;
        &amp;lt;/h2&amp;gt;
    &amp;lt;/div&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설명&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;date_default_timezone_set('Asia/Seoul')을 통해 한국 시간 기준으로 출력합니다.&lt;/li&gt;
&lt;li&gt;설정하지 않으면 PHP 설정(php.ini)의 date.timezone 값이 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. CLI에서 파일을 바로 생성하는 방법&lt;/h4&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;3-1. echo 사용 (간단한 방법)&lt;/p&gt;
&lt;pre id=&quot;code_1775536178087&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo '&amp;lt;?php
  date_default_timezone_set(&quot;Asia/Seoul&quot;);
  echo date(&quot;Y-m-d H:i:s&quot;);
?&amp;gt;' &amp;gt; test.php&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3-2. 한 줄로 생성&lt;/p&gt;
&lt;pre id=&quot;code_1775536185870&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo '&amp;lt;?php date_default_timezone_set(&quot;Asia/Seoul&quot;); echo date(&quot;Y-m-d H:i:s&quot;); ?&amp;gt;' &amp;gt; test.php&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3-3. Here Document 사용 (권장)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;가독성과 유지보수 측면에서 가장 추천되는 방식입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775536192184&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt; 'EOF' &amp;gt; test.php
&amp;lt;?php
  date_default_timezone_set('Asia/Seoul');
  echo date(&quot;Y-m-d H:i:s&quot;);
?&amp;gt;
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 동작 확인 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4-1. 웹 브라우저 확인&lt;/p&gt;
&lt;pre id=&quot;code_1775536491125&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;https://서버주소/test.php&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4-2. curl을 이용한 확인&lt;/p&gt;
&lt;pre id=&quot;code_1775536511280&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl https://localhost/test.php&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;-I 옵션은 헤더만 출력하므로 실제 결과 확인에는 적합하지 않습니다.&lt;/li&gt;
&lt;li&gt;--resolve 옵션은 특정 도메인을 강제로 IP에 매핑할 때 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775536526902&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl --resolve example.com:443:127.0.0.1 https://example.com/test.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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 변군이글루 블로그 : &lt;a href=&quot;https://scbyun.com/1420&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;php 서버 정보 확인&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>curl test</category>
      <category>curl 명령어</category>
      <category>php test page</category>
      <category>PHP 테스트 페이지</category>
      <category>test page</category>
      <category>변군이글루</category>
      <category>테스트 페이지</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711117</guid>
      <comments>https://anti1346.tistory.com/711117#entry711117comment</comments>
      <pubDate>Tue, 7 Apr 2026 13:38:34 +0900</pubDate>
    </item>
    <item>
      <title>우분투에서 방화벽(ufw)을 설정하는 방법</title>
      <link>https://anti1346.tistory.com/711116</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투에서 방화벽(ufw)을 설정하는 방법&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. ufw 서비스 관리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 시작 및 활성화&lt;/p&gt;
&lt;pre id=&quot;code_1775189354178&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw enable&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;주의: SSH 포트(22)를 먼저 허용하지 않고 실행하면 원격 접속이 끊길 수 있습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 중지&lt;/p&gt;
&lt;pre id=&quot;code_1775189372951&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw disable&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1775189379765&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw status verbose&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 서비스(Service) 기반 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ufw는 /etc/services 파일을 참조하여 서비스 이름으로 규칙을 정할 수 있습니다.&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;pre id=&quot;code_1775189392447&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw allow ftp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 제거&lt;/p&gt;
&lt;pre id=&quot;code_1775189403715&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw delete allow ftp&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 포트(Port) 기반 설정&lt;/h4&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;pre id=&quot;code_1775189420099&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw allow 21/tcp
sudo ufw allow 10050/tcp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트 제거&lt;/p&gt;
&lt;pre id=&quot;code_1775189430154&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw delete allow 21/tcp&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. IP 기반 접근 제어&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ufw는 from 키워드를 사용하여 소스 IP를 제어합니다.&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;특정 IP 허용&lt;/p&gt;
&lt;pre id=&quot;code_1775189441611&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw allow from 192.168.1.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 IP 제거&lt;/p&gt;
&lt;pre id=&quot;code_1775189446758&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw delete allow from 192.168.1.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 특정 IP 차단 (Deny)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;firewalld의 Rich Rule보다 훨씬 간단하게 차단이 가능합니다.&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;특정 IP를 완전히 차단&lt;/p&gt;
&lt;pre id=&quot;code_1775189459077&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw deny from 117.52.110.183
sudo ufw deny from 152.32.172.108&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차단 규칙 및 전체 규칙 확인&lt;/p&gt;
&lt;pre id=&quot;code_1775189464701&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw status numbered&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. 설정 반영 및 규칙 삭제 (번호 활용)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ufw는 설정을 변경하면 즉시 반영되므로 별도의 reload가 필수사항은 아니지만 설정을 다시 읽어올 때는 sudo ufw reload를 사용합니다.&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;status numbered로 확인한 번호를 이용해 쉽게 삭제할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775189493986&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw delete 2&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. iptables 정책 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ufw도 결국 백엔드에서 iptables를 사용하므로 확인 방법은 동일합니다.&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;pre id=&quot;code_1775189505167&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo iptables -nvL&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ufw 관련 체인 확인&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ufw가 생성한 체인은 보통 ufw-user-input 등에 들어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775189513446&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo iptables -nvL ufw-user-input --line-numbers&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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;변군이글루 블로그 : &lt;a href=&quot;https://scbyun.com/1893&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;우분투에서 UFW를 사용하여 방화벽 설정하는 방법&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>firewalld</category>
      <category>ubuntu</category>
      <category>ubuntu firewall</category>
      <category>ubuntu ufw</category>
      <category>ufw</category>
      <category>리눅스 방화벽</category>
      <category>우분투</category>
      <category>우분투 방화벽</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711116</guid>
      <comments>https://anti1346.tistory.com/711116#entry711116comment</comments>
      <pubDate>Fri, 3 Apr 2026 13:13:47 +0900</pubDate>
    </item>
    <item>
      <title>CentOS 7에서 방화벽(firewalld)을 설정하는 방법</title>
      <link>https://anti1346.tistory.com/711115</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;CentOS 7에서 방화벽(firewalld)을 설정하는 방법&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;firewalld 서비스 관리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 시작 및 상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1775188246791&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl start firewalld
sudo systemctl status firewalld&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;firewalld 동작 상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1775188260122&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo firewall-cmd --state&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775188266682&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;running&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;서비스(Service) 기반 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 허용&lt;/p&gt;
&lt;pre id=&quot;code_1775188275941&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ftp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 제거&lt;/p&gt;
&lt;pre id=&quot;code_1775188287222&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo firewall-cmd --permanent --remove-service=ftp&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;포트(Port) 기반 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트 허용&lt;/p&gt;
&lt;pre id=&quot;code_1775188294837&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo firewall-cmd --permanent --add-port=21/tcp
sudo firewall-cmd --permanent --add-port=10050/tcp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트 제거&lt;/p&gt;
&lt;pre id=&quot;code_1775188314641&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo firewall-cmd --permanent --remove-port=21/tcp&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;IP 기반 접근 제어&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 IP 허용&lt;/p&gt;
&lt;pre id=&quot;code_1775188323386&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo firewall-cmd --add-source=192.168.1.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 IP 제거&lt;/p&gt;
&lt;pre id=&quot;code_1775188334685&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo firewall-cmd --remove-source=192.168.1.1&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;특정 IP 차단 (Rich Rule)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 IP를 완전히 차단하려면 rich-rule을 사용합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1775188342707&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo firewall-cmd --permanent \
--add-rich-rule='rule family=&quot;ipv4&quot; source address=&quot;117.52.110.183&quot; drop'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차단 규칙 확인&lt;/p&gt;
&lt;pre id=&quot;code_1775188359102&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo firewall-cmd --list-rich-rules&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775188385102&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rule family=&quot;ipv4&quot; source address=&quot;152.32.172.108&quot; drop
rule family=&quot;ipv4&quot; source address=&quot;117.52.110.183&quot; drop&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;설정 반영&lt;/h4&gt;
&lt;pre id=&quot;code_1775188365546&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo firewall-cmd --reload&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;--permanent 옵션으로 설정한 내용은 반드시 reload 해야 적용됩니다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;iptables 정책 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1775188398153&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo iptables -nvL&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 체인(예: IN_public_deny)만 확인&lt;/p&gt;
&lt;pre id=&quot;code_1775188931907&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo iptables -nvL IN_public_deny --line-numbers&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775188973521&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Chain IN_public_deny (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       all  --  *      *       152.32.172.108       0.0.0.0/0
2        0     0 DROP       all  --  *      *       117.52.110.183       0.0.0.0/0&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 변군이글루 블로그 : &lt;a href=&quot;https://scbyun.com/627&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CentOS 7에서 방화벽을 설정하는 방법&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;mttContainer&quot; class=&quot;notranslate&quot; style=&quot;transform: translate(434px, 2528px);&quot; aria-expanded=&quot;false&quot;&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>리눅스</category>
      <category>centos</category>
      <category>centos 7</category>
      <category>centos 7 방화벽 끄기</category>
      <category>CentOS7</category>
      <category>Firewall</category>
      <category>firewalld</category>
      <category>Linux</category>
      <category>리눅스</category>
      <category>리눅스 방화벽</category>
      <category>방화벽</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711115</guid>
      <comments>https://anti1346.tistory.com/711115#entry711115comment</comments>
      <pubDate>Fri, 3 Apr 2026 12:57:13 +0900</pubDate>
    </item>
    <item>
      <title>macOS에서 파이썬 3.9를 사용하여 stormssh를 설치하는 방법</title>
      <link>https://anti1346.tistory.com/711114</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;macOS에서 파이썬 3.9를 사용하여 stormssh를 설치하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stormssh는 최신 Python 환경보다 Python 3.9에서 더 안정적으로 동작하는 경우가 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 pyenv가 설치되어 있다면 이를 활용해 독립된 실행 환경을 구성하는 것이 가장 안전합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. pyenv 환경 초기화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉘 환경에 pyenv를 등록합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1774520064913&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim ~/.zshrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용 추가&lt;/p&gt;
&lt;pre id=&quot;code_1774520072117&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export PYENV_ROOT=&quot;$HOME/.pyenv&quot;
[[ -d $PYENV_ROOT/bin ]] &amp;amp;&amp;amp; export PATH=&quot;$PYENV_ROOT/bin:$PATH&quot;
eval &quot;$(pyenv init -)&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용&lt;/p&gt;
&lt;pre id=&quot;code_1774520081654&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source ~/.zshrc&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Python 3.9 설치&lt;/h4&gt;
&lt;pre id=&quot;code_1774519969455&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pyenv install 3.9.19&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774520003610&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python-build: use openssl@3 from homebrew
python-build: use readline from homebrew
Downloading Python-3.9.19.tar.xz...
-&amp;gt; https://www.python.org/ftp/python/3.9.19/Python-3.9.19.tar.xz
Installing Python-3.9.19...
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use ncurses from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.9.19 to /Users/mac_user/.pyenv/versions/3.9.19&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 시 Homebrew 라이브러리를 자동으로 사용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;openssl&lt;/li&gt;
&lt;li&gt;readline&lt;/li&gt;
&lt;li&gt;ncurses&lt;/li&gt;
&lt;li&gt;tcl-tk&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 완료 후&lt;/p&gt;
&lt;pre id=&quot;code_1774520046339&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pyenv local 3.9.19&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1774520850472&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774520298384&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Python 3.9.19&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. StormSSH 설치&lt;/h4&gt;
&lt;pre id=&quot;code_1774520012521&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install stormssh&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774520030277&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Collecting stormssh
  Using cached stormssh-0.7.0-py3-none-any.whl
Requirement already satisfied: paramiko in /opt/homebrew/lib/python3.14/site-packages (from stormssh) (4.0.0)
Requirement already satisfied: termcolor in /opt/homebrew/lib/python3.14/site-packages (from stormssh) (3.3.0)
Requirement already satisfied: flask in /opt/homebrew/lib/python3.14/site-packages (from stormssh) (3.1.3)
Requirement already satisfied: six in /opt/homebrew/lib/python3.14/site-packages (from stormssh) (1.17.0)
Requirement already satisfied: blinker&amp;gt;=1.9.0 in /opt/homebrew/lib/python3.14/site-packages (from flask-&amp;gt;stormssh) (1.9.0)
Requirement already satisfied: click&amp;gt;=8.1.3 in /opt/homebrew/lib/python3.14/site-packages (from flask-&amp;gt;stormssh) (8.3.1)
Requirement already satisfied: itsdangerous&amp;gt;=2.2.0 in /opt/homebrew/lib/python3.14/site-packages (from flask-&amp;gt;stormssh) (2.2.0)
Requirement already satisfied: jinja2&amp;gt;=3.1.2 in /opt/homebrew/lib/python3.14/site-packages (from flask-&amp;gt;stormssh) (3.1.6)
Requirement already satisfied: markupsafe&amp;gt;=2.1.1 in /opt/homebrew/lib/python3.14/site-packages (from flask-&amp;gt;stormssh) (3.0.3)
Requirement already satisfied: werkzeug&amp;gt;=3.1.0 in /opt/homebrew/lib/python3.14/site-packages (from flask-&amp;gt;stormssh) (3.1.7)
Requirement already satisfied: bcrypt&amp;gt;=3.2 in /opt/homebrew/lib/python3.14/site-packages (from paramiko-&amp;gt;stormssh) (5.0.0)
Requirement already satisfied: cryptography&amp;gt;=3.3 in /opt/homebrew/lib/python3.14/site-packages (from paramiko-&amp;gt;stormssh) (46.0.6)
Requirement already satisfied: invoke&amp;gt;=2.0 in /opt/homebrew/lib/python3.14/site-packages (from paramiko-&amp;gt;stormssh) (2.2.1)
Requirement already satisfied: pynacl&amp;gt;=1.5 in /opt/homebrew/lib/python3.14/site-packages (from paramiko-&amp;gt;stormssh) (1.6.2)
Requirement already satisfied: cffi&amp;gt;=2.0.0 in /opt/homebrew/lib/python3.14/site-packages (from cryptography&amp;gt;=3.3-&amp;gt;paramiko-&amp;gt;stormssh) (2.0.0)
Requirement already satisfied: pycparser in /opt/homebrew/lib/python3.14/site-packages (from cffi&amp;gt;=2.0.0-&amp;gt;cryptography&amp;gt;=3.3-&amp;gt;paramiko-&amp;gt;stormssh) (3.0)
Installing collected packages: stormssh
Successfully installed stormssh-0.7.0&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. pip 최신화&lt;/h4&gt;
&lt;pre id=&quot;code_1774520333531&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install --upgrade pip&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774520341754&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Requirement already satisfied: pip in ./.pyenv/versions/3.9.19/lib/python3.9/site-packages (23.0.1)
Collecting pip
  Downloading pip-26.0.1-py3-none-any.whl (1.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 19.9 MB/s eta 0:00:00
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 23.0.1
    Uninstalling pip-23.0.1:
      Successfully uninstalled pip-23.0.1
Successfully installed pip-26.0.1&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. StormSSH 버전 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1774520912131&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;storm --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774520920152&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;0.7.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>MacOS</category>
      <category>python 3.9</category>
      <category>stormssh</category>
      <category>파이션</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711114</guid>
      <comments>https://anti1346.tistory.com/711114#entry711114comment</comments>
      <pubDate>Thu, 26 Mar 2026 19:30:41 +0900</pubDate>
    </item>
    <item>
      <title>웹 서버의 최대 동시 접속자 수 및 TPS(Transactions Per Second) 측정하는 방법</title>
      <link>https://anti1346.tistory.com/711113</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;웹 서버의 최대 동시 접속자 수 및 TPS(Transactions Per Second) 측정하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 서버의 최대 동시 접속자 수 및 TPS(Transactions Per Second) 측정하는 방법은 여러가지가 있지만, 가장 일반적인 방법은 아파치 HTTP 서버 벤치마크(Apache HTTP Server Benchmark, ab)를 사용하는 것입니다.&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. 아파치 HTTP 서버 벤치마크(ab) 설치&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ab는 Apache 웹 서버와 함께 제공되는 유틸리티입니다.&lt;/li&gt;
&lt;li&gt;따라서 Apache 웹 서버를 설치하면 자동으로 ab도 함께 설치됩니다.&lt;/li&gt;
&lt;li&gt;아파치 HTTP 서버 벤치마크(ab)를 따로 설치하려면 Apache HTTP Server 설치 페이지에서 다운로드 받을 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 벤치마크 명령 실행&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;벤치마크 명령은 다음과 같습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1679481099050&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ab -n [요청 수] -c [동시 접속자 수] [URL]&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;[요청 수]는 총 요청 수를, [동시 접속자 수]는 동시에 접속할 수 있는 최대 접속자 수를 의미합니다.&lt;/li&gt;
&lt;li&gt;[URL]은 벤치마크를 실행할 웹 서버의 URL을 입력합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 결과 분석&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;벤치마크를 실행하면 다양한 결과가 출력됩니다.&lt;/li&gt;
&lt;li&gt;그 중에서도 중요한 결과는 다음과 같습니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Requests per second: 초당 처리할 수 있는 요청 수입니다.&lt;/li&gt;
&lt;li&gt;Time per request: 요청당 처리 시간입니다.&lt;/li&gt;
&lt;li&gt;Concurrency Level: 동시 접속자 수입니다.&lt;/li&gt;
&lt;li&gt;Complete requests: 성공적으로 처리된 요청 수입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이 결과를 분석하여 최대 동시 접속자 수와 TPS를 산출할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 벤치마크 실행 예시&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;예를 들어, 동시에 1000명의 사용자가 접속하고 10000개의 요청을 보내는 벤치마크를 실행한다면 다음과 같은 명령을 입력합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1679481229261&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ab -n 10000 -c 1000 http://example.com/&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이 명령을 실행하면 아파치 HTTP 서버 벤치마크(ab)가 1000명의 사용자가 동시에 10000개의 요청을 보내는 시나리오를 실행하면서, 처리량과 응답 시간 등 다양한 정보를 출력합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 결과 분석 예시&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;벤치마크 결과에서 중요한 정보를 추출하여 분석합니다.&lt;/li&gt;
&lt;li&gt;예를 들어, 다음과 같은 결과가 있다면,&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1679481254087&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Concurrency Level:      1000
Time taken for tests:   2.760 seconds
Complete requests:      10000
Failed requests:        0
Requests per second:    3623.19 [#/sec] (mean)
Time per request:       276.002 [ms] (mean)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이 결과는 2.76초 동안 1000명의 사용자가 동시에 10000개의 요청을 보내며, 모든 요청이 성공적으로 처리되었다는 것을 의미합니다.&lt;/li&gt;
&lt;li&gt;이 결과를 분석하여 최대 동시 접속자 수와 TPS를 계산할 수 있습니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최대 동시 접속자 수 = Concurrency Level = 1000&lt;/li&gt;
&lt;li&gt;TPS = Requests per second = 3623.19 [#/sec] (mean)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 참고 사항&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;웹 서버의 최대 동시 접속자 수 및 TPS는 하드웨어 사양, 네트워크 대역폭, 웹 서버 소프트웨어, 웹 어플리케이션 등 여러 가지 요인에 따라 다릅니다.&lt;/li&gt;
&lt;li&gt;따라서 이러한 측정을 할 때는 환경을 정확하게 구성하고 여러 번 측정하여 평균값을 계산하는 것이 좋습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>ab 명령</category>
      <category>ab 명령어</category>
      <category>Apache</category>
      <category>TPS</category>
      <category>Transactions Per Second</category>
      <category>최대 동시 접속자</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711113</guid>
      <comments>https://anti1346.tistory.com/711113#entry711113comment</comments>
      <pubDate>Wed, 25 Mar 2026 21:54:28 +0900</pubDate>
    </item>
    <item>
      <title>우분투에서 Squid 기반으로 WPAD(Web Proxy Auto-Discovery)를 구성하는 방법</title>
      <link>https://anti1346.tistory.com/711112</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투에서 Squid 기반으로 WPAD(Web Proxy Auto-Discovery)를 구성하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WPAD는 클라이언트가 별도 설정 없이 자동으로 프록시를 인식하도록 해주는 메커니즘입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은 PAC 파일(wpad.dat) 을 제공하고 클라이언트가 이를 자동으로 찾도록 하는 것입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 전체 아키텍처&lt;/h4&gt;
&lt;pre id=&quot;code_1774354859612&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Client]
   &amp;darr; (DHCP/DNS 통해 WPAD 탐색)
http://wpad.domain/wpad.dat
   &amp;darr;
[Web Server (PAC 파일 제공)]
   &amp;darr;
[Squid Proxy]
   &amp;darr;
[Internet]&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Squid 설치&lt;/h4&gt;
&lt;pre id=&quot;code_1695041100221&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 install -y squid&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774355448525&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl enable squid
sudo systemctl start squid&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. Squid 기본 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Squid의 설정 파일인 squid.conf를 편집합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1695041116444&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/squid/squid.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최소 권장 설정&lt;/p&gt;
&lt;pre id=&quot;code_1774354927449&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 로컬 네트워크 정의
acl localnet src 192.168.0.0/24

# 허용 포트
acl Safe_ports port 80
acl Safe_ports port 443
acl CONNECT method CONNECT

# 접근 정책
http_access allow localnet
http_access deny all

# 프록시 포트
http_port 3128&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. WPAD 구성 (PAC 파일 생성)&lt;/h4&gt;
&lt;pre id=&quot;code_1774354982346&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -p /var/www/html
sudo vim /var/www/html/wpad.dat&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PAC 파일&lt;/p&gt;
&lt;pre id=&quot;code_1695041094148&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function FindProxyForURL(url, host) {

    // 내부망은 직접 연결
    if (isInNet(host, &quot;192.168.0.0&quot;, &quot;255.255.255.0&quot;)) {
        return &quot;DIRECT&quot;;
    }

    // 특정 도메인은 프록시 사용
    if (dnsDomainIs(host, &quot;.example.com&quot;)) {
        return &quot;PROXY proxy.example.com:3128&quot;;
    }

    // 기본 정책
    return &quot;PROXY proxy.example.com:3128; DIRECT&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;DIRECT fallback은 필수 (장애 대응)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 웹 서버 구성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WPAD는 반드시 HTTP로 제공되어야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1774355045943&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y nginx&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774355233276&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/nginx/conf.d/default&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774355242764&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server {
    listen 80;
    server_name wpad.example.com;

    location /wpad.dat {
        root /var/www/html;
        default_type application/x-ns-proxy-autoconfig;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용&lt;/p&gt;
&lt;pre id=&quot;code_1774355251326&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart nginx&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. DNS 구성 (가장 중요)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WPAD 자동 탐색은 DNS 기반으로 동작합니다.&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;pre id=&quot;code_1774355271079&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wpad.example.com &amp;rarr; WPAD 서버 IP&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;클라이언트는 자동으로 아래 URL을 시도&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1774355280192&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://wpad.example.com/wpad.dat&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. DHCP 옵션&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DHCP Option 252 설정&lt;/p&gt;
&lt;pre id=&quot;code_1774355295200&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://wpad.example.com/wpad.dat&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;DNS보다 우선 적용됨 (더 명확한 제어 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. 테스트 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 브라우저 자동 프록시 설정 활성화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Windows: &quot;자동으로 설정 감지&quot;&lt;/li&gt;
&lt;li&gt;Linux/macOS: Auto Proxy 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 확인&lt;/p&gt;
&lt;pre id=&quot;code_1774355302971&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -I http://wpad.example.com/wpad.dat&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는 브라우저&lt;/p&gt;
&lt;pre id=&quot;code_1774355316158&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://wpad.example.com/wpad.dat&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;이제 Squid를 사용하여 WPAD 서버를 구성했으며 클라이언트 디바이스에서 자동으로 웹 프록시 설정을 가져오도록 설정할 수 있습니다. WPAD를 사용하는 클라이언트는 Squid 프록시를 통해 웹을 탐색하고 프록시 서버를 통해 웹 페이지에 액세스할 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>PAC</category>
      <category>proxy auto-configuration</category>
      <category>squid</category>
      <category>squid 설정</category>
      <category>wpad</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711112</guid>
      <comments>https://anti1346.tistory.com/711112#entry711112comment</comments>
      <pubDate>Tue, 24 Mar 2026 21:35:19 +0900</pubDate>
    </item>
    <item>
      <title>macOS에서 Sublime Text 키 매핑을 구성하는 방법</title>
      <link>https://anti1346.tistory.com/711111</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;macOS에서 Sublime Text 키 매핑을 구성하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sublime Text는 JSON 기반의 Key Binding 설정을 통해 키 입력 동작을 자유롭게 커스터마이징할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 macOS 환경에서는 Windows/Linux에서 사용하던 Insert, Home, End 계열 키 동작이 기본과 다르기 때문에 이를 재정의하면 개발 및 서버 작업 효율을 크게 향상시킬 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 키 설정 파일 열기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;열면 두 개의 파일이 보입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;왼쪽 (Default) : 기본 설정 (읽기 전용)&lt;/li&gt;
&lt;li&gt;오른쪽 (User) : 사용자 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1377&quot; data-origin-height=&quot;497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HlZgG/dJMcaadznTC/KXQy0GRw4SuzbKWP1ntNa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HlZgG/dJMcaadznTC/KXQy0GRw4SuzbKWP1ntNa1/img.png&quot; data-alt=&quot;Sublime Text&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HlZgG/dJMcaadznTC/KXQy0GRw4SuzbKWP1ntNa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHlZgG%2FdJMcaadznTC%2FKXQy0GRw4SuzbKWP1ntNa1%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;1377&quot; height=&quot;497&quot; data-origin-width=&quot;1377&quot; data-origin-height=&quot;497&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Sublime Text&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;모든 커스터마이징은 반드시 User 파일에만 작성합니다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Mac 기준 주요 키 매핑 구성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Karabiner에서 만든 동작과 동일하게 맞추는 것이 핵심입니다.&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;Key Bindings (User)&lt;/p&gt;
&lt;pre id=&quot;code_1774009709626&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[
    // Copy (Ctrl + Insert)
    {
        &quot;keys&quot;: [&quot;ctrl+insert&quot;],
        &quot;command&quot;: &quot;copy&quot;
    },

    // Paste (Shift + Insert)
    {
        &quot;keys&quot;: [&quot;shift+insert&quot;],
        &quot;command&quot;: &quot;paste&quot;
    },

    // Cut (Shift + Delete)
    {
        &quot;keys&quot;: [&quot;shift+delete&quot;],
        &quot;command&quot;: &quot;cut&quot;
    },

    // Home &amp;rarr; Beginning of Line
    {
        &quot;keys&quot;: [&quot;home&quot;],
        &quot;command&quot;: &quot;move_to&quot;,
        &quot;args&quot;: { &quot;to&quot;: &quot;bol&quot; }
    },

    // End &amp;rarr; End of Line
    {
        &quot;keys&quot;: [&quot;end&quot;],
        &quot;command&quot;: &quot;move_to&quot;,
        &quot;args&quot;: { &quot;to&quot;: &quot;eol&quot; }
    },

    // Shift + Home &amp;rarr; Select to Beginning
    {
        &quot;keys&quot;: [&quot;shift+home&quot;],
        &quot;command&quot;: &quot;move_to&quot;,
        &quot;args&quot;: { &quot;to&quot;: &quot;bol&quot;, &quot;extend&quot;: true }
    },

    // Shift + End &amp;rarr; Select to End
    {
        &quot;keys&quot;: [&quot;shift+end&quot;],
        &quot;command&quot;: &quot;move_to&quot;,
        &quot;args&quot;: { &quot;to&quot;: &quot;eol&quot;, &quot;extend&quot;: true }
    },

    // Ctrl + &amp;larr; &amp;rarr; Word Left
    {
        &quot;keys&quot;: [&quot;ctrl+left&quot;],
        &quot;command&quot;: &quot;move&quot;,
        &quot;args&quot;: { &quot;by&quot;: &quot;words&quot;, &quot;forward&quot;: false }
    },

    // Ctrl + &amp;rarr; &amp;rarr; Word Right
    {
        &quot;keys&quot;: [&quot;ctrl+right&quot;],
        &quot;command&quot;: &quot;move&quot;,
        &quot;args&quot;: { &quot;by&quot;: &quot;words&quot;, &quot;forward&quot;: true }
    }
]&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. Mac 아이콘 기준&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;입력&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;동작&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Win + Insert&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;⌘ + C (복사)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Shift + Insert&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;⌘ + V (붙여넣기)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Shift + Delete&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;⌘ + X (잘라내기)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Home&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;⌘ + &amp;larr; (줄 시작 이동)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;End&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;⌘ + &amp;rarr; (줄 끝 이동)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Shift + Home&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;⇧ + ⌘ + &amp;larr; (줄 시작까지 선택)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Shift + End&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;⇧ + ⌘ + &amp;rarr; (줄 끝까지 선택)&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;</description>
      <category>맥(솔라리스)</category>
      <category>mac sublime</category>
      <category>MacOS</category>
      <category>sublime</category>
      <category>Sublime Text</category>
      <category>Sublime Text 키 매핑</category>
      <category>Sublime 키 매핑</category>
      <category>변군이글루</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711111</guid>
      <comments>https://anti1346.tistory.com/711111#entry711111comment</comments>
      <pubDate>Fri, 20 Mar 2026 21:42:40 +0900</pubDate>
    </item>
    <item>
      <title>macOS에서 stormssh를 설치하고 설정하는 방법</title>
      <link>https://anti1346.tistory.com/711110</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;macOS에서 stormssh를 설치하고 설정하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StormSSH는 터미널 환경에서 SSH 접속 정보를 효율적으로 관리할 수 있도록 도와주는 Python 기반 오픈소스 도구입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 ~/.ssh/config 파일을 직접 수정하지 않고도 명령어 기반으로 SSH 호스트를 추가&amp;middot;수정&amp;middot;검색할 수 있으며 반복적인 접속 작업을 단순화할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 사전 준비 (Python 및 Pip)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StormSSH는 Python 패키지이므로 Python3 및 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;Python 설치 확인&lt;/p&gt;
&lt;pre id=&quot;code_1774005446533&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python3 --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774005452695&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip3 --version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pip 최신 버전 업데이트&lt;/p&gt;
&lt;pre id=&quot;code_1774005561707&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python3 -m pip install --upgrade pip&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. StormSSH 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pip를 이용하여 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1774005475265&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip3 install stormssh&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;권한 오류가 발생할 경우 sudo pip3 install stormssh를 사용합니다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. PATH 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 후 실행 파일 경로를 PATH에 추가해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1774005599181&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo 'export PATH=&quot;$PATH:$(python3 -m site --user-base)/bin&quot;' &amp;gt;&amp;gt; ~/.zshrc&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774005606374&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source ~/.zshrc&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 설치 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1774005659924&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;storm --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774005666549&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;0.7.0&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 주요 명령어&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StormSSH는 직관적인 CLI 인터페이스를 제공합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;add : 새로운 SSH 호스트 항목 추가&lt;/li&gt;
&lt;li&gt;list : 등록된 모든 호스트 목록 출력&lt;/li&gt;
&lt;li&gt;search : 특정 키워드로 호스트 검색&lt;/li&gt;
&lt;li&gt;edit : 기존 호스트 정보 수정&lt;/li&gt;
&lt;li&gt;delete : 특정 호스트 삭제&lt;/li&gt;
&lt;li&gt;backup : 현재 SSH 설정 파일 백업&lt;/li&gt;
&lt;li&gt;web : 브라우저에서 관리 가능한 Web UI 실행 (8080 포트)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. 사용 예시&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH 호스트 추가 (Key 파일 포함)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Alias, 사용자, IP, 포트, Key 파일을 한 번에 등록할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1774006062438&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;storm add [별칭] [사용자]@[IP]:[포트] --id_file=[키경로]&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774006071131&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;storm add web01 ec2-user@10.51.3.81:22 --id_file=~/aws/mykey.pem&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트 조회 및 검색&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;전체 목록 보기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1774006088033&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;storm list&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;특정(web) 키워드 검색&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1774006081977&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;storm search web&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH 접속&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;등록된 Alias를 이용하여 간편하게 접속합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1774006097439&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh web01&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Web UI 사용&lt;/p&gt;
&lt;pre id=&quot;code_1774006133928&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;storm web&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1774244601417&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; * Serving Flask app 'storm.web'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:9002
Press CTRL+C to quit&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;브라우저에서 아래 주소로 접속&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1774006675197&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://127.0.0.1:9002&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;GUI 기반으로 SSH 목록을 관리할 수 있습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 백업&lt;/p&gt;
&lt;pre id=&quot;code_1774006141081&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;storm backup --path ~/Documents/ssh_config_backup&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;SSH 설정 변경 전 백업을 권장합니다.&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;CLI 기반이지만 Web UI까지 제공하여 운영 및 관리 편의성을 동시에 확보할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- Libraries.io : &lt;a href=&quot;https://libraries.io/pypi/stormssh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;stormssh(Release 0.7.0)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>맥(솔라리스)</category>
      <category>Mac</category>
      <category>MAC SSH</category>
      <category>SSH</category>
      <category>Storm</category>
      <category>storm 명령</category>
      <category>stormssh</category>
      <category>stormssh install</category>
      <category>stormssh 설치</category>
      <category>변군이글루</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711110</guid>
      <comments>https://anti1346.tistory.com/711110#entry711110comment</comments>
      <pubDate>Fri, 20 Mar 2026 20:43:17 +0900</pubDate>
    </item>
    <item>
      <title>macOS에서 Gas Mask를 설치하는 방법</title>
      <link>https://anti1346.tistory.com/711109</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;macOS에서 Gas Mask를 설치하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;macOS에서 hosts 파일을 GUI로 관리할 수 있는 Gas Mask 설치 방법입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Gas Mask 다운로드 (공식 소스)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitHub Releases : &lt;a href=&quot;https://github.com/2ndalpha/gasmask/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/2ndalpha/gasmask/releases&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드 파일 : gas_mask_0.8.6.zip&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 설치 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. gas_mask_0.8.6.zip 다운로드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 압축 해제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Gas Mask.app를 /Applications 폴더로 이동&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 실행 및 권한 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최초 실행 시 macOS 보안 정책에 따라 권한 필요&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;macOS 보안 경고 &amp;rarr; &amp;ldquo;열기&amp;rdquo; 선택&lt;/li&gt;
&lt;li&gt;관리자 권한 요청 &amp;rarr; 비밀번호 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이유: /etc/hosts는 시스템 파일로, root 권한이 있어야 수정 가능&lt;/blockquote&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 기본 사용법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hosts 추가&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Gas Mask 실행&lt;/li&gt;
&lt;li&gt;좌측에서 Hosts 파일 선택&lt;/li&gt;
&lt;li&gt;우측에서 도메인 추가&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1773922647422&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;127.0.0.1   example.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용 및 반영&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;대부분 자동 적용됨&lt;/li&gt;
&lt;li&gt;반영이 안 되는 경우 DNS 캐시 갱신 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1773922668158&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo dscacheutil -flushcache&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773922679093&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo killall -HUP mDNSResponder&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설명&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;dscacheutil &amp;rarr; 시스템 DNS 캐시 초기화&lt;/li&gt;
&lt;li&gt;mDNSResponder &amp;rarr; macOS DNS 서비스 재시작&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gas Mask는 GUI 관리에 편리하지만 실무에서는 /etc/hosts 직접 관리가 가장 안정적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>맥(솔라리스)</category>
      <category>Gas Mask</category>
      <category>gasmask</category>
      <category>mac hosts file</category>
      <category>맥에서 호스트 설정 변경</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711109</guid>
      <comments>https://anti1346.tistory.com/711109#entry711109comment</comments>
      <pubDate>Fri, 20 Mar 2026 19:40:16 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 람다 함수란</title>
      <link>https://anti1346.tistory.com/711108</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;파이썬 람다 함수란&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다 함수란, 익명 함수 혹은 무명 함수로 불리며 이름 없이 정의되는 함수를 말합니다. 파이썬에서는 lambda 키워드를 사용하여 람다 함수를 정의할 수 있습니다.&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;pre id=&quot;code_1681256034399&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lambda arguments: expression&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;arguments는 람다 함수의 입력 인자를 나타내며 expression은 입력 인자를 가지고 계산되는 표현식입니다. 람다 함수는 보통 한 줄의 간단한 함수를 정의할 때 사용됩니다.&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;pre id=&quot;code_1681256071976&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; add = lambda x, y: x + y
&amp;gt;&amp;gt;&amp;gt; print(add(3, 4))
7&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열의 길이를 구하는 람다 함수&lt;/p&gt;
&lt;pre id=&quot;code_1681256134546&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; string_length = lambda s: len(s)
&amp;gt;&amp;gt;&amp;gt; print(string_length(&quot;Hello, World!&quot;))
13&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트의 원소 중 홀수만 반환하는 람다 함수&lt;/p&gt;
&lt;pre id=&quot;code_1681256171187&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; odd_numbers = lambda lst: [x for x in lst if x % 2 != 0]
&amp;gt;&amp;gt;&amp;gt; print(odd_numbers([1, 2, 3, 4, 5, 6, 7, 8, 9]))
[1, 3, 5, 7, 9]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 문자열을 연결하는 람다 함수&lt;/p&gt;
&lt;pre id=&quot;code_1681256200919&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; concatenate = lambda s1, s2: s1 + &quot; &quot; + s2
&amp;gt;&amp;gt;&amp;gt; print(concatenate(&quot;Hello&quot;, &quot;World!&quot;))
Hello World!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 예제에서 각각의 람다 함수는 입력 인자를 받아서 계산된 결과를 반환합니다. 예를 들어, 첫 번째 람다 함수는 x와 y를 입력으로 받아서 더한 결과를 반환합니다. 두 번째 람다 함수는 문자열을 입력으로 받아서 그 길이를 반환합니다. 세 번째 람다 함수는 리스트를 입력으로 받아서 리스트 내의 홀수 원소만 반환합니다. 네 번째 람다 함수는 두 문자열을 입력으로 받아서 연결된 문자열을 반환합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>lambda</category>
      <category>python</category>
      <category>python lambda</category>
      <category>람다 함수</category>
      <category>리눅스</category>
      <category>변군이글루</category>
      <category>파이썬</category>
      <category>파이썬 람다 함수</category>
      <category>파이썬 람다 함수란</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711108</guid>
      <comments>https://anti1346.tistory.com/711108#entry711108comment</comments>
      <pubDate>Thu, 19 Mar 2026 21:23:45 +0900</pubDate>
    </item>
    <item>
      <title>macOS에서 Spectacle를 설치하는 방법</title>
      <link>https://anti1346.tistory.com/711107</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;macOS에서 Spectacle를 설치하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spectacle은 공식 사이트가 운영되지 않으므로 GitHub 릴리즈를 통해 설치하는 것이 가장 안전한 방법입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Spectacle 다운로드 (공식 소스)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitHub Releases : &lt;a href=&quot;https://github.com/eczarny/spectacle/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/eczarny/spectacle/releases&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드 파일 : Spectacle-1.2.zip&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 설치 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Spectacle-1.2.zip 다운로드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 압축 해제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Spectacle.app를 /Applications 폴더로 이동&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 실행 및 권한 설정 (필수)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최초 실행 시 macOS 보안 정책으로 인해 권한 설정 필요&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;앱 실행 &amp;rarr; &amp;ldquo;열기&amp;rdquo; 클릭 &amp;rarr; 권한 요청 팝업 승인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수동 설정 (팝업이 안 뜨는 경우)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;시스템 설정 &amp;rarr; 개인정보 보호 및 보안 &amp;rarr; 손쉬운 사용&lt;/li&gt;
&lt;li&gt;Spectacle 활성화&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;해당 권한이 없으면 단축키가 동작하지 않음&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 기본 사용법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 후 바로 사용 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;⌘ + ⌥ + &amp;larr; &amp;rarr; 왼쪽 분할&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;⌘ + ⌥ + &amp;rarr; &amp;rarr; 오른쪽 분할&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;⌘ + ⌥ + F &amp;rarr; 최대화&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;단축키는 Preferences에서 변경 가능&lt;/blockquote&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;사용 시 주의사항 (중요)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2019년 이후 개발 중단 (Maintenance 종료)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신 macOS에서&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;일부 단축키 미동작 가능&lt;/li&gt;
&lt;li&gt;접근성 권한 이슈 발생 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apple Silicon 환경에서 비정상 동작 사례 존재&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;업무용/장기 사용에는 비추천&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;대안 (강력 추천)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spectacle 대신 다음 앱 사용 권장&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Rectangle
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Spectacle 기반 UX 유지&lt;/li&gt;
&lt;li&gt;단축키 거의 동일 (마이그레이션 용이)&lt;/li&gt;
&lt;li&gt;지속적인 업데이트 및 macOS 호환성 보장&lt;/li&gt;
&lt;li&gt;무료 오픈소스&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spectacle은 GitHub에서 설치할 수 있지만 현재는 Rectangle이 사실상 표준 대체재입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/MpCe9/dJMcadVAwsn/3cjLqgg5IVIEm0AzzXO3e0/Spectacle%2B1.2.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Spectacle+1.2.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;2.70MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>맥(솔라리스)</category>
      <category>rectangle</category>
      <category>spectacle</category>
      <category>맥 화면 분할</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711107</guid>
      <comments>https://anti1346.tistory.com/711107#entry711107comment</comments>
      <pubDate>Thu, 19 Mar 2026 21:03:07 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04에서 Redis Cluster를 구성하는 방법</title>
      <link>https://anti1346.tistory.com/711106</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04에서 Redis Cluster를 구성하는 방법&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 구성 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 구성&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 51px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.5426%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;서버&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.031%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;Redis 인스턴스&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.4263%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.5426%; text-align: center;&quot;&gt;192.168.0.111&lt;/td&gt;
&lt;td style=&quot;width: 29.031%; text-align: center;&quot;&gt;6381, 6382&lt;/td&gt;
&lt;td style=&quot;width: 45.4263%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.5426%; height: 17px; text-align: center;&quot;&gt;192.168.0.112&lt;/td&gt;
&lt;td style=&quot;width: 29.031%; height: 17px; text-align: center;&quot;&gt;6381, 6382&lt;/td&gt;
&lt;td style=&quot;width: 45.4263%; height: 17px; text-align: left;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.5426%; height: 17px; text-align: center;&quot;&gt;192.168.0.113&lt;/td&gt;
&lt;td style=&quot;width: 29.031%; height: 17px; text-align: center;&quot;&gt;6381, 6382&lt;/td&gt;
&lt;td style=&quot;width: 45.4263%; height: 17px; text-align: left;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아키텍처(Redis Cluster)&lt;/p&gt;
&lt;pre id=&quot;code_1773718752892&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        +---------------------+
        |     Client App      |
        +----------+----------+
                   |
           Redis Cluster
                   
   192.168.0.111:6381 (Master)
   192.168.0.112:6381 (Master)
   192.168.0.113:6381 (Master)

   192.168.0.111:6382 (Replica)
   192.168.0.112:6382 (Replica)
   192.168.0.113:6382 (Replica)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. OS 커널 튜닝 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;backlog 큐 확인&lt;/p&gt;
&lt;pre id=&quot;code_1773718794633&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /proc/sys/net/core/somaxconn&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773718855720&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;65535&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transparent Huge Page 비활성화&lt;/p&gt;
&lt;pre id=&quot;code_1773718800865&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /etc/rc.local | grep transparent_hugepage&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773718867054&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo never &amp;gt; /sys/kernel/mm/transparent_hugepage/enabled
echo never &amp;gt; /sys/kernel/mm/transparent_hugepage/defrag&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리 overcommit 설정&lt;/p&gt;
&lt;pre id=&quot;code_1773719580087&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sysctl vm.overcommit_memory&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre id=&quot;code_1773718811063&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /etc/sysctl.conf | grep overcommit_memory&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773718874511&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vm.overcommit_memory=1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 디스크립터 설정&lt;/p&gt;
&lt;pre id=&quot;code_1773719608869&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ulimit -n&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre id=&quot;code_1773718831155&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /etc/security/limits.conf | grep nofile&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773718887827&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;* soft nofile 65535
* hard nofile 65535&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. Redis 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redis Repository 등록&lt;/p&gt;
&lt;pre id=&quot;code_1773718905601&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -fsSL https://packages.redis.io/gpg \
  | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773718925999&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo &quot;deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] \
  https://packages.redis.io/deb $(lsb_release -cs) main&quot; \
  | sudo tee /etc/apt/sources.list.d/redis.list&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 업데이트&lt;/p&gt;
&lt;pre id=&quot;code_1773718934358&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redis 설치&lt;/p&gt;
&lt;pre id=&quot;code_1773718946708&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y redis-server&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 확인&lt;/p&gt;
&lt;pre id=&quot;code_1773718952039&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redis-server --version&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 기본 Redis 서비스 비활성화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cluster 환경에서는 기본 Redis 서비스를 사용하지 않습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773718960339&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl disable --now redis-server&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. Redis 데이터 디렉토리 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 인스턴스별 데이터 디렉토리를 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773719044615&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -pv /var/lib/redis/{6381,6382}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;권한 설정&lt;/p&gt;
&lt;pre id=&quot;code_1773719057257&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo chown redis:redis /var/lib/redis/6381
sudo chown redis:redis /var/lib/redis/6382&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. Redis 설정 파일 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;redis6381.conf 생성&lt;/p&gt;
&lt;pre id=&quot;code_1773719109945&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tee /etc/redis/redis6381.conf &amp;gt; /dev/null &amp;lt;&amp;lt;'EOF'
cluster-enabled yes
cluster-node-timeout 3000
appendonly yes
appendfsync everysec
maxmemory 12gb
maxmemory-policy allkeys-lru
tcp-backlog 2048
loglevel verbose
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;pre id=&quot;code_1773719527681&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tee /etc/redis/redis6381.conf &amp;gt; /dev/null &amp;lt;&amp;lt;'EOF'
#################################
# Network
#################################

bind 0.0.0.0
port 6381
daemonize yes
protected-mode no

tcp-backlog 2048
tcp-keepalive 60
timeout 0

#################################
# Security
#################################

requirepass redis_password
masterauth redis_password

#################################
# File
#################################

dir /var/lib/redis/6381
pidfile /var/run/redis6381.pid
logfile &quot;/var/log/redis/redis6381.log&quot;

#################################
# Cluster
#################################

cluster-enabled yes
cluster-config-file nodes6381.conf
cluster-node-timeout 3000

#################################
# Persistence
#################################

appendonly yes
appendfilename &quot;appendonly.aof&quot;
appendfsync everysec

dbfilename dump.rdb

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error no

#################################
# RDB / AOF
#################################

rdbcompression yes
rdbchecksum yes
aof-use-rdb-preamble yes

#################################
# Memory / Performance
#################################

maxmemory 12gb
maxmemory-policy allkeys-lru

hz 10

#################################
# Logging
#################################

loglevel verbose

#################################
# 기타
#################################

supervised no
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6382 포트는 port/pidfile/dir/logfile/cluster-config-file만 변경하여 동일하게 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773720476442&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cp /etc/redis/redis6381.conf /etc/redis/redis6382.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773720484853&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sed -i 's/port 6381/port 6382/' /etc/redis/redis6382.conf
sed -i 's/redis6381/redis6382/g' /etc/redis/redis6382.conf
sed -i 's/\/6381/\/6382/g' /etc/redis/redis6382.conf
sed -i 's/nodes6381.conf/nodes6382.conf/' /etc/redis/redis6382.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. Redis 인스턴스 실행&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 인스턴스를 실행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773719144398&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redis-server /etc/redis/redis6381.conf
redis-server /etc/redis/redis6382.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스 확인&lt;/p&gt;
&lt;pre id=&quot;code_1773719149794&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ps -ef | grep redis&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트 확인&lt;/p&gt;
&lt;pre id=&quot;code_1773719158226&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ss -lntp | grep redis&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Redis 자동 시작 (systemd)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 파일 생성&lt;/p&gt;
&lt;pre id=&quot;code_1773719815226&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo tee /etc/systemd/system/redis6381.service &amp;gt; /dev/null &amp;lt;&amp;lt;'EOF'
[Unit]
Description=Redis 6381
After=network.target

[Service]
Type=simple
User=redis
ExecStart=/usr/bin/redis-server /etc/redis/redis6381.conf
ExecStop=/usr/bin/redis-cli -p 6381 shutdown
Restart=always

[Install]
WantedBy=multi-user.target
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 활성&lt;/p&gt;
&lt;pre id=&quot;code_1773719840272&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl daemon-reload
systemctl enable --now redis6381&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. Redis 설정 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redis 접속&lt;/p&gt;
&lt;pre id=&quot;code_1773719169135&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redis-cli -p 6381 -a redis_password&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 설정 확인&lt;/p&gt;
&lt;pre id=&quot;code_1773719178694&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CONFIG GET tcp-backlog
CONFIG GET maxmemory
CONFIG GET maxmemory-policy
CONFIG GET loglevel&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773719260080&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;127.0.0.1:6381&amp;gt; CONFIG GET tcp-backlog
1) &quot;tcp-backlog&quot;
2) &quot;2048&quot;
127.0.0.1:6381&amp;gt; CONFIG GET maxmemory
1) &quot;maxmemory&quot;
2) &quot;12gb&quot;
127.0.0.1:6381&amp;gt; CONFIG GET maxmemory-policy
1) &quot;maxmemory-policy&quot;
2) &quot;allkeys-lru&quot;
127.0.0.1:6381&amp;gt; CONFIG GET loglevel
1) &quot;loglevel&quot;
2) &quot;verbose&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;9. Redis Cluster 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cluster 생성 명령&lt;/p&gt;
&lt;pre id=&quot;code_1773719287039&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redis-cli --cluster create \
192.168.0.111:6381 \
192.168.0.111:6382 \
192.168.0.112:6381 \
192.168.0.112:6382 \
192.168.0.113:6381 \
192.168.0.113:6382 \
--cluster-replicas 1 \
-a redis_password&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;10. Cluster 상태 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cluster 정보 확인&lt;/p&gt;
&lt;pre id=&quot;code_1773719333212&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redis-cli -p 6381 -a redis_password cluster info&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드 확인&lt;/p&gt;
&lt;pre id=&quot;code_1773719338280&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redis-cli -p 6381 -a redis_password cluster nodes&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773719347718&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cluster_state:ok
cluster_slots_assigned:16384&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;11. Cluster 테스트&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cluster 모드로 접속&lt;/p&gt;
&lt;pre id=&quot;code_1773719354277&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redis-cli -c -p 6381 -a redis_password&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 입력&lt;/p&gt;
&lt;pre id=&quot;code_1773719362508&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SET testkey redis_cluster&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회&lt;/p&gt;
&lt;pre id=&quot;code_1773719372704&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET testkey&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;12. 운영 점검 명령&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 상태&lt;/p&gt;
&lt;pre id=&quot;code_1773719885598&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INFO&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리&lt;/p&gt;
&lt;pre id=&quot;code_1773719381171&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INFO memory&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트&lt;/p&gt;
&lt;pre id=&quot;code_1773719386832&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CLIENT LIST&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Keyspace&lt;/p&gt;
&lt;pre id=&quot;code_1773719910332&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INFO keyspace&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능&lt;/p&gt;
&lt;pre id=&quot;code_1773719392123&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INFO stats&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Replication&lt;/p&gt;
&lt;pre id=&quot;code_1773720021743&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INFO replication&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Slow Query&lt;/p&gt;
&lt;pre id=&quot;code_1773720027175&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SLOWLOG GET 10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cluster 상태&lt;/p&gt;
&lt;pre id=&quot;code_1773720032717&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cluster info
cluster nodes&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;13. 노드 복구&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 노드 재조인&lt;/p&gt;
&lt;pre id=&quot;code_1773720046662&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redis-cli --cluster add-node \
192.168.0.114:6381 \
192.168.0.111:6381&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Replica 추가&lt;/p&gt;
&lt;pre id=&quot;code_1773720052575&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redis-cli --cluster add-node \
192.168.0.114:6382 \
192.168.0.111:6381 \
--cluster-slave&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;14. Redis에서 온라인으로 설정 변경하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속&lt;/p&gt;
&lt;pre id=&quot;code_1773731986948&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redis-cli -p 6381 -a redis_password&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 변경&lt;/p&gt;
&lt;pre id=&quot;code_1773731996348&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;127.0.0.1:6381&amp;gt; CONFIG SET maxmemory 12gb

127.0.0.1:6381&amp;gt; CONFIG SET maxmemory-policy allkeys-lru

127.0.0.1:6381&amp;gt; CONFIG SET loglevel verbose&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 파일(redis.conf)에 영구 반영&lt;/p&gt;
&lt;pre id=&quot;code_1773732004252&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;127.0.0.1:6381&amp;gt; CONFIG REWRITE&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>REDIS</category>
      <category>Redis 클러스터</category>
      <category>레디스</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711106</guid>
      <comments>https://anti1346.tistory.com/711106#entry711106comment</comments>
      <pubDate>Tue, 17 Mar 2026 13:04:09 +0900</pubDate>
    </item>
    <item>
      <title>VMware ESXi 8.0에서 관리자 계정 생성 및 Administrator 권한 부여 방법</title>
      <link>https://anti1346.tistory.com/711105</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;VMware ESXi 8.0에서 관리자 계정 생성 및 Administrator(관리자) 권한 부여하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESXi Shell 또는 SSH(CLI)를 이용하여 관리자 계정을 생성하고 Administrator 권한을 부여하는 방법입니다&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. ESXi SSH 접속&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관리자(root) 계정으로 ESXi 호스트에 접속합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773295637142&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh root@ESXi-IP&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 현재 사용자 계정 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 ESXi에 등록된 계정을 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773295782909&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;esxcli system account list&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773295819637&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;User ID    Description                                  Shell access
---------  -------------------------------------------  ------------
root       Administrator                                        true
dcui       DCUI User                                            true
vpxuser    VMware VirtualCenter administration account          true&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 신규 관리자 계정 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;esxcli system account add 명령을 사용하여 새로운 사용자 계정을 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773295652636&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;esxcli system account add \
--id admin2 \
--password 'P@ssw0rd!' \
--description &quot;Infrastructure Team&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 계정 생성 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 목록을 다시 조회하여 계정이 정상적으로 생성되었는지 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773295843070&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;User ID    Description                                  Shell access
---------  -------------------------------------------  ------------
root       Administrator                                        true
dcui       DCUI User                                            true
vpxuser    VMware VirtualCenter administration account          true
admin2     Infrastructure Team                                  true&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 현재 권한(Permission) 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESXi에 설정된 권한 목록을 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773295896060&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;esxcli system permission list&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773295929440&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Principal  Is Group  Role   Role Description
---------  --------  -----  ----------------
dcui          false  Admin  Full access rights
root          false  Admin  Full access rights
vpxuser       false  Admin  Full access rights&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. Administrator 권한 부여&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 사용자에게 Administrator(Admin) 권한을 부여합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773295742103&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;esxcli system permission set --id [사용자ID] --role Admin&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;--id : 권한을 부여할 사용자 계정명&lt;/li&gt;
&lt;li&gt;--role : 부여할 역할명 (관리자는 대소문자를 구분하여 Admin입니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[참고] 만약 해당 사용자에게서 권한을 박탈하고 싶다면 Admin 대신 NoAccess나 ReadOnly로 변경하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773295864017&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;esxcli system permission set --id admin2 --role Admin&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. 권한 적용 확인 권한&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목록을 다시 확인하여 Administrator 권한이 정상적으로 적용되었는지 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773295900787&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;esxcli system permission list&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773295946998&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Principal  Is Group  Role   Role Description
---------  --------  -----  ----------------
dcui          false  Admin  Full access rights
admin2	      false  Admin  Full access rights
root          false  Admin  Full access rights
vpxuser       false  Admin  Full access rights&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. 관리자 계정 로그인 테스트&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 브라우저에서 ESXi Host Client에 접속하여 생성한 계정으로 로그인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773296023466&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;https://ESXi-IP&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 정보&lt;/p&gt;
&lt;pre id=&quot;code_1773296030556&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ID : admin2
PW : 설정한 비밀번호&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;로그인 후 다음 작업이 정상적으로 수행되면 Administrator 권한이 정상적으로 부여된 것입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;가상 머신 생성 및 관리&lt;/li&gt;
&lt;li&gt;Datastore 관리&lt;/li&gt;
&lt;li&gt;네트워크 설정 변경&lt;/li&gt;
&lt;li&gt;Host 설정 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>Administrator 권한 부여</category>
      <category>esxi 관리자 계정 생성</category>
      <category>VMware ESXi</category>
      <category>VMware ESXi 8</category>
      <category>VMware ESXi 8.0</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711105</guid>
      <comments>https://anti1346.tistory.com/711105#entry711105comment</comments>
      <pubDate>Thu, 12 Mar 2026 15:28:38 +0900</pubDate>
    </item>
    <item>
      <title>Docker 컨테이너에서 Python Selenium 실행하기</title>
      <link>https://anti1346.tistory.com/711104</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Docker 컨테이너에서 Python Selenium 실행하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker 컨테이너에서 Selenium을 실행하려면 다음 구성 요소가 필요합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772955202583&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Python
Selenium
Browser (Firefox 또는 Chrome)
WebDriver (geckodriver 또는 chromedriver)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker 기본 Python 이미지는 브라우저가 포함되어 있지 않기 때문에 브라우저와 WebDriver를 직접 설치해야 합니다&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Python 컨테이너 실행&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python 공식 이미지를 이용하여 컨테이너를 실행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772954703386&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -it --rm python:3 bash&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 필수 패키지 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Firefox 실행에 필요한 라이브러리와 기본 도구를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772954711970&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt update

apt install -y \
    firefox-esr \
    wget \
    vim \
    ca-certificates \
    libgtk-3-0 \
    libdbus-glib-1-2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 확인&lt;/p&gt;
&lt;pre id=&quot;code_1772955380032&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;firefox --version&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. Geckodriver 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Firefox를 Selenium에서 제어하기 위해 Geckodriver(ARM64용 드라이버)를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772954888965&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GECKO_VERSION=v0.36.0

wget https://github.com/mozilla/geckodriver/releases/download/${GECKO_VERSION}/geckodriver-${GECKO_VERSION}-linux-aarch64.tar.gz

tar -xvzf geckodriver-${GECKO_VERSION}-linux-aarch64.tar.gz

mv geckodriver /usr/local/bin/

chmod +x /usr/local/bin/geckodriver&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 확인&lt;/p&gt;
&lt;pre id=&quot;code_1772954900304&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;geckodriver --version&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. Selenium 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python 패키지 관리자인 pip를 사용하여 Selenium을 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772954914144&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install selenium&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 확인&lt;/p&gt;
&lt;pre id=&quot;code_1772955412889&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip show selenium&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. Selenium 테스트 코드 작성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker 환경에는 GUI가 없기 때문에 Headless 모드를 사용해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772954988720&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim browser_test.py&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772955004053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.service import Service
import time

# Firefox 옵션 설정
options = Options()
options.binary_location = &quot;/usr/bin/firefox&quot;
options.add_argument(&quot;--headless&quot;)
options.add_argument(&quot;--no-sandbox&quot;)

# Geckodriver 경로 지정
service = Service(&quot;/usr/local/bin/geckodriver&quot;)

# 브라우저 실행
browser = webdriver.Firefox(service=service, options=options)

# 웹사이트 접속
browser.get(&quot;https://www.sangchul.kr&quot;)

# 페이지 제목 출력
print(browser.title)

# 잠시 대기
time.sleep(3)

# 브라우저 종료
browser.quit()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로케일 설정(UTF-8)&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;locales 패키지 설치&lt;/p&gt;
&lt;pre id=&quot;code_1772956249789&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt update
apt install -y locales&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ko_KR.UTF-8 locale 생성&lt;/p&gt;
&lt;pre id=&quot;code_1772956281134&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;locale-gen ko_KR.UTF-8&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;환경 변수 설정&lt;/p&gt;
&lt;pre id=&quot;code_1772956305093&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export LANG=C.UTF-8
export LC_ALL=C.UTF-8&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. Selenium 실행&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python 스크립트를 실행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772955011064&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python browser_test.py&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772955690321&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;변군이글루 블로그(Development)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. 전체 동작 구조&lt;/h4&gt;
&lt;pre id=&quot;code_1772955714797&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Python Script
      │
      ▼
Selenium
      │
      ▼
Geckodriver
      │
      ▼
Firefox (Headless)&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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- Selenium 공식 문서 : &lt;a href=&quot;https://www.selenium.dev/documentation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.selenium.dev/documentation&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- Geckodriver 다운로드 : &lt;a href=&quot;https://github.com/mozilla/geckodriver/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/mozilla/geckodriver/releases&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>스크립트</category>
      <category>geckodriver</category>
      <category>Geckodriver 다운로드</category>
      <category>Python Selenium 크롤링</category>
      <category>selenium</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711104</guid>
      <comments>https://anti1346.tistory.com/711104#entry711104comment</comments>
      <pubDate>Sun, 8 Mar 2026 16:37:39 +0900</pubDate>
    </item>
    <item>
      <title>NetBox에서 API Token 보안 강화를 위한 API_TOKEN_PEPPERS를 설정하는 방법</title>
      <link>https://anti1346.tistory.com/711103</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;NetBox에서 API Token 보안 강화를 위한 API_TOKEN_PEPPERS를 설정하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NetBox 4.0 이상 버전에서는 API 토큰 보안을 강화하기 위해 Pepper 기반 해시 방식이 도입되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 NetBox 4.5 이상 버전에서는 v2 API Token을 사용하기 위해 최소 하나 이상의 Pepper 설정이 필요합니다.&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;Pepper는 API 토큰을 해싱할 때 추가적으로 사용하는 비밀 문자열로 데이터베이스 유출 상황에서도 토큰을 보호하는 역할을 합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;보안 정책: Pepper 문자열은 최소 50자 이상이어야 합니다.&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;웹 UI 오류&lt;/p&gt;
&lt;pre id=&quot;code_1772780754514&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Unable to save v2 tokens: API_TOKEN_PEPPERS is not defined.&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 무작위 Pepper 문자열 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python의 secrets 모듈을 이용하여 안전한 무작위 문자열을 생성할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772779518309&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python3 -c &quot;import secrets; print(secrets.token_urlsafe(50))&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772779895746&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HM6hVHK35NGJ4j0abvkgySYdcc3VAzvPwgopLA8D6o5QYe97H9NO3vIX_EJDmfLspZQ&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문자열을 NetBox 설정 파일에 등록하여 Pepper로 사용합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. NetBox 설정 파일 수정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NetBox의 설정 파일을 열어 API_TOKEN_PEPPERS 항목을 수정합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;API_TOKEN_PEPPERS 항목을 수정합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1772779817212&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /opt/netbox/netbox/netbox/configuration.py&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772779861992&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Define a mapping of cryptographic peppers to use when hashing API tokens. A minimum of one pepper is required to
# enable v2 API tokens (NetBox v4.5+). Define peppers as a mapping of numeric ID to pepper value, as shown below. Each
# pepper must be at least 50 characters in length.
#
#     API_TOKEN_PEPPERS = {
#         1: &quot;&amp;lt;random string&amp;gt;&quot;,
#         2: &quot;&amp;lt;random string&amp;gt;&quot;,
#     }

API_TOKEN_PEPPERS = {
    2: &quot;HM6hVHK35NGJ4j0abvkgySYdcc3VAzvPwgopLA8D6o5QYe97H9NO3vIX_EJDmfLspZQ&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. NetBox 서비스 재시작&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정을 적용하기 위해 NetBox 서비스를 재시작합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772779506699&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart netbox&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 서비스 로그 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스가 정상적으로 시작되었는지 로그를 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772779497298&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo journalctl -u netbox --no-pager | tail -n 50&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 설정되었다면 오류 메시지 없이 NetBox 서비스가 실행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>API_TOKEN_PEPPERS 설정</category>
      <category>API_TOKEN_PEPPERS 수정</category>
      <category>netbox</category>
      <category>NetBox API_TOKEN_PEPPERS 설정</category>
      <category>PEPPERS의 키(Key) 값</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711103</guid>
      <comments>https://anti1346.tistory.com/711103#entry711103comment</comments>
      <pubDate>Fri, 6 Mar 2026 16:06:55 +0900</pubDate>
    </item>
    <item>
      <title>우분투 24.04에서 NetBox를 설치하는 방법</title>
      <link>https://anti1346.tistory.com/711102</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 24.04에서 NetBox를 설치하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NetBox는 IP Address Management(IPAM)와 Data Center Infrastructure Management(DCIM) 기능을 제공하는 오픈소스 플랫폼으로 인프라 자산 관리와 네트워크 정보를 통합적으로 관리할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제 정보&lt;/p&gt;
&lt;pre id=&quot;code_1772761373825&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -d
Description:    Ubuntu 24.04.2 LTS&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 시스템 업데이트 및 필수 의존성 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 24.04의 기본 저장소에서 최신 라이브러리를 가져옵니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772711743668&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772712031928&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y curl gnupg lsb-release ca-certificates&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772711779017&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y python3 python3-pip python3-venv \
  gcc libpq-dev libssl-dev libffi-dev \
  git graphviz&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Redis 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NetBox는 캐시 및 비동기 작업 큐(RQ Worker)를 위해 Redis를 사용합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772711845321&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -fsSL https://packages.redis.io/gpg \
  | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg

echo &quot;deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] \
https://packages.redis.io/deb $(lsb_release -cs) main&quot; \
  | sudo tee /etc/apt/sources.list.d/redis.list

sudo apt update
sudo apt install -y redis-server&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772762170217&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;redis-server -v&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772762177705&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Redis server v=8.6.1 sha=00000000:1 malloc=jemalloc-5.3.0 bits=64 build=3eab5ed2d769eb41&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1772713876592&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl enable --now redis-server
sudo systemctl status redis-server&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. PostgreSQL 설치 및 데이터베이스 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NetBox는 PostgreSQL 데이터베이스를 사용하여 장비, IP, 네트워크 등의 정보를 저장합니다.&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;PostgreSQL 설치&lt;/p&gt;
&lt;pre id=&quot;code_1772712139194&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -fsSL -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc \
  --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc

. /etc/os-release
sudo sh -c &quot;echo 'deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $VERSION_CODENAME-pgdg main' &amp;gt; /etc/apt/sources.list.d/pgdg.list&quot;

sudo apt update
sudo apt install -y postgresql-18&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772767961219&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;psql --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772767971591&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;psql (PostgreSQL) 18.3 (Ubuntu 18.3-1.pgdg24.04+1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 생성 및 계정 설정&lt;/p&gt;
&lt;pre id=&quot;code_1772712072965&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo -u postgres psql -c &quot;CREATE DATABASE netbox_db;&quot;
sudo -u postgres psql -c &quot;CREATE USER netbox_user WITH PASSWORD 'YourStrongPassword';&quot;
sudo -u postgres psql -c &quot;GRANT ALL PRIVILEGES ON DATABASE netbox_db TO netbox_user;&quot;
sudo -u postgres psql -c &quot;ALTER DATABASE netbox_db OWNER TO netbox_user;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;pre id=&quot;code_1772713976155&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo -u postgres psql&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772713985352&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE DATABASE netbox_db;

CREATE USER netbox_user WITH PASSWORD 'YourStrongPassword';
GRANT ALL PRIVILEGES ON DATABASE netbox_db TO netbox_user;
ALTER DATABASE netbox_db OWNER TO netbox_user;

\q&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. NetBox 소스 다운로드 및 권한 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NetBox 소스를 다운로드하고 서비스 계정을 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772712088906&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -p /opt/netbox
cd /opt/netbox

sudo git clone -b main https://github.com/netbox-community/netbox.git .&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NetBox 시스템 사용자 생성 (로그인 불가 계정)&lt;/p&gt;
&lt;pre id=&quot;code_1772712082111&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo adduser --system --group netbox&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 권한 설정&lt;/p&gt;
&lt;pre id=&quot;code_1772714035773&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo chown --recursive netbox /opt/netbox/netbox/media/
sudo chown --recursive netbox /opt/netbox/netbox/reports/
sudo chown --recursive netbox /opt/netbox/netbox/scripts/&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. NetBox 구성 (Configuration)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 파일 복사&lt;/p&gt;
&lt;pre id=&quot;code_1772712169748&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /opt/netbox/netbox/netbox/
sudo cp configuration_example.py configuration.py&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Secret Key(비밀 키) 생성&lt;/p&gt;
&lt;pre id=&quot;code_1772712189195&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python3 ../generate_secret_key.py&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Tip: 비밀번호 생성기나 python3 ../generate_secret_key.py를 사용해 강력한 Secret Key를 만드세요.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 파일 수정&lt;/p&gt;
&lt;pre id=&quot;code_1772713378691&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim configuration.py&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772714110021&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALLOWED_HOSTS = ['*']

# PostgreSQL database configuration.
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',  # Database engine
        'NAME': 'netbox_db',
        'USER': 'netbox_user',
        'PASSWORD': 'YourStrongPassword',
        'HOST': 'localhost',
        'PORT': '',
        'CONN_MAX_AGE': 300,
    }
}

# Secure Key
SECRET_KEY = 'H@(A^i*BRcVfDp#Er&amp;amp;rje1fCidZZt_Pu$S0o95GhkMV5(b2UZ6'&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ALLOWED_HOSTS = ['*'] (또는 실제 도메인/IP)&lt;/li&gt;
&lt;li&gt;DATABASE 정보 (이름, 사용자, 비밀번호) 입력&lt;/li&gt;
&lt;li&gt;REDIS 설정 (기본값 유지 가능)&lt;/li&gt;
&lt;li&gt;SECRET_KEY = '복사한_키_입력'&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. NetBox 설치 및 관리자 계정 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NetBox에서 제공하는 설치 스크립트를 실행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772712222891&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo /opt/netbox/upgrade.sh&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;스크립트 작업 수행
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Python 가상환경 생성&lt;/li&gt;
&lt;li&gt;NetBox 의존성 패키지 설치&lt;/li&gt;
&lt;li&gt;데이터베이스 마이그레이션&lt;/li&gt;
&lt;li&gt;정적 파일 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1772766913726&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;You are installing (or upgrading to) NetBox version 4.5.4
Using Python 3.12.3
Creating a new virtual environment at /opt/netbox/venv...
Updating pip (pip install --upgrade pip)...
Requirement already satisfied: pip in ./venv/lib/python3.12/site-packages (24.0)
Collecting pip
  Downloading pip-26.0.1-py3-none-any.whl.metadata (4.7 kB)
Downloading pip-26.0.1-py3-none-any.whl (1.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 6.9 MB/s eta 0:00:00
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 24.0
    Uninstalling pip-24.0:
      Successfully uninstalled pip-24.0
Successfully installed pip-26.0.1
pip 26.0.1 from /opt/netbox/venv/lib/python3.12/site-packages/pip (python 3.12)
Installing Python system packages (pip install wheel)...
Collecting wheel
  Downloading wheel-0.46.3-py3-none-any.whl.metadata (2.4 kB)
...
Skipping config initialization (database unavailable)
Operations to perform:
  Apply all migrations: account, auth, circuits, contenttypes, core, dcim, django_rq, extras, ipam, sessions, social_django, taggit, tenancy, thumbnail, users, virtualization, vpn, wireless
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
...
Completed. Total entries: 7
Removing expired user sessions (python3 netbox/manage.py clearsessions)...
--------------------------------------------------------------------
WARNING: No existing virtual environment was detected. A new one has
been created. Update your systemd service files to reflect the new
Python and gunicorn executables. (If this is a new installation,
this warning can be ignored.)

netbox.service ExecStart:
  /opt/netbox/venv/bin/gunicorn

netbox-rq.service ExecStart:
  /opt/netbox/venv/bin/python

After modifying these files, reload the systemctl daemon:
  &amp;gt; systemctl daemon-reload
--------------------------------------------------------------------
Upgrade complete! Don't forget to restart the NetBox services:
  &amp;gt; sudo systemctl restart netbox netbox-rq&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관리자 계정 생성&lt;/p&gt;
&lt;pre id=&quot;code_1772713445024&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source /opt/netbox/venv/bin/activate
cd /opt/netbox/netbox&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772767519541&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python3 manage.py createsuperuser&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772767507275&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Username: admin
Email address: admin@scbyun.com
Password:
Password (again):
Superuser created successfully.&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772767750912&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;deactivate&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. 서비스 배포 (Gunicorn &amp;amp; Systemd)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gunicorn 설정 파일 복사&lt;/p&gt;
&lt;pre id=&quot;code_1772769485667&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NetBox 서비스를 Systemd에 등록합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772767617847&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ls -l /opt/netbox/contrib/*.service
-rw-r--r-- 1 root root 403 Mar  6 11:12 /opt/netbox/contrib/netbox-rq.service
-rw-r--r-- 1 root root 668 Mar  6 11:12 /opt/netbox/contrib/netbox.service&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772712247947&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo cp /opt/netbox/contrib/*.service /etc/systemd/system/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 활성화&lt;/p&gt;
&lt;pre id=&quot;code_1772712255066&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo systemctl enable --now netbox netbox-rq&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772767656623&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Created symlink /etc/systemd/system/multi-user.target.wants/netbox.service &amp;rarr; /etc/systemd/system/netbox.service.
Created symlink /etc/systemd/system/multi-user.target.wants/netbox-rq.service &amp;rarr; /etc/systemd/system/netbox-rq.service.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1772714268793&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl status netbox&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. 웹 서버(Nginx) 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 접속을 위해 Nginx를 Reverse Proxy로 구성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772712462334&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y gnupg2 ubuntu-keyring

curl -fsSL https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
  | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg &amp;gt;/dev/null

echo &quot;deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx&quot; \
  | sudo tee /etc/apt/sources.list.d/nginx.list

sudo apt update
sudo apt install -y nginx&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772767895991&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nginx -v&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772767902625&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nginx version: nginx/1.28.2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NetBox Niginx 설정 적용&lt;/p&gt;
&lt;pre id=&quot;code_1772712528026&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo cp /opt/netbox/contrib/nginx.conf /etc/nginx/conf.d/netbox.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자체 서명 인증서 생성하기 (HTTPS 유지)&lt;/p&gt;
&lt;pre id=&quot;code_1772768699145&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -p /opt/netbox/ssl

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /opt/netbox/ssl/key.pem \
  -out /opt/netbox/ssl/cert.pem \
  -subj &quot;/C=KR/ST=Seoul/L=Jongno-gu/O=SangChul Co., Ltd./OU=Infrastructure Team/CN=*.scbyun.com&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772769458462&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/nginx/conf.d/netbox.conf&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;pre id=&quot;code_1772770050266&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/nginx/conf.d/netbox.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772770059293&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server {
    # Redirect HTTP traffic to HTTPS
    listen 80 ipv6only=off;
    server_name netbox.scbyun.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl ipv6only=off;

    # CHANGE THIS TO YOUR SERVER'S NAME
    server_name netbox.scbyun.com;

    ssl_certificate /opt/netbox/ssl/cert.pem;
    ssl_certificate_key /opt/netbox/ssl/key.pem;

    client_max_body_size 25m;

    location /static/ {
        alias /opt/netbox/netbox/static/;
    }

    location / {
        # Remove these lines if using uWSGI instead of Gunicorn
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Uncomment these lines if using uWSGI instead of Gunicorn
        # include uwsgi_params;
        # uwsgi_pass  127.0.0.1:8001;
        # uwsgi_param Host $host;
        # uwsgi_param X-Real-IP $remote_addr;
        # uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
        # uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto;

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 확인&lt;/p&gt;
&lt;pre id=&quot;code_1772712564465&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nginx -t&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 재시작&lt;/p&gt;
&lt;pre id=&quot;code_1772712557167&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart nginx&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;9. NetBox 접속&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 브라우저에서 다음 주소로 접속합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772712580395&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://서버_IP&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bY7fJ4/dJMcagYWUqc/NOXOw8uKTXX7bh3fV7JQgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bY7fJ4/dJMcagYWUqc/NOXOw8uKTXX7bh3fV7JQgk/img.png&quot; data-alt=&quot;NetBox&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bY7fJ4/dJMcagYWUqc/NOXOw8uKTXX7bh3fV7JQgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbY7fJ4%2FdJMcagYWUqc%2FNOXOw8uKTXX7bh3fV7JQgk%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;860&quot; height=&quot;549&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;549&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NetBox&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;size14&quot;&gt;참고URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 변군이글루 블로그 : &lt;a href=&quot;https://scbyun.com/710903&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;우분투 24.04에 최신 버전의 Redis 서버를 설치하는 방법&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 변군이글루 블로그 : &lt;a href=&quot;https://scbyun.com/710968&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;우분투 24.04에서 PostgreSQL을 설치하는 방법&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 변군이글루 블로그 : &lt;a href=&quot;https://scbyun.com/710899&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;우분투 24.04에서 Nginx 1.28과 PHP 8.3을 설치하는 방법&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>netbox</category>
      <category>racktables</category>
      <category>랙테이블</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711102</guid>
      <comments>https://anti1346.tistory.com/711102#entry711102comment</comments>
      <pubDate>Thu, 5 Mar 2026 21:27:24 +0900</pubDate>
    </item>
    <item>
      <title>Docker Compose를 사용하여 NetBox를 설치하는 방법</title>
      <link>https://anti1346.tistory.com/711101</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Docker Compose를 사용하여 NetBox를 설치하는 방법&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 필수 패키지 및 Docker 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker와 Git을 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772590313015&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772590307435&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y git&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. NetBox Docker 레포지토리 복제&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식적으로 관리되는 netbox-docker 저장소를 가져옵니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772590321513&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git clone -b release https://github.com/netbox-community/netbox-docker.git
cd netbox-docker&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 환경 설정 (Configuration)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 설정 파일을 복사하여 활성화합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772590330725&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 설정 파일 생성
cp docker-compose.override.yml.example docker-compose.override.yml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후, env/netbox.env 파일을 열어 SECRET_KEY를 생성하여 넣어야 합니다. (최소 50자 이상의 랜덤 문자열)&lt;/p&gt;
&lt;pre id=&quot;code_1772590346528&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 랜덤 키 생성 (복사해서 netbox.env의 SECRET_KEY 부분에 넣으세요)
NEW_KEY=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 50 ; echo)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772609084526&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sed -i &quot;s|^SECRET_KEY=.*|SECRET_KEY=${NEW_KEY}|&quot; env/netbox.env&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변경 확인&lt;/p&gt;
&lt;pre id=&quot;code_1772609160575&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grep &quot;SECRET_KEY&quot; env/netbox.env&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 컨테이너 실행&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 모든 서비스를 백그라운드에서 실행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 실행 시 이미지를 내려받고 DB를 초기화하느라 시간이 약간(2~3분) 소요됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772590353825&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 data-ke-size=&quot;size16&quot;&gt;netbox 컨테이너 로그 확인&lt;/p&gt;
&lt;pre id=&quot;code_1772590400321&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker compose logs -f netbox&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772609022219&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
netbox-1  |   wireless.wirelesslan... No objects found.
netbox-1  |   wireless.wirelesslangroup... No objects found.
netbox-1  |   wireless.wirelesslink... No objects found.
netbox-1  | Completed. Total entries: 7
netbox-1  | ↩️ Skip creating the superuser
netbox-1  | ✅ Initialisation is done.
netbox-1  | [INFO] Starting granian (main PID: 8)
netbox-1  | [INFO] Listening at: http://:::8080
netbox-1  | [INFO] Spawning worker-1 with PID: 413
netbox-1  | [INFO] Spawning worker-2 with PID: 415
netbox-1  | [INFO] Spawning worker-3 with PID: 417
netbox-1  | [INFO] Spawning worker-4 with PID: 419&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;모든 컨테이너 중지 및 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1772590378797&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker compose down -v&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 관리자(Superuser) 계정 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 화면에 로그인하기 위해 관리자 계정을 만들어야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772590223179&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker compose exec netbox /opt/netbox/netbox/manage.py createsuperuser&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772590263225&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; loaded config '/etc/netbox/config/configuration.py'
 loaded config '/etc/netbox/config/extra.py'
 loaded config '/etc/netbox/config/logging.py'
 loaded config '/etc/netbox/config/plugins.py'
Username: admin
Email address: admin@scbyun.com
Password: 
Password (again): 
This password is too short. It must contain at least 12 characters.
Password must have at least one numeral.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 이름, 이메일, 비밀번호를 순서대로 입력하세요.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;웹 UI 접속&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저를 열고 아래 주소로 접속합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1772590214975&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://[서버_IP_주소]:8000&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>Rack</category>
      <category>Rack Elevation</category>
      <category>Racks</category>
      <category>랙 실장도</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711101</guid>
      <comments>https://anti1346.tistory.com/711101#entry711101comment</comments>
      <pubDate>Wed, 4 Mar 2026 11:15:55 +0900</pubDate>
    </item>
    <item>
      <title>HashiCorp Vault에서 MySQL 동적 계정 구성하는 방법</title>
      <link>https://anti1346.tistory.com/711100</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;HashiCorp Vault에서 MySQL 동적 계정(Dynamic Credentials) 구성하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 서버(111번)의 계정 관리를 Vault(141번~143번)에 위임하여, 클라이언트가 요청할 때마다 일회용 DB 계정을 발급하고 자동 회수하는 환경을 구축하는 방법입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. MySQL 서버 준비 (sshdServer: 192.168.0.111)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 생성&lt;/p&gt;
&lt;pre id=&quot;code_1771832406435&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir -p /docker-container/mysqld-server
cd /docker-container/mysqld-server&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker-compose.yml 작성&lt;/p&gt;
&lt;pre id=&quot;code_1771832416034&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim docker-compose.yml&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1771832426210&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;services:

  vault-mysql:
    image: mysql:8.0
    container_name: vault-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_password
    ports:
      - &quot;3306:3306&quot;
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 컨테이너 기동&lt;/p&gt;
&lt;pre id=&quot;code_1771832436869&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 컨테이너 실행&lt;/p&gt;
&lt;pre id=&quot;code_1771833432506&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d \
  --name vault-mysql \
  -e MYSQL_ROOT_PASSWORD=root_password \
  -p 3306:3306 \
  mysql:8.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vault용 관리자 계정 생성&lt;/p&gt;
&lt;pre id=&quot;code_1771833437815&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it vault-mysql mysql -uroot -proot_password -e &quot;
CREATE USER 'vault_admin'@'%' IDENTIFIED BY 'vault_admin_password';
GRANT ALL PRIVILEGES ON *.* TO 'vault_admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Vault 전용 MySQL 관리자 계정 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 컨테이너 접속&lt;/p&gt;
&lt;pre id=&quot;code_1771832448425&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it vault-mysql mysql -uroot -proot_password&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 계정 정리 (재설정)&lt;/p&gt;
&lt;pre id=&quot;code_1771832467798&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP USER IF EXISTS 'vault_admin'@'%';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vault 전용 관리자 계정 생성&lt;/p&gt;
&lt;pre id=&quot;code_1771832474204&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE USER 'vault_admin'@'%' IDENTIFIED BY 'vault_admin_password';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 권한 부여 (GRANT OPTION 필수)&lt;/p&gt;
&lt;pre id=&quot;code_1771832481049&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GRANT ALL PRIVILEGES ON *.* TO 'vault_admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계정 생성 확인&lt;/p&gt;
&lt;pre id=&quot;code_1771832487002&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT user, host FROM mysql.user WHERE user = 'vault_admin';&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Vault는 DB 사용자 생성/삭제 권한이 필요하므로 GRANT OPTION 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-HM5llrsBbDoYhVXx&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. Vault 서버 설정 (node141 - Active Node)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vault 로그인&lt;/p&gt;
&lt;pre id=&quot;code_1771832500341&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export VAULT_ADDR=&quot;https://vault1.scbyun.com:8200&quot;
export VAULT_TOKEN=&quot;hvs.2JkrW3kigeQX0YNlxNey5sda&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1771852322336&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault login $VAULT_TOKEN&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Database Secrets Engine 활성화&lt;/h4&gt;
&lt;pre id=&quot;code_1771832506786&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault secrets enable database&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이미 활성화되어 있다면 오류 메시지 출력되며 무시 가능&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;MySQL 연결 정보 등록 (Vault와 MySQL 연결)&lt;/h4&gt;
&lt;pre id=&quot;code_1771832519030&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault write database/config/my-mysql \
  plugin_name=mysql-database-plugin \
  connection_url=&quot;{{username}}:{{password}}@tcp(192.168.0.111:3306)/&quot; \
  allowed_roles=&quot;mysql-client-role&quot; \
  username=&quot;vault_admin&quot; \
  password=&quot;vault_admin_password&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;connection_url : MySQL 서버 주소&lt;/li&gt;
&lt;li&gt;allowed_roles : 해당 DB에서 허용할 Vault Role&lt;/li&gt;
&lt;li&gt;vault_admin : MySQL 사용자 생성 권한 보유 계정&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;MySQL 동적 계정 Role 생성&lt;/h4&gt;
&lt;pre id=&quot;code_1771832530565&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault write database/roles/mysql-client-role \
    db_name=my-mysql \
    creation_statements=&quot;
        CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}';
        GRANT ALL PRIVILEGES ON *.* TO '{{name}}'@'%';
    &quot; \
    default_ttl=&quot;1h&quot; \
    max_ttl=&quot;24h&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;db_name database/config에 등록한 이름&lt;/li&gt;
&lt;li&gt;creation_statements 사용자 생성 SQL&lt;/li&gt;
&lt;li&gt;default_ttl 기본 유효 시간&lt;/li&gt;
&lt;li&gt;max_ttl 최대 유효 시간&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;TTL 만료 시 Vault가 자동으로 계정 회수&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. SSH 클라이언트에서 동적 계정 발급 테스트&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vault 자격 증명 발급&lt;/p&gt;
&lt;pre id=&quot;code_1771832539154&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export VAULT_ADDR=&quot;https://vault1.scbyun.com:8200&quot;
export VAULT_TOKEN=&quot;hvs.2JkrW3kigeQX0YNlxNey5sda&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1771833539897&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vault read database/creds/mysql-client-role&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1771832553964&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Key                Value
---                -----
lease_id           database/creds/mysql-client-role/MgfhQs15Grx7byx2ov7uddjj
lease_duration     1h
lease_renewable    true
password           49l9lSAXAgRnSFX-SrtU
username           v-root-mysql-clie-hUIUuy3ICr0FTq&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 발급된 계정으로 MySQL 접속 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1771832563365&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql -h 192.168.0.111 -P 3306 \
  -u v-root-mysql-clie-hUIUuy3ICr0FTq -p&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상 접속 시 Vault &amp;harr; MySQL 동적 계정 구성 완료&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;원라이너(One-liner) 접속&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jq를 활용하여 발급과 동시에 접속하는 자동화 스크립트입니다.&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;jq 설치 확인&lt;/p&gt;
&lt;pre id=&quot;code_1771853403691&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install jq&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1771852205427&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREDS=$(vault read -format=json database/creds/mysql-client-role)
DB_USER=$(echo $CREDS | jq -r '.data.username')
DB_PASS=$(echo $CREDS | jq -r '.data.password')&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;pre id=&quot;code_1772080929863&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vault read -format=json database/creds/mysql-client-role
{
  &quot;request_id&quot;: &quot;c393fc0c-5615-1da8-a165-a3e488463728&quot;,
  &quot;lease_id&quot;: &quot;database/creds/mysql-client-role/RJadV58PN5PtMDib0zJ6bhb9&quot;,
  &quot;lease_duration&quot;: 3600,
  &quot;renewable&quot;: true,
  &quot;data&quot;: {
    &quot;password&quot;: &quot;3BK-7bXtQx6SNSzzUjjI&quot;,
    &quot;username&quot;: &quot;v-root-mysql-clie-kZJjEYPqwDDDPY&quot;
  },
  &quot;warnings&quot;: null,
  &quot;mount_type&quot;: &quot;database&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속&lt;/p&gt;
&lt;pre id=&quot;code_1771852216860&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql -h 192.168.0.111 -u$DB_USER -p$DB_PASS&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1772081059474&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.45 MySQL Community Server - GPL

Copyright (c) 2000, 2026, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql&amp;gt;&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;이렇게 구축하면 보안 사고 시에도 유출된 계정이 1시간 뒤면 쓸모없어지기 때문에 인프라 보안 수준이 획기적으로 올라갑니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>MySQL 접속 확인</category>
      <category>vault database</category>
      <category>Vault MySQL</category>
      <category>Vault 자격 증명</category>
      <category>Vault 자격 증명 발급</category>
      <category>동적 계정 발급</category>
      <author>변군이글루</author>
      <guid isPermaLink="true">https://anti1346.tistory.com/711100</guid>
      <comments>https://anti1346.tistory.com/711100#entry711100comment</comments>
      <pubDate>Mon, 23 Feb 2026 16:43:27 +0900</pubDate>
    </item>
  </channel>
</rss>