<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Joinsoo &#8211; My Pi</title>
	<atom:link href="https://korduck.duckdns.org/author/joinsoo/feed/" rel="self" type="application/rss+xml" />
	<link>https://korduck.duckdns.org</link>
	<description>Raspberry Pi, Knowledge, Journey</description>
	<lastBuildDate>Sun, 22 Jun 2025 22:52:03 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.1</generator>
	<item>
		<title>DokuWiki Hotfix &#038; Upgrade Installation</title>
		<link>https://korduck.duckdns.org/327/</link>
					<comments>https://korduck.duckdns.org/327/#respond</comments>
		
		<dc:creator><![CDATA[Joinsoo]]></dc:creator>
		<pubDate>Sun, 22 Jun 2025 22:52:03 +0000</pubDate>
				<category><![CDATA[Raspberry Pi]]></category>
		<guid isPermaLink="false">https://korduck.duckdns.org/?p=327</guid>

					<description><![CDATA[Hotfix release available: 2025-05-14a &#8220;Librarian&#8221;. upgrade now! [56.1] (what&#8217;s this?) 📌 1. 먼저 백업하기 (필수) 업그레이드 전 전체 백업을 꼭 하세요: sudo cp -a /var/www/html/dokuwiki /home/pi/dokuwiki_backup_$(date +%Y%m%d) 📌 2. 최신 버전 다운로드 공식 사이트 또는 명령어로 다운로드합니다: cd /tmp wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz 📌 3. 압축 해제 tar -xvzf dokuwiki-stable.tgz cd dokuwiki-* 📌 4. 기존 설치 디렉토리에 ... <a title="DokuWiki Hotfix &#038; Upgrade Installation" class="read-more" href="https://korduck.duckdns.org/327/" aria-label="DokuWiki Hotfix &#038; Upgrade Installation에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[<p><strong>Hotfix release available: 2025-05-14a &#8220;Librarian&#8221;. upgrade now! [56.1] (what&#8217;s this?)</strong></p>
<p><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="210" data-end="229">1. 먼저 백업하기 (필수)</strong><br />
업그레이드 전 <strong data-start="238" data-end="247">전체 백업</strong>을 꼭 하세요:<br />
sudo cp -a /var/www/html/dokuwiki /home/pi/dokuwiki_backup_$(date +%Y%m%d)</p>
<p><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="511" data-end="528">2. 최신 버전 다운로드</strong></p>
<pre>공식 사이트 또는 명령어로 다운로드합니다:
cd /tmp
wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz

&#x1f4cc; <strong data-start="735" data-end="747">3. 압축 해제</strong>
tar -xvzf dokuwiki-stable.tgz
cd dokuwiki-*

&#x1f4cc; <strong data-start="817" data-end="840">4. 기존 설치 디렉토리에 덮어쓰기</strong>
sudo cp -r * /var/www/html/dokuwiki/

</pre>
<p data-start="891" data-end="921"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 단, 아래 디렉토리는 <strong data-start="906" data-end="920">덮어쓰면 안 됩니다</strong>:</p>
<ul data-start="922" data-end="1006">
<li data-start="922" data-end="931">
<p data-start="924" data-end="931"><code data-start="924" data-end="931">conf/</code></p>
</li>
<li data-start="932" data-end="941">
<p data-start="934" data-end="941"><code data-start="934" data-end="941">data/</code></p>
</li>
<li data-start="942" data-end="979">
<p data-start="944" data-end="979"><code data-start="944" data-end="958">lib/plugins/</code> (특히 외부 플러그인 사용 중이라면)</p>
</li>
<li data-start="980" data-end="1006">
<p data-start="982" data-end="1006"><code data-start="982" data-end="992">lib/tpl/</code> (사용자 정의 테마라면)</p>
</li>
</ul>
<p data-start="1008" data-end="1029"><strong data-start="1008" data-end="1029">따라서 rsync를 추천합니다:</strong></p>
<pre data-start="1008" data-end="1029">sudo rsync -av --exclude=data --exclude=conf --exclude=lib/plugins --exclude=lib/tpl ./ /var/www/html/dokuwiki/</pre>
<pre>&#x1f4cc; <strong data-start="1167" data-end="1180">5. 권한 재설정</strong>
sudo chown -R www-data:www-data /var/www/html/dokuwiki

</pre>
<h3 data-start="1254" data-end="1275"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="1261" data-end="1275">6. 설치 후 확인</strong></h3>
<p data-start="1276" data-end="1357">웹브라우저에서 DokuWiki 메인 페이지 접속 → 버전 확인<br data-start="1310" data-end="1313" />하단에 <code data-start="1317" data-end="1344">"2025-05-14a 'Librarian'"</code>이 표시되면 성공입니다.</p>
<pre>

</pre>
<pre>




</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://korduck.duckdns.org/327/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AdGuard + PiVPN(wireguard) 설치</title>
		<link>https://korduck.duckdns.org/288/</link>
					<comments>https://korduck.duckdns.org/288/#respond</comments>
		
		<dc:creator><![CDATA[Joinsoo]]></dc:creator>
		<pubDate>Tue, 22 Apr 2025 08:02:06 +0000</pubDate>
				<category><![CDATA[Raspberry Pi]]></category>
		<guid isPermaLink="false">https://korduck.duckdns.org/?p=288</guid>

					<description><![CDATA[✅ 1. 시스템 준비 sudo apt update &#38;&#38; sudo apt upgrade -y sudo apt install curl wget git -y ✅ 2. AdGuard Home 설치 cd /opt sudo wget https://static.adguard.com/adguardhome/release/AdGuardHome_linux_armv7.tar.gz sudo tar -xvf AdGuardHome_linux_armv7.tar.gz cd AdGuardHome sudo ./AdGuardHome -s install 설치 후, 웹 GUI 주소는: http://&#60;라즈베리파이 IP&#62;:3000 초기 설정 마법사를 통해 관리자 계정과 포트 등을 설정하세요. ... <a title="AdGuard + PiVPN(wireguard) 설치" class="read-more" href="https://korduck.duckdns.org/288/" aria-label="AdGuard + PiVPN(wireguard) 설치에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[<h2 class="" data-start="151" data-end="165"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 1. 시스템 준비</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo apt update &amp;&amp; sudo apt upgrade -y<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo apt install curl wget git -y<br />
</code></div>
</div>
<hr class="" data-start="253" data-end="256" />
<h2 class="" data-start="258" data-end="281"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 2. AdGuard Home 설치</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash"><span class="hljs-built_in">cd</span> /opt<br />
sudo wget https://static.adguard.com/adguardhome/release/AdGuardHome_linux_armv7.tar.gz<br />
sudo tar -xvf AdGuardHome_linux_armv7.tar.gz<br />
<span class="hljs-built_in">cd</span> AdGuardHome<br />
sudo ./AdGuardHome -s install<br />
</code></div>
</div>
<p class="" data-start="482" data-end="498">설치 후, 웹 GUI 주소는:</p>
<ul data-start="499" data-end="524">
<li class="" data-start="499" data-end="524">
<p class="" data-start="501" data-end="524">http://&lt;라즈베리파이 IP&gt;:3000</p>
</li>
</ul>
<blockquote data-start="526" data-end="566">
<p class="" data-start="528" data-end="566"><strong data-start="528" data-end="541">초기 설정 마법사</strong>를 통해 관리자 계정과 포트 등을 설정하세요.</p>
</blockquote>
<p data-start="528" data-end="566">
<h2 class="" data-start="222" data-end="234"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 전체 구성도</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-text">[스마트폰/노트북]<br />
      │ WireGuard VPN<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-text">             ▼<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-text">[Raspberry Pi (PiVPN + AdGuard Home)]<br />
      │<br />
  AdGuard DNS 필터링<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-text">             ▼<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-text">[인터넷 (업스트림 DNS)]<br />
</code></div>
</div>
<div dir="ltr"></div>
<div dir="ltr">
<h2 class="" data-start="758" data-end="787"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 3. PiVPN (WireGuard) 설치</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">curl -L https://install.pivpn.io | bash<br />
</code></div>
</div>
<p class="" data-start="842" data-end="853">설치 중 주의할 점:</p>
<ul data-start="855" data-end="983">
<li class="" data-start="855" data-end="881">
<p class="" data-start="857" data-end="881">VPN 타입: <strong data-start="865" data-end="878">WireGuard</strong> 선택</p>
</li>
<li class="" data-start="882" data-end="905">
<p class="" data-start="884" data-end="905">Local user: <code data-start="896" data-end="900">pi</code> (기본)</p>
</li>
<li class="" data-start="906" data-end="929">
<p class="" data-start="908" data-end="929">포트: 기본값 <strong data-start="916" data-end="929">51820 UDP</strong></p>
</li>
<li class="" data-start="930" data-end="983">
<p class="" data-start="932" data-end="983">DNS 서버로 <strong data-start="940" data-end="974">AdGuard Home의 IP (예: 10.6.0.1)</strong> 선택 (중요!)</p>
</li>
</ul>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash"><span class="hljs-comment"># 클라이언트 생성</span><br />
pivpn add<br />
</code></div>
</div>
<p class="" data-start="1019" data-end="1066">생성된 <code data-start="1023" data-end="1030">.conf</code> 파일은 스마트폰이나 노트북 WireGuard 앱에서 사용 가능.</p>
</div>
<p data-start="1019" data-end="1066">
<p data-start="1019" data-end="1066">
]]></content:encoded>
					
					<wfw:commentRss>https://korduck.duckdns.org/288/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Raspberry Pi + zram</title>
		<link>https://korduck.duckdns.org/272/</link>
					<comments>https://korduck.duckdns.org/272/#respond</comments>
		
		<dc:creator><![CDATA[Joinsoo]]></dc:creator>
		<pubDate>Wed, 09 Apr 2025 00:00:31 +0000</pubDate>
				<category><![CDATA[Raspberry Pi]]></category>
		<guid isPermaLink="false">https://korduck.duckdns.org/?p=272</guid>

					<description><![CDATA[✅ 1. zram-tools 설치 sudo apt update sudo apt install zram-tools ✅ 2. 기본 설정 확인 및 편집 (선택 사항) zram-tools는 /etc/default/zramswap 파일을 설정파일로 사용합니다. sudo nano /etc/default/zramswap 기본 설정은 다음과 비슷할 수 있습니다: # /etc/default/zramswap # 압축 알고리즘 (zstd, lz4, lzo 중 선택) ALGO=zstd # zram으로 사용할 총 메모리 크기 비율 (예: 50% → ... <a title="Raspberry Pi + zram" class="read-more" href="https://korduck.duckdns.org/272/" aria-label="Raspberry Pi + zram에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[<h3 class="" data-start="138" data-end="162"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 1. <code data-start="147" data-end="159">zram-tools</code> 설치</h3>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo apt update<br />
sudo apt install zram-tools<br />
</code></div>
</div>
<hr class="" data-start="220" data-end="223" />
<h3 class="" data-start="225" data-end="255"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 2. 기본 설정 확인 및 편집 (선택 사항)</h3>
<p class="" data-start="257" data-end="311"><code data-start="257" data-end="269">zram-tools</code>는 <code data-start="271" data-end="294">/etc/default/zramswap</code> 파일을 설정파일로 사용합니다.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute right-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo nano /etc/default/zramswap<br />
</code></div>
</div>
<p class="" data-start="358" data-end="380">기본 설정은 다음과 비슷할 수 있습니다:</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr">
<p><code class="whitespace-pre! language-bash"><span class="hljs-comment"># /etc/default/zramswap</span></code></p>
<p><span class="hljs-comment"># 압축 알고리즘 (zstd, lz4, lzo 중 선택)</span><br />
ALGO=zstd</p>
<p><span class="hljs-comment"># zram으로 사용할 총 메모리 크기 비율 (예: 50% → 0.5)</span><br />
PERCENT=50</p>
<p><span class="hljs-comment"># 코어 수 자동 설정 (기본값 0이면 자동)</span><br />
PRIORITY=100</p>
</div>
</div>
<p class="" data-start="554" data-end="564"><strong data-start="554" data-end="564">권장 설정:</strong></p>
<ul data-start="565" data-end="673">
<li class="" data-start="565" data-end="595">
<p class="" data-start="567" data-end="595"><code data-start="567" data-end="578">ALGO=zstd</code>: 속도와 압축률의 균형이 좋음</p>
</li>
<li class="" data-start="596" data-end="642">
<p class="" data-start="598" data-end="642"><code data-start="598" data-end="610">PERCENT=50</code> 또는 <code data-start="614" data-end="618">75</code>: 램의 절반 또는 3/4만큼 zram 생성</p>
</li>
<li class="" data-start="643" data-end="673">
<p class="" data-start="645" data-end="673"><code data-start="645" data-end="659">PRIORITY=100</code>: swap 우선순위 설정</p>
</li>
</ul>
<hr class="" data-start="675" data-end="678" />
<h3 class="" data-start="680" data-end="708"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 3. 서비스 시작 및 부팅 시 자동 실행</h3>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo systemctl <span class="hljs-built_in">enable</span> zramswap.service<br />
sudo systemctl start zramswap.service<br />
</code></div>
</div>
<hr class="" data-start="800" data-end="803" />
<h3 class="" data-start="805" data-end="819"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 4. 동작 확인</h3>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">swapon --show<br />
</code></div>
</div>
<p class="" data-start="848" data-end="854">예시 출력:</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!"><span class="hljs-type">NAME</span>       <span class="hljs-keyword">TYPE</span>      SIZE   USED PRIO<br />
/dev/zram0 <span class="hljs-keyword">partition</span>  <span class="hljs-number">512</span>M     <span class="hljs-number">0</span>B  <span class="hljs-number">100</span><br />
</code></div>
</div>
<p class="" data-start="941" data-end="978">또는 <code data-start="944" data-end="953">free -h</code> 명령으로 swap이 활성화된 것 확인 가능.</p>
<hr class="" data-start="980" data-end="983" />
<h3 class="" data-start="985" data-end="996"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 참고 팁</h3>
<ul data-start="998" data-end="1107">
<li class="" data-start="998" data-end="1048">
<p class="" data-start="1000" data-end="1048"><code data-start="1000" data-end="1006">zram</code>은 <strong data-start="1008" data-end="1044">기존 SD카드 기반 swap보다 훨씬 빠르며 수명에도 유리</strong>합니다.</p>
</li>
<li class="" data-start="1049" data-end="1107">
<p class="" data-start="1051" data-end="1107"><code data-start="1051" data-end="1067">dphys-swapfile</code> 같은 기존 swap 관리 시스템은 <strong data-start="1087" data-end="1095">비활성화</strong>하는 것을 추천합니다:</p>
</li>
</ul>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo systemctl <span class="hljs-built_in">disable</span> --now dphys-swapfile</code></div>
</div>
<div dir="ltr"></div>
<div dir="ltr"></div>
<div dir="ltr">
<h2 class="" data-start="585" data-end="618"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 실전 예: 라즈베리파이 4 (4GB RAM 기준)</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo nano /etc/default/zramswap<br />
</code></div>
</div>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div dir="ltr"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-ini"><span class="hljs-attr">ALGO</span>=zstd<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-ini"><span class="hljs-attr">PERCENT</span>=<span class="hljs-number">50</span></code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-ini"><span class="hljs-attr">PRIORITY</span>=<span class="hljs-number">100</span></code></div>
</div>
<p class="" data-start="711" data-end="751">→ 약 2GB 정도의 압축된 zram 스왑 생성됨. 충분히 효율적입니다.</p>
</div>
<p data-start="711" data-end="751">
<h2 class="" data-start="157" data-end="182"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 1. 기존 zram 정리 및 비활성화</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash"><span class="hljs-comment"># 모든 zram swap 비활성화</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo swapoff /dev/zram*<br />
</code></div>
<div dir="ltr"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash"><span class="hljs-comment"># zramswap 서비스 중지 및 비활성화</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo systemctl stop zramswap<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo systemctl <span class="hljs-built_in">disable</span> zramswap<br />
</code></div>
</div>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div dir="ltr"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash"><span class="hljs-comment"># zram 블록 디바이스 해제</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash"><span class="hljs-built_in">echo</span> 1 | sudo <span class="hljs-built_in">tee</span> /sys/block/zram0/reset<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash"><span class="hljs-built_in">echo</span> 1 | sudo <span class="hljs-built_in">tee</span> /sys/block/zram1/reset<br />
</code></div>
</div>
<blockquote data-start="441" data-end="490">
<p class="" data-start="443" data-end="490">디바이스 번호는 사용 중인 수만큼 반복해주세요 (<code data-start="470" data-end="477">zram0</code>, <code data-start="479" data-end="486">zram1</code>, …)</p>
</blockquote>
<hr class="" data-start="492" data-end="495" />
<h2 class="" data-start="497" data-end="513"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 2. 설정 파일 제거</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo <span class="hljs-built_in">rm</span> -f /etc/default/zramswap<br />
</code></div>
</div>
<hr class="" data-start="561" data-end="564" />
<h2 class="" data-start="566" data-end="591"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 3. zram-tools 패키지 제거</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo apt purge zram-tools<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo apt autoremove<br />
</code></div>
</div>
<hr class="" data-start="652" data-end="655" />
<h2 class="" data-start="657" data-end="685"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 4. 재부팅 (깨끗한 상태로 만들기 위해)</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo reboot<br />
</code></div>
</div>
<hr class="" data-start="712" data-end="715" />
<h2 class="" data-start="717" data-end="733"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 5. zram 재설치</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo apt update<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo apt install zram-tools<br />
</code></div>
</div>
<hr class="" data-start="792" data-end="795" />
<h2 class="" data-start="797" data-end="813"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 6. 설정 파일 작성</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo nano /etc/default/zramswap<br />
</code></div>
</div>
<p class="" data-start="860" data-end="879">예시 설정 (4GB RAM 기준):</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-ini"><span class="hljs-attr">ALGO</span>=zstd<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-ini"><span class="hljs-attr">PERCENT</span>=<span class="hljs-number">50</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-ini"><span class="hljs-attr">PRIORITY</span>=<span class="hljs-number">100</span><br />
</code></div>
</div>
<hr class="" data-start="927" data-end="930" />
<h2 class="" data-start="932" data-end="952"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 7. 서비스 시작 및 활성화</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo systemctl <span class="hljs-built_in">enable</span> zramswap<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">sudo systemctl start zramswap<br />
</code></div>
</div>
<hr class="" data-start="1028" data-end="1031" />
<h2 class="" data-start="1033" data-end="1049"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 8. 정상 동작 확인</h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">swapon --show<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">zramctl</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash"></code></div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://korduck.duckdns.org/272/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The Strict-Transport-Security HTTP header is not set 에러 (Nextcloud)</title>
		<link>https://korduck.duckdns.org/269/</link>
					<comments>https://korduck.duckdns.org/269/#respond</comments>
		
		<dc:creator><![CDATA[Joinsoo]]></dc:creator>
		<pubDate>Wed, 02 Apr 2025 06:03:51 +0000</pubDate>
				<category><![CDATA[미분류]]></category>
		<guid isPermaLink="false">https://korduck.duckdns.org/?p=269</guid>

					<description><![CDATA[1. Apache 설정 (사용 중이라면) 다음 설정을 Apache의 설정 파일에 추가해야 합니다. 1.1 Apache 전역 설정 파일 수정 sudo nano /etc/apache2/conf-available/security.conf 파일의 끝 부분에 아래 내용을 추가 또는 수정합니다. &#60;IfModule mod_headers.c&#62; Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" &#60;/IfModule&#62; 이후 Apache 설정을 활성화하고 재시작합니다. sudo a2enconf security sudo systemctl restart apache2]]></description>
										<content:encoded><![CDATA[<h2 class="" data-start="195" data-end="226">1. <strong data-start="201" data-end="224">Apache 설정 (사용 중이라면)</strong></h2>
<p class="" data-start="227" data-end="258">다음 설정을 Apache의 설정 파일에 추가해야 합니다.</p>
<h3 class="" data-start="260" data-end="292"><strong data-start="264" data-end="290">1.1 Apache 전역 설정 파일 수정</strong></h3>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-sh">sudo nano /etc/apache2/conf-available/security.conf<br />
</code></div>
</div>
<p class="" data-start="355" data-end="384">파일의 <strong>끝 부분에</strong> 아래 내용을 추가 또는 수정합니다.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-apache">&lt;IfModule mod_headers.c&gt;</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-apache">    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-apache">&lt;/IfModule&gt;<br />
</code></div>
</div>
<p class="" data-start="531" data-end="558">이후 Apache 설정을 활성화하고 재시작합니다.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-sh">sudo a2enconf security<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-sh">sudo systemctl restart apache2</code></div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://korduck.duckdns.org/269/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>한계이익(Marginal Profit)이란?</title>
		<link>https://korduck.duckdns.org/267/</link>
					<comments>https://korduck.duckdns.org/267/#respond</comments>
		
		<dc:creator><![CDATA[Joinsoo]]></dc:creator>
		<pubDate>Tue, 01 Apr 2025 01:09:20 +0000</pubDate>
				<category><![CDATA[Knowledges]]></category>
		<guid isPermaLink="false">https://korduck.duckdns.org/?p=267</guid>

					<description><![CDATA[한계이익(Marginal Profit)이란? 한계이익은 제품 한 단위를 추가로 판매할 때 발생하는 이익을 의미한다. 이는 매출에서 변동비를 제외한 금액이며, 기업이 제품을 더 많이 판매할수록 발생하는 추가적인 이익을 나타낸다. 한계이익=매출−변동비\text{한계이익} = \text{매출} &#8211; \text{변동비}한계이익=매출−변동비 매출(Sales Revenue): 제품을 판매하여 얻은 총 수익 변동비(Variable Cost): 생산량에 따라 변하는 비용(원재료비, 직접 인건비 등) 한계이익은 고정비를 회수하고, 기업의 순이익을 결정하는 핵심 지표로 ... <a title="한계이익(Marginal Profit)이란?" class="read-more" href="https://korduck.duckdns.org/267/" aria-label="한계이익(Marginal Profit)이란?에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[<h2 class="" data-start="0" data-end="33"><strong data-start="3" data-end="31">한계이익(Marginal Profit)이란?</strong></h2>
<p class="" data-start="34" data-end="141">한계이익은 <strong data-start="40" data-end="70">제품 한 단위를 추가로 판매할 때 발생하는 이익</strong>을 의미한다. 이는 매출에서 변동비를 제외한 금액이며, 기업이 제품을 더 많이 판매할수록 발생하는 추가적인 이익을 나타낸다.</p>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">한계이익=매출−변동비\text{한계이익} = \text{매출} &#8211; \text{변동비}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord text"><span class="mord hangul_fallback">한계이익</span></span><span class="mrel">=</span></span><span class="base"><span class="mord text"><span class="mord hangul_fallback">매출</span></span><span class="mbin">−</span></span><span class="base"><span class="mord text"><span class="mord hangul_fallback">변동비</span></span></span></span></span></span></p>
<ul data-start="187" data-end="289">
<li class="" data-start="187" data-end="230">
<p class="" data-start="189" data-end="230"><strong data-start="189" data-end="210">매출(Sales Revenue)</strong>: 제품을 판매하여 얻은 총 수익</p>
</li>
<li class="" data-start="231" data-end="289">
<p class="" data-start="233" data-end="289"><strong data-start="233" data-end="255">변동비(Variable Cost)</strong>: 생산량에 따라 변하는 비용(원재료비, 직접 인건비 등)</p>
</li>
</ul>
<p class="" data-start="291" data-end="340">한계이익은 <strong data-start="297" data-end="331">고정비를 회수하고, 기업의 순이익을 결정하는 핵심 지표</strong>로 사용된다.</p>
<hr class="" data-start="342" data-end="345" />
<h2 class="" data-start="347" data-end="369"><strong data-start="350" data-end="367">1. 한계이익 계산 예제</strong></h2>
<h3 class="" data-start="370" data-end="398"><strong data-start="374" data-end="396">(1) 전자 부품 제조업체의 사례</strong></h3>
<p class="" data-start="399" data-end="453">한 전자회로(PCB) 제조업체에서 <strong data-start="418" data-end="433">한 개의 PCB 보드</strong>를 생산하는 경우를 가정해 보자.</p>
<ul data-start="455" data-end="508">
<li class="" data-start="455" data-end="477">
<p class="" data-start="457" data-end="477"><strong data-start="457" data-end="466">판매 가격</strong>: 10,000원</p>
</li>
<li class="" data-start="478" data-end="508">
<p class="" data-start="480" data-end="508"><strong data-start="480" data-end="498">변동비(원재료 + 가공비)</strong>: 6,000원</p>
</li>
</ul>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">한계이익=10,000−6,000=4,000원\text{한계이익} = 10,000 &#8211; 6,000 = 4,000\text{원}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord text"><span class="mord hangul_fallback">한계이익</span></span><span class="mrel">=</span></span><span class="base"><span class="mord">10</span><span class="mpunct">,</span><span class="mord">000</span><span class="mbin">−</span></span><span class="base"><span class="mord">6</span><span class="mpunct">,</span><span class="mord">000</span><span class="mrel">=</span></span><span class="base"><span class="mord">4</span><span class="mpunct">,</span><span class="mord">000</span><span class="mord text"><span class="mord hangul_fallback">원</span></span></span></span></span></span></p>
<p class="" data-start="562" data-end="607">즉, <strong data-start="565" data-end="600">PCB 보드 1개를 더 판매하면 4,000원의 추가 이익</strong>이 발생한다.</p>
<hr class="" data-start="609" data-end="612" />
<h2 class="" data-start="614" data-end="645"><strong data-start="617" data-end="643">2. 한계이익과 손익분기점(BEP) 관계</strong></h2>
<p class="" data-start="646" data-end="700">기업이 일정 수준의 이익을 내기 위해서는 **고정비(Fixed Cost)**를 회수해야 한다.</p>
<p class="" data-start="702" data-end="722"><strong data-start="702" data-end="719">손익분기점(BEP) 공식</strong>:</p>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">손익분기점 수량=고정비한계이익\text{손익분기점 수량} = \frac{\text{고정비}}{\text{한계이익}}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord text"><span class="mord hangul_fallback">손익분기점</span><span class="mord"> </span><span class="mord hangul_fallback">수량</span></span><span class="mrel">=</span></span><span class="base"><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span class="mord text"><span class="mord hangul_fallback">한계이익</span></span><span class="mord text"><span class="mord hangul_fallback">고정비</span></span></span><span class="vlist-s">​</span></span></span></span></span></span></span></span></span></p>
<h3 class="" data-start="779" data-end="801"><strong data-start="783" data-end="799">(2) 손익분기점 예제</strong></h3>
<ul data-start="802" data-end="866">
<li class="" data-start="802" data-end="845">
<p class="" data-start="804" data-end="845"><strong data-start="804" data-end="811">고정비</strong>: 2,000만 원(설비 비용, 임대료, 관리자 급여 등)</p>
</li>
<li class="" data-start="846" data-end="866">
<p class="" data-start="848" data-end="866"><strong data-start="848" data-end="856">한계이익</strong>: 4,000원</p>
</li>
</ul>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">손익분기점 수량=2,000만4,000=5,000개\text{손익분기점 수량} = \frac{2,000만}{4,000} = 5,000\text{개}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord text"><span class="mord hangul_fallback">손익분기점</span><span class="mord"> </span><span class="mord hangul_fallback">수량</span></span><span class="mrel">=</span></span><span class="base"><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist">4<span class="mpunct">,</span>0002<span class="mpunct">,</span>000<span class="mord hangul_fallback">만</span></span><span class="vlist-s">​</span></span></span></span></span><span class="mrel">=</span></span><span class="base"><span class="mord">5</span><span class="mpunct">,</span><span class="mord">000</span><span class="mord text"><span class="mord hangul_fallback">개</span></span></span></span></span></span></p>
<p class="" data-start="930" data-end="968">즉, <strong data-start="933" data-end="965">PCB 보드를 5,000개 이상 팔아야 이익이 발생</strong>한다.</p>
<hr class="" data-start="970" data-end="973" />
<h2 class="" data-start="975" data-end="1015"><strong data-start="978" data-end="1013">3. 한계이익률(Marginal Profit Ratio)</strong></h2>
<p class="" data-start="1016" data-end="1054">한계이익률은 <strong data-start="1023" data-end="1045">매출에서 한계이익이 차지하는 비율</strong>을 나타낸다.</p>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">한계이익률=한계이익매출×100\text{한계이익률} = \frac{\text{한계이익}}{\text{매출}} \times 100</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord text"><span class="mord hangul_fallback">한계이익률</span></span><span class="mrel">=</span></span><span class="base"><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span class="mord text"><span class="mord hangul_fallback">매출</span></span><span class="mord text"><span class="mord hangul_fallback">한계이익</span></span></span><span class="vlist-s">​</span></span></span></span></span><span class="mbin">×</span></span><span class="base"><span class="mord">100</span></span></span></span></span></p>
<p class="" data-start="1119" data-end="1128">위 예제에서,</p>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">4,00010,000×100=40%\frac{4,000}{10,000} \times 100 = 40\%</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist">10<span class="mpunct">,</span>0004<span class="mpunct">,</span>000</span><span class="vlist-s">​</span></span></span></span></span><span class="mbin">×</span></span><span class="base"><span class="mord">100</span><span class="mrel">=</span></span><span class="base"><span class="mord">40%</span></span></span></span></span></p>
<p class="" data-start="1176" data-end="1208">즉, <strong data-start="1179" data-end="1202">매출의 40%가 한계이익으로 남는다</strong>는 의미다.</p>
<hr class="" data-start="1210" data-end="1213" />
<h2 class="" data-start="1215" data-end="1238"><strong data-start="1218" data-end="1236">4. 한계이익의 활용 방법</strong></h2>
<h3 class="" data-start="1239" data-end="1261"><strong data-start="1243" data-end="1259">(1) 가격 전략 수립</strong></h3>
<ul data-start="1262" data-end="1338">
<li class="" data-start="1262" data-end="1305">
<p class="" data-start="1264" data-end="1305">한계이익이 높은 제품일수록 <strong data-start="1279" data-end="1300">가격 할인 전략을 유연하게 활용</strong> 가능</p>
</li>
<li class="" data-start="1306" data-end="1338">
<p class="" data-start="1308" data-end="1338">한계이익이 낮으면 할인 시 손실 발생 가능성이 높음</p>
</li>
</ul>
<h3 class="" data-start="1340" data-end="1360"><strong data-start="1344" data-end="1358">(2) 생산량 조정</strong></h3>
<ul data-start="1361" data-end="1430">
<li class="" data-start="1361" data-end="1394">
<p class="" data-start="1363" data-end="1394">한계이익이 클수록 <strong data-start="1373" data-end="1392">생산량을 늘릴수록 이익 증가</strong></p>
</li>
<li class="" data-start="1395" data-end="1430">
<p class="" data-start="1397" data-end="1430">한계이익이 낮은 제품은 생산량 증가 시 고정비 부담 증가</p>
</li>
</ul>
<h3 class="" data-start="1432" data-end="1454"><strong data-start="1436" data-end="1452">(3) 원가 절감 전략</strong></h3>
<ul data-start="1455" data-end="1533">
<li class="" data-start="1455" data-end="1500">
<p class="" data-start="1457" data-end="1500"><strong data-start="1457" data-end="1467">변동비 절감</strong>(원재료 구매 단가 협상, 자동화 등) → 한계이익 증가</p>
</li>
<li class="" data-start="1501" data-end="1533">
<p class="" data-start="1503" data-end="1533"><strong data-start="1503" data-end="1517">고정비 분배 최적화</strong>(규모의 경제 효과 활용)</p>
</li>
</ul>
<hr class="" data-start="1535" data-end="1538" />
<h2 class="" data-start="1540" data-end="1554"><strong data-start="1543" data-end="1552">5. 결론</strong></h2>
<p class="" data-start="1555" data-end="1629">한계이익은 <strong data-start="1561" data-end="1585">기업의 수익성을 분석하는 중요한 지표</strong>이며, 원가 절감, 가격 전략, 생산량 결정 등 다양한 의사결정에 활용된다.</p>
<ul data-start="1630" data-end="1749" data-is-last-node="" data-is-only-node="">
<li class="" data-start="1630" data-end="1661">
<p class="" data-start="1632" data-end="1661"><strong data-start="1632" data-end="1659">한계이익이 높을수록 기업의 수익성이 좋다.</strong></p>
</li>
<li class="" data-start="1662" data-end="1703">
<p class="" data-start="1664" data-end="1703"><strong data-start="1664" data-end="1701">손익분기점을 넘어서면 한계이익이 곧 순이익 증가로 이어진다.</strong></p>
</li>
<li class="" data-start="1704" data-end="1749">
<p class="" data-start="1706" data-end="1749"><strong data-start="1706" data-end="1749" data-is-last-node="">변동비 절감과 판매 가격 조정으로 한계이익을 최적화하는 것이 중요하다.</strong></p>
</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://korduck.duckdns.org/267/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CAGR (Compound Annual Growth Rate, 연평균 성장률)란?</title>
		<link>https://korduck.duckdns.org/265/</link>
					<comments>https://korduck.duckdns.org/265/#respond</comments>
		
		<dc:creator><![CDATA[Joinsoo]]></dc:creator>
		<pubDate>Tue, 01 Apr 2025 01:08:47 +0000</pubDate>
				<category><![CDATA[Knowledges]]></category>
		<guid isPermaLink="false">https://korduck.duckdns.org/?p=265</guid>

					<description><![CDATA[CAGR (Compound Annual Growth Rate, 연평균 성장률)란? CAGR은 **&#8221;복리 효과를 반영한 연평균 성장률&#8221;**을 의미하며, 일정 기간 동안의 성장률을 일정하게 가정했을 때의 연평균 증가율을 계산하는 데 사용된다. 1. CAGR 공식 CAGR을 계산하는 공식은 다음과 같다: CAGR=(VfVi)1n−1CAGR = \left( \frac{V_f}{V_i} \right)^{\frac{1}{n}} &#8211; 1CAGR=(Vi​Vf​​)n1​−1 VfV_fVf​ : 최종 값 (Ending Value) ViV_iVi​ : 초기 값 (Beginning Value) nnn : ... <a title="CAGR (Compound Annual Growth Rate, 연평균 성장률)란?" class="read-more" href="https://korduck.duckdns.org/265/" aria-label="CAGR (Compound Annual Growth Rate, 연평균 성장률)란?에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[<h3 class="" data-start="0" data-end="55"><strong data-start="4" data-end="53">CAGR (Compound Annual Growth Rate, 연평균 성장률)란?</strong></h3>
<p class="" data-start="56" data-end="145">CAGR은 **&#8221;복리 효과를 반영한 연평균 성장률&#8221;**을 의미하며, 일정 기간 동안의 성장률을 일정하게 가정했을 때의 연평균 증가율을 계산하는 데 사용된다.</p>
<hr class="" data-start="147" data-end="150" />
<h2 class="" data-start="152" data-end="171"><strong data-start="155" data-end="169">1. CAGR 공식</strong></h2>
<p class="" data-start="172" data-end="196">CAGR을 계산하는 공식은 다음과 같다:</p>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">CAGR=(VfVi)1n−1CAGR = \left( \frac{V_f}{V_i} \right)^{\frac{1}{n}} &#8211; 1</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord mathnormal">C</span><span class="mord mathnormal">A</span><span class="mord mathnormal">GR</span><span class="mrel">=</span></span><span class="base"><span class="minner"><span class="mopen delimcenter"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span class="mord mathnormal">V</span><span class="msupsub"><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span><span class="vlist-s">​</span></span><span class="mord mathnormal">V</span><span class="msupsub"><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">f</span></span><span class="vlist-s">​</span></span></span><span class="vlist-s">​</span></span></span></span></span><span class="mclose delimcenter"><span class="delimsizing size3">)</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist"><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span><span class="sizing reset-size3 size1 mtight">1</span><span class="vlist-s">​</span></span></span></span></span></span></span></span></span></span><span class="mbin">−</span></span><span class="base"><span class="mord">1</span></span></span></span></span></p>
<ul data-start="261" data-end="358">
<li class="" data-start="261" data-end="296">
<p class="" data-start="263" data-end="296"><span class="katex"><span class="katex-mathml">VfV_f</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord"><span class="mord mathnormal">V</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">f</span></span></span><span class="vlist-s">​</span></span></span></span></span></span></span></span> : 최종 값 (Ending Value)</p>
</li>
<li class="" data-start="297" data-end="335">
<p class="" data-start="299" data-end="335"><span class="katex"><span class="katex-mathml">ViV_i</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord"><span class="mord mathnormal">V</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span class="vlist-s">​</span></span></span></span></span></span></span></span> : 초기 값 (Beginning Value)</p>
</li>
<li class="" data-start="336" data-end="358">
<p class="" data-start="338" data-end="358"><span class="katex"><span class="katex-mathml">nn</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord mathnormal">n</span></span></span></span> : 기간(연도 수)</p>
</li>
</ul>
<p class="" data-start="360" data-end="420">CAGR은 <strong data-start="366" data-end="391">복리(compound interest)</strong> 개념을 적용하기 때문에, 단순 평균과 차이가 있다.</p>
<hr class="" data-start="422" data-end="425" />
<h2 class="" data-start="427" data-end="456"><strong data-start="430" data-end="454">2. 예제: 제조업에서 CAGR 활용</strong></h2>
<h3 class="" data-start="458" data-end="481"><strong data-start="462" data-end="479">(1) 매출 성장률 예제</strong></h3>
<p class="" data-start="482" data-end="516">어떤 전자 부품 제조업체의 매출이 다음과 같다고 가정하자.</p>
<ul data-start="518" data-end="578">
<li class="" data-start="518" data-end="539">
<p class="" data-start="520" data-end="539"><strong data-start="520" data-end="529">2019년</strong>: 500억 원</p>
</li>
<li class="" data-start="540" data-end="563">
<p class="" data-start="542" data-end="563"><strong data-start="542" data-end="551">2024년</strong>: 1,200억 원</p>
</li>
<li class="" data-start="564" data-end="578">
<p class="" data-start="566" data-end="578">기간: <strong data-start="570" data-end="576">5년</strong></p>
</li>
</ul>
<p class="" data-start="580" data-end="596">이때 CAGR을 계산하면:</p>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">CAGR=(1,200500)15−1CAGR = \left( \frac{1,200}{500} \right)^{\frac{1}{5}} &#8211; 1</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord mathnormal">C</span><span class="mord mathnormal">A</span><span class="mord mathnormal">GR</span><span class="mrel">=</span></span><span class="base"><span class="minner"><span class="mopen delimcenter"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist">5001<span class="mpunct">,</span>200</span><span class="vlist-s">​</span></span></span></span></span><span class="mclose delimcenter"><span class="delimsizing size3">)</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist"><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="sizing reset-size3 size1 mtight">5</span><span class="sizing reset-size3 size1 mtight">1</span><span class="vlist-s">​</span></span></span></span></span></span></span></span></span></span><span class="mbin">−</span></span><span class="base"><span class="mord">1</span></span></span></span></span> <span class="katex-display"><span class="katex"><span class="katex-mathml">CAGR=(2.4)15−1CAGR = \left( 2.4 \right)^{\frac{1}{5}} &#8211; 1</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord mathnormal">C</span><span class="mord mathnormal">A</span><span class="mord mathnormal">GR</span><span class="mrel">=</span></span><span class="base"><span class="minner"><span class="mopen delimcenter">(</span><span class="mord">2.4</span><span class="mclose delimcenter">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist"><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="sizing reset-size3 size1 mtight">5</span><span class="sizing reset-size3 size1 mtight">1</span><span class="vlist-s">​</span></span></span></span></span></span></span></span></span></span><span class="mbin">−</span></span><span class="base"><span class="mord">1</span></span></span></span></span> <span class="katex-error" title="ParseError: KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at end of input: …9 \text{ (19%)}">CAGR \approx 1.19 &#8211; 1 = 0.19 \text{ (19%)}</span></p>
<p class="" data-start="764" data-end="810">즉, <strong data-start="767" data-end="798">매년 평균적으로 19%씩 성장한 것과 동일한 효과</strong>가 있다는 의미다.</p>
<hr class="" data-start="812" data-end="815" />
<h3 class="" data-start="817" data-end="841"><strong data-start="821" data-end="839">(2) 생산량 증가율 예제</strong></h3>
<p class="" data-start="842" data-end="882">한 공장에서 <strong data-start="849" data-end="859">연간 생산량</strong>이 다음과 같이 증가했다고 가정해보자.</p>
<ul data-start="884" data-end="940">
<li class="" data-start="884" data-end="904">
<p class="" data-start="886" data-end="904"><strong data-start="886" data-end="895">2018년</strong>: 10만 개</p>
</li>
<li class="" data-start="905" data-end="925">
<p class="" data-start="907" data-end="925"><strong data-start="907" data-end="916">2023년</strong>: 25만 개</p>
</li>
<li class="" data-start="926" data-end="940">
<p class="" data-start="928" data-end="940">기간: <strong data-start="932" data-end="938">5년</strong></p>
</li>
</ul>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">CAGR=(2510)15−1CAGR = \left( \frac{25}{10} \right)^{\frac{1}{5}} &#8211; 1</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord mathnormal">C</span><span class="mord mathnormal">A</span><span class="mord mathnormal">GR</span><span class="mrel">=</span></span><span class="base"><span class="minner"><span class="mopen delimcenter"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist">1025</span><span class="vlist-s">​</span></span></span></span></span><span class="mclose delimcenter"><span class="delimsizing size3">)</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist"><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="sizing reset-size3 size1 mtight">5</span><span class="sizing reset-size3 size1 mtight">1</span><span class="vlist-s">​</span></span></span></span></span></span></span></span></span></span><span class="mbin">−</span></span><span class="base"><span class="mord">1</span></span></span></span></span> <span class="katex-display"><span class="katex"><span class="katex-mathml">CAGR=(2.5)15−1CAGR = \left( 2.5 \right)^{\frac{1}{5}} &#8211; 1</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord mathnormal">C</span><span class="mord mathnormal">A</span><span class="mord mathnormal">GR</span><span class="mrel">=</span></span><span class="base"><span class="minner"><span class="mopen delimcenter">(</span><span class="mord">2.5</span><span class="mclose delimcenter">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist"><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="sizing reset-size3 size1 mtight">5</span><span class="sizing reset-size3 size1 mtight">1</span><span class="vlist-s">​</span></span></span></span></span></span></span></span></span></span><span class="mbin">−</span></span><span class="base"><span class="mord">1</span></span></span></span></span> <span class="katex-error" title="ParseError: KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at end of input: …2 \text{ (20%)}">CAGR \approx 1.2 &#8211; 1 = 0.2 \text{ (20%)}</span></p>
<p class="" data-start="1102" data-end="1143">즉, <strong data-start="1105" data-end="1130">연평균 20% 성장한 것과 동일한 효과</strong>가 있다고 볼 수 있다.</p>
<hr class="" data-start="1145" data-end="1148" />
<h2 class="" data-start="1150" data-end="1177"><strong data-start="1153" data-end="1175">3. CAGR의 특징과 활용 분야</strong></h2>
<h3 class="" data-start="1179" data-end="1195"><strong data-start="1183" data-end="1193">(1) 특징</strong></h3>
<p class="" data-start="1196" data-end="1286"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="1198" data-end="1210">복리 개념 적용</strong> → 매년 같은 비율로 성장했다고 가정<br data-start="1231" data-end="1234" /><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="1236" data-end="1249">단순 평균과 다름</strong> → 매년 성장률이 다르더라도 CAGR은 일정한 성장률로 나타냄</p>
<h3 class="" data-start="1288" data-end="1307"><strong data-start="1292" data-end="1305">(2) 활용 분야</strong></h3>
<p class="" data-start="1308" data-end="1449"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="1311" data-end="1323">기업 실적 분석</strong>: 매출, 영업이익 성장률 분석<br data-start="1340" data-end="1343" /><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="1346" data-end="1360">제조업 생산성 분석</strong>: 공장 생산량 증가율 확인<br data-start="1375" data-end="1378" /><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="1381" data-end="1390">투자 분석</strong>: 주식, 부동산, 스타트업 성장률 계산<br data-start="1412" data-end="1415" /><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="1418" data-end="1430">시장 규모 예측</strong>: 특정 산업의 향후 성장 예측</p>
<hr class="" data-start="1451" data-end="1454" />
<h2 class="" data-start="1456" data-end="1486"><strong data-start="1459" data-end="1484">4. CAGR vs. 단순 평균 성장률</strong></h2>
<p class="" data-start="1487" data-end="1537">CAGR은 <strong data-start="1493" data-end="1506">복리 효과를 반영</strong>하지만, 단순 평균 성장률은 연도별 변화를 무시한다.</p>
<p class="" data-start="1539" data-end="1559">예를 들어, 아래 데이터를 보자.</p>
<div class="overflow-x-auto contain-inline-size">
<table data-start="1561" data-end="1705">
<thead data-start="1561" data-end="1579">
<tr data-start="1561" data-end="1579">
<th data-start="1561" data-end="1567">연도</th>
<th data-start="1567" data-end="1579">매출 (억 원)</th>
</tr>
</thead>
<tbody data-start="1601" data-end="1705">
<tr data-start="1601" data-end="1621">
<td>2020</td>
<td>100</td>
</tr>
<tr data-start="1622" data-end="1642">
<td>2021</td>
<td>120</td>
</tr>
<tr data-start="1643" data-end="1663">
<td>2022</td>
<td>160</td>
</tr>
<tr data-start="1664" data-end="1684">
<td>2023</td>
<td>200</td>
</tr>
<tr data-start="1685" data-end="1705">
<td>2024</td>
<td>280</td>
</tr>
</tbody>
</table>
</div>
<ul data-start="1707" data-end="1854">
<li class="" data-start="1707" data-end="1770">
<p class="" data-start="1709" data-end="1725"><strong data-start="1709" data-end="1722">단순 평균 성장률</strong>:</p>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">(20+40+40+80)4=45%\frac{(20+40+40+80)}{4} = 45\% </span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist">4<span class="mopen">(</span>20<span class="mbin">+</span>40<span class="mbin">+</span>40<span class="mbin">+</span>80<span class="mclose">)</span></span><span class="vlist-s">​</span></span></span></span></span><span class="mrel">=</span></span><span class="base"><span class="mord">45%</span></span></span></span></span></li>
<li class="" data-start="1771" data-end="1854">
<p class="" data-start="1773" data-end="1784"><strong data-start="1773" data-end="1781">CAGR</strong>:</p>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">(280100)14−1=30.4%\left( \frac{280}{100} \right)^{\frac{1}{4}} &#8211; 1 = 30.4\%</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="minner"><span class="mopen delimcenter"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist">100280</span><span class="vlist-s">​</span></span></span></span></span><span class="mclose delimcenter"><span class="delimsizing size3">)</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist"><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="sizing reset-size3 size1 mtight">4</span><span class="sizing reset-size3 size1 mtight">1</span><span class="vlist-s">​</span></span></span></span></span></span></span></span></span></span><span class="mbin">−</span></span><span class="base"><span class="mord">1</span><span class="mrel">=</span></span><span class="base"><span class="mord">30.4%</span></span></span></span></span></li>
</ul>
<p class="" data-start="1856" data-end="1885"><strong data-start="1856" data-end="1885">즉, CAGR이 더 정확한 성장률을 나타낸다.</strong></p>
<hr class="" data-start="1887" data-end="1890" />
<h2 class="" data-start="1892" data-end="1906"><strong data-start="1895" data-end="1904">5. 결론</strong></h2>
<p class="" data-start="1907" data-end="2016">CAGR은 제조업, 금융, 투자 등 여러 분야에서 사용되며, <strong data-start="1941" data-end="1974">단순 평균이 아닌 &#8220;복리 성장&#8221; 개념을 적용하는 지표</strong>다.<br data-start="1976" data-end="1980" />장기적인 성장률을 분석할 때 <strong data-start="1996" data-end="2009">보다 정확한 지표</strong>로 활용된다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://korduck.duckdns.org/265/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>임률의 정의 (feat. ChatGPT)</title>
		<link>https://korduck.duckdns.org/259/</link>
					<comments>https://korduck.duckdns.org/259/#respond</comments>
		
		<dc:creator><![CDATA[Joinsoo]]></dc:creator>
		<pubDate>Tue, 01 Apr 2025 01:05:08 +0000</pubDate>
				<category><![CDATA[Knowledges]]></category>
		<guid isPermaLink="false">https://korduck.duckdns.org/?p=259</guid>

					<description><![CDATA[1. 임률의 정의 임률(Labor Rate)은 일정 시간(보통 1시간) 동안 노동자가 받는 보수를 뜻하며, 기업에서는 노무비를 산정할 때 중요한 요소로 작용합니다. 기본 임률 (Base Labor Rate):→ 근로자에게 지급되는 기본적인 시간당 임금 총 임률 (Fully Burdened Labor Rate):→ 기본 임금 + 복리후생비 + 각종 세금 + 기타 부가 비용 포함 2. 임률 계산 공식 (1) 기본 임률 ... <a title="임률의 정의 (feat. ChatGPT)" class="read-more" href="https://korduck.duckdns.org/259/" aria-label="임률의 정의 (feat. ChatGPT)에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[<h2 class="" data-start="105" data-end="123">1. <strong data-start="111" data-end="121">임률의 정의</strong></h2>
<p class="" data-start="124" data-end="211">임률(Labor Rate)은 일정 시간(보통 1시간) 동안 노동자가 받는 보수를 뜻하며, 기업에서는 <strong data-start="180" data-end="187">노무비</strong>를 산정할 때 중요한 요소로 작용합니다.</p>
<ul data-start="213" data-end="358">
<li class="" data-start="213" data-end="274">
<p class="" data-start="215" data-end="274"><strong data-start="215" data-end="242">기본 임률 (Base Labor Rate)</strong>:<br data-start="243" data-end="246" />→ 근로자에게 지급되는 기본적인 시간당 임금</p>
</li>
<li class="" data-start="275" data-end="358">
<p class="" data-start="277" data-end="358"><strong data-start="277" data-end="313">총 임률 (Fully Burdened Labor Rate)</strong>:<br data-start="314" data-end="317" />→ 기본 임금 + 복리후생비 + 각종 세금 + 기타 부가 비용 포함</p>
</li>
</ul>
<hr class="" data-start="360" data-end="363" />
<h2 class="" data-start="365" data-end="385">2. <strong data-start="371" data-end="383">임률 계산 공식</strong></h2>
<h3 class="" data-start="386" data-end="408"><strong data-start="390" data-end="406">(1) 기본 임률 계산</strong></h3>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">기본 임률=연간 급여연간 근무 시간\text{기본 임률} = \frac{\text{연간 급여}}{\text{연간 근무 시간}}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord text"><span class="mord hangul_fallback">기본</span><span class="mord"> </span><span class="mord hangul_fallback">임률</span></span><span class="mrel">=</span></span><span class="base"><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span class="mord text"><span class="mord hangul_fallback">연간</span> <span class="mord hangul_fallback">근무</span> <span class="mord hangul_fallback">시간</span></span><span class="mord text"><span class="mord hangul_fallback">연간</span> <span class="mord hangul_fallback">급여</span></span></span><span class="vlist-s">​</span></span></span></span></span></span></span></span></span></p>
<p class="" data-start="469" data-end="525">예) 연봉 4,800만 원, 연간 근무 시간 2,000시간 → <strong data-start="504" data-end="523">임률 = 24,000원/시간</strong></p>
<h3 class="" data-start="527" data-end="559"><strong data-start="531" data-end="557">(2) 총 임률 계산 (부가 비용 포함)</strong></h3>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">총 임률=총 인건비(급여 + 부가 비용)연간 근무 시간\text{총 임률} = \frac{\text{총 인건비(급여 + 부가 비용)}}{\text{연간 근무 시간}}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord text"><span class="mord hangul_fallback">총</span><span class="mord"> </span><span class="mord hangul_fallback">임률</span></span><span class="mrel">=</span></span><span class="base"><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span class="mord text"><span class="mord hangul_fallback">연간</span> <span class="mord hangul_fallback">근무</span> <span class="mord hangul_fallback">시간</span></span><span class="mord text"><span class="mord hangul_fallback">총</span> <span class="mord hangul_fallback">인건비</span>(<span class="mord hangul_fallback">급여</span> + <span class="mord hangul_fallback">부가</span> <span class="mord hangul_fallback">비용</span>)</span></span><span class="vlist-s">​</span></span></span></span></span></span></span></span></span></p>
<p class="" data-start="629" data-end="675">총 인건비에는 <strong data-start="637" data-end="663">4대 보험, 퇴직금, 교육비, 장비 비용</strong> 등이 포함됩니다.</p>
<p class="" data-start="677" data-end="681">예)</p>
<ul data-start="682" data-end="754">
<li class="" data-start="682" data-end="701">
<p class="" data-start="684" data-end="701">기본 급여: 4,800만 원</p>
</li>
<li class="" data-start="702" data-end="732">
<p class="" data-start="704" data-end="732">복리후생비(보험, 퇴직금 등): 1,200만 원</p>
</li>
<li class="" data-start="733" data-end="754">
<p class="" data-start="735" data-end="754">연간 근무 시간: 2,000시간</p>
</li>
</ul>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">총 임률=4,800+1,2002,000=30,000원/시간\text{총 임률} = \frac{4,800 + 1,200}{2,000} = 30,000 \text{원/시간}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord text"><span class="mord hangul_fallback">총</span><span class="mord"> </span><span class="mord hangul_fallback">임률</span></span><span class="mrel">=</span></span><span class="base"><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist">2<span class="mpunct">,</span>0004<span class="mpunct">,</span>800<span class="mbin">+</span>1<span class="mpunct">,</span>200</span><span class="vlist-s">​</span></span></span></span></span><span class="mrel">=</span></span><span class="base"><span class="mord">30</span><span class="mpunct">,</span><span class="mord">000</span><span class="mord text"><span class="mord hangul_fallback">원</span><span class="mord">/</span><span class="mord hangul_fallback">시간</span></span></span></span></span></span></p>
<hr class="" data-start="825" data-end="828" />
<h2 class="" data-start="830" data-end="863">3. <strong data-start="836" data-end="861">제조업(전기전자 업종)에서 임률의 활용</strong></h2>
<p class="" data-start="864" data-end="920">전기전자 업종에서는 인건비가 제조 원가의 중요한 요소이므로, 다음과 같은 방식으로 임률을 활용합니다.</p>
<h3 class="" data-start="922" data-end="941"><strong data-start="926" data-end="939">(1) 원가 계산</strong></h3>
<p class="" data-start="942" data-end="991">제조 단가를 산출할 때 <strong data-start="955" data-end="969">임률 × 작업 시간</strong>을 포함하여 제품 원가를 계산합니다.</p>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">직접 노무비=임률×가공 시간\text{직접 노무비} = \text{임률} \times \text{가공 시간}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord text"><span class="mord hangul_fallback">직접</span><span class="mord"> </span><span class="mord hangul_fallback">노무비</span></span><span class="mrel">=</span></span><span class="base"><span class="mord text"><span class="mord hangul_fallback">임률</span></span><span class="mbin">×</span></span><span class="base"><span class="mord text"><span class="mord hangul_fallback">가공</span><span class="mord"> </span><span class="mord hangul_fallback">시간</span></span></span></span></span></span></p>
<p class="" data-start="1046" data-end="1050">예)</p>
<ul data-start="1051" data-end="1087">
<li class="" data-start="1051" data-end="1069">
<p class="" data-start="1053" data-end="1069">임률: 30,000원/시간</p>
</li>
<li class="" data-start="1070" data-end="1087">
<p class="" data-start="1072" data-end="1087">부품 가공 시간: 2시간</p>
</li>
</ul>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">직접 노무비=30,000×2=60,000원\text{직접 노무비} = 30,000 \times 2 = 60,000\text{원}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord text"><span class="mord hangul_fallback">직접</span><span class="mord"> </span><span class="mord hangul_fallback">노무비</span></span><span class="mrel">=</span></span><span class="base"><span class="mord">30</span><span class="mpunct">,</span><span class="mord">000</span><span class="mbin">×</span></span><span class="base"><span class="mord">2</span><span class="mrel">=</span></span><span class="base"><span class="mord">60</span><span class="mpunct">,</span><span class="mord">000</span><span class="mord text"><span class="mord hangul_fallback">원</span></span></span></span></span></span></p>
<h3 class="" data-start="1144" data-end="1164"><strong data-start="1148" data-end="1162">(2) 생산성 분석</strong></h3>
<ul data-start="1165" data-end="1251">
<li class="" data-start="1165" data-end="1206">
<p class="" data-start="1167" data-end="1206"><strong data-start="1167" data-end="1181">작업자별 임률 비교</strong>: 숙련공과 신입 직원의 임률 차이를 분석</p>
</li>
<li class="" data-start="1207" data-end="1251">
<p class="" data-start="1209" data-end="1251"><strong data-start="1209" data-end="1219">생산성 평가</strong>: 동일한 임률에서 생산량이 높은 작업자의 효율성 분석</p>
</li>
</ul>
<h3 class="" data-start="1253" data-end="1279"><strong data-start="1257" data-end="1277">(3) 외주/자동화 비용 비교</strong></h3>
<ul data-start="1280" data-end="1331">
<li class="" data-start="1280" data-end="1304">
<p class="" data-start="1282" data-end="1304"><strong data-start="1282" data-end="1302">로봇 도입 vs. 인건비 비교</strong></p>
</li>
<li class="" data-start="1305" data-end="1331">
<p class="" data-start="1307" data-end="1331"><strong data-start="1307" data-end="1329">외주 비용과 자체 생산 비용 비교</strong></p>
</li>
</ul>
<hr class="" data-start="1333" data-end="1336" />
<h2 class="" data-start="1338" data-end="1359">4. <strong data-start="1344" data-end="1357">임률 최적화 전략</strong></h2>
<ul data-start="1360" data-end="1477">
<li class="" data-start="1360" data-end="1402">
<p class="" data-start="1362" data-end="1402"><strong data-start="1362" data-end="1372">생산 자동화</strong>: 로봇, AI, ERP 시스템 도입으로 임률 감소</p>
</li>
<li class="" data-start="1403" data-end="1435">
<p class="" data-start="1405" data-end="1435"><strong data-start="1405" data-end="1415">숙련도 향상</strong>: 작업자 교육 및 다기능화 훈련</p>
</li>
<li class="" data-start="1436" data-end="1477">
<p class="" data-start="1438" data-end="1477"><strong data-start="1438" data-end="1451">효율적인 스케줄링</strong>: 유휴 시간을 줄여 임률 대비 생산성 증가</p>
</li>
</ul>
<hr class="" data-start="1479" data-end="1482" />
<h3 class="" data-start="1484" data-end="1496"><strong data-start="1488" data-end="1494">결론</strong></h3>
<p class="" data-start="1497" data-end="1601">제조업(특히 전기전자 업종)에서는 <strong data-start="1516" data-end="1527">임률을 최적화</strong>하는 것이 원가 절감과 생산성 향상의 핵심입니다. <strong data-start="1555" data-end="1577">자동화, 교육, 운영 효율성 개선</strong> 등을 통해 적절한 임률 관리가 필요합니다.</p>
<p>.</p>
<p>,</p>
<p>,</p>
<hr />
<p class="" data-start="0" data-end="96">제조업(전기전자 업종)에서 <strong data-start="15" data-end="21">임률</strong>을 &#8220;계획 임률(Planned Labor Rate)&#8221;과 &#8220;실질 임률(Actual Labor Rate)&#8221;로 나누어 자세히 설명해볼게.</p>
<hr class="" data-start="98" data-end="101" />
<h1 class="" data-start="103" data-end="119"><strong data-start="105" data-end="117">1. 개념 정리</strong></h1>
<ul data-start="120" data-end="248">
<li class="" data-start="120" data-end="191">
<p class="" data-start="122" data-end="191"><strong data-start="122" data-end="151">계획 임률(Planned Labor Rate)</strong><br data-start="151" data-end="154" />→ 사전에 설정된 목표 임률로, 예산 및 원가 계산 시 사용</p>
</li>
<li class="" data-start="192" data-end="248">
<p class="" data-start="194" data-end="248"><strong data-start="194" data-end="222">실질 임률(Actual Labor Rate)</strong><br data-start="222" data-end="225" />→ 실제 생산 과정에서 발생한 임률</p>
</li>
</ul>
<hr class="" data-start="250" data-end="253" />
<h1 class="" data-start="255" data-end="283"><strong data-start="257" data-end="281">2. 예제 상황: 전자회로 기판 제조</strong></h1>
<p class="" data-start="285" data-end="343">한 전자제품 제조업체가 **PCB(Printed Circuit Board)**를 생산한다고 가정하자.</p>
<h2 class="" data-start="345" data-end="370"><strong data-start="348" data-end="368">(1) 계획 임률과 예상 비용</strong></h2>
<p class="" data-start="371" data-end="407">회사에서는 생산 계획을 세우면서 다음과 같이 임률을 설정했다.</p>
<h3 class="" data-start="409" data-end="451"><strong data-start="413" data-end="449">① 계획된 임률 (Planned Labor Rate) 계산</strong></h3>
<ul data-start="452" data-end="545">
<li class="" data-start="452" data-end="475">
<p class="" data-start="454" data-end="475">예상 연봉: <strong data-start="461" data-end="473">4,800만 원</strong></p>
</li>
<li class="" data-start="476" data-end="516">
<p class="" data-start="478" data-end="516">예상 복리후생비(4대 보험, 퇴직금 등): <strong data-start="502" data-end="514">1,200만 원</strong></p>
</li>
<li class="" data-start="517" data-end="545">
<p class="" data-start="519" data-end="545">예상 연간 근무 시간: <strong data-start="532" data-end="543">2,000시간</strong></p>
</li>
</ul>
<p data-start="1497" data-end="1601"><span class="katex-display"><span class="katex"><span class="katex-mathml">계획 임률=4,800+1,2002,000=30,000원/시간\text{계획 임률} = \frac{4,800 + 1,200}{2,000} = 30,000\text{원/시간}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord text"><span class="mord hangul_fallback">계획</span><span class="mord"> </span><span class="mord hangul_fallback">임률</span></span><span class="mrel">=</span></span><span class="base"><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist">2<span class="mpunct">,</span>0004<span class="mpunct">,</span>800<span class="mbin">+</span>1<span class="mpunct">,</span>200</span><span class="vlist-s">​</span></span></span></span></span><span class="mrel">=</span></span><span class="base"><span class="mord">30</span><span class="mpunct">,</span><span class="mord">000</span><span class="mord text"><span class="mord hangul_fallback">원</span><span class="mord">/</span><span class="mord hangul_fallback">시간</span></span></span></span></span></span></p>
<h3 class="" data-start="619" data-end="644"><strong data-start="623" data-end="642">② 예상 생산 시간과 인건비</strong></h3>
<ul data-start="645" data-end="785">
<li class="" data-start="645" data-end="685">
<p class="" data-start="647" data-end="685"><strong data-start="647" data-end="674">1개 제품을 생산하는 데 걸리는 예상 시간</strong>: <strong data-start="676" data-end="683">2시간</strong></p>
</li>
<li class="" data-start="686" data-end="706">
<p class="" data-start="688" data-end="706">예상 생산량: <strong data-start="696" data-end="704">100개</strong></p>
</li>
<li class="" data-start="707" data-end="785">
<p class="" data-start="709" data-end="718">예상 인건비:</p>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">100개×(2시간×30,000원)=6,000,000원100개 \times (2시간 \times 30,000원) = 6,000,000\text{원}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord">100</span><span class="mord hangul_fallback">개</span><span class="mbin">×</span></span><span class="base"><span class="mopen">(</span><span class="mord">2</span><span class="mord hangul_fallback">시간</span><span class="mbin">×</span></span><span class="base"><span class="mord">30</span><span class="mpunct">,</span><span class="mord">000</span><span class="mord hangul_fallback">원</span><span class="mclose">)</span><span class="mrel">=</span></span><span class="base"><span class="mord">6</span><span class="mpunct">,</span><span class="mord">000</span><span class="mpunct">,</span><span class="mord">000</span><span class="mord text"><span class="mord hangul_fallback">원</span></span></span></span></span></span></li>
</ul>
<hr class="" data-start="787" data-end="790" />
<h2 class="" data-start="792" data-end="817"><strong data-start="795" data-end="815">(2) 실질 임률과 실제 비용</strong></h2>
<p class="" data-start="818" data-end="852">생산이 끝난 후, 실질 데이터를 분석해보니 다음과 같았다.</p>
<h3 class="" data-start="854" data-end="894"><strong data-start="858" data-end="892">① 실질 임률 (Actual Labor Rate) 계산</strong></h3>
<p class="" data-start="895" data-end="945">실제 연봉과 복리후생비는 동일하지만, 추가적인 초과 근무 비용(OT 비용)이 발생했다.</p>
<ul data-start="946" data-end="1018">
<li class="" data-start="946" data-end="989">
<p class="" data-start="948" data-end="989"><strong data-start="948" data-end="987">기본 연봉 + 복리후생비 + 초과 근무 수당 = 5,400만 원</strong></p>
</li>
<li class="" data-start="990" data-end="1018">
<p class="" data-start="992" data-end="1018">실제 연간 근무 시간: <strong data-start="1005" data-end="1016">2,100시간</strong></p>
</li>
</ul>
<p data-start="1497" data-end="1601"><span class="katex-display"><span class="katex"><span class="katex-mathml">실질 임률=5,4002,100=25,714원/시간\text{실질 임률} = \frac{5,400}{2,100} = 25,714\text{원/시간}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord text"><span class="mord hangul_fallback">실질</span><span class="mord"> </span><span class="mord hangul_fallback">임률</span></span><span class="mrel">=</span></span><span class="base"><span class="mord"><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist">2<span class="mpunct">,</span>1005<span class="mpunct">,</span>400</span><span class="vlist-s">​</span></span></span></span></span><span class="mrel">=</span></span><span class="base"><span class="mord">25</span><span class="mpunct">,</span><span class="mord">714</span><span class="mord text"><span class="mord hangul_fallback">원</span><span class="mord">/</span><span class="mord hangul_fallback">시간</span></span></span></span></span></span></p>
<p class="" data-start="1084" data-end="1143">→ 초과 근무 증가로 총 인건비는 늘었지만, 실제 근무 시간이 많아지면서 <strong data-start="1125" data-end="1141">실질 임률이 낮아졌다.</strong></p>
<h3 class="" data-start="1145" data-end="1170"><strong data-start="1149" data-end="1168">② 실제 생산 시간과 인건비</strong></h3>
<ul data-start="1171" data-end="1310">
<li class="" data-start="1171" data-end="1208">
<p class="" data-start="1173" data-end="1208">1개 제품을 생산하는 데 걸린 실제 시간: <strong data-start="1197" data-end="1206">2.5시간</strong></p>
</li>
<li class="" data-start="1209" data-end="1229">
<p class="" data-start="1211" data-end="1229">실제 생산량: <strong data-start="1219" data-end="1227">100개</strong></p>
</li>
<li class="" data-start="1230" data-end="1310">
<p class="" data-start="1232" data-end="1241">실제 인건비:</p>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml">100개×(2.5시간×25,714원)=6,428,500원100개 \times (2.5시간 \times 25,714원) = 6,428,500\text{원}</span><span class="katex-html" aria-hidden="true"><span class="base"><span class="mord">100</span><span class="mord hangul_fallback">개</span><span class="mbin">×</span></span><span class="base"><span class="mopen">(</span><span class="mord">2.5</span><span class="mord hangul_fallback">시간</span><span class="mbin">×</span></span><span class="base"><span class="mord">25</span><span class="mpunct">,</span><span class="mord">714</span><span class="mord hangul_fallback">원</span><span class="mclose">)</span><span class="mrel">=</span></span><span class="base"><span class="mord">6</span><span class="mpunct">,</span><span class="mord">428</span><span class="mpunct">,</span><span class="mord">500</span><span class="mord text"><span class="mord hangul_fallback">원</span></span></span></span></span></span></li>
</ul>
<p class="" data-start="1312" data-end="1349">→ 계획 대비 <strong data-start="1320" data-end="1347">428,500원(7.1%) 초과 지출 발생</strong></p>
<hr class="" data-start="1351" data-end="1354" />
<h1 class="" data-start="1356" data-end="1385"><strong data-start="1358" data-end="1383">3. 계획 임률과 실질 임률 비교 분석</strong></h1>
<div class="overflow-x-auto contain-inline-size">
<table data-start="1386" data-end="1588">
<thead data-start="1386" data-end="1424">
<tr data-start="1386" data-end="1424">
<th data-start="1386" data-end="1391">항목</th>
<th data-start="1391" data-end="1405">계획(Planned)</th>
<th data-start="1405" data-end="1418">실질(Actual)</th>
<th data-start="1418" data-end="1424">차이</th>
</tr>
</thead>
<tbody data-start="1469" data-end="1588">
<tr data-start="1469" data-end="1508">
<td>임률(원/시간)</td>
<td>30,000</td>
<td>25,714</td>
<td>-14.3%</td>
</tr>
<tr data-start="1509" data-end="1543">
<td>생산 시간(시간/개)</td>
<td>2.0</td>
<td>2.5</td>
<td>+25%</td>
</tr>
<tr data-start="1544" data-end="1588">
<td>총 인건비(원)</td>
<td>6,000,000</td>
<td>6,428,500</td>
<td>+7.1%</td>
</tr>
</tbody>
</table>
</div>
<h3 class="" data-start="1590" data-end="1609"><strong data-start="1594" data-end="1607">(1) 원인 분석</strong></h3>
<ol data-start="1610" data-end="1793">
<li class="" data-start="1610" data-end="1694">
<p class="" data-start="1613" data-end="1637"><strong data-start="1613" data-end="1635">실제 임률이 계획보다 낮아진 이유</strong></p>
<ul data-start="1641" data-end="1694">
<li class="" data-start="1641" data-end="1668">
<p class="" data-start="1643" data-end="1668">초과 근무 증가로 연간 근무 시간이 늘어남</p>
</li>
<li class="" data-start="1672" data-end="1694">
<p class="" data-start="1674" data-end="1694">예상보다 많은 작업 인력이 투입됨</p>
</li>
</ul>
</li>
<li class="" data-start="1696" data-end="1793">
<p class="" data-start="1699" data-end="1718"><strong data-start="1699" data-end="1716">총 인건비가 증가한 이유</strong></p>
<ul data-start="1722" data-end="1793">
<li class="" data-start="1722" data-end="1751">
<p class="" data-start="1724" data-end="1751">예상보다 제품 1개당 작업 시간이 25% 증가</p>
</li>
<li class="" data-start="1755" data-end="1793">
<p class="" data-start="1757" data-end="1793">생산 공정에서 예상치 못한 변수(설비 문제, 재작업 등) 발생</p>
</li>
</ul>
</li>
</ol>
<hr class="" data-start="1795" data-end="1798" />
<h1 class="" data-start="1800" data-end="1825"><strong data-start="1802" data-end="1823">4. 해결 방법 &amp; 최적화 전략</strong></h1>
<h3 class="" data-start="1826" data-end="1852"><strong data-start="1830" data-end="1850">(1) 계획 임률 정확도 향상</strong></h3>
<ul data-start="1853" data-end="1887">
<li class="" data-start="1853" data-end="1887">
<p class="" data-start="1855" data-end="1887">초과 근무 및 변동 비용을 포함하여 현실적인 임률 설정</p>
</li>
</ul>
<h3 class="" data-start="1889" data-end="1911"><strong data-start="1893" data-end="1909">(2) 생산 시간 단축</strong></h3>
<ul data-start="1912" data-end="1969">
<li class="" data-start="1912" data-end="1943">
<p class="" data-start="1914" data-end="1943"><strong data-start="1914" data-end="1923">공정 개선</strong>: 병목 현상 제거, 자동화 도입</p>
</li>
<li class="" data-start="1944" data-end="1969">
<p class="" data-start="1946" data-end="1969"><strong data-start="1946" data-end="1956">작업자 교육</strong>: 작업 효율성 향상</p>
</li>
</ul>
<h3 class="" data-start="1971" data-end="1998"><strong data-start="1975" data-end="1996">(3) 생산성 향상 KPI 도입</strong></h3>
<ul data-start="1999" data-end="2025">
<li class="" data-start="1999" data-end="2025">
<p class="" data-start="2001" data-end="2025">계획 vs. 실적 비교 후 지속적인 개선</p>
</li>
</ul>
<hr class="" data-start="2027" data-end="2030" />
<h1 class="" data-start="2032" data-end="2045"><strong data-start="2034" data-end="2043">5. 결론</strong></h1>
<p class="" data-start="2046" data-end="2141"><strong data-start="2046" data-end="2081">임률은 원가 절감과 생산성 향상에 핵심적인 역할을 한다.</strong><br data-start="2081" data-end="2084" />계획 임률과 실질 임률을 정기적으로 비교하면서 공정을 최적화하면 원가를 줄이고 경쟁력을 높일 수 있다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://korduck.duckdns.org/259/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>wireguard + dnsmasq 속도저하, 끊김 해결하는 최적의 방법은? (Raspberry pi)</title>
		<link>https://korduck.duckdns.org/253/</link>
					<comments>https://korduck.duckdns.org/253/#respond</comments>
		
		<dc:creator><![CDATA[Joinsoo]]></dc:creator>
		<pubDate>Mon, 31 Mar 2025 04:30:57 +0000</pubDate>
				<category><![CDATA[Raspberry Pi]]></category>
		<guid isPermaLink="false">https://korduck.duckdns.org/?p=253</guid>

					<description><![CDATA[설정 파일 열기: sudo nano /etc/dnsmasq.conf 다음 설정 추가 또는 수정: cache-size=5000 # 캐시 크기 증가 (기본값: 150) no-negcache # NXDOMAIN(없는 도메인) 캐시 방지 &#160; /etc/dnsmasq.conf에 추가: filterwin2k no-resolv server=8.8.8.8 server=8.8.4.4 server=1.1.1.1 server=9.9.9.9 ✅ WireGuard CPU 최적화 (라즈베리파이 성능 최적화) AES 암호화 가속 활성화 (Raspberry Pi 4 이상) sudo modprobe aes-neon-bs CPU 가속을 WireGuard에서 사용하도록 ... <a title="wireguard + dnsmasq 속도저하, 끊김 해결하는 최적의 방법은? (Raspberry pi)" class="read-more" href="https://korduck.duckdns.org/253/" aria-label="wireguard + dnsmasq 속도저하, 끊김 해결하는 최적의 방법은? (Raspberry pi)에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[<ul>
<li class="" data-start="232" data-end="295">
<p class="" data-start="235" data-end="246">설정 파일 열기:</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash"><strong>sudo nano /etc/dnsmasq.conf</strong><br />
</code></div>
</div>
</li>
<li class="" data-start="296" data-end="511">
<p class="" data-start="299" data-end="316">다음 설정 추가 또는 수정:</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-ini"><span class="hljs-attr">cache-size</span>=<span class="hljs-number">5000</span>      <span class="hljs-comment"># 캐시 크기 증가 (기본값: 150)</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-ini">no-negcache          <span class="hljs-comment"># NXDOMAIN(없는 도메인) 캐시 방지</span></code></div>
</div>
<div dir="ltr"></div>
</li>
</ul>
<p>&nbsp;</p>
<p class="" data-start="914" data-end="940"><strong><code data-start="914" data-end="933">/etc/dnsmasq.conf</code>에 추가:</strong></p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-ini">filterwin2k<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-ini">no-resolv<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-ini"><span class="hljs-attr">server</span>=<span class="hljs-number">8.8</span>.<span class="hljs-number">8.8</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-ini"><span class="hljs-attr">server</span>=<span class="hljs-number">8.8</span>.<span class="hljs-number">4.4</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-ini"><span class="hljs-attr">server</span>=<span class="hljs-number">1.1</span>.<span class="hljs-number">1.1</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-ini"><span class="hljs-attr">server</span>=<span class="hljs-number">9.9</span>.<span class="hljs-number">9.9</span></code></div>
</div>
<div dir="ltr"></div>
<h1 dir="ltr"></h1>
<div dir="ltr"></div>
<div dir="ltr"></div>
<div dir="ltr">
<h3 class="" data-start="2046" data-end="2089"><strong data-start="2050" data-end="2089"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> WireGuard CPU 최적화 (라즈베리파이 성능 최적화)</strong></h3>
<ol data-start="2090" data-end="2308">
<li class="" data-start="2090" data-end="2180">
<p class="" data-start="2093" data-end="2133"><strong data-start="2093" data-end="2131">AES 암호화 가속 활성화 (Raspberry Pi 4 이상)</strong></p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo modprobe aes-neon-bs<br />
</code></div>
<div dir="ltr"></div>
</div>
</li>
<li class="" data-start="2182" data-end="2308">
<p class="" data-start="2185" data-end="2273"><strong data-start="2185" data-end="2217">CPU 가속을 WireGuard에서 사용하도록 설정</strong><br data-start="2217" data-end="2220" /><code data-start="2223" data-end="2248">/etc/wireguard/wg0.conf</code>의 <code data-start="2250" data-end="2263">[Interface]</code> 섹션에 추가:</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-ini"><span class="hljs-attr">fwmark</span> = <span class="hljs-number">51820</span></code></div>
</div>
</li>
</ol>
<p class="" data-start="2310" data-end="2353"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="2312" data-end="2319">효과:</strong> WireGuard 암호화 속도 향상 → CPU 부담 감소</p>
</div>
<p data-start="2310" data-end="2353">
]]></content:encoded>
					
					<wfw:commentRss>https://korduck.duckdns.org/253/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>✅ Apache Reverse Proxy로 HTTP → HTTPS 변환하는 방법</title>
		<link>https://korduck.duckdns.org/248/</link>
					<comments>https://korduck.duckdns.org/248/#comments</comments>
		
		<dc:creator><![CDATA[Joinsoo]]></dc:creator>
		<pubDate>Thu, 27 Mar 2025 03:13:33 +0000</pubDate>
				<category><![CDATA[Raspberry Pi]]></category>
		<guid isPermaLink="false">https://korduck.duckdns.org/?p=248</guid>

					<description><![CDATA[🔹 1. Apache Reverse Proxy 개념 Apache의 mod_proxy 모듈을 이용하면, HTTP 사이트를 HTTPS로 변환하여 Nextcloud에서 안전하게 iframe으로 표시할 수 있습니다. 외부 HTTP 사이트 → Apache Reverse Proxy → HTTPS 변환 후 Nextcloud에 제공 이 방식은 브라우저의 Mixed Content Policy 문제를 해결하고, HTTPS 환경에서 안전하게 iframe을 사용할 수 있도록 도와줍니다. 🔹 2. Apache Reverse Proxy 설정 ... <a title="✅ Apache Reverse Proxy로 HTTP → HTTPS 변환하는 방법" class="read-more" href="https://korduck.duckdns.org/248/" aria-label="✅ Apache Reverse Proxy로 HTTP → HTTPS 변환하는 방법에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[<h2 class="" data-start="185" data-end="221"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f539.png" alt="🔹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="191" data-end="221">1. Apache Reverse Proxy 개념</strong></h2>
<p class="" data-start="222" data-end="317">Apache의 <strong data-start="230" data-end="243">mod_proxy</strong> 모듈을 이용하면, <strong data-start="254" data-end="308">HTTP 사이트를 HTTPS로 변환하여 Nextcloud에서 안전하게 iframe으로 표시</strong>할 수 있습니다.</p>
<ul data-start="319" data-end="480">
<li class="" data-start="319" data-end="390">
<p class="" data-start="321" data-end="390"><strong data-start="321" data-end="336">외부 HTTP 사이트</strong> → Apache Reverse Proxy → <strong data-start="362" data-end="390">HTTPS 변환 후 Nextcloud에 제공</strong></p>
</li>
<li class="" data-start="391" data-end="480">
<p class="" data-start="393" data-end="480">이 방식은 <strong data-start="399" data-end="436">브라우저의 Mixed Content Policy 문제를 해결</strong>하고, HTTPS 환경에서 안전하게 iframe을 사용할 수 있도록 도와줍니다.</p>
</li>
</ul>
<hr class="" data-start="482" data-end="485" />
<h2 class="" data-start="487" data-end="526"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f539.png" alt="🔹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="493" data-end="526">2. Apache Reverse Proxy 설정 방법</strong></h2>
<h3 class="" data-start="527" data-end="569"><strong data-start="531" data-end="569"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 1) Apache에 Reverse Proxy 모듈 활성화</strong></h3>
<p class="" data-start="570" data-end="626">Ubuntu/Debian 기준으로 아래 명령어를 실행하여 <strong data-start="602" data-end="622">Proxy 관련 모듈을 활성화</strong>합니다.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo a2enmod proxy<br />
sudo a2enmod proxy_http<br />
sudo a2enmod ssl<br />
sudo a2enmod headers<br />
sudo a2enmod proxy_html<br />
</code></div>
</div>
<p class="" data-start="746" data-end="776">모듈을 활성화한 후 <strong data-start="757" data-end="772">Apache를 재시작</strong>합니다.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo systemctl restart apache2<br />
</code></div>
</div>
<hr class="" data-start="822" data-end="825" />
<h3 class="" data-start="827" data-end="878"><strong data-start="831" data-end="878"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 2) Virtual Host 파일 설정 (Reverse Proxy 구성)</strong></h3>
<p class="" data-start="879" data-end="927">이제 Reverse Proxy를 설정할 <strong data-start="901" data-end="923">가상 호스트 파일을 생성 및 수정</strong>합니다.</p>
<ol data-start="929" data-end="991">
<li class="" data-start="929" data-end="991">
<p class="" data-start="932" data-end="991"><code data-start="932" data-end="981">/etc/apache2/sites-available/reverse-proxy.conf</code> 파일을 만듭니다.</p>
</li>
</ol>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo nano /etc/apache2/sites-available/reverse-proxy.conf<br />
</code></div>
</div>
<ol start="2" data-start="1064" data-end="1249">
<li class="" data-start="1064" data-end="1249">
<p class="" data-start="1067" data-end="1082">다음 내용을 추가합니다.</p>
<ul data-start="1086" data-end="1249">
<li class="" data-start="1086" data-end="1127">
<p class="" data-start="1088" data-end="1127"><code data-start="1088" data-end="1108">your-nextcloud.com</code> → Nextcloud의 도메인</p>
</li>
<li class="" data-start="1131" data-end="1188">
<p class="" data-start="1133" data-end="1188"><code data-start="1133" data-end="1159">proxy.your-nextcloud.com</code> → Reverse Proxy로 사용할 서브도메인</p>
</li>
<li class="" data-start="1192" data-end="1249">
<p class="" data-start="1194" data-end="1249"><code data-start="1194" data-end="1225">http://your-external-site.com</code> → iframe으로 표시할 HTTP 사이트</p>
</li>
</ul>
</li>
</ol>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-apache"><code class="!whitespace-pre language-apache">&lt;VirtualHost *:443&gt;<br />
ServerName proxy.your-nextcloud.com</code></code># SSL 설정 (Let&#8217;s Encrypt 사용 가능)<br />
SSLEngine on<br />
SSLCertificateFile /etc/letsencrypt/live/your-nextcloud.com/fullchain.pem<br />
SSLCertificateKeyFile /etc/letsencrypt/live/your-nextcloud.com/privkey.pem</p>
<p><code class="!whitespace-pre language-apache"><code class="!whitespace-pre language-apache"></code></code># Reverse Proxy 설정<br />
ProxyPreserveHost On<br />
ProxyPass / http://your-external-site.com/<br />
ProxyPassReverse / http://your-external-site.com/</p>
<p><code class="!whitespace-pre language-apache"><code class="!whitespace-pre language-apache"></code></code># Header 설정 (보안 관련)<br />
&lt;IfModule mod_headers.c&gt;<br />
Header always set X-Frame-Options &#8220;SAMEORIGIN&#8221;<br />
Header always set Content-Security-Policy &#8220;frame-ancestors &#8216;self&#8217; https://your-nextcloud.com;&#8221;<br />
&lt;/IfModule&gt;</p>
<p><code class="!whitespace-pre language-apache"><code class="!whitespace-pre language-apache"></code></code># 로그 설정<br />
ErrorLog ${APACHE_LOG_DIR}/reverse-proxy_error.log<br />
CustomLog ${APACHE_LOG_DIR}/reverse-proxy_access.log combined<br />
&lt;/VirtualHost&gt;</p>
</div>
</div>
<p class="" data-start="2063" data-end="2074"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="2065" data-end="2074">설정 설명</strong></p>
<ul data-start="2075" data-end="2260">
<li class="" data-start="2075" data-end="2139">
<p class="" data-start="2077" data-end="2139"><code data-start="2077" data-end="2088">ProxyPass</code>와 <code data-start="2090" data-end="2108">ProxyPassReverse</code>를 이용해 <strong data-start="2114" data-end="2137">HTTP 사이트를 HTTPS로 변환</strong></p>
</li>
<li class="" data-start="2140" data-end="2208">
<p class="" data-start="2142" data-end="2208"><code data-start="2142" data-end="2172">X-Frame-Options "SAMEORIGIN"</code> → Nextcloud에서 iframe으로 로드 가능하게 설정</p>
</li>
<li class="" data-start="2209" data-end="2260">
<p class="" data-start="2211" data-end="2260"><code data-start="2211" data-end="2236">Content-Security-Policy</code> → iframe에서 표시할 도메인 제한</p>
</li>
</ul>
<hr class="" data-start="2262" data-end="2265" />
<h3 class="" data-start="2267" data-end="2300"><strong data-start="2271" data-end="2300"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 3) Reverse Proxy 설정 적용</strong></h3>
<ol data-start="2301" data-end="2318">
<li class="" data-start="2301" data-end="2318">
<p class="" data-start="2304" data-end="2318"><strong data-start="2304" data-end="2318">가상 호스트 활성화</strong></p>
</li>
</ol>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo a2ensite reverse-proxy<br />
</code></div>
</div>
<ol start="2" data-start="2360" data-end="2382">
<li class="" data-start="2360" data-end="2382">
<p class="" data-start="2363" data-end="2382"><strong data-start="2363" data-end="2382">Apache 설정 오류 확인</strong></p>
</li>
</ol>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo apachectl configtest<br />
</code></div>
</div>
<p class="" data-start="2421" data-end="2456"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <code data-start="2423" data-end="2436">"Syntax OK"</code> 메시지가 나오면 설정이 정상입니다.</p>
<ol start="3" data-start="2458" data-end="2475">
<li class="" data-start="2458" data-end="2475">
<p class="" data-start="2461" data-end="2475"><strong data-start="2461" data-end="2475">Apache 재시작</strong></p>
</li>
</ol>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo systemctl restart apache2<br />
</code></div>
</div>
<hr class="" data-start="2520" data-end="2523" />
<h3 class="" data-start="2525" data-end="2568"><strong data-start="2529" data-end="2568"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 4) Nextcloud의 External Sites에 추가</strong></h3>
<p class="" data-start="2569" data-end="2693">이제 Nextcloud에서 <strong data-start="2584" data-end="2602">External Sites</strong> 앱을 이용하여 iframe을 추가할 때,<br data-start="2625" data-end="2628" /><strong data-start="2628" data-end="2686">기존 HTTP 사이트 대신 <code data-start="2645" data-end="2680">https://proxy.your-nextcloud.com/</code>을 입력</strong>하면 됩니다.</p>
<p class="" data-start="2695" data-end="2703"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="2697" data-end="2703">예제</strong></p>
<ul data-start="2704" data-end="2792">
<li class="" data-start="2704" data-end="2745">
<p class="" data-start="2706" data-end="2745"><strong data-start="2706" data-end="2713">기존:</strong> <code data-start="2714" data-end="2745">http://your-external-site.com</code></p>
</li>
<li class="" data-start="2746" data-end="2792">
<p class="" data-start="2748" data-end="2792"><strong data-start="2748" data-end="2757">변경 후:</strong> <code data-start="2758" data-end="2792">https://proxy.your-nextcloud.com</code></p>
</li>
</ul>
<p class="" data-start="2794" data-end="2835">이제 Nextcloud에서 iframe으로 안전하게 표시될 것입니다. <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<hr class="" data-start="2837" data-end="2840" />
<h2 class="" data-start="2842" data-end="2865"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f539.png" alt="🔹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="2848" data-end="2865">추가 설정 (선택 사항)</strong></h2>
<h4 class="" data-start="2866" data-end="2901"><strong data-start="2871" data-end="2901">1&#x20e3; 만약 HTTP로 접근이 가능해야 한다면?</strong></h4>
<p class="" data-start="2902" data-end="3000">HTTPS가 아닌 HTTP에서도 프록시가 동작하도록 하려면, 다음 설정을 <code data-start="2943" data-end="2992">/etc/apache2/sites-available/reverse-proxy.conf</code>에 추가하세요.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-apache">&lt;VirtualHost *:80&gt;<br />
ServerName proxy.your-nextcloud.com<br />
Redirect permanent / https://proxy.your-nextcloud.com/<br />
&lt;/VirtualHost&gt;<br />
</code></div>
</div>
<p class="" data-start="3150" data-end="3192">이렇게 하면 HTTP로 접근해도 자동으로 <strong data-start="3173" data-end="3188">HTTPS로 리디렉트</strong>됩니다.</p>
<h2 class="" data-start="243" data-end="269"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="248" data-end="269">1&#x20e3; 현재 SSL 인증서 확인</strong></h2>
<p class="" data-start="270" data-end="293">먼저 현재 설정된 인증서를 확인합니다.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">openssl s_client -connect proxy.korduck.duckdns.org:443 -servername proxy.korduck.duckdns.org &lt;/dev/null 2&gt;/dev/null | openssl x509 -noout -text | grep <span class="hljs-string">"Subject:"</span><br />
</code></div>
</div>
<p class="" data-start="470" data-end="494"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="473" data-end="492">출력 예시 (정상적인 경우)</strong></p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre"><span class="hljs-section">Subject: CN=proxy.korduck.duckdns.org</span><br />
</code></div>
</div>
<p class="" data-start="541" data-end="574"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="543" data-end="572">출력 예시 (잘못된 경우, 다른 도메인일 때)</strong></p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre"><span class="hljs-section">Subject: CN=example.com</span><br />
</code></div>
</div>
<p class="" data-start="607" data-end="681">이 경우, SSL 인증서가 <code data-start="622" data-end="649">proxy.korduck.duckdns.org</code>에 대해 발급되지 않았기 때문에 새로 발급해야 합니다.</p>
<hr class="" data-start="683" data-end="686" />
<h2 class="" data-start="688" data-end="727"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="693" data-end="727">2&#x20e3; Let&#8217;s Encrypt 인증서 갱신 (재발급)</strong></h2>
<ol data-start="728" data-end="742">
<li class="" data-start="728" data-end="742">
<p class="" data-start="731" data-end="742">기존 인증서 삭제</p>
</li>
</ol>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo <span class="hljs-built_in">rm</span> -rf /etc/letsencrypt/live/proxy.korduck.duckdns.org<br />
sudo <span class="hljs-built_in">rm</span> -rf /etc/letsencrypt/archive/proxy.korduck.duckdns.org<br />
sudo <span class="hljs-built_in">rm</span> -rf /etc/letsencrypt/renewal/proxy.korduck.duckdns.org.conf<br />
</code></div>
</div>
<ol start="2" data-start="947" data-end="962">
<li class="" data-start="947" data-end="962">
<p class="" data-start="950" data-end="962">새로운 인증서 발급</p>
</li>
</ol>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo certbot certonly --standalone -d proxy.korduck.duckdns.org<br />
</code></div>
</div>
<p class="" data-start="1039" data-end="1074"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="1042" data-end="1072">발급이 성공하면 다음과 같은 메시지가 나와야 함</strong></p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre"><span class="hljs-type">Successfully</span> received certificate.<br />
<span class="hljs-type">Certificate</span> <span class="hljs-keyword">is</span> saved at: <span class="hljs-regexp">/etc/</span>letsencrypt<span class="hljs-regexp">/live/</span>proxy.korduck.duckdns.org<span class="hljs-operator">/</span>fullchain.pem<br />
</code></div>
</div>
<ol start="3" data-start="1206" data-end="1225">
<li class="" data-start="1206" data-end="1225">
<p class="" data-start="1209" data-end="1225">Apache 설정 업데이트</p>
</li>
</ol>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo nano /etc/apache2/sites-available/reverse-proxy.conf<br />
</code></div>
</div>
<p class="" data-start="1296" data-end="1309"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="1298" data-end="1307">설정 확인</strong></p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-apache">SSLEngine on<br />
SSLCertificateFile /etc/letsencrypt/live/proxy.korduck.duckdns.org/fullchain.pem<br />
SSLCertificateKeyFile /etc/letsencrypt/live/proxy.korduck.duckdns.org/privkey.pem<br />
</code></div>
</div>
<ol start="4" data-start="1501" data-end="1516">
<li class="" data-start="1501" data-end="1516">
<p class="" data-start="1504" data-end="1516">Apache 재시작</p>
</li>
</ol>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo systemctl restart apache2<br />
</code></div>
</div>
<hr class="" data-start="1561" data-end="1564" />
<h2 class="" data-start="1566" data-end="1602"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="1571" data-end="1600">3&#x20e3; 올바른 인증서가 적용되었는지 다시 확인</strong></h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">openssl s_client -connect proxy.korduck.duckdns.org:443 -servername proxy.korduck.duckdns.org &lt;/dev/null 2&gt;/dev/null | openssl x509 -noout -text | grep <span class="hljs-string">"Subject:"</span><br />
</code></div>
</div>
<p class="" data-start="1778" data-end="1803"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="1780" data-end="1801">출력이 다음과 같으면 정상 작동</strong></p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre"><span class="hljs-section">Subject: CN=proxy.korduck.duckdns.org</span><br />
</code></div>
</div>
<p class="" data-start="1850" data-end="1915">이제 다시 <strong data-start="1856" data-end="1909">브라우저에서 <code data-start="1865" data-end="1900">https://proxy.korduck.duckdns.org</code> 접속 테스트</strong>하거나,</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">curl -I https://proxy.korduck.duckdns.org<br />
</code></div>
</div>
<p class="" data-start="1970" data-end="2002">실행하여 <strong data-start="1975" data-end="1998">HTTP 200 응답이 오는지 확인</strong>하세요.</p>
<h2 class="" data-start="482" data-end="542"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="487" data-end="542">2&#x20e3; 새로운 도메인(proxy.korduck.duckdns.org)으로 SSL 인증서 갱신</strong></h2>
<h3 class="" data-start="543" data-end="582"><strong data-start="547" data-end="582"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 방법 1: 기존 도메인 + 새로운 도메인 함께 인증</strong></h3>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo certbot certonly --standalone -d korduck.duckdns.org -d proxy.korduck.duckdns.org<br />
</code></div>
</div>
<p class="" data-start="682" data-end="721"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="685" data-end="719">이렇게 하면 하나의 인증서에 두 개의 도메인이 포함됨.</strong></p>
<p class="" data-start="723" data-end="728">또는,</p>
<h3 class="" data-start="730" data-end="770"><strong data-start="734" data-end="770"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 방법 2: 기존 인증서 삭제 후 새로운 도메인만 인증</strong></h3>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo certbot delete --cert-name korduck.duckdns.org<br />
sudo certbot certonly --standalone -d proxy.korduck.duckdns.org<br />
</code></div>
</div>
<hr class="" data-start="899" data-end="902" />
<h2 class="" data-start="904" data-end="939"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="909" data-end="939">3&#x20e3; Apache/Nginx SSL 설정 수정</strong></h2>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo nano /etc/apache2/sites-available/nextcloud.conf<br />
</code></div>
</div>
<p class="" data-start="1006" data-end="1021"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong data-start="1008" data-end="1021">변경해야 할 부분</strong></p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-apache">SSLEngine on<br />
SSLCertificateFile /etc/letsencrypt/live/proxy.korduck.duckdns.org/fullchain.pem<br />
SSLCertificateKeyFile /etc/letsencrypt/live/proxy.korduck.duckdns.org/privkey.pem<br />
</code></div>
</div>
<p class="" data-start="1212" data-end="1231">저장 후 <strong data-start="1217" data-end="1231">Apache 재시작</strong></p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo systemctl restart apache2</code></div>
</div>
<div dir="ltr"></div>
<div dir="ltr"></div>
]]></content:encoded>
					
					<wfw:commentRss>https://korduck.duckdns.org/248/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>라즈베리파이에 DokuWiki를 설치하는 방법</title>
		<link>https://korduck.duckdns.org/246/</link>
					<comments>https://korduck.duckdns.org/246/#respond</comments>
		
		<dc:creator><![CDATA[Joinsoo]]></dc:creator>
		<pubDate>Wed, 26 Mar 2025 08:05:16 +0000</pubDate>
				<category><![CDATA[Raspberry Pi]]></category>
		<guid isPermaLink="false">https://korduck.duckdns.org/?p=246</guid>

					<description><![CDATA[1. 시스템 업데이트 먼저, 라즈베리파이의 패키지를 최신 상태로 유지하는 것이 중요해. sudo apt update &#38;&#38; sudo apt upgrade -y 2. 필요한 패키지 설치 DokuWiki는 PHP 기반이므로, 웹 서버(Apache 또는 Nginx)와 PHP가 필요해. (1) Apache + PHP 설치 sudo apt install apache2 php php-cli php-xml php-mbstring php-gd php-curl php-zip -y 설치 후, Apache를 시작하고 자동 실행되도록 ... <a title="라즈베리파이에 DokuWiki를 설치하는 방법" class="read-more" href="https://korduck.duckdns.org/246/" aria-label="라즈베리파이에 DokuWiki를 설치하는 방법에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[<h3 class="" data-start="45" data-end="64"><strong data-start="49" data-end="64">1. 시스템 업데이트</strong></h3>
<p class="" data-start="65" data-end="101">먼저, 라즈베리파이의 패키지를 최신 상태로 유지하는 것이 중요해.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo apt update &amp;&amp; sudo apt upgrade -y<br />
</code></div>
</div>
<hr class="" data-start="155" data-end="158" />
<h3 class="" data-start="160" data-end="181"><strong data-start="164" data-end="181">2. 필요한 패키지 설치</strong></h3>
<p class="" data-start="182" data-end="235">DokuWiki는 PHP 기반이므로, 웹 서버(Apache 또는 Nginx)와 PHP가 필요해.</p>
<h4 class="" data-start="237" data-end="265"><strong data-start="242" data-end="265">(1) Apache + PHP 설치</strong></h4>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo apt install apache2 php php-cli php-xml php-mbstring php-gd php-curl php-zip -y<br />
</code></div>
</div>
<p class="" data-start="364" data-end="395">설치 후, Apache를 시작하고 자동 실행되도록 설정:</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo systemctl <span class="hljs-built_in">enable</span> --now apache2</code></div>
</div>
<div dir="ltr"></div>
<div dir="ltr">
<h3 class="" data-start="697" data-end="726"><strong data-start="701" data-end="726">3. DokuWiki 다운로드 및 설치</strong></h3>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash"><span class="hljs-built_in">cd</span> /var/www/html<br />
sudo wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz<br />
sudo tar xvf dokuwiki-stable.tgz<br />
sudo <span class="hljs-built_in">mv</span> dokuwiki-* dokuwiki<br />
sudo <span class="hljs-built_in">chown</span> -R www-data:www-data /var/www/html/dokuwiki<br />
</code></div>
</div>
<hr class="" data-start="946" data-end="949" />
<h3 class="" data-start="951" data-end="969"><strong data-start="955" data-end="969">4. 웹 서버 설정</strong></h3>
<h4 class="" data-start="970" data-end="999"><strong data-start="975" data-end="999">(1) Apache 가상 호스트 설정</strong></h4>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo nano /etc/apache2/sites-available/dokuwiki.conf<br />
</code></div>
</div>
<p class="" data-start="1065" data-end="1075">아래 내용을 추가:</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre">&lt;VirtualHost *:<span class="hljs-number">80</span>&gt;<br />
ServerAdmin <span class="hljs-keyword">admin</span>@example.com<br />
DocumentRoot /var/www/html/dokuwiki<br />
DirectoryIndex <span class="hljs-keyword">index</span>.php <span class="hljs-keyword">index</span>.html<br />
&lt;Directory /var/www/html/dokuwiki&gt;<br />
<span class="hljs-keyword">Options</span> FollowSymLinks<br />
AllowOverride <span class="hljs-keyword">All</span><br />
Require <span class="hljs-keyword">all</span> granted<br />
&lt;/Directory&gt;<br />
ErrorLog ${APACHE_LOG_DIR}/dokuwiki_error.<span class="hljs-keyword">log</span><br />
CustomLog ${APACHE_LOG_DIR}/dokuwiki_access.<span class="hljs-keyword">log</span> combined<br />
&lt;/VirtualHost&gt;<br />
</code></div>
</div>
<p class="" data-start="1485" data-end="1491">설정 적용:</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo a2ensite dokuwiki<br />
sudo a2enmod rewrite<br />
sudo systemctl restart apache2</code></div>
</div>
</div>
<div dir="ltr"></div>
<div dir="ltr">
<h3 class="" data-start="2499" data-end="2524"><strong data-start="2503" data-end="2524">5. DokuWiki 설정 완료</strong></h3>
<p class="" data-start="2525" data-end="2596">이제 웹 브라우저에서 <code data-start="2537" data-end="2576">http://라즈베리파이_IP/dokuwiki/install.php</code> 로 접속해서 설치를 마무리하면 돼.</p>
</div>
<h3 class="" data-start="72" data-end="114"><strong data-start="76" data-end="112"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 1&#x20e3; Apache에서 PHP 모듈이 활성화되지 않음</strong></h3>
<p class="" data-start="115" data-end="159">먼저, PHP가 제대로 설치되고 Apache에서 활성화되었는지 확인해 보자.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">php -v<br />
</code></div>
</div>
<p class="" data-start="180" data-end="251">위 명령어를 실행했을 때 PHP 버전이 출력되지 않으면 PHP가 설치되지 않은 것이야.<br data-start="228" data-end="231" />설치하려면 다음 명령을 실행하면 돼.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo apt install php libapache2-mod-php -y<br />
</code></div>
</div>
<p class="" data-start="309" data-end="342">설치 후 PHP 모듈을 활성화하고 Apache를 다시 시작:</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo a2enmod php<br />
sudo systemctl restart apache2</code></div>
</div>
<div dir="ltr"></div>
<div dir="ltr">
<h3 class="" data-start="841" data-end="882"><strong data-start="845" data-end="880"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 3&#x20e3; Apache가 PHP 파일을 처리하도록 설정</strong></h3>
<p class="" data-start="883" data-end="940"><code data-start="883" data-end="930">/etc/apache2/sites-available/000-default.conf</code> 파일을 열어보자.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo nano /etc/apache2/sites-available/000-default.conf<br />
</code></div>
</div>
<p class="" data-start="1011" data-end="1047">파일 안에 아래 내용이 포함되어 있는지 확인하고, 없으면 추가해.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre">&lt;FilesMatch <span class="hljs-string">"\.php$"</span>&gt;<br />
SetHandler application/x-httpd-php<br />
&lt;/FilesMatch&gt;<br />
</code></div>
</div>
<p class="" data-start="1133" data-end="1152">저장 후 Apache를 다시 시작.</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre language-bash">sudo systemctl restart apache2</code></div>
</div>
</div>
<div dir="ltr"></div>
<div dir="ltr"></div>
<div dir="ltr"><span style="color: #ff0000;"><strong>경고: 데이터 디렉터리가 제대로 보호되지 않은 것 같습니다.</strong></span></div>
<div dir="ltr">apache2.conf 수정 (추가)</div>
<div dir="ltr"></div>
<div dir="ltr">
<pre class="code">&lt;LocationMatch "/(data|conf|bin|inc|vendor)/"&gt;
    Order allow,deny
    Deny from all
    Satisfy All
&lt;/LocationMatch&gt;</pre>
<p>&nbsp;</p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://korduck.duckdns.org/246/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
