<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>lee's blog</title><link>https://ken-0913.github.io/myblog/</link><description>lee's blog</description><generator>Hugo -- gohugo.io</generator><language>ko-kr</language><managingEditor>hyeonjae0913@gmail.com (ken-0913)</managingEditor><webMaster>hyeonjae0913@gmail.com (ken-0913)</webMaster><lastBuildDate>Tue, 11 Aug 2026 20:00:00 +0900</lastBuildDate><atom:link href="https://ken-0913.github.io/myblog/index.xml" rel="self" type="application/rss+xml"/><item><title>kind + RTX 3050 6GB에서 Ray Serve LLM으로 vLLM 서빙하기 — RayService 실습 매뉴얼</title><link>https://ken-0913.github.io/myblog/posts/llm/llm-ray-serving-result/</link><pubDate>Tue, 11 Aug 2026 20:00:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/llm/llm-ray-serving-result/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/llm-ray-serving-result-15513a3c.png" referrerpolicy="no-referrer">
            </div><p><a href="../llm-serving-single-model-lab/" rel="">앞선 두 실습</a>은 서버 한 대에서 프로세스를 직접 띄웠다. 이번에는 <strong>Kubernetes 위에 얹는다.</strong> KubeRay Operator가 Ray 클러스터를 관리하고, 그 위에서 Ray Serve LLM이 vLLM 엔진을 감싸 <strong>OpenAI 호환 엔드포인트</strong>를 노출하는 구조를 만든다.</p>
<p>최종 목표는 하나다. <code>kubectl apply</code> 한 번으로 LLM 서빙이 뜨고, 모델을 바꾸려면 매니페스트만 고치면 되는 상태다.</p>
<p><strong>이 글의 모든 명령과 결과는 RTX 3050 6GB 한 장이 달린 리눅스 데스크톱에서 실제로 실행한 것이다.</strong> 6GB는 LLM 서빙에 넉넉한 크기가 아니라서, 모델과 설정을 어디까지 줄여야 하는지가 이 실습의 절반을 차지한다.</p>]]></description></item><item><title>LLM 스터디 2주차 - 멀티 모델 서빙과 Triton 위임 직접 해보기</title><link>https://ken-0913.github.io/myblog/posts/llm/llm-serving-multi-model-lab/</link><pubDate>Mon, 10 Aug 2026 23:00:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/llm/llm-serving-multi-model-lab/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/llm-serving-multi-model-lab-f87455c6.png" referrerpolicy="no-referrer">
            </div><p><a href="../llm-serving-single-model-lab/" rel="">앞 글</a>에서는 모델 <strong>하나</strong>를 어떻게 빠르게 굴릴지를 다뤘다. 배칭, 스트리밍, 프로세스 격리가 주제였다. 이번에는 질문이 바뀐다. <strong>모델이 여러 개일 때 무엇을 메모리에 올려두고 어디로 보낼 것인가.</strong></p>
<p>같은 저장소 <a href="https://github.com/orca3/llm-model-inference" target="_blank" rel="noopener noreferrer">orca3/llm-model-inference</a>의 <code>ch03/multi_model_serving</code>을 쓴다. 모델 4개를 LRU 캐시로 관리하고, 그중 하나는 <strong>NVIDIA Triton 컨테이너에 위임</strong>하는 구조다.</p>
<p>이 글의 모든 로그와 명령 결과는 <strong>RTX 3050 6GB 리눅스 머신에서 실제로 실행한 것</strong>이다.</p>
<h2 id="1-part-1과-무엇이-다른가" class="headerLink">
    <a href="#1-part-1%ea%b3%bc-%eb%ac%b4%ec%97%87%ec%9d%b4-%eb%8b%a4%eb%a5%b8%ea%b0%80" class="header-mark"></a>1. Part 1과 무엇이 다른가</h2><p>두 랩은 완전히 독립적이다. 그리고 <strong>torch 버전이 충돌</strong>하므로 venv를 반드시 분리해야 한다.</p>]]></description></item><item><title>LLM 스터디 2주차 - 단일 모델 LLM 서빙 서버 직접 만들어보기</title><link>https://ken-0913.github.io/myblog/posts/llm/llm-serving-single-model-lab/</link><pubDate>Mon, 10 Aug 2026 21:00:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/llm/llm-serving-single-model-lab/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/llm-serving-single-model-lab-e6f25d84.png" referrerpolicy="no-referrer">
            </div><p>LLM 서빙은 보통 vLLM이나 TGI 같은 프레임워크를 가져다 쓴다. 하지만 그 안에서 무슨 일이 벌어지는지는 직접 만들어봐야 감이 온다. 이번 실습은 <strong>배칭 · 스트리밍 · 프로세스 격리</strong>를 손으로 구현한 서버를 띄우고, 로그를 읽어 동작을 확인하는 과정이다.</p>
<p>대상 코드는 책 <em>Hands-On LLM Serving and Optimization</em>의 공식 저장소 <a href="https://github.com/orca3/llm-model-inference" target="_blank" rel="noopener noreferrer">orca3/llm-model-inference</a> 중 <code>ch03/single_model_llm_serving</code>이다. 모델은 <strong>facebook/opt-125m</strong>을 쓴다. 작아서 6GB GPU에서도 충분히 돌아간다.</p>
<p>이 글의 모든 로그와 명령 결과는 <strong>RTX 3050 6GB 리눅스 머신에서 실제로 실행한 것</strong>이다.</p>]]></description></item><item><title>LLM 스터디 1주차 - Transformer격파하기</title><link>https://ken-0913.github.io/myblog/posts/llm/llm-series-all-in-one/</link><pubDate>Fri, 07 Aug 2026 20:00:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/llm/llm-series-all-in-one/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/llm-series-all-in-one-85eb1b79.png" referrerpolicy="no-referrer">
            </div><h2 id="이-글의-구성" class="headerLink">
    <a href="#%ec%9d%b4-%ea%b8%80%ec%9d%98-%ea%b5%ac%ec%84%b1" class="header-mark"></a>이 글의 구성</h2><table>
	<thead>
			<tr>
					<th></th>
					<th>다루는 것</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>1부</td>
					<td><a href="#1%eb%b6%80-%ec%9e%84%eb%b2%a0%eb%94%a9%ea%b3%bc-%ec%9c%84%ec%b9%98-%ec%a0%95%eb%b3%b4-token%ec%9d%84-%eb%b2%a1%ed%84%b0%eb%a1%9c-%eb%b0%94%ea%be%b8%ea%b8%b0" rel="">임베딩과 위치 정보 (Token을 벡터로 바꾸기)</a></td>
			</tr>
			<tr>
					<td>2부</td>
					<td><a href="#2%eb%b6%80-qkv%eb%a1%9c-%eb%ac%b8%eb%a7%a5%ec%9d%84-%ec%84%9e%eb%8a%94-self-attention" rel="">Q·K·V로 문맥을 섞는 self-attention</a></td>
			</tr>
			<tr>
					<td>3부</td>
					<td><a href="#3%eb%b6%80-multi-head-%eb%a7%88%eb%ac%b4%eb%a6%ac--concat%ea%b3%bc-w%e2%82%92" rel="">Multi-Head 마무리 — concat과 Wₒ</a></td>
			</tr>
			<tr>
					<td>4부</td>
					<td><a href="#4%eb%b6%80-%ea%b0%81-token%ec%9d%84-%eb%94%b0%eb%a1%9c-%ea%b0%80%ea%b3%b5%ed%95%98%eb%8a%94-mlp" rel="">각 Token을 따로 가공하는 MLP</a></td>
			</tr>
			<tr>
					<td>5부</td>
					<td><a href="#5%eb%b6%80-prefill-decode-kv-cache" rel="">prefill, decode, KV Cache</a></td>
			</tr>
			<tr>
					<td>6부</td>
					<td><a href="#6%eb%b6%80-%ec%b6%9c%eb%a0%a5%ec%b8%b5%ea%b3%bc-sampling--%eb%8b%a4%ec%8b%9c-%ea%b8%80%ec%9e%90%eb%a1%9c" rel="">출력층과 sampling — 다시 글자로</a></td>
			</tr>
	</tbody>
</table>
<h1 id="1부-임베딩과-위치-정보-token을-벡터로-바꾸기" class="headerLink">
    <a href="#1%eb%b6%80-%ec%9e%84%eb%b2%a0%eb%94%a9%ea%b3%bc-%ec%9c%84%ec%b9%98-%ec%a0%95%eb%b3%b4-token%ec%9d%84-%eb%b2%a1%ed%84%b0%eb%a1%9c-%eb%b0%94%ea%be%b8%ea%b8%b0" class="header-mark"></a>1부. 임베딩과 위치 정보 (Token을 벡터로 바꾸기)</h1><p>LLM은 글자를 직접 다루지 못한다. 오직 <strong>숫자(벡터)</strong> 만 계산할 수 있다.
그래서 첫 단계는 단어(정확히는 token)를 벡터로 바꾸는 것인데, 이를 <strong>embedding(임베딩)</strong> 이라 한다. 먼저 GPT-3를 예로 임베딩이 <strong>행렬 연산</strong>으로 어떻게 이뤄지는지 본다.</p>]]></description></item><item><title>KubeCon + CloudNativeCon Japan 요코하마 2026 세션 정리 — AI 시대의 Kubernetes와 클라우드 네이티브</title><link>https://ken-0913.github.io/myblog/posts/kubecon-yokohama-2026-review/</link><pubDate>Wed, 29 Jul 2026 21:00:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/kubecon-yokohama-2026-review/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/kubecon-yokohama-2026-review-a6abe5c0.png" referrerpolicy="no-referrer">
            </div><p>2026년 7월 말, KubeCon + CloudNativeCon Japan이 요코하마에서 열렸다. 이번 행사의 공통된 주제는 AI 워크로드를 기존 클라우드 네이티브 생태계 위에 어떻게 통합하느냐였다. 아래는 현장에서 다룬 세션 여섯 개를 정리한 내용이다.</p>
<h2 id="1-키노트-cncf-현황과-ai-시대의-클라우드-네이티브" class="headerLink">
    <a href="#1-%ed%82%a4%eb%85%b8%ed%8a%b8-cncf-%ed%98%84%ed%99%a9%ea%b3%bc-ai-%ec%8b%9c%eb%8c%80%ec%9d%98-%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c-%eb%84%a4%ec%9d%b4%ed%8b%b0%eb%b8%8c" class="header-mark"></a>1. 키노트: CNCF 현황과 AI 시대의 클라우드 네이티브</h2><h3 id="cncf-생태계-현황" class="headerLink">
    <a href="#cncf-%ec%83%9d%ed%83%9c%ea%b3%84-%ed%98%84%ed%99%a9" class="header-mark"></a>CNCF 생태계 현황</h3><p>Linux Foundation의 Jonathan Bryce(Executive Director)와 Chris Aniszczyk(CTO)가 키노트를 진행했다. KubeCon EU 기준 참석자 13,500명 이상, 100개국 3,500개 조직이 참여했다고 밝혔다. CNCF 프로젝트는 230개를 넘었고 전 세계 기여자는 30만 명, 개발자 수는 6개월 만에 1,500만 명에서 약 2,000만 명으로 늘었다.</p>]]></description></item><item><title>Claude Code Action에서 MCP 서버에 접속하는 방법 — HTTP(Datadog)와 stdio(GCP)</title><link>https://ken-0913.github.io/myblog/posts/mcp/mcp-datadog-gcp-github-actions-wif/</link><pubDate>Mon, 27 Jul 2026 10:00:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/mcp/mcp-datadog-gcp-github-actions-wif/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/mcp-datadog-gcp-github-actions-wif-bf0c48b3.png" referrerpolicy="no-referrer">
            </div><p>GitHub 이슈에 <code>@claude</code> 코멘트를 달면 Claude Code Action이 Actions에서 돌아간다.
이때 MCP 서버를 붙이면 봇이 외부 도구(Datadog 조회, GCP 로그 조회 등)를 직접 호출할 수 있다.<br>
이 글은 Github Actions에서 MCP 서버에 접속하는 방법과 인증이 다른 두 패턴(HTTP·stdio)으로 정리한다.</p>
<h2 id="전체-구조" class="headerLink">
    <a href="#%ec%a0%84%ec%b2%b4-%ea%b5%ac%ec%a1%b0" class="header-mark"></a>전체 구조</h2><p><code>@claude</code> 코멘트 하나가 다음 흐름을 태운다.</p>
<pre class="mermaid">flowchart TD
    U(["개발자: @claude 코멘트"])

    subgraph GH["GitHub Actions"]
        J["claude-code-action Job"]
        M1["MCP: github_comment"]
        M2["MCP: datadog"]
        M3["MCP: gcpobs"]
        J --> M1
        J --> M2
        J --> M3
    end

    subgraph DD["Datadog"]
        DDEP["mcp.datadoghq.com<br/>HTTP 엔드포인트"]
        DDDATA["APM / Logs / Metrics"]
        DDEP --> DDDATA
    end

    subgraph GCP["Google Cloud"]
        STS["STS / WIF Provider"]
        SA["Service Account<br/>claude-obs-mcp"]
        API["Observability API<br/>Logging / Monitoring / Trace"]
        STS -->|impersonate| SA
        SA --> API
    end

    U --> J
    M1 -->|이슈 답글| U
    M2 -->|Bearer 토큰| DDEP
    M3 -->|OIDC JWT / ADC| STS
</pre><h2 id="mcp-서버-접속-방법" class="headerLink">
    <a href="#mcp-%ec%84%9c%eb%b2%84-%ec%a0%91%ec%86%8d-%eb%b0%a9%eb%b2%95" class="header-mark"></a>MCP 서버 접속 방법</h2><p>MCP(Model Context Protocol) 서버는 Claude에게 <strong>도구(tool)</strong> 를 제공하는 표준이다.
Claude Code Action에 붙일 때는 크게 두 형태로 나뉜다.</p>]]></description></item><item><title>LFCS 자격 준비 (6) Users and Groups 실전 문제 + 연습 터미널</title><link>https://ken-0913.github.io/myblog/posts/lfcs/lfcs-06-users-and-groups/</link><pubDate>Wed, 22 Jul 2026 13:00:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/lfcs/lfcs-06-users-and-groups/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/lfcs-06-users-and-groups-f848dd4f.png" referrerpolicy="no-referrer">
            </div><p>LFCS 시리즈 마지막 편으로 <strong>Users and Groups (10%)</strong> 도메인을 다룬다.
환경 변수, 사용자·그룹·sudo, 리소스 한도(limits)가 핵심 주제이다.
정리 후 <strong>인터랙티브 연습 터미널</strong>에서 명령을 직접 입력해 본다.</p>
<h2 id="1-환경-변수" class="headerLink">
    <a href="#1-%ed%99%98%ea%b2%bd-%eb%b3%80%ec%88%98" class="header-mark"></a>1. 환경 변수</h2><p><code>export</code> 없이 정의한 변수는 현재 셸에만, <code>export</code>한 변수는 자식 프로세스에도 전달된다.
<code>.bashrc</code> 등 프로필 파일로 로그인 시 자동 설정할 수 있다.</p>
<ul>
<li><strong>값 확인</strong>: <code>echo $VARIABLE1</code>, <code>env | grep VARIABLE</code></li>
<li><strong>자식까지 전달</strong>: <code>export VARIABLE3=&quot;${VARIABLE1}-extended&quot;</code></li>
</ul>
<h2 id="2-사용자그룹sudo" class="headerLink">
    <a href="#2-%ec%82%ac%ec%9a%a9%ec%9e%90%ea%b7%b8%eb%a3%b9sudo" class="header-mark"></a>2. 사용자·그룹·sudo</h2><p><code>usermod</code>로 홈 디렉터리(<code>-d</code>)와 기본 그룹(<code>-g</code>)을 바꾼다.
<code>useradd</code>로 셸(<code>-s</code>)·홈(<code>-d -m</code>)·보조 그룹(<code>-G</code>)을 지정해 만든다.
sudo 권한은 <code>visudo</code>로 안전하게 편집한다.</p>]]></description></item><item><title>LFCS 자격 준비 (5) Essential Commands 실전 문제 + 연습 터미널</title><link>https://ken-0913.github.io/myblog/posts/lfcs/lfcs-05-essential-commands/</link><pubDate>Wed, 22 Jul 2026 12:00:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/lfcs/lfcs-05-essential-commands/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/lfcs-05-essential-commands-8d8aa420.png" referrerpolicy="no-referrer">
            </div><p>LFCS 시리즈 다섯 번째 편으로 <strong>Essential Commands (20%)</strong> 도메인을 다룬다.
아카이브·압축, <code>find</code>, Git, 출력 리다이렉션, 정규식이 핵심 주제이다.
정리 후 <strong>인터랙티브 연습 터미널</strong>에서 명령을 직접 입력해 본다.</p>
<h2 id="1-아카이브압축" class="headerLink">
    <a href="#1-%ec%95%84%ec%b9%b4%ec%9d%b4%eb%b8%8c%ec%95%95%ec%b6%95" class="header-mark"></a>1. 아카이브·압축</h2><p>tar 아카이브는 압축 계층(bzip2·gzip 등)을 바꿀 수 있다.
<code>bunzip2 -k</code>로 원본을 유지한 채 해제하고, <code>gzip --best</code>로 최고 압축한다.</p>
<ul>
<li><strong>bzip2 해제(원본 유지)</strong>: <code>bunzip2 -k import001.tar.bz2</code></li>
<li><strong>gzip 최고 압축</strong>: <code>gzip --best import001.tar</code></li>
<li><strong>목록 정렬 출력</strong>: <code>tar tf import001.tar.gz | sort</code></li>
</ul>
<h2 id="2-find로-찾고-실행" class="headerLink">
    <a href="#2-find%eb%a1%9c-%ec%b0%be%ea%b3%a0-%ec%8b%a4%ed%96%89" class="header-mark"></a>2. find로 찾고 실행</h2><p><code>find</code>는 조건으로 파일을 찾고 <code>-exec</code>로 명령을 실행한다.
크기는 <code>-size</code>, 권한은 <code>-perm</code>, 날짜는 <code>-newermt</code>로 비교한다.</p>]]></description></item><item><title>LFCS 자격 준비 (4) Storage 생성·수정 실전 문제 + 연습 터미널</title><link>https://ken-0913.github.io/myblog/posts/lfcs/lfcs-04-storage-operations/</link><pubDate>Wed, 22 Jul 2026 11:00:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/lfcs/lfcs-04-storage-operations/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/lfcs-04-storage-operations-b86f7963.png" referrerpolicy="no-referrer">
            </div><p>LFCS 시리즈 네 번째 편으로 <strong>Storage (20%)</strong> 도메인의 <strong>생성·수정 작업</strong>을 다룬다.
1편이 <code>lsblk</code>·<code>df</code>·<code>pvs</code> 같은 <strong>조회</strong> 위주였다면, 이번 편은 포맷·마운트·LVM 변경 같은 <strong>실제 작업</strong>이 중심이다.
정리 후 <strong>인터랙티브 연습 터미널</strong>에서 명령을 직접 입력해 본다.</p>
<h2 id="0-실습-환경-준비-loop-device" class="headerLink">
    <a href="#0-%ec%8b%a4%ec%8a%b5-%ed%99%98%ea%b2%bd-%ec%a4%80%eb%b9%84-loop-device" class="header-mark"></a>0. 실습 환경 준비 (loop device)</h2><p><code>/dev/vdb</code> 같은 <strong>여분 디스크</strong>가 있다고 가정한다.
하지만 일반 리눅스에는 이런 디스크가 없으므로, <strong>이미지 파일을 블록 장치처럼 연결</strong>하는 loop device로 실습 환경을 만든다.
<code>fallocate</code>로 빈 이미지를 만들고 <code>losetup</code>으로 <code>/dev/loopN</code>에 붙인다. </p>
<div class="term">
    <div class="term__bar">
        <span class="term__dot term__dot--red"></span>
        <span class="term__dot term__dot--yellow"></span>
        <span class="term__dot term__dot--green"></span>
        <span class="term__title">bash</span>
    </div>
    <div class="term__body"><span class="term__comment"># 1GB짜리 이미지 파일 생성</span>
fallocate -l 1G ~/disk.img

<span class="term__comment"># 블록 장치로 연결 → /dev/loop0 같은 이름이 출력됨</span>
sudo losetup -fP --show ~/disk.img

sudo mkfs -t ext4 /dev/loop0
sudo mkdir -p /mnt/backup-black
sudo mount /dev/loop0 /mnt/backup-black
sudo touch /mnt/backup-black/completed
df -h /mnt/backup-black
lsblk -f</div>
</div>
<ul>
<li><strong><code>fallocate -l 1G</code></strong>: 실제 1GB를 즉시 할당해 이미지 파일을 만든다.</li>
<li><strong><code>losetup -f</code></strong>: 비어 있는 첫 loop 장치를 자동 선택한다. <code>-P</code>는 파티션 인식, <code>--show</code>는 할당된 장치명을 출력한다.</li>
</ul>
<p>이렇게 만든 <code>/dev/loop0</code>는 아래 문제들의 <code>/dev/vdb</code> 자리에 그대로 대입하면 된다.</p>]]></description></item><item><title>LFCS 자격 준비 (3) Networking 실전 문제 + 연습 터미널</title><link>https://ken-0913.github.io/myblog/posts/lfcs/lfcs-03-networking/</link><pubDate>Wed, 22 Jul 2026 10:00:00 +0900</pubDate><author><name>ken-0913</name></author><guid>https://ken-0913.github.io/myblog/posts/lfcs/lfcs-03-networking/</guid><description><![CDATA[<div class="featured-image">
                <img src="images/banners/lfcs-03-networking-e856c7d0.png" referrerpolicy="no-referrer">
            </div><p>LFCS 시리즈 세 번째 편으로 <strong>Networking (25%)</strong> 도메인을 다룬다.
시간 동기화, 패킷 필터링(iptables), 원격 파일시스템, 로드밸런서, OpenSSH가 핵심 주제이다.
정리 후 마지막의 <strong>인터랙티브 연습 터미널</strong>에서 명령을 직접 입력해 본다.</p>
<h2 id="1-시간-동기화" class="headerLink">
    <a href="#1-%ec%8b%9c%ea%b0%84-%eb%8f%99%ea%b8%b0%ed%99%94" class="header-mark"></a>1. 시간 동기화</h2><p>현재 시간·타임존·동기화 상태는 <code>timedatectl</code>로 한 번에 확인한다.
NTP 서버는 <code>/etc/systemd/timesyncd.conf</code>의 <code>NTP</code>(주 서버)와 <code>FallbackNTP</code>(대체)로 설정한다.
설정 후 <code>systemctl restart systemd-timesyncd</code>로 서비스를 재시작한다.</p>
<ul>
<li><strong>상태 확인</strong>: <code>timedatectl</code></li>
<li><strong>설정 파일</strong>: <code>/etc/systemd/timesyncd.conf</code> — <code>NTP=</code>, <code>FallbackNTP=</code>, <code>PollIntervalMaxSec=</code>, <code>ConnectionRetrySec=</code></li>
</ul>
<h2 id="2-패킷-필터링-iptables" class="headerLink">
    <a href="#2-%ed%8c%a8%ed%82%b7-%ed%95%84%ed%84%b0%eb%a7%81-iptables" class="header-mark"></a>2. 패킷 필터링 (iptables)</h2><p>필터 규칙은 <code>INPUT</code>/<code>OUTPUT</code>/<code>FORWARD</code> 체인에, NAT는 <code>-t nat</code>의 <code>PREROUTING</code> 등에 넣는다.
포트 차단은 <code>-j DROP</code>, 리다이렉트는 <code>REDIRECT --to-port</code>, 특정 IP 허용은 <code>-s</code>이다.</p>]]></description></item></channel></rss>