<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Posts on Tech Side Story</title>
        <link>https://tech.mdflare.com/post/</link>
        <description>Recent content in Posts on Tech Side Story</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ko</language>
        <lastBuildDate>Thu, 12 Feb 2026 16:00:00 +0900</lastBuildDate><atom:link href="https://tech.mdflare.com/post/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>ASCII Art: 이미지 없이 블로그 꾸미기</title>
            <link>https://tech.mdflare.com/post/2026-02-12-ascii-test/</link>
            <pubDate>Thu, 12 Feb 2026 16:00:00 +0900</pubDate>
            <guid>https://tech.mdflare.com/post/2026-02-12-ascii-test/</guid>
            <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    ___   _____ ______________   ___    ____  ______&#xA;   /   | / ___// ____/  _/  _/  /   |  / __ \/_  __/&#xA;  / /| | \__ \/ /    / / / /   / /| | / /_/ / / /   &#xA; / ___ |___/ / /____/ /_/ /   / ___ |/ _, _/ / /    &#xA;/_/  |_/____/\____/___/___/  /_/  |_/_/ |_| /_/     &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;이미지 대신 ASCII art를 쓰면 용량을 아끼고 로딩이 빨라진다&lt;/li&gt;&#xA;&lt;li&gt;figlet: 텍스트를 큰 글자로 변환 (18개 폰트)&lt;/li&gt;&#xA;&lt;li&gt;ascii-image-converter: 이미지를 ASCII로 변환 (braille, complex 등 다양한 옵션)&lt;/li&gt;&#xA;&lt;li&gt;asciiart.eu: 수작업 아트 아카이브&lt;/li&gt;&#xA;&lt;li&gt;기술블로그 대문에 쓰기 딱 좋다&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;왜-ascii-art인가&#34;&gt;왜 ASCII Art인가&#xA;&lt;/h2&gt;&lt;p&gt;블로그에 이미지를 넣으면 한 장에 수백 KB에서 수 MB까지 나간다. ASCII art는 텍스트 몇 줄이면 끝이다. 로딩 속도, 저장 용량, 렌더링 비용 전부 이긴다. 무엇보다 코드 블록 안에 들어가니까 기술블로그 분위기와 잘 맞는다.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-figlet---텍스트를-큰-글자로&#34;&gt;1. figlet - 텍스트를 큰 글자로&#xA;&lt;/h2&gt;&lt;p&gt;설치: &lt;code&gt;sudo apt install figlet&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;figlet -f slant &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HELLO&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;18가지 폰트를 비교해봤다.&lt;/p&gt;&#xA;&lt;h3 id=&#34;banner&#34;&gt;banner&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#     # ####### #       #       ####### &#xA;#     # #       #       #       #     # &#xA;#     # #       #       #       #     # &#xA;####### #####   #       #       #     # &#xA;#     # #       #       #       #     # &#xA;#     # #       #       #       #     # &#xA;#     # ####### ####### ####### ####### &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;big&#34;&gt;big&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; _    _ ______ _      _      ____  &#xA;| |  | |  ____| |    | |    / __ \ &#xA;| |__| | |__  | |    | |   | |  | |&#xA;|  __  |  __| | |    | |   | |  | |&#xA;| |  | | |____| |____| |___| |__| |&#xA;|_|  |_|______|______|______\____/ &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;slant&#34;&gt;slant&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    __  __________    __    ____ &#xA;   / / / / ____/ /   / /   / __ \&#xA;  / /_/ / __/ / /   / /   / / / /&#xA; / __  / /___/ /___/ /___/ /_/ / &#xA;/_/ /_/_____/_____/_____/\____/  &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;small&#34;&gt;small&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; _  _ ___ _    _    ___  &#xA;| || | __| |  | |  / _ \ &#xA;| __ | _|| |__| |_| (_) |&#xA;|_||_|___|____|____\___/ &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;future&#34;&gt;future&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;╻ ╻┏━╸╻  ╻  ┏━┓&#xA;┃━┃┣╸ ┃  ┃  ┃ ┃&#xA;╹ ╹┗━╸┗━╸┗━╸┗━┛&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;digital&#34;&gt;digital&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;+-+-+-+-+-+&#xA;|H|E|L|L|O|&#xA;+-+-+-+-+-+&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;bubble&#34;&gt;bubble&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  _   _   _   _   _  &#xA; / \ / \ / \ / \ / \ &#xA;( H | E | L | L | O )&#xA; \_/ \_/ \_/ \_/ \_/ &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;standard&#34;&gt;standard&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; _   _ _____ _     _     ___  &#xA;| | | | ____| |   | |   / _ \ &#xA;| |_| |  _| | |   | |  | | | |&#xA;|  _  | |___| |___| |__| |_| |&#xA;|_| |_|_____|_____|_____\___/ &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;shadow&#34;&gt;shadow&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; _   _|  ____|  _ \    |  &#xA; |   |  |      |   |   |  &#xA; ___ |  __|    |   |   |  &#xA;_|  _|_____|___|  ___|_____| &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;smblock&#34;&gt;smblock&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;▐▌▛▀▘▌  ▌  ▞▀▖&#xA;▐▌▙▄ ▌  ▌  ▌ ▌&#xA;▐▌▌  ▌  ▌  ▌ ▌&#xA;▐▌▀▀▘▀▀▘▀▀▘▝▀ &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-asciiarteu---수작업-아트-아카이브&#34;&gt;2. asciiart.eu - 수작업 아트 아카이브&#xA;&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.asciiart.eu&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://www.asciiart.eu&lt;/a&gt; 에는 수천 개의 수작업 ASCII art가 있다. 카테고리별로 블로그 대문에 쓸 수 있다.&lt;/p&gt;&#xA;&lt;h3 id=&#34;computer-by-joan-g-stark&#34;&gt;Computer (by Joan G. Stark)&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; .----.&#xA; .---------. | == |&#xA; |.-&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;-.| |----|&#xA; ||         || | == |&#xA; ||         || |----|&#xA; |&amp;#39;-......-&amp;#39;| |::::|&#xA; `&amp;#34;&amp;#34;)---(&amp;#34;&amp;#34;` |___.| &#xA; /:::::::::::\&amp;#34; _  &amp;#34;&#xA; /:::=======:::\`\`\&#xA; `&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;` &amp;#39;-&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;sick-computer-by-joan-g-stark&#34;&gt;Sick Computer (by Joan G. Stark)&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    _______&#xA;   |.-----.|&#xA;   ||x . x||&#xA;   ||_.-._||&#xA;   `--)-(--`&#xA;  __[=== o]___&#xA; |:::::::::::|\ &#xA; `-=========-`()&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;docker-whale&#34;&gt;Docker Whale&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;              ##        .            &#xA;        ## ## ##       ==            &#xA;     ## ## ## ##      ===            &#xA; /&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&amp;#34;\___/ ===        &#xA;{                      /  ===-      &#xA; \______ O           __/            &#xA;   \    \         __/               &#xA;    \____\_______/                  &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;linux-tux&#34;&gt;Linux Tux&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;       .--.&#xA;      |o_o |&#xA;      |:_/ |&#xA;     //   \ \&#xA;    (|     | )&#xA;   /&amp;#39;\_   _/`\&#xA;   \___)=(___/&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;laptop&#34;&gt;Laptop&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  +--------------+&#xA;  |.------------.|&#xA;  ||            ||&#xA;  ||            ||&#xA;  ||            ||&#xA;  ||            ||&#xA;  |+------------+|&#xA;  +-..--------..-+&#xA;  .--------------. &#xA; / /============\ \&#xA;/ /==============\ \&#xA;/____________________\&#xA;\____________________/&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;network&#34;&gt;Network&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;     +---+&#xA;     |   |&#xA;  +--+   +--+&#xA;  |          |&#xA;+-+--+    +--+-+&#xA;|    |    |    |&#xA;| PC |    | PC |&#xA;+----+    +----+&#xA;     \    /&#xA;      \  /&#xA;    +------+&#xA;    |ROUTER|&#xA;    +------+&#xA;       |&#xA;    +------+&#xA;    | WEB  |&#xA;    +------+&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;3-ascii-image-converter---이미지를-ascii로&#34;&gt;3. ascii-image-converter - 이미지를 ASCII로&#xA;&lt;/h2&gt;&lt;p&gt;설치: &lt;a class=&#34;link&#34; href=&#34;https://github.com/TheZoraiz/ascii-image-converter&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/TheZoraiz/ascii-image-converter&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;이미지 하나로 여러 스타일을 뽑을 수 있다. 방패 아이콘(512x512 PNG, 26KB)으로 비교했다.&lt;/p&gt;&#xA;&lt;h3 id=&#34;default&#34;&gt;default&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;         ...........        ..          &#xA;       ....:----------------:  ..       &#xA;    ....:=#@@@@@@@@@%%%%%%%%%*=.  .     &#xA;  ...:=#@@%*++++++++-------=+#%%*-...   &#xA;  ...-@@#+++++++++++----------=*@@- .   &#xA;  ...-@@++++++++++++-----------=%%- .   &#xA;  ...-@@++++++++++++----+%#=---=%%- .   &#xA;  ...-@@++++++++++++--+#@#+=---=%%- .   &#xA;  ...-@@+++++#%*+++++#@%+------=%%- .   &#xA;  ...-@@+++++#@@%**%@%+--------=%%- .   &#xA;  ...:%@#++++++#@@@@+----------*@#...   &#xA;   ...=@@*+++++++*#+----------+%%- ..   &#xA;    ...=@@#+++++++++---------*@%- ..    &#xA;     ...-#@%*+++++++-------=#@*: ..     &#xA;      ....=%@%*+++++-----+#@#=. .       &#xA;        ...:=%@@#+++--=*%@#=. ..        &#xA;          ....-*@@@#*#%%*-. ..          &#xA;            ....:=*%%+-.  .             &#xA;               ......  .                &#xA;                  ...                   &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;negative&#34;&gt;negative&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;@@@@@@@@@%%%%%%%%%%%@@@@@@@@%%@@@@@@@@@@&#xA;@@@@@@@%%%%#****************#@@%%@@@@@@@&#xA;@@@@%%%%#+:         .........-+%@@%@@@@@&#xA;@@%%%#+:  .-========*******+=:..-*%%%@@@&#xA;@@%%%*  :===========**********+-  *@%@@@&#xA;@@%%%*  ============***********+..*@%@@@&#xA;@@%%%*  ============****=.:+***+..*@%@@@&#xA;@@%%%*  ============**=: :=+***+..*@%@@@&#xA;@@%%%*  =====:.-=====: .=******+..*@%@@@&#xA;@@%%%*  =====:  .--. .=********+..*@%@@@&#xA;@@%%%#. :======:    =**********- :%%%@@@&#xA;@@@%%%+  -=======-:=**********=..*@%%@@@&#xA;@@@@%%%+  :=========*********- .*@%%@@@@&#xA;@@@@@%%%*: .-=======*******+: -#@%%@@@@@&#xA;@@@@@@%%%%+. .-=====*****=: :+%@%@@@@@@@&#xA;@@@@@@@@%%%#+.  :===**+-. :+%@%%@@@@@@@@&#xA;@@@@@@@@@@%%%%*-   :-:..-*%@%%@@@@@@@@@@&#xA;@@@@@@@@@@@@%%%%#+-..=*%@@%@@@@@@@@@@@@@&#xA;@@@@@@@@@@@@@@@%%%%%%@@%@@@@@@@@@@@@@@@@&#xA;@@@@@@@@@@@@@@@@@@%%%@@@@@@@@@@@@@@@@@@@&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;braille&#34;&gt;braille&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⣠⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠈⠙⠿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⠁⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⣠⣾⣷⡄⠀⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⣠⣾⣿⡿⠋⠀⠀⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣠⣾⣿⡿⠋⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⡿⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⠃⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⣠⣾⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⠀⠀⢀⣴⣾⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⣿⣿⣿⣿⣤⣾⣿⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠻⢿⡿⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;braille--dither&#34;&gt;braille + dither&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⣾⣯⡿⣿⣻⢿⣻⢿⣻⢿⣺⡺⣺⡺⣺⢺⡺⣮⡻⡦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⢀⣠⡶⣿⣻⢗⢏⢎⢲⠸⡘⡌⡎⡪⡪⠀⠄⢂⠠⠐⡀⠄⠄⠙⠽⣺⢽⣢⢄⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⢐⣯⣿⡫⡱⡑⡅⡇⡕⢕⢕⢱⢑⢕⢜⠀⠅⠄⠂⢂⠐⠠⢁⠁⡂⠌⢙⢾⢽⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⢐⣿⣽⢪⢸⢘⢌⢎⢜⠜⡌⡎⡪⡢⡣⢈⠐⡈⢐⠠⢈⠐⡀⢂⠐⠐⢐⡽⣽⠀⠀⢀⠀⠀⠀&#xA;⠀⠀⠀⠀⠁⠠⣿⣯⢣⢱⢑⢅⢇⢕⠕⡕⢜⢌⢆⢇⠂⡐⢀⠂⣰⡺⣦⢂⠐⡈⠨⢀⣟⢾⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠨⣿⣾⢱⢑⢕⢅⢇⢕⢕⢱⢑⢅⢇⢎⠄⢂⢰⢮⣗⡟⠊⡀⠂⠄⠡⠠⣯⣻⠀⠀⠄⠀⠀⠀&#xA;⠀⠀⠀⠀⠐⢈⣿⣾⢱⢑⢕⠜⡔⣵⣮⡪⡊⡎⢆⢇⢰⢼⣝⡗⠃⠄⠡⠀⠅⠨⠐⠐⡷⣽⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠐⣿⣾⡱⡑⡅⡇⣍⢻⢽⣿⣳⣜⢜⣼⢽⡳⠃⠄⠡⠈⠄⠡⠈⠄⠡⢈⣟⢾⠀⠀⢀⠀⠀⠀&#xA;⠀⠀⠀⠀⠁⠀⢿⣻⣎⢎⢪⢸⠰⡑⡕⡝⣯⣿⣟⡿⠩⠐⠈⠄⠡⠈⠄⠡⠁⠌⡈⣰⢽⡝⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⢀⠀⠘⣿⣽⣎⢪⢢⠣⡣⢣⠪⡢⡫⢏⢎⠂⡁⠡⠈⠄⠡⠁⠌⠠⢁⢰⣝⡷⠁⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠘⢿⣾⢮⢢⢣⠣⡣⢣⠣⡪⢪⢒⢀⠂⠡⠈⠄⠡⠈⠄⡁⣢⣟⡮⠃⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠄⠀⠈⢻⡿⣷⣅⢇⢣⠣⡃⡇⡣⡣⠐⡈⠄⠡⠈⠄⠡⢡⢮⣳⠗⠁⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠙⢯⣿⢾⣌⢎⢎⢪⢪⠸⢀⠐⡈⠄⡁⢅⡮⡯⡗⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣻⡷⣎⡎⢆⢫⠀⢂⢐⡰⡮⣯⠯⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠈⠻⢿⣻⣷⣕⡬⣲⢽⡽⠝⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⠉⠳⢿⠽⠚⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;complex&#34;&gt;complex&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;        `:i!llllllll,,,,,,,,::&amp;#34;.        &#xA;     .,lill-|((||||(}[[[[[[[&amp;lt;,,::^.     &#xA;  .&amp;#34;Iill_rpBB8%888%8aaaaaaa*#O\i,,:,`.  &#xA;  Iii&amp;lt;tZ8$#Ocvvvvvvu|||||||/zpMoJ)l;;,  &#xA;  I&amp;gt;l($$wznnuuuuuuun(((((((())/JW&amp;amp;[,;,  &#xA;  I&amp;gt;l(@8cuvvuuuuuuvu|(|()()(||)/a#[,I,  &#xA;  I&amp;gt;l($%Yuvuuvvvuuvu|()(ckw/(((joM[,I,  &#xA;  I&amp;gt;l($%Xuvuunuuvvvu()vb&amp;amp;bz\(()foM[,I,  &#xA;  I&amp;gt;l($%XuvucdhUuuunvd&amp;amp;kc()((()foM[,I,  &#xA;  I&amp;gt;l($%Xuvucp%$oJC*&amp;amp;kc()(|((((foM[,;,  &#xA;  :&amp;gt;i~#$mnvuuncZ&amp;amp;$$&amp;amp;X()(|((((|1UWd!:;^  &#xA;  .i&amp;gt;l\@@QnuvvunuOmu((|((((|(1v#M{,I:   &#xA;   `i&amp;gt;l/%$wuuvvvuuuu|(((((()(J&amp;amp;o1,I;&amp;#39;   &#xA;    `!&amp;gt;l[d$MCnuuvvvu|((|())xb%O+,I:&amp;#39;    &#xA;     .I&amp;gt;!!rM$#Lnnuvu|()1)np8b\:,I,.     &#xA;       ^!&amp;gt;l&amp;lt;xo$8qXnn)1fJhWq/I&amp;#34;;:`       &#xA;         &amp;#34;!ili(0&amp;amp;$WwJbMaU[:&amp;#34;::`         &#xA;           ^Ii!l~/0#kY1l&amp;#34;,:,&amp;#39;           &#xA;             .&amp;#34;I!ll&amp;gt;I&amp;#34;,:,^.             &#xA;                .&amp;#34;Il:,`.                &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;custom-map--&#34;&gt;custom map: &lt;code&gt; ░▒▓█&lt;/code&gt;&#xA;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;                                        &#xA;           ░░░░░░░░░░░░░░░░░░           &#xA;        ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒         &#xA;     ░▒▒▒░░░░░░░▒▒░      &#xA;     ░▒▒░░░░░░░░░░▒▒░     &#xA;     ░▒▒░░░░░░░░░░░▒▒░     &#xA;     ░▒▒░░░░▒░░░▒▒░     &#xA;     ░▒▒░░▒░░░▒▒░     &#xA;     ░▒▒▒▒▒░░░░░░▒▒░     &#xA;     ░▒▒▒▒▒▒▒▒░░░░░░░░▒▒░     &#xA;     ░▒▒▒▒▒▒░░░░░░░░░░▒      &#xA;      ▒▒░░░░░░░░░░▒▒░      &#xA;       ▒▒░░░░░░░░░▒▒░       &#xA;        ░▒▒░░░░░░░▒░        &#xA;          ▒▒▒░░░░░▒          &#xA;           ░▒▒▒░░▒▒            &#xA;              ░▒▒▒▒▒░              &#xA;                ░▒▒░                 &#xA;                                        &#xA;                                        &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;wrap-up&#34;&gt;Wrap Up&#xA;&lt;/h2&gt;&lt;p&gt;이미지 한 장이 수백 KB를 먹을 때, ASCII art는 수백 바이트면 충분하다. CDN도 필요 없고, 느린 네트워크에서도 즉시 렌더링된다. 무엇보다 코드와 텍스트로 이루어진 기술블로그에서 이질감 없이 녹아든다.&lt;/p&gt;&#xA;&lt;p&gt;물론 한계는 있다. 사진이나 스크린샷을 완전히 대체할 수는 없고, 모바일에서 가로 스크롤이 생기기도 한다. 결국 어디에 어떤 형태의 시각 요소를 쓸지는 선택의 문제다.&lt;/p&gt;&#xA;&lt;p&gt;나는 slant가 좋아 보이는데. 여러분은 어떤게 마음에 드시나요?&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>VPS 보안 기초: 방화벽과 포트 관리</title>
            <link>https://tech.mdflare.com/post/2026-02-12-first/</link>
            <pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate>
            <guid>https://tech.mdflare.com/post/2026-02-12-first/</guid>
            <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;@@@@@@@@@@%%%%%%%%%%%@@@@@@@@%%@@@@@@@@@@&#xA;@@@@@@@%%%%#****************#@@%%@@@@@@@&#xA;@@@@%%%%#+:         .........-+%@@%@@@@@&#xA;@@%%%#+:  .-========*******+=:..-*%%%@@@&#xA;@@%%%*  :===========**********+-  *@%@@@&#xA;@@%%%*  ============***********+..*@%@@@&#xA;@@%%%*  ============****=.:+***+..*@%@@@&#xA;@@%%%*  ============**=: :=+***+..*@%@@@&#xA;@@%%%*  =====:.-=====: .=******+..*@%@@@&#xA;@@%%%*  =====:  .--. .=********+..*@%@@@&#xA;@@%%%#. :======:    =**********- :%%%@@@&#xA;@@@%%%+  -=======-:=**********=..*@%%@@@&#xA;@@@@%%%+  :=========*********- .*@%%@@@@&#xA;@@@@@%%%*: .-=======*******+: -#@%%@@@@@&#xA;@@@@@@%%%%+. .-=====*****=: :+%@%@@@@@@@&#xA;@@@@@@@@%%%#+.  :===**+-. :+%@%%@@@@@@@@&#xA;@@@@@@@@@@%%%%*-   :-:..-*%@%%@@@@@@@@@@&#xA;@@@@@@@@@@@@%%%%#+-..=*%@@%@@@@@@@@@@@@@&#xA;@@@@@@@@@@@@@@@%%%%%%@@%@@@@@@@@@@@@@@@@&#xA;@@@@@@@@@@@@@@@@@@%%%@@@@@@@@@@@@@@@@@@@&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;방화벽(UFW) 없이 서버 운영하고 있었다 — 위험&lt;/li&gt;&#xA;&lt;li&gt;외부에 Dokploy(3000), WordPress(8080/8081), Docker Swarm(2377/7946) 노출 상태&lt;/li&gt;&#xA;&lt;li&gt;wp-login.php 브루트포스 공격이 IP 직접 접근으로 들어오고 있었음&lt;/li&gt;&#xA;&lt;li&gt;UFW 켜서 SSH(22)만 허용, 나머지 전부 차단&lt;/li&gt;&#xA;&lt;li&gt;Cloudflare Tunnel 경유 서비스는 영향 없음 (localhost 통신)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;오늘-배운-것&#34;&gt;오늘 배운 것&#xA;&lt;/h2&gt;&lt;p&gt;VPS 서버의 기본 보안을 설정했다. 방화벽 없이 운영되고 있던 서버에 UFW를 적용하고, 불필요한 포트를 차단했다.&lt;/p&gt;&#xA;&lt;h2 id=&#34;현재-상태-파악&#34;&gt;현재 상태 파악&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ss -tlnp | grep -v &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;127.0.0&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;외부에 노출된 포트를 확인하니 SSH(22), sslh(443) 외에도 Dokploy(3000), WordPress(8080, 8081), Docker Swarm(2377, 7946)이 열려 있었다.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;포트    서비스           필요    위험도&#xA;──────────────────────────────────────&#xA;22      SSH              O      브루트포스 (fail2ban 있음)&#xA;443     sslh → SSH       O      회사 우회용&#xA;3000    Dokploy          X      관리패널 노출&#xA;8080    WP 한국어        X      직접 노출 불필요&#xA;8081    WP 영어          X      직접 노출 불필요&#xA;2377    Docker Swarm     X      클러스터 관리 포트&#xA;7946    Docker Swarm     X      노드 통신 포트&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;WordPress 로그를 확인하니 외부 IP에서 직접 wp-login.php를 때리고 있었다.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;161.35.157.115 - POST /wp-login.php  ← 반복 브루트포스&#xA;159.223.228.106 - POST /wp-login.php ← 반복 브루트포스&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;ufw-설정&#34;&gt;UFW 설정&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;6&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;7&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;8&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 필요한 포트만 허용&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo ufw allow 22/tcp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 방화벽 활성화&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo ufw --force enable&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 확인&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo ufw status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Status: active&#xA;&#xA;To                         Action      From&#xA;--                         ------      ----&#xA;22/tcp                     ALLOW       Anywhere&#xA;22/tcp (v6)                ALLOW       Anywhere (v6)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cloudflare-tunnel과의-관계&#34;&gt;Cloudflare Tunnel과의 관계&#xA;&lt;/h2&gt;&lt;p&gt;Cloudflare Tunnel을 사용하면 웹 서비스는 터널 경유로 접근한다. 터널 데몬(cloudflared)이 localhost에서 각 서비스로 연결하므로 외부 포트를 열 필요가 없다.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[사용자] → Cloudflare Edge → Tunnel → localhost:3000 (Dokploy)&#xA;                                    → localhost:8080 (WP KO)&#xA;                                    → localhost:8081 (WP EN)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;UFW가 차단하는 건 IP 직접 접근뿐이다. 도메인 경유 접근은 터널을 타므로 영향 없음.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ssh-포트-변경&#34;&gt;SSH 포트 변경&#xA;&lt;/h2&gt;&lt;p&gt;기존에 sslh를 통해 443 포트로 SSH를 우회하는 구조였는데, Cloudflare Tunnel로 SSH 접속이 가능해지면서 표준 포트(22)로 변경했다.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# /etc/ssh/sshd_config&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Port &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PermitRootLogin prohibit-password&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;wrap-up&#34;&gt;Wrap Up&#xA;&lt;/h2&gt;&lt;p&gt;방화벽 설정은 서버 운영의 가장 기본적인 보안 조치다. 하지만 오늘 실제로 경험해보니, &amp;ldquo;기본&amp;quot;이라는 말이 &amp;ldquo;쉽다&amp;quot;는 뜻은 아니었다.&lt;/p&gt;&#xA;&lt;p&gt;UFW를 켜기 전에 열린 포트를 확인했을 때, Docker Swarm 관리 포트(2377, 7946)까지 외부에 노출되어 있었다. Docker가 자체적으로 iptables 규칙을 추가하기 때문에, UFW만으로는 Docker 컨테이너의 포트 노출을 완전히 제어할 수 없다. 이 부분은 별도로 다뤄야 할 주제다.&lt;/p&gt;&#xA;&lt;p&gt;한 가지 더 생각해볼 것: Cloudflare Tunnel을 사용하면 사실상 외부에 포트를 열 필요가 없어진다. 그렇다면 SSH(22)마저도 터널로 대체하고 모든 포트를 닫아버리는 것이 궁극적인 방향일까? 포트가 하나도 열려있지 않은 서버 — 매력적이지만, 터널 서비스 자체에 장애가 나면 접근 방법이 사라진다는 리스크도 함께 안게 된다.&lt;/p&gt;&#xA;&lt;p&gt;보안은 결국 편의와 안전 사이의 트레이드오프다. 중요한 건 그 균형점을 의식적으로 선택하는 것이다.&lt;/p&gt;&#xA;&lt;p&gt;다른 사람들은 이 균형을 어디에 두고 있을까. SSH 포트는 22번 그대로 쓰는 걸까, 바꾸는 걸까. 터널만 믿고 포트를 다 닫아버린 사람도 있을까.&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
