<?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>개인 공부 저장용 Archives - 어제와 내일의 나 그 사이의 이야기</title>
	<atom:link href="https://lycos7560.com/category/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>생각의 흐름을 타고 다니며 만드는 블로그</description>
	<lastBuildDate>Sun, 08 Mar 2026 17:59:05 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://lycos7560.com/wp-content/uploads/2022/11/cropped-cropped-cropped-log-1-150x150-1-80x80.png</url>
	<title>개인 공부 저장용 Archives - 어제와 내일의 나 그 사이의 이야기</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>POSIX(Portable Operating System Interface)</title>
		<link>https://lycos7560.com/etc/posixportable-operating-system-interface/40514/</link>
					<comments>https://lycos7560.com/etc/posixportable-operating-system-interface/40514/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Sun, 08 Mar 2026 17:59:02 +0000</pubDate>
				<category><![CDATA[개인 공부 저장용]]></category>
		<category><![CDATA[기타]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=40514</guid>

					<description><![CDATA[<p>POSIX Portable Operating System Interface 서로 다른 UNIX 계열 운영체제 간의 애플리케이션 호환성을 높이기 위해 IEEE가 책정한 유닉스 기반의 표준 API 규격으로 &#8216;X&#8217;는 UNIX(유닉스) 호환 운영체제를 의미하는 관습 1. 이름의 탄생 비화 (리처드 스톨먼,  Richard Stallman의 제안) https://en.wikipedia.org/wiki/POSIX 2. 구체적으로 무엇을 정의하는가? 단순히 API 함수 이름만 정하는 것이 아니라 다음 세 가지 핵심 요소를 모두 [&#8230;]</p>
<p>The post <a href="https://lycos7560.com/etc/posixportable-operating-system-interface/40514/">POSIX(Portable Operating System Interface)</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-d94b8844      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#posix" class="uagb-toc-link__trigger">POSIX</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#1-이름의-탄생-비화-리처드-스톨먼-richard-stallman의-제안" class="uagb-toc-link__trigger">1. 이름의 탄생 비화 (리처드 스톨먼,  Richard Stallman의 제안)</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#2-구체적으로-무엇을-정의하는가" class="uagb-toc-link__trigger">2. 구체적으로 무엇을 정의하는가?</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#3-실무에서의-의미-한-번-짜서-어디든-돌린다" class="uagb-toc-link__trigger">3. 실무에서의 의미: &quot;한 번 짜서 어디든 돌린다&quot;</a></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">POSIX</h2>



<p>Portable Operating System Interface</p>



<ul class="wp-block-list">
<li>portable : 이식 가능한</li>



<li>Operationg System : 운영 체제</li>



<li>Interface : 인터페이스</li>



<li>X : POSIX 전체 이름에서 유닉스(UNIX) 계열임을 암시하는 관습적 접미사</li>
</ul>



<p>서로 다른 UNIX 계열 운영체제 간의 애플리케이션 호환성을 높이기 위해 </p>



<p>IEEE가 책정한 유닉스 기반의 표준 API 규격으로 &#8216;X&#8217;는 UNIX(유닉스) 호환 운영체제를 의미하는 관습</p>



<h3 class="wp-block-heading">1. 이름의 탄생 비화 (리처드 스톨먼,  <a href="https://en.wikipedia.org/wiki/Richard_Stallman" target="_blank" rel="noreferrer noopener">Richard Stallman</a>의 제안)</h3>



<p><a href="https://en.wikipedia.org/wiki/POSIX" target="_blank" rel="noreferrer noopener">https://en.wikipedia.org/wiki/POSIX</a></p>



<ul class="wp-block-list">
<li><strong>원래 이름</strong><br>IEEE 내부에서는 원래 <strong>&#8216;IEEE-IX&#8217;</strong>라고 부르려고 했습니다.</li>



<li><strong>스톨먼의 개입</strong><br>자유 소프트웨어 재단(FSF)의 <strong>리처드 스톨먼</strong>이 &#8220;IEEE-IX는 발음하기 너무 어렵다&#8221;며, <br>&#8216;Portable Operating System&#8217;의 약자에 유닉스 느낌의 &#8216;IX&#8217;를 붙인 <strong>POSIX(포직스)</strong>를 제안했습니다.</li>



<li><strong>채택 이유</strong><br>이 이름이 훨씬 부르기 쉽고 기억에 잘 남는다는 이유로 위원회에서 즉시 채택되었습니다.</li>
</ul>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">2. 구체적으로 무엇을 정의하는가?</h3>



<p>단순히 API 함수 이름만 정하는 것이 아니라 다음 세 가지 핵심 요소를 모두 포함합니다.</p>



<ul class="wp-block-list">
<li><strong>C 언어 API</strong><br><code>open()</code>, <code>read()</code>, <code>write()</code> 같은 시스템 콜의 함수 이름, 인자, 반환 값, 오류 처리 방식까지 동작 전반을 규정합니다.</li>



<li><strong>셸(Shell) 및 유틸리티</strong><br><code>ls</code>, <code>grep</code>, <code>cd</code> 같은 기본 명령어들이 어떤 옵션을 지원하고 어떤 결과를 출력해야 하는지 정의합니다.</li>



<li><strong>파일 시스템 및 프로세스</strong><br><code>/usr</code>, <code>/tmp</code> 같은 파일 경로 구조와 프로세스 생성(<code>fork</code>)·종료 방식 등 OS의 근간이 되는 동작 방식을 표준화 합니다.</li>
</ul>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">3. 실무에서의 의미: &#8220;한 번 짜서 어디든 돌린다&#8221;</h3>



<ul class="wp-block-list">
<li><strong>개발 효율성</strong><br>POSIX 표준을 준수하여 프로그램을 만들면, 코드를 거의 수정하지 않고도 Linux, macOS, BSD 등 다양한 운영체제에서 바로 컴파일하여 실행할 수 있습니다.</li>



<li><strong>호환성 확인</strong><br>어떤 시스템이 &#8220;POSIX 준수(Compliant)&#8221;라고 하면, 개발자는 &#8220;내 프로그램이 이 OS에서도 문제없이 돌아가겠구나&#8221;라고 신뢰할 수 있게 됩니다.</li>



<li><strong>호환성의 한계</strong><br>다만 Windows는 기본적으로 POSIX를 준수하지 않습니다. <br>WSL(Windows Subsystem for Linux)을 통해 부분적으로 지원하지만, <br>네이티브 Windows 환경에서는 동일한 코드가 동작하지 않을 수 있다는 점을 염두에 두어야 합니다.</li>
</ul>



<p></p>
<p>The post <a href="https://lycos7560.com/etc/posixportable-operating-system-interface/40514/">POSIX(Portable Operating System Interface)</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/etc/posixportable-operating-system-interface/40514/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>HBA (Host Bus Adapter) &#8211; Network</title>
		<link>https://lycos7560.com/etc/hba-host-bus-adapter-network/40457/</link>
					<comments>https://lycos7560.com/etc/hba-host-bus-adapter-network/40457/#comments</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Thu, 12 Feb 2026 15:23:36 +0000</pubDate>
				<category><![CDATA[개인 공부 저장용]]></category>
		<category><![CDATA[기타]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=40457</guid>

					<description><![CDATA[<p>HBA (Host Bus Adapter) ? 호스트 버스 어댑터 서버와 스토리지 네트워크(Fibre Channel SAN)를 연결해주는 인터페이스 카드입니다. 일반적인 이더넷 네트워크에서 사용하는 NIC(Network Interface Card)가 LAN 연결용이라면, HBA는 스토리지 네트워크 연결을 담당하는 장치라고 보면 됩니다. 즉, 서버가 Storage Array의 LUN에 접근할 수 있도록 통로 역할을 합니다. 기본 개념 서버 내부에는 CPU, 메모리, 디스크 외에도 확장 슬롯(PCIe)이 존재합니다. [&#8230;]</p>
<p>The post <a href="https://lycos7560.com/etc/hba-host-bus-adapter-network/40457/">HBA (Host Bus Adapter) &#8211; Network</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-3607df7c      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#hba-host-bus-adapter" class="uagb-toc-link__trigger">HBA (Host Bus Adapter) ?</a><li class="uagb-toc__list"><a href="#기본-개념" class="uagb-toc-link__trigger">기본 개념</a><li class="uagb-toc__list"><a href="#hba의-역할" class="uagb-toc-link__trigger">HBA의 역할</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#스토리지-연결-제공" class="uagb-toc-link__trigger">스토리지 연결 제공</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#프로토콜-처리" class="uagb-toc-link__trigger">프로토콜 처리</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#wwn-제공" class="uagb-toc-link__trigger">WWN 제공</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#데이터-전송-최적화" class="uagb-toc-link__trigger">데이터 전송 최적화</a></li></ul></li><li class="uagb-toc__list"><a href="#hba-동작-흐름" class="uagb-toc-link__trigger">HBA 동작 흐름</a><li class="uagb-toc__list"><a href="#hba의-특징" class="uagb-toc-link__trigger">HBA의 특징</a><li class="uagb-toc__list"><a href="#구성-예시" class="uagb-toc-link__trigger">구성 예시</a><li class="uagb-toc__list"><a href="#hba와-multipath의-관계" class="uagb-toc-link__trigger">HBA와 Multipath의 관계</a></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="967" height="560" src="https://lycos7560.com/wp-content/uploads/2026/02/image-7-1.jpg" alt="" class="wp-image-40459" style="aspect-ratio:1.7268279043757864;width:463px;height:auto" srcset="https://lycos7560.com/wp-content/uploads/2026/02/image-7-1.jpg 967w, https://lycos7560.com/wp-content/uploads/2026/02/image-7-1-300x174.jpg 300w, https://lycos7560.com/wp-content/uploads/2026/02/image-7-1-768x445.jpg 768w" sizes="(max-width: 967px) 100vw, 967px" /><figcaption class="wp-element-caption">Sun Storage 16GB 광 섬유 채널 PCIe 범용 호스트 버스 어댑터(QLogic)&nbsp;<br><a href="https://docs.oracle.com/cd/E50150_01/html/E41423/z40003111016271.html" target="_blank" rel="noreferrer noopener">https://docs.oracle.com/cd/E50150_01/html/E41423/z40003111016271.html</a></figcaption></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">HBA (Host Bus Adapter) ?</h2>



<p><strong>호스트 버스 어댑터</strong></p>



<ul class="wp-block-list">
<li>Host → 호스트(서버)</li>



<li>Bus → 버스(시스템 내부 데이터 통로)</li>



<li>Adapter → 어댑터</li>
</ul>



<p>서버와 스토리지 네트워크(Fibre Channel SAN)를 연결해주는 인터페이스 카드입니다.</p>



<p>일반적인 <strong>이더넷 네트워크에서 사용하는 NIC(Network Interface Card)가 LAN 연결용</strong>이라면,</p>



<p>HBA는 <strong>스토리지 네트워크 연결을 담당하는 장치</strong>라고 보면 됩니다.</p>



<p>즉, <strong>서버</strong>가 <strong>Storage Array의 LUN에 접근할 수 있도록 통로 역할</strong>을 합니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<h2 class="wp-block-heading">기본 개념</h2>



<p>서버 내부에는 CPU, 메모리, 디스크 외에도 <strong>확장 슬롯(PCIe)</strong>이 존재합니다.</p>



<p>이 슬롯에 HBA 카드를 장착하면 서버는 Fibre Channel Fabric에 연결됩니다.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Server
 └─ HBA 카드
     └─ FC 케이블
         └─ FC Switch
             └─ Storage Array</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>이 구조를 통해 서버는 원격 스토리지를 로컬 디스크처럼 사용할 수 있습니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<h2 class="wp-block-heading">HBA의 역할</h2>



<h3 class="wp-block-heading">스토리지 연결 제공</h3>



<p>서버와 SAN(Storage Area Network)을 물리적으로 연결합니다.</p>



<h3 class="wp-block-heading">프로토콜 처리</h3>



<p>SCSI 명령을 Fibre Channel 프레임으로 변환하여 전달합니다.</p>



<p><em>SCSI(Small Computer System Interface) 명령은&nbsp;<strong>컴퓨터와 스토리지 장치(HDD, SSD, 테이프 등) 간에 데이터 입출력을 제어하기 위한 표준화된 명령어 세트</strong>)</em></p>



<h3 class="wp-block-heading">WWN 제공</h3>



<p>각 HBA 포트는 고유한 WWN(World Wide Name)을 가지며 이를 통해 스위치 <strong>Zoning</strong> 및 <strong>LUN 매핑</strong>이 이루어집니다.</p>



<h3 class="wp-block-heading">데이터 전송 최적화</h3>



<p>DMA 등의 기능을 사용하여 CPU 부담을 줄이고 I/O 성능을 향상시킵니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<h2 class="wp-block-heading">HBA 동작 흐름</h2>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Application 
 → File System 
 → OS Block Layer 
 → HBA 
 → FC Switch 
 → Storage Array 
 → LUN</pre>



<p>사용자는 로컬 디스크처럼 사용하지만 실제 데이터는 SAN을 통해 전송됩니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<h2 class="wp-block-heading">HBA의 특징</h2>



<p>서버 입장에서는 일반 디스크 인터페이스처럼 보입니다.</p>



<p>Linux에서는 다음과 같이 확인 가능합니다:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">lspci | grep Fibre
systool -c fc_host -v</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>AIX에서는:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">lsdev -Cc adapter</pre>



<p>각 포트는 WWN을 가지며 스토리지 접근 제어의 기준이 됩니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<h2 class="wp-block-heading">구성 예시</h2>



<p>이중화 구성(일반적인 환경):</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Server
 ├─ HBA Port 1 ─ Switch A
 └─ HBA Port 2 ─ Switch B</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>목적:</p>



<ul class="wp-block-list">
<li>경로 장애 대비</li>



<li>성능 분산</li>



<li>Multipath 구성</li>
</ul>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<h2 class="wp-block-heading">HBA와 Multipath의 관계</h2>



<p>서버에 <strong>여러 HBA 경로가 존재</strong>할 경우 <strong>동일한 LUN이 여러 경로로 인식</strong>됩니다.</p>



<p><strong>Multipath는 이를 하나의 디스크로 통합하여 관리</strong>합니다.</p>



<p>장점:</p>



<ul class="wp-block-list">
<li>장애 시 자동 경로 전환</li>



<li>성능 향상</li>



<li>안정성 확보</li>
</ul>



<p>Linux 예시:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">multipath -ll</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>이는 SAN 환경에서 거의 필수 구성입니다.</p>



<p>은행, 공공기관, 데이터센터 등 엔터프라이즈 환경에서는 대부분의 서버가 HBA를 통해 SAN에 연결되어 있으며</p>



<p>이를 기반으로 데이터베이스, 가상화, 백업 시스템이 운영됩니다.</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="Ght72c8mjF"><a href="https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/fcip-fibre-channel-over-ip-network/40437/">FCIP (Fibre Channel over IP) &#8211; Network</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;FCIP (Fibre Channel over IP) &#8211; Network&#8221; &#8212; 어제와 내일의 나 그 사이의 이야기" src="https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/fcip-fibre-channel-over-ip-network/40437/embed/#?secret=yiJZgi4SgY#?secret=Ght72c8mjF" data-secret="Ght72c8mjF" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="nEFpSAGc7u"><a href="https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/san-storage-area-network-network/40440/">SAN (Storage Area Network) – Network</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;SAN (Storage Area Network) – Network&#8221; &#8212; 어제와 내일의 나 그 사이의 이야기" src="https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/san-storage-area-network-network/40440/embed/#?secret=zVroYN0Hwi#?secret=nEFpSAGc7u" data-secret="nEFpSAGc7u" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="Jg6BRPoQkN"><a href="https://lycos7560.com/etc/lun-logical-unit-number-network/40454/">LUN (Logical Unit Number) – Network</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;LUN (Logical Unit Number) – Network&#8221; &#8212; 어제와 내일의 나 그 사이의 이야기" src="https://lycos7560.com/etc/lun-logical-unit-number-network/40454/embed/#?secret=u9HRLjBsoq#?secret=Jg6BRPoQkN" data-secret="Jg6BRPoQkN" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p></p>
<p>The post <a href="https://lycos7560.com/etc/hba-host-bus-adapter-network/40457/">HBA (Host Bus Adapter) &#8211; Network</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/etc/hba-host-bus-adapter-network/40457/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>LUN (Logical Unit Number) – Network</title>
		<link>https://lycos7560.com/etc/lun-logical-unit-number-network/40454/</link>
					<comments>https://lycos7560.com/etc/lun-logical-unit-number-network/40454/#comments</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Thu, 12 Feb 2026 15:00:21 +0000</pubDate>
				<category><![CDATA[개인 공부 저장용]]></category>
		<category><![CDATA[기타]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=40454</guid>

					<description><![CDATA[<p>LUN (Logical Unit Number) ? 논리적 저장장치 식별 번호  스토리지 어레이(Storage Array)  내에서 논리적으로 구분된 저장 공간입니다. 물리적 디스크를 여러 개의 논리적 단위로 나누어 각 서버에 할당하는 개념입니다. 기본 개념 실제 디스크 어레이에는 여러 개의 물리 디스크(Physical Disk)가 있습니다. 이 물리 디스크들을 RAID로 구성하여 보호한 후, 그 위에 논리적으로 공간을 나누어 LUN을 만듭니다. 각 서버는 [&#8230;]</p>
<p>The post <a href="https://lycos7560.com/etc/lun-logical-unit-number-network/40454/">LUN (Logical Unit Number) – Network</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-c921b07a      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#lun-logical-unit-number" class="uagb-toc-link__trigger">LUN (Logical Unit Number) ?</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#기본-개념" class="uagb-toc-link__trigger">기본 개념</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#lun의-특징" class="uagb-toc-link__trigger">LUN의 특징</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#lun-할당의-예시" class="uagb-toc-link__trigger">LUN 할당의 예시</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#lun의-장점" class="uagb-toc-link__trigger">LUN의 장점</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#중요한-제약사항" class="uagb-toc-link__trigger">중요한 제약사항</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#lun과-zoning의-관계" class="uagb-toc-link__trigger">LUN과 Zoning의 관계</a></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1006" height="393" src="https://lycos7560.com/wp-content/uploads/2026/02/image-6.png" alt="" class="wp-image-40455" srcset="https://lycos7560.com/wp-content/uploads/2026/02/image-6.png 1006w, https://lycos7560.com/wp-content/uploads/2026/02/image-6-300x117.png 300w, https://lycos7560.com/wp-content/uploads/2026/02/image-6-768x300.png 768w" sizes="(max-width: 1006px) 100vw, 1006px" /><figcaption class="wp-element-caption"><a href="https://tekmart.co.za/t-blog/logical-unit-number-lun/?srsltid=AfmBOoqKCrkhoJuntboiGOz9-ftQmoueOH05r4sD-BEeD-ZQguheRpIt">https://tekmart.co.za/t-blog/logical-unit-number-lun/?srsltid=AfmBOoqKCrkhoJuntboiGOz9-ftQmoueOH05r4sD-BEeD-ZQguheRpIt</a></figcaption></figure>



<ul class="wp-block-list">
<li>ESXi(VMware 가상화 서버) 여러 개가 각각 다른 LUN에 접근</li>



<li>VMFS(Virtual Machine File System)라는 파일시스템으로 LUN을 포맷<br>(포맷 = 형식을 정한다, 하드드라이브나 저장 장치를 <strong>사용 가능한 상태로 준비하는 과정</strong>, 즉, &#8220;이 공간을 어떤 파일시스템으로 사용할 것인가&#8221;를 정하는 작업)</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">LUN (Logical Unit Number) ?</h2>



<p><strong>논리적 저장장치 식별 번호</strong></p>



<p> 스토리지 어레이(Storage Array)  내에서 <strong>논리적으로 구분된 저장 공간</strong>입니다.</p>



<p>물리적 디스크를 여러 개의 논리적 단위로 나누어 각 서버에 할당하는 개념입니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">기본 개념</h3>



<p>실제 디스크 어레이에는 여러 개의 물리 디스크(Physical Disk)가 있습니다.</p>



<p><strong>이 물리 디스크들을 RAID로 구성하여 보호한 후, 그 위에 논리적으로 공간을 나누어 LUN을 만듭니다.</strong></p>



<p>각 서버는 <strong>자신에게 할당된 LUN을 마치 자신의 로컬 디스크처럼 접근</strong>합니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">LUN의 특징</h3>



<p>서버 입장에서는 <strong>LUN을 로컬 하드드라이브처럼 인식</strong>합니다. </p>



<p>예를 들어 Windows 서버에서는 D드라이브, E드라이브처럼 보입니다.</p>



<p>각 LUN은 고유한 번호(0, 1, 2, 3 &#8230;)로 식별되며, 이를 통해 서버는 어떤 저장 공간에 접근할지 구분합니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">LUN 할당의 예시</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Disk Array (물리 용량: 10TB)
│
├─ LUN 0 (2TB) → Server Node 1 에 할당
├─ LUN 1 (2TB) → Server Node 2 에 할당
├─ LUN 2 (3TB) → Server Node 3 에 할당
└─ LUN 3 (3TB) → 백업 시스템에 할당</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">LUN의 장점</h3>



<p>여러 서버가 <strong>같은 물리 디스크를 공유</strong>하면서도 <strong>각자 독립적인 저장 공간을 가질 수 있습니다.</strong></p>



<p>Storage Array에서 한 서버의 LUN을 다른 서버에 재할당할 수 있어 유연한 리소스 관리가 가능합니다.</p>



<p>또한 각 LUN별로 스냅샷, 복제, 백업 등을 독립적으로 관리할 수 있습니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">중요한 제약사항</h3>



<p><strong>여러 서버가 같은 LUN을 공유하면 안됨</strong></p>



<p>만약 <strong>Server 1</strong>과 <strong>Server 2</strong>가 같은 <strong>LUN에 동시에 쓰기 작업을 하면 데이터가 손상</strong>됩니다. </p>



<p>따라서 일반적으로 각 <strong>LUN은 하나의 서버에만 할당</strong>됩니다.</p>



<p>다만, 예외가 있습니다. </p>



<p><strong>Cluster 환경</strong>이나 <strong>Shared Disk File System</strong>(예: VMFS, GFS)을 사용하면 여러 서버가 같은 LUN을 공유할 수 있습니다.</p>



<p>이 경우 <strong>운영체제나 특수 소프트웨어가 동시 접근을 제어</strong>합니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">LUN과 Zoning의 관계</h3>



<p>LUN 할당만으로는 보안이 완벽하지 않습니다.</p>



<p><strong>Zoning</strong>은 <strong>Fibre Channel 스위치 레벨</strong>에서 특정 서버가 특정 스토리지만 접근하도록 제한합니다.</p>



<p>(TCP/IP 계층의 레벨이 아님 &#8211; TCP/IP 스택을 쓰지 않음 ㅋㅋ)</p>



<p>만약, Server 1은 LUN 0에만 접근 가능하도록 Zoning을 설정하면, 실수로 LUN 1에 접근하려고 해도 FC 스위치가 차단합니다.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">은행의 데이터베이스 서버는 LUN 0(금융거래 DB용), 웹 서버는 LUN 1(웹 콘텐츠용)을 할당받습니다. 
각 LUN은 독립적으로 백업되고 관리됩니다. 
만약 웹 서버가 추가되면, Storage Array에서 기존 LUN 2의 일부를 새 LUN으로 생성하여 할당할 수 있습니다.</pre>



<p></p>
<p>The post <a href="https://lycos7560.com/etc/lun-logical-unit-number-network/40454/">LUN (Logical Unit Number) – Network</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/etc/lun-logical-unit-number-network/40454/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>SAN (Storage Area Network) – Network</title>
		<link>https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/san-storage-area-network-network/40440/</link>
					<comments>https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/san-storage-area-network-network/40440/#comments</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Thu, 12 Feb 2026 13:34:13 +0000</pubDate>
				<category><![CDATA[개인 공부 저장용]]></category>
		<category><![CDATA[기타]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=40440</guid>

					<description><![CDATA[<p>SAN (Storage Area Network) ? SAN은 스토리지 장치들을 고속 네트워크로 연결하여 서버들이 마치 로컬 디스크처럼 접근할 수 있도록 하는 네트워크 환경을 말합니다. 주로 파이버 채널(FC) 또는 iSCSI 기술을 활용하여 높은 대역폭, 짧은 대기 시간, 우수한 안정성을 제공하며, 엔터프라이즈 환경에서 데이터베이스 및 가상화 시스템의 핵심 데이터를 공유·저장하는 데 사용됩니다. 서버와 스토리지 간의 데이터 전송을 LAN과 분리된 [&#8230;]</p>
<p>The post <a href="https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/san-storage-area-network-network/40440/">SAN (Storage Area Network) – Network</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-9fe0a0f0      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#san-storage-area-network" class="uagb-toc-link__trigger">SAN (Storage Area Network) ?</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#기본-개념" class="uagb-toc-link__trigger">기본 개념</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#san의-구성요소" class="uagb-toc-link__trigger">SAN의 구성요소</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#san의-장점" class="uagb-toc-link__trigger">SAN의 장점</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#san의-단점" class="uagb-toc-link__trigger">SAN의 단점</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#san의-주요-용도" class="uagb-toc-link__trigger">SAN의 주요 용도</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#nas와-san-차이" class="uagb-toc-link__trigger">NAS와 SAN 차이</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#참고" class="uagb-toc-link__trigger">참고</a></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized has-custom-border"><img decoding="async" width="845" height="572" src="https://lycos7560.com/wp-content/uploads/2026/02/image-5.jpg" alt="" class="wp-image-40445" style="border-width:1px;aspect-ratio:1.4756200714889902;width:690px;height:auto" srcset="https://lycos7560.com/wp-content/uploads/2026/02/image-5.jpg 845w, https://lycos7560.com/wp-content/uploads/2026/02/image-5-300x203.jpg 300w, https://lycos7560.com/wp-content/uploads/2026/02/image-5-768x520.jpg 768w" sizes="(max-width: 845px) 100vw, 845px" /><figcaption class="wp-element-caption"><strong>SAN(Storage Area Network) 3계층(3-Tier)</strong> <strong>Architecture</strong>, 일반적인 구조<br><strong><a href="https://www.researchgate.net/figure/Architecture-of-storage-area-network-system_fig3_221199099" target="_blank" rel="noreferrer noopener">https://www.researchgate.net/figure/Architecture-of-storage-area-network-system_fig3_221199099</a></strong></figcaption></figure>



<ul class="wp-block-list">
<li><strong>EOS Linux:</strong> &#8220;스토리지 어레이를 운영하기 위한&#8221; 전문화된 OS</li>
</ul>



<ul class="wp-block-list">
<li><strong>Server Node 계층</strong> &#8211; 데이터를 요청하는 호스트 서버들</li>



<li><strong>Fabric Switch 계층</strong> &#8211; 서버와 스토리지를 연결하는 FC 스위치</li>



<li><strong>Storage Array 계층</strong> &#8211; 실제 데이터를 저장하는 디스크 어레이</li>
</ul>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">SAN (Storage Area Network) ?</h2>



<p>SAN은 스토리지 장치들을 고속 네트워크로 연결하여 서버들이 마치 로컬 디스크처럼 접근할 수 있도록 하는 <strong>네트워크 환경</strong>을 말합니다.</p>



<p>주로 파이버 채널(FC) 또는 iSCSI 기술을 활용하여 높은 대역폭, 짧은 대기 시간, 우수한 안정성을 제공하며, </p>



<p>엔터프라이즈 환경에서 <strong>데이터베이스 및 가상화 시스템의 핵심 데이터를 공유·저장</strong>하는 데 사용됩니다.</p>



<p><strong>서버</strong>와 <strong>스토리지</strong> 간의 <strong>데이터 전송</strong>을 <strong>LAN</strong>과 <strong>분리된 전용 네트워크에서 처리</strong>하므로<strong> 네트워크 트래픽을 효율적으로 관리</strong>할 수 있습니다.</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="kZmztuU0Bm"><a href="https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/fcip-fibre-channel-over-ip-network/40437/">FCIP (Fibre Channel over IP) &#8211; Network</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;FCIP (Fibre Channel over IP) &#8211; Network&#8221; &#8212; 어제와 내일의 나 그 사이의 이야기" src="https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/fcip-fibre-channel-over-ip-network/40437/embed/#?secret=FZtgAmEctD#?secret=kZmztuU0Bm" data-secret="kZmztuU0Bm" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">기본 개념</h3>



<p>기존의 <strong>NAS(Network Attached Storage)는 파일 단위로 접근하는 방식</strong>이라면, <strong>SAN은 블록(Block) 단위로 스토리지에 직접 접근</strong>합니다.</p>



<p>마치 내부 하드드라이브에 접근하는 것처럼 동작하므로 <strong>고속 데이터 전송이 가능</strong>합니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">SAN의 구성요소</h3>



<p>SAN은 크게 세 가지 계층으로 이루어집니다. </p>



<p>첫째, <strong>서버 계층</strong>으로 <strong>데이터 요청</strong>을 하는 <strong>호스트 서버들</strong>입니다. </p>



<p>둘째, 스토리지 계층으로 <strong>실제 데이터를 저장</strong>하는 <strong>스토리지 어레이(Storage Array)</strong>입니다. </p>



<p>셋째, <strong>네트워크 계층</strong>으로 <strong>서버와 스토리지를 연결하는 고속 네트워크</strong>입니다.</p>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<p>네트워크 계층에는 주로 <strong>Fibre Channel 스위치가 사용</strong>되며, <strong>HBA(Host Bus Adapter)</strong>는 <strong>서버가 SAN에 접속하기 위한 어댑터 역할</strong>을 합니다.</p>



<figure class="wp-block-image size-full has-custom-border"><img decoding="async" width="666" height="189" src="https://lycos7560.com/wp-content/uploads/2026/02/image-4.png" alt="" class="wp-image-40443" style="border-width:1px" srcset="https://lycos7560.com/wp-content/uploads/2026/02/image-4.png 666w, https://lycos7560.com/wp-content/uploads/2026/02/image-4-300x85.png 300w" sizes="(max-width: 666px) 100vw, 666px" /><figcaption class="wp-element-caption">Connectrix DS-7710B <strong>Fibre Channel 스위치</strong><br><a href="https://www.dell.com/ko-kr/shop/ipovw/connectrix-ds-7710b" target="_blank" rel="noreferrer noopener">https://www.dell.com/ko-kr/shop/ipovw/connectrix-ds-7710b</a></figcaption></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="705" height="303" src="https://lycos7560.com/wp-content/uploads/2026/02/image-5.png" alt="" class="wp-image-40449" style="width:700px;height:auto" srcset="https://lycos7560.com/wp-content/uploads/2026/02/image-5.png 705w, https://lycos7560.com/wp-content/uploads/2026/02/image-5-300x129.png 300w" sizes="(max-width: 705px) 100vw, 705px" /><figcaption class="wp-element-caption"><strong>레노버 DB730S FC SAN Switch</strong><br><a href="https://www.lenovo.com/us/en/p/servers-storage/storage/storage-area-network/san-fibre-channel-switches/thinksystem-db730s-fc-san-switch/len22ts0013?orgRef=https%253A%252F%252Fwww.google.com%252F&amp;srsltid=AfmBOoo_IiMegUASf8lq0DQnpJFnZQfBFdhIiNQ_cAVJ0B9pTTuPR9yn" target="_blank" rel="noreferrer noopener">https://www.lenovo.com/us/en/p/servers-storage/storage/storage-area-network/san-fibre-channel-switches/thinksystem-db730s-fc-san-switch/len22ts0013?orgRef=https%253A%252F%252Fwww.google.com%252F&amp;srsltid=AfmBOoo_IiMegUASf8lq0DQnpJFnZQfBFdhIiNQ_cAVJ0B9pTTuPR9yn</a></figcaption></figure>



<figure class="wp-block-image size-full has-custom-border"><img decoding="async" width="658" height="229" src="https://lycos7560.com/wp-content/uploads/2026/02/image-3.png" alt="" class="wp-image-40442" style="border-width:1px" srcset="https://lycos7560.com/wp-content/uploads/2026/02/image-3.png 658w, https://lycos7560.com/wp-content/uploads/2026/02/image-3-300x104.png 300w" sizes="(max-width: 658px) 100vw, 658px" /><figcaption class="wp-element-caption">DELLEMC SC7020 <strong>스토리지 어레이</strong>: 디스크 어레이<br><a href="https://manuals.plus/ko/dellemc/sc7020-storage-array-disk-arrays-manual" target="_blank" rel="noreferrer noopener">https://manuals.plus/ko/dellemc/sc7020-storage-array-disk-arrays-manual</a></figcaption></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">SAN의 장점</h3>



<p>스토리지를 <strong>중앙 집중식으로 관리할 수 있어 관리 효율성이 높습니다.</strong></p>



<p><strong>스냅샷, 스냅샷 복제, RAID 등 고급 기능을 활용한 데이터 보호</strong>가 가능하며, 여러 서버가 같은 스토리지를 공유하므로 리소스 활용도가 높습니다.</p>



<p>또한 원거리 스토리지 연결이나 재해복구를 쉽게 구현할 수 있습니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">SAN의 단점</h3>



<p>Fibre Channel 스위치, HBA, 고가의 스토리지 어레이 등이 필요하여 <strong>초기 구축 비용이 매우 높습니다.</strong></p>



<p>또한 <strong>설계, 설치, 운영이 복잡하며 전문 인력이 필요</strong>합니다.</p>



<p><strong>네트워크 구성에 따라 병목 현상이 발생</strong>할 수 있으며, <strong>장애 발생 시 많은 서버에 영향</strong>을 미칠 수 있습니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">SAN의 주요 용도</h3>



<p>데이터베이스 서버의 <strong>고가용성</strong>(HA) 구현, 서버 클러스터링, 가상화 환경에서의 스토리지 공유, 백업 및 재해복구 시스템 구축에 주로 사용</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">NAS와 SAN 차이</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>구분</th><th>SAN</th><th>NAS</th></tr></thead><tbody><tr><td><strong>접근 방식</strong></td><td>블록(Block) 단위</td><td>파일(File) 단위</td></tr><tr><td><strong>프로토콜</strong></td><td>(파이버)Fibre Channel, (아이 스카시)iSCSI</td><td><strong>NFS</strong>(Network File System),<br><strong>SMB/CIFS</strong><br>(Server Message Block <br>/ Common Internet File Sharing)</td></tr><tr><td><strong>네트워크</strong></td><td>전용 고속 네트워크</td><td>표준 이더넷</td></tr><tr><td><strong>속도</strong></td><td>매우 빠름</td><td>상대적으로 느림</td></tr><tr><td><strong>구축 비용</strong></td><td>매우 높음</td><td>낮음</td></tr><tr><td><strong>사용 대상</strong></td><td>대규모 엔터프라이즈</td><td>중소 규모, 파일 공유</td></tr><tr><td><strong>복잡도</strong></td><td>복잡</td><td>상대적으로 단순</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><strong>참고</strong></h3>



<p><strong>Fibre Channel Switch</strong></p>



<ul class="wp-block-list">
<li>Fibre Channel 프로토콜만 사용하는 스위치</li>



<li>FC 환경 전용</li>
</ul>



<p><strong>SAN Switch</strong></p>



<ul class="wp-block-list">
<li>SAN 환경에서 사용되는 모든 스위치를 통칭</li>



<li>Fibre Channel Switch, iSCSI Switch, FCoE Switch 등 <strong>모두 포함</strong></li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">SAN Switch (큰 개념)
  ├─ Fibre Channel Switch (FC 스위치)
  ├─ iSCSI Switch (이더넷 기반)
  ├─ FCoE Switch (Fibre Channel over Ethernet)
  └─ 기타 SAN 스위치</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="r9unB296nm"><a href="https://lycos7560.com/etc/hba-host-bus-adapter-network/40457/">HBA (Host Bus Adapter) &#8211; Network</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;HBA (Host Bus Adapter) &#8211; Network&#8221; &#8212; 어제와 내일의 나 그 사이의 이야기" src="https://lycos7560.com/etc/hba-host-bus-adapter-network/40457/embed/#?secret=4gmQMXLTZX#?secret=r9unB296nm" data-secret="r9unB296nm" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="GMvpvlcbXs"><a href="https://lycos7560.com/etc/lun-logical-unit-number-network/40454/">LUN (Logical Unit Number) – Network</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;LUN (Logical Unit Number) – Network&#8221; &#8212; 어제와 내일의 나 그 사이의 이야기" src="https://lycos7560.com/etc/lun-logical-unit-number-network/40454/embed/#?secret=3TlKMCQS7b#?secret=GMvpvlcbXs" data-secret="GMvpvlcbXs" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="kZmztuU0Bm"><a href="https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/fcip-fibre-channel-over-ip-network/40437/">FCIP (Fibre Channel over IP) &#8211; Network</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;FCIP (Fibre Channel over IP) &#8211; Network&#8221; &#8212; 어제와 내일의 나 그 사이의 이야기" src="https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/fcip-fibre-channel-over-ip-network/40437/embed/#?secret=FZtgAmEctD#?secret=kZmztuU0Bm" data-secret="kZmztuU0Bm" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>
<p>The post <a href="https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/san-storage-area-network-network/40440/">SAN (Storage Area Network) – Network</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/san-storage-area-network-network/40440/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>FCIP (Fibre Channel over IP) &#8211; Network</title>
		<link>https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/fcip-fibre-channel-over-ip-network/40437/</link>
					<comments>https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/fcip-fibre-channel-over-ip-network/40437/#comments</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Thu, 12 Feb 2026 12:37:52 +0000</pubDate>
				<category><![CDATA[개인 공부 저장용]]></category>
		<category><![CDATA[기타]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=40437</guid>

					<description><![CDATA[<p>FCIP (Fibre Channel over IP) ? FCIP는 Fibre Channel 프로토콜을 IP 네트워크를 통해 전송하는 기술로 원거리에 있는 스토리지 시스템을 연결하거나 재해 복구(Disaster Recovery, DR) 목적으로 자주 사용합니다. 기본 개념 FCIP는 Fibre Channel 프레임을 TCP/IP 기반 네트워크에서 캡슐화하여 전송합니다. 이를 통해 기존의 고가의 Fibre Channel 인프라에 의존하지 않고도 표준 IP 네트워크(이더넷)를 활용할 수 있습니다. FC-2 Frame [&#8230;]</p>
<p>The post <a href="https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/fcip-fibre-channel-over-ip-network/40437/">FCIP (Fibre Channel over IP) &#8211; Network</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-d70546f1      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#fcip-fibre-channel-over-ip" class="uagb-toc-link__trigger">FCIP (Fibre Channel over IP) ?</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#기본-개념" class="uagb-toc-link__trigger">기본 개념</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#주요-특징" class="uagb-toc-link__trigger">주요 특징</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#장점" class="uagb-toc-link__trigger">장점</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#단점" class="uagb-toc-link__trigger">단점</a></li></ul><li class="uagb-toc__list"><a href="#주요-용도" class="uagb-toc-link__trigger">주요 용도</a></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="666" height="189" src="https://lycos7560.com/wp-content/uploads/2026/02/image-4.png" alt="" class="wp-image-40443" srcset="https://lycos7560.com/wp-content/uploads/2026/02/image-4.png 666w, https://lycos7560.com/wp-content/uploads/2026/02/image-4-300x85.png 300w" sizes="(max-width: 666px) 100vw, 666px" /><figcaption class="wp-element-caption">Connectrix DS-7710B&nbsp;<strong>Fibre Channel 스위치</strong><br><strong><a href="https://www.dell.com/ko-kr/shop/ipovw/connectrix-ds-7710b" target="_blank" rel="noreferrer noopener">https://www.dell.com/ko-kr/shop/ipovw/connectrix-ds-7710b</a></strong></figcaption></figure>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">FCIP (Fibre Channel over IP) ?</h2>



<p>FCIP는 <strong>Fibre Channel 프로토콜</strong>을<strong> IP 네트워크</strong>를 통해 전송하는 기술로</p>



<p>원거리에 있는 스토리지 시스템을 연결하거나 재해 복구(Disaster Recovery, DR) 목적으로 자주 사용합니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">기본 개념</h3>



<p>FCIP는 Fibre Channel 프레임을 TCP/IP 기반 네트워크에서 캡슐화하여 전송합니다.</p>



<p>이를 통해 기존의 고가의 <strong>Fibre Channel 인프라에 의존하지 않고도 표준 IP 네트워크(이더넷)를 활용</strong>할 수 있습니다.</p>



<figure class="wp-block-image size-full is-resized has-custom-border" style="margin-top:0;margin-bottom:0"><img decoding="async" width="1519" height="853" src="https://lycos7560.com/wp-content/uploads/2026/02/image-1.png" alt="" class="has-border-color has-ast-global-color-1-border-color wp-image-40438" style="border-width:7px;width:711px;height:auto" srcset="https://lycos7560.com/wp-content/uploads/2026/02/image-1.png 1519w, https://lycos7560.com/wp-content/uploads/2026/02/image-1-300x168.png 300w, https://lycos7560.com/wp-content/uploads/2026/02/image-1-768x431.png 768w" sizes="(max-width: 1519px) 100vw, 1519px" /><figcaption class="wp-element-caption"><a href="https://fibrechannel.org/wp-content/uploads/2021/11/Modern-FC-Architecture-Part-2.pdf" target="_blank" rel="noreferrer noopener">https://fibrechannel.org/wp-content/uploads/2021/11/Modern-FC-Architecture-Part-2.pdf</a></figcaption></figure>



<p>FC-2 Frame Format은 SOF(Start of Frame)에서 시작하여 Extended Header, Frame Header, Data Field, CRC, EOF(End of Frame) 순서로 구성</p>



<ul class="wp-block-list">
<li>Extended Header <strong>(확장 헤더)</strong> : 프레임의 기본 정보 외에 추가적인 제어 정보가 필요할 때 사용</li>



<li>Frame Header <strong>(프레임 헤더)</strong> : 프레임의 기본 정보를 담고 있는 24바이트 크기의 필수 영역</li>



<li>Data Field<strong> (데이터 필드)</strong>  : 실제 전송되는 데이터가 들어가는 영역</li>



<li>CRC <strong>(Cyclic Redundancy Check, 순환 중복 검사)</strong> : 4바이트 크기의 오류 검사 코드</li>



<li>EOF(End of Frame) : 프레임의 끝을 알리는 4바이트 신호</li>
</ul>



<p>Data Field는 최대 2112Byte(약 2 KB)까지 담을 수 있으며, 이러한 Fibre Channel 프레임 전체가 IP 패킷에 캡슐화되어 네트워크를 통해 전송</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">주요 특징</h3>



<h4 class="wp-block-heading"><strong>장점</strong></h4>



<ul class="wp-block-list">
<li>기존 IP 네트워크 활용으로 <strong>구축 비용을 절감</strong>.</li>



<li><strong>원거리 백업</strong> 및 재해복구가 용이함.</li>



<li><strong>Fibre Channel의 성능을 유지</strong>하면서 <strong>확장성</strong>을 높일 수 있음.</li>
</ul>



<h4 class="wp-block-heading"><strong>단점</strong></h4>



<ul class="wp-block-list">
<li><strong>WAN </strong>대역폭에 의존하므로 <strong>대역폭 제약으로 네트워크 지연(latency)이 발생</strong>할 수 있음.</li>



<li><strong>IP 네트워크의 신뢰성에 영향</strong>을 받음.</li>



<li><strong>초기 설정</strong>과 <strong>트러블슈팅</strong>이 복잡함.</li>
</ul>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">주요 용도</h3>



<p>원격지의 스토리지 시스템을 동기화하는 <strong>동기식 복제</strong>와 <strong>원거리 백업</strong> 및 <strong>재해복구</strong> 목적의<strong> 비동기식 복제</strong>에 주로 사용</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="TIuTPYkyHh"><a href="https://lycos7560.com/etc/san-storage-area-network-network/40440/">SAN (Storage Area Network) – Network</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;SAN (Storage Area Network) – Network&#8221; &#8212; 어제와 내일의 나 그 사이의 이야기" src="https://lycos7560.com/etc/san-storage-area-network-network/40440/embed/#?secret=yhhpgXRTD6#?secret=TIuTPYkyHh" data-secret="TIuTPYkyHh" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="zcW53gDmQI"><a href="https://lycos7560.com/etc/hba-host-bus-adapter-network/40457/">HBA (Host Bus Adapter) &#8211; Network</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;HBA (Host Bus Adapter) &#8211; Network&#8221; &#8212; 어제와 내일의 나 그 사이의 이야기" src="https://lycos7560.com/etc/hba-host-bus-adapter-network/40457/embed/#?secret=Io9VCkU4BJ#?secret=zcW53gDmQI" data-secret="zcW53gDmQI" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="OMllcGSnFq"><a href="https://lycos7560.com/etc/lun-logical-unit-number-network/40454/">LUN (Logical Unit Number) – Network</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;LUN (Logical Unit Number) – Network&#8221; &#8212; 어제와 내일의 나 그 사이의 이야기" src="https://lycos7560.com/etc/lun-logical-unit-number-network/40454/embed/#?secret=2byM2BmE2m#?secret=OMllcGSnFq" data-secret="OMllcGSnFq" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p></p>
<p>The post <a href="https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/fcip-fibre-channel-over-ip-network/40437/">FCIP (Fibre Channel over IP) &#8211; Network</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/etc/%ea%b0%9c%ec%9d%b8-%ea%b3%b5%eb%b6%80-%ec%a0%80%ec%9e%a5%ec%9a%a9/fcip-fibre-channel-over-ip-network/40437/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Unity Package Manager &#8220;Invalid Signature&#8221;</title>
		<link>https://lycos7560.com/unity/unity-package-manager-invalid-signature/40434/</link>
					<comments>https://lycos7560.com/unity/unity-package-manager-invalid-signature/40434/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Tue, 10 Feb 2026 21:02:46 +0000</pubDate>
				<category><![CDATA[Unity]]></category>
		<category><![CDATA[개인 공부 저장용]]></category>
		<category><![CDATA[기타]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[Invalid Signature]]></category>
		<category><![CDATA[Manager]]></category>
		<category><![CDATA[package]]></category>
		<category><![CDATA[Package Manager]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[공부]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[버그]]></category>
		<category><![CDATA[유나티]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=40434</guid>

					<description><![CDATA[<p>문제 상황 Unity 에디터의 Package Manager에서 Services Core 패키지가 빨간색 경고와 함께 &#8220;Invalid Signature&#8221; 표시 광고 초기화 실패(Gateway communication failure) 등의 문제가 발생 이는 패키지 자체의 손상이 아니라 Package Manager의 서명 검증 시스템 오류 오류의 의미와 영향 Package Manager의 서명 검증 실패 Unity Package Manager는 모든 패키지의 디지털 서명을 확인하는 검증 메커니즘을 가지고 있 &#8220;Invalid [&#8230;]</p>
<p>The post <a href="https://lycos7560.com/unity/unity-package-manager-invalid-signature/40434/">Unity Package Manager &#8220;Invalid Signature&#8221;</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-31667817      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#문제-상황" class="uagb-toc-link__trigger">문제 상황</a><li class="uagb-toc__list"><a href="#오류의-의미와-영향" class="uagb-toc-link__trigger">오류의 의미와 영향</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#package-manager의-서명-검증-실패" class="uagb-toc-link__trigger">Package Manager의 서명 검증 실패</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#unity-ads-초기화-실패와의-연결" class="uagb-toc-link__trigger">Unity Ads 초기화 실패와의 연결</a></li></ul></li><li class="uagb-toc__list"><a href="#해결-방법-개인적인" class="uagb-toc-link__trigger">해결 방법 (개인적인)</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#package-manager-캐시-삭제" class="uagb-toc-link__trigger">Package Manager 캐시 삭제</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#reset-packages-to-defaults-마지막-수단" class="uagb-toc-link__trigger">Reset Packages to Defaults (마지막 수단)</a></ul></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">문제 상황</h2>



<p>Unity 에디터의 Package Manager에서 <strong>Services Core 패키지가 빨간색 경고와 함께 &#8220;Invalid Signature&#8221;</strong> 표시</p>



<p>광고 초기화 실패(<code>Gateway communication failure</code>) 등의 문제가 발생</p>



<p>이는 패키지 자체의 손상이 아니라 <strong>Package Manager의 서명 검증 시스템 오류</strong></p>



<figure class="wp-block-image size-full"><img decoding="async" width="828" height="320" src="https://lycos7560.com/wp-content/uploads/2026/02/image.png" alt="" class="wp-image-40435" srcset="https://lycos7560.com/wp-content/uploads/2026/02/image.png 828w, https://lycos7560.com/wp-content/uploads/2026/02/image-300x116.png 300w, https://lycos7560.com/wp-content/uploads/2026/02/image-768x297.png 768w" sizes="(max-width: 828px) 100vw, 828px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">오류의 의미와 영향</h2>



<h3 class="wp-block-heading">Package Manager의 서명 검증 실패</h3>



<p>Unity Package Manager는 모든 패키지의 디지털 서명을 확인하는 검증 메커니즘을 가지고 있</p>



<p>&#8220;Invalid Signature&#8221;는 <strong>Package Manager의 서명 검증 로직이 정상적인 패키지를 잘못 거부하는 버그</strong></p>



<p>실제 패키지는 정상이지만, Package Manager가 잘못된 판단을 내리고 있는 상태로 생각됨</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Unity Ads 초기화 실패와의 연결</h3>



<p>Services Core는 단순한 라이브러리가 아니라 <strong>Unity Ads를 포함한 모든 유니티 서비스의 핵심 패키지</strong>입니다. </p>



<p>이 패키지가 손상되면:</p>



<ul class="wp-block-list">
<li>Unity Ads 초기화 실패 <code>Gateway communication failure</code> 오류 발생 광고 로드 및 표시 불가 기타 Unity Services(Analytics, Crash Reporting 등) 동작 불능</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">해결 방법 (개인적인)</h2>



<h3 class="wp-block-heading">Package Manager 캐시 삭제 </h3>



<p>로컬에 저장된 손상된 패키지 캐시를 강제로 삭제</p>



<p><strong>Unity 에디터를 완전히 종료</strong>합니다 다음 폴더로 이동:</p>



<ul class="wp-block-list">
<li><strong>Windows</strong>: <code>%AppData%/Local/Unity/cache/upm</code></li>



<li><strong>Mac</strong>: <code>~/Library/Caches/Unity/upm</code></li>



<li><strong>Linux</strong>: <code>~/.cache/unity/upm</code></li>
</ul>



<p><code>upm</code> 폴더 전체를 삭제합니다 </p>



<p>Unity 에디터를 다시 열면 Package Manager가 서버에서 패키지를 새로 다운로드하고 서명을 다시 검증</p>



<p><strong>주의</strong>: 이 작업은 안전하며, 폴더를 다시 열면 필요한 캐시가 자동으로 재생성됩니다.</p>



<h3 class="wp-block-heading">Reset Packages to Defaults (마지막 수단)</h3>



<p>프로젝트의 패키지 설정이 꼬인 경우 초기화가 필요합니다.</p>



<p>Unity 상단 메뉴: Help &gt; Reset Packages to defaults 선택</p>



<p>확인 대화상자에서 &#8220;Yes&#8221; 클릭</p>



<p>프로젝트의 manifest.json이 기본값으로 되돌려집니다</p>



<p>주의: 이 작업은 프로젝트의 패키지 설정을 초기화하므로:</p>



<p>수동으로 추가했던 다른 패키지가 있다면 다시 설치해야 합니다</p>



<p>Packages/manifest.json 파일이 변경됩니다</p>



<p></p>
<p>The post <a href="https://lycos7560.com/unity/unity-package-manager-invalid-signature/40434/">Unity Package Manager &#8220;Invalid Signature&#8221;</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/unity/unity-package-manager-invalid-signature/40434/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MySQL 데이터베이스 &#038; 테이블 용량 확인</title>
		<link>https://lycos7560.com/etc/mysql-%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%b2%a0%ec%9d%b4%ec%8a%a4-%ed%85%8c%ec%9d%b4%eb%b8%94-%ec%9a%a9%eb%9f%89-%ed%99%95%ec%9d%b8/40431/</link>
					<comments>https://lycos7560.com/etc/mysql-%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%b2%a0%ec%9d%b4%ec%8a%a4-%ed%85%8c%ec%9d%b4%eb%b8%94-%ec%9a%a9%eb%9f%89-%ed%99%95%ec%9d%b8/40431/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Wed, 04 Feb 2026 20:16:04 +0000</pubDate>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[개인 공부 저장용]]></category>
		<category><![CDATA[기타]]></category>
		<category><![CDATA[AWS_RDS]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[BackendDeveloper]]></category>
		<category><![CDATA[BigData]]></category>
		<category><![CDATA[CloudDatabase]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[DataAnalysis]]></category>
		<category><![CDATA[DataBase]]></category>
		<category><![CDATA[DatabaseEngineer]]></category>
		<category><![CDATA[DatabaseHealth]]></category>
		<category><![CDATA[DatabaseOptimization]]></category>
		<category><![CDATA[DatabaseSize]]></category>
		<category><![CDATA[DatabaseStorage]]></category>
		<category><![CDATA[DatabaseTuning]]></category>
		<category><![CDATA[DataCleanup]]></category>
		<category><![CDATA[DataFree]]></category>
		<category><![CDATA[DataLength]]></category>
		<category><![CDATA[DataManagement]]></category>
		<category><![CDATA[DataStructure]]></category>
		<category><![CDATA[DataUsage]]></category>
		<category><![CDATA[DBA]]></category>
		<category><![CDATA[DBMS]]></category>
		<category><![CDATA[DBPerformance]]></category>
		<category><![CDATA[DBStatistics]]></category>
		<category><![CDATA[DB관리]]></category>
		<category><![CDATA[DB단편화]]></category>
		<category><![CDATA[DB모니터링]]></category>
		<category><![CDATA[DB상태체크]]></category>
		<category><![CDATA[DB용량확인]]></category>
		<category><![CDATA[DB튜닝]]></category>
		<category><![CDATA[DeveloperLife]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[DiskUsage]]></category>
		<category><![CDATA[Efficiency]]></category>
		<category><![CDATA[Fragmentation]]></category>
		<category><![CDATA[Indexing]]></category>
		<category><![CDATA[IndexSize]]></category>
		<category><![CDATA[InformationDesign]]></category>
		<category><![CDATA[InformationSchema]]></category>
		<category><![CDATA[Insight]]></category>
		<category><![CDATA[Maintenance]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[Metrics]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Optimization]]></category>
		<category><![CDATA[OptimizeTable]]></category>
		<category><![CDATA[PerformanceTuning]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[QueryOptimization]]></category>
		<category><![CDATA[QueryPerformance]]></category>
		<category><![CDATA[QueryTips]]></category>
		<category><![CDATA[RDBMS]]></category>
		<category><![CDATA[RelationalDatabase]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[ServerManagement]]></category>
		<category><![CDATA[ServerSide]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQLQuery]]></category>
		<category><![CDATA[SQLTutorial]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[SystemAdministration]]></category>
		<category><![CDATA[TableRows]]></category>
		<category><![CDATA[TableSize]]></category>
		<category><![CDATA[TechnicalPost]]></category>
		<category><![CDATA[TechStack]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[개발자일상]]></category>
		<category><![CDATA[공부]]></category>
		<category><![CDATA[관계형데이터베이스]]></category>
		<category><![CDATA[기술블로그]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[데브옵스]]></category>
		<category><![CDATA[데이터구조]]></category>
		<category><![CDATA[데이터베이스]]></category>
		<category><![CDATA[데이터베이스기초]]></category>
		<category><![CDATA[데이터분석]]></category>
		<category><![CDATA[데이터사용량]]></category>
		<category><![CDATA[데이터정리]]></category>
		<category><![CDATA[디스크사용량]]></category>
		<category><![CDATA[마리아DB]]></category>
		<category><![CDATA[백엔드]]></category>
		<category><![CDATA[백엔드개발자]]></category>
		<category><![CDATA[빅데이터]]></category>
		<category><![CDATA[서버관리]]></category>
		<category><![CDATA[서버사이드]]></category>
		<category><![CDATA[성능최적화]]></category>
		<category><![CDATA[시스템관리]]></category>
		<category><![CDATA[용량최적화]]></category>
		<category><![CDATA[웹개발]]></category>
		<category><![CDATA[유지보수]]></category>
		<category><![CDATA[인덱스용량]]></category>
		<category><![CDATA[인덱싱]]></category>
		<category><![CDATA[인사이트]]></category>
		<category><![CDATA[인포메이션스키마]]></category>
		<category><![CDATA[정보설계]]></category>
		<category><![CDATA[지표분석]]></category>
		<category><![CDATA[최적화]]></category>
		<category><![CDATA[코딩]]></category>
		<category><![CDATA[쿼리꿀팁]]></category>
		<category><![CDATA[쿼리최적화]]></category>
		<category><![CDATA[클라우드DB]]></category>
		<category><![CDATA[테이블용량]]></category>
		<category><![CDATA[프로그래밍]]></category>
		<category><![CDATA[행개수]]></category>
		<category><![CDATA[확장성]]></category>
		<category><![CDATA[효율성]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=40431</guid>

					<description><![CDATA[<p>1. 모든 데이터베이스별 총 용량 확인 현재 서버에 있는 모든 DB의 크기를 한눈에 비교하고 싶을 때 사용합니다. 용량이 큰 순서대로 정렬되어 출력됩니다. 2. 특정 데이터베이스 내의 테이블별 용량 상세 확인 &#8220;어떤 테이블이 용량을 다 잡아먹고 있지?&#8221;라는 궁금증이 생겼을 때 사용합니다. 데이터 크기와 인덱스 크기를 구분해서 보여줍니다. 데이터 크기와 인덱스 크기를 구분 3. 전체 서버의 총 [&#8230;]</p>
<p>The post <a href="https://lycos7560.com/etc/mysql-%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%b2%a0%ec%9d%b4%ec%8a%a4-%ed%85%8c%ec%9d%b4%eb%b8%94-%ec%9a%a9%eb%9f%89-%ed%99%95%ec%9d%b8/40431/">MySQL 데이터베이스 &amp; 테이블 용량 확인</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-37ada8aa      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#1-모든-데이터베이스별-총-용량-확인" class="uagb-toc-link__trigger">1. 모든 데이터베이스별 총 용량 확인</a><li class="uagb-toc__list"><a href="#2-특정-데이터베이스-내의-테이블별-용량-상세-확인" class="uagb-toc-link__trigger">2. 특정 데이터베이스 내의 테이블별 용량 상세 확인</a><li class="uagb-toc__list"><a href="#3-전체-서버의-총-합계-용량-확인" class="uagb-toc-link__trigger">3. 전체 서버의 총 합계 용량 확인</a><li class="uagb-toc__list"><a href="#4-참고" class="uagb-toc-link__trigger">4. 참고</a></ol>					</div>
									</div>
				</div>
			


<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">1. 모든 데이터베이스별 총 용량 확인</h2>



<p>현재 서버에 있는 <strong>모든 DB의 크기를 한눈에 비교</strong>하고 싶을 때 사용합니다. </p>



<p>용량이 큰 순서대로 정렬되어 출력됩니다.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="sql" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">SELECT 
    table_schema AS 'Database Name',
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)',
    ROUND(SUM(data_free) / 1024 / 1024, 2) AS 'Free Space (MB)'
FROM 
    information_schema.tables
GROUP BY 
    table_schema
ORDER BY 
    (SUM(data_length + index_length)) DESC;</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">2. 특정 데이터베이스 내의 테이블별 용량 상세 확인</h2>



<p>&#8220;어떤 테이블이 용량을 다 잡아먹고 있지?&#8221;라는 궁금증이 생겼을 때 사용합니다. </p>



<p><strong>데이터 크기와 인덱스 크기를 구분</strong>해서 보여줍니다.</p>



<p><strong>데이터 크기와 인덱스 크기를 구분</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="sql" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">SELECT 
    table_name AS 'Table Name',
    table_rows AS 'Total Rows',
    ROUND(data_length / 1024 / 1024, 2) AS 'Data Size (MB)',
    ROUND(index_length / 1024 / 1024, 2) AS 'Index Size (MB)',
    ROUND((data_length + index_length) / 1024 / 1024, 2) AS 'Total Size (MB)'
FROM 
    information_schema.tables
WHERE 
    table_schema = '데이터베이스명' -- 여기에 DB 이름 입력
ORDER BY 
    (data_length + index_length) DESC;</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">3. 전체 서버의 총 합계 용량 확인</h2>



<p>서버 전체에서 <strong>MySQL이 사용하는 총 디스크 용량</strong>만 깔끔하게 보고 싶을 때 유용합니다.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="sql" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">SELECT 
    ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS 'Total Global Size (GB)'
FROM 
    information_schema.tables;</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">4. 참고</h2>



<ul class="wp-block-list">
<li><strong>data_length</strong>: 실제 데이터가 들어있는 물리적 크기입니다.</li>



<li><strong>index_length</strong>: 인덱스(색인)가 차지하는 크기입니다. 데이터는 적은데 인덱스가 너무 크면 최적화(<code>OPTIMIZE TABLE</code>)를 고려해야 합니다.</li>



<li><strong>data_free</strong>: <code>DELETE</code> 등으로 삭제된 행이 차지하던 &#8216;비어있는 공간&#8217;입니다. 이 값이 너무 크면 디스크 공간 낭비가 심하다는 뜻입니다.</li>
</ul>



<p></p>
<p>The post <a href="https://lycos7560.com/etc/mysql-%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%b2%a0%ec%9d%b4%ec%8a%a4-%ed%85%8c%ec%9d%b4%eb%b8%94-%ec%9a%a9%eb%9f%89-%ed%99%95%ec%9d%b8/40431/">MySQL 데이터베이스 &amp; 테이블 용량 확인</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/etc/mysql-%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%b2%a0%ec%9d%b4%ec%8a%a4-%ed%85%8c%ec%9d%b4%eb%b8%94-%ec%9a%a9%eb%9f%89-%ed%99%95%ec%9d%b8/40431/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JWT(Json Web Token) 정리</title>
		<link>https://lycos7560.com/etc/jwtjson-web-token-%ec%a0%95%eb%a6%ac/40306/</link>
					<comments>https://lycos7560.com/etc/jwtjson-web-token-%ec%a0%95%eb%a6%ac/40306/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Mon, 13 Oct 2025 00:14:01 +0000</pubDate>
				<category><![CDATA[개인 공부 저장용]]></category>
		<category><![CDATA[기타]]></category>
		<category><![CDATA[Access Control]]></category>
		<category><![CDATA[Access Token]]></category>
		<category><![CDATA[API Gateway]]></category>
		<category><![CDATA[API Security]]></category>
		<category><![CDATA[API 보안]]></category>
		<category><![CDATA[Audience]]></category>
		<category><![CDATA[Authentication]]></category>
		<category><![CDATA[Authentication Flow]]></category>
		<category><![CDATA[Authorization]]></category>
		<category><![CDATA[Authorization Header]]></category>
		<category><![CDATA[Authorization Server]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Base64URL]]></category>
		<category><![CDATA[Bearer]]></category>
		<category><![CDATA[Claim Types]]></category>
		<category><![CDATA[Claims]]></category>
		<category><![CDATA[CSRF]]></category>
		<category><![CDATA[DataBase]]></category>
		<category><![CDATA[Decoding]]></category>
		<category><![CDATA[Expiration]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Header]]></category>
		<category><![CDATA[HMAC]]></category>
		<category><![CDATA[HS256]]></category>
		<category><![CDATA[HttpOnly Cookie]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[Identity]]></category>
		<category><![CDATA[Issued At]]></category>
		<category><![CDATA[Issuer]]></category>
		<category><![CDATA[Json Web Token]]></category>
		<category><![CDATA[JWT]]></category>
		<category><![CDATA[JWT Structure]]></category>
		<category><![CDATA[JWT Verification]]></category>
		<category><![CDATA[JWT 검증]]></category>
		<category><![CDATA[JWT 구조]]></category>
		<category><![CDATA[LocalStorage]]></category>
		<category><![CDATA[Login]]></category>
		<category><![CDATA[Logout]]></category>
		<category><![CDATA[Microservices]]></category>
		<category><![CDATA[Not Before]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[OAuth2]]></category>
		<category><![CDATA[OpenID Connect]]></category>
		<category><![CDATA[Payload]]></category>
		<category><![CDATA[Private Key]]></category>
		<category><![CDATA[Public Key]]></category>
		<category><![CDATA[Redis]]></category>
		<category><![CDATA[Refresh Token]]></category>
		<category><![CDATA[Resource Server]]></category>
		<category><![CDATA[REST API]]></category>
		<category><![CDATA[REST 인증]]></category>
		<category><![CDATA[RFC 7519]]></category>
		<category><![CDATA[RS256]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Secret Key]]></category>
		<category><![CDATA[Security Best Practice]]></category>
		<category><![CDATA[Security Token]]></category>
		<category><![CDATA[Session Management]]></category>
		<category><![CDATA[Sessionless]]></category>
		<category><![CDATA[Signature]]></category>
		<category><![CDATA[Stateless]]></category>
		<category><![CDATA[Stateless Authentication]]></category>
		<category><![CDATA[Subject]]></category>
		<category><![CDATA[Token]]></category>
		<category><![CDATA[Token Expiration]]></category>
		<category><![CDATA[Token Revocation]]></category>
		<category><![CDATA[Token Rotation]]></category>
		<category><![CDATA[Token Storage]]></category>
		<category><![CDATA[Token Validation]]></category>
		<category><![CDATA[Web Application Security]]></category>
		<category><![CDATA[Web Security]]></category>
		<category><![CDATA[Web Token]]></category>
		<category><![CDATA[XSS]]></category>
		<category><![CDATA[개인키]]></category>
		<category><![CDATA[게이트웨이]]></category>
		<category><![CDATA[공개키]]></category>
		<category><![CDATA[대상자]]></category>
		<category><![CDATA[대칭키 서명]]></category>
		<category><![CDATA[데이터베이스]]></category>
		<category><![CDATA[디코딩]]></category>
		<category><![CDATA[레디스]]></category>
		<category><![CDATA[로그아웃]]></category>
		<category><![CDATA[로그인]]></category>
		<category><![CDATA[로컬스토리지]]></category>
		<category><![CDATA[리소스 서버]]></category>
		<category><![CDATA[리프레시 토큰]]></category>
		<category><![CDATA[마이크로서비스]]></category>
		<category><![CDATA[만료시간]]></category>
		<category><![CDATA[무상태]]></category>
		<category><![CDATA[무상태 인증]]></category>
		<category><![CDATA[발급자]]></category>
		<category><![CDATA[발행시간]]></category>
		<category><![CDATA[백엔드]]></category>
		<category><![CDATA[베어러]]></category>
		<category><![CDATA[보안 연결]]></category>
		<category><![CDATA[보안 토큰]]></category>
		<category><![CDATA[비대칭키 서명]]></category>
		<category><![CDATA[비밀키]]></category>
		<category><![CDATA[사용자 식별]]></category>
		<category><![CDATA[서명]]></category>
		<category><![CDATA[세션 관리]]></category>
		<category><![CDATA[세션리스]]></category>
		<category><![CDATA[알고리즘]]></category>
		<category><![CDATA[액세스 토큰]]></category>
		<category><![CDATA[오픈아이디 커넥트]]></category>
		<category><![CDATA[웹 보안]]></category>
		<category><![CDATA[웹 애플리케이션 보안]]></category>
		<category><![CDATA[웹 토큰]]></category>
		<category><![CDATA[유효시작]]></category>
		<category><![CDATA[인가]]></category>
		<category><![CDATA[인가 서버]]></category>
		<category><![CDATA[인증]]></category>
		<category><![CDATA[인증 헤더]]></category>
		<category><![CDATA[인증 흐름]]></category>
		<category><![CDATA[인코딩]]></category>
		<category><![CDATA[접근 제어]]></category>
		<category><![CDATA[제이슨 웹 토큰]]></category>
		<category><![CDATA[주제]]></category>
		<category><![CDATA[쿠키 보안]]></category>
		<category><![CDATA[크로스사이트 요청 위조]]></category>
		<category><![CDATA[크로스사이트스크립팅]]></category>
		<category><![CDATA[클레임]]></category>
		<category><![CDATA[클레임 타입]]></category>
		<category><![CDATA[토큰]]></category>
		<category><![CDATA[토큰 검증]]></category>
		<category><![CDATA[토큰 만료]]></category>
		<category><![CDATA[토큰 저장]]></category>
		<category><![CDATA[토큰 폐기]]></category>
		<category><![CDATA[토큰 회전]]></category>
		<category><![CDATA[페이로드]]></category>
		<category><![CDATA[표준]]></category>
		<category><![CDATA[프론트엔드]]></category>
		<category><![CDATA[해시 기반 메시지 인증]]></category>
		<category><![CDATA[헤더]]></category>
		<category><![CDATA[확장성]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=40306</guid>

					<description><![CDATA[<p>🔥 JWT(Json Web Token) 정리 https://www.jwt.io/introduction#how-json-web-tokens-work 1️⃣ 개요 JWT(Json Web Token) 는 클라이언트와 서버 간에 정보를 안전하게 전달하기 위한 토큰 기반 인증 방식입니다. 이는 RFC 7519 에 정의된 개방형 표준(Open Standard) 입니다. JWT는 JSON 형식의 데이터를 Base64URL로 인코딩하고, 디지털 서명(Signature) 을 통해 위변조를 방지합니다. 2️⃣ JWT의 구조 JWT는 .(점) 으로 구분된 3개의 부분으로 구성됩니다. 구분 [&#8230;]</p>
<p>The post <a href="https://lycos7560.com/etc/jwtjson-web-token-%ec%a0%95%eb%a6%ac/40306/">JWT(Json Web Token) 정리</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-0b15c4b2      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#jwtjson-web-token-정리" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> JWT(Json Web Token) 정리</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#1-개요" class="uagb-toc-link__trigger">1&#x20e3; 개요</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#2-jwt의-구조" class="uagb-toc-link__trigger">2&#x20e3; JWT의 구조</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#예시" class="uagb-toc-link__trigger">예시</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#결과" class="uagb-toc-link__trigger">결과</a></li></ul><li class="uagb-toc__list"><a href="#3-jwt의-동작-방식" class="uagb-toc-link__trigger">3&#x20e3; JWT의 동작 방식</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#4-jwt의-장점과-단점" class="uagb-toc-link__trigger">4&#x20e3; JWT의 장점과 단점</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#5-jwt의-주요-claim" class="uagb-toc-link__trigger">5&#x20e3; JWT의 주요 Claim</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#6-refresh-token-전략" class="uagb-toc-link__trigger">6&#x20e3; Refresh Token 전략</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#7-jwt-사용-시-보안-주의사항" class="uagb-toc-link__trigger">7&#x20e3; JWT 사용 시 보안 주의사항</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#결론" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 결론</a></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> JWT(Json Web Token) 정리</h1>



<p><a href="https://www.jwt.io/introduction#how-json-web-tokens-work" target="_blank" rel="noreferrer noopener">https://www.jwt.io/introduction#how-json-web-tokens-work</a></p>



<h2 class="wp-block-heading">1&#x20e3; 개요</h2>



<p><strong>JWT(Json Web Token)</strong> 는 클라이언트와 서버 간에 정보를 <strong>안전하게 전달하기 위한 토큰 기반 인증 방식</strong>입니다.</p>



<p>이는 <strong>RFC 7519</strong> 에 정의된 <strong>개방형 표준(Open Standard)</strong> 입니다.</p>



<p>JWT는 JSON 형식의 데이터를 <strong>Base64URL로 인코딩</strong>하고, <strong>디지털 서명(Signature)</strong> 을 통해 <strong>위변조를 방지</strong>합니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">2&#x20e3; JWT의 구조</h2>



<p>JWT는 <strong><code>.</code>(점)</strong> 으로 구분된 <strong>3개의 부분</strong>으로 구성됩니다.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">
xxxxx.yyyyy.zzzzz
</pre>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>구분</th><th>이름</th><th>설명</th></tr></thead><tbody><tr><td>1</td><td>Header</td><td>토큰의 타입(JWT)과 서명 알고리즘(HS256, RS256 등)을 명시</td></tr><tr><td>2</td><td>Payload</td><td>사용자 정보나 클레임(Claims)을 포함</td></tr><tr><td>3</td><td>Signature</td><td>Header와 Payload를 비밀키로 서명하여 위변조 방지</td></tr></tbody></table></figure>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">예시</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="json" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// Header (헤더)
Header: 
{
  "alg": "HS256",
  "typ": "JWT"
}

// Payload (페이로드) - 클레임(Claim)
Payload:
{
  "sub": "1234567890",      // 주제 (Subject)
  "name": "John Doe",       // 사용자 이름
  "admin": true,            // 역할
  "iat": 1516239022,        // 발행 시간 (Issued At)
  "exp": 1516242622         // 만료 시간 (Expiration)
}

// Signature (서명)
Signature:
HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)
</pre>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">결과</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">3&#x20e3; JWT의 동작 방식</h2>



<p>1. 사용자가 로그인 요청을 전송</p>



<p>2. 서버는 사용자의 인증 정보(아이디, 비밀번호 등)를 검증</p>



<p>3. 인증에 성공하면 <strong>JWT 토큰을 생성하여 클라이언트에게 발급</strong></p>



<p>4. 클라이언트는 이후 요청마다 <strong>Authorization 헤더</strong>에 토큰을 포함</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Authorization: Bearer &lt;JWT_TOKEN>

## 예시
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIxIiwidW5pcXVlX25hbWUiOiJhZG1pbiIsImVtYWlsIjoiYWRtaW5AZGVtby5jb20iLCJMb2dpblRpbWUiOiIyMDI1LTEwLTEyVDIyOjEwOjMwLjY3NDg3ODVaIiwicm9sZSI6WyJBZG1pbiIsIlVzZXIiXSwibmJmIjoxNzYwMzA3MDMwLCJleHAiOjE3NjAzMTA2MzAsImlhdCI6MTc2MDMwNzAzMCwiaXNzIjoibHljb3M3NTYwLmNvbSIsImF1ZCI6Ik15QXVkaWVuY2UifQ.Vo2eV6JLLJLg_qBvfalPZI87n8UVQRCn5mAAhRjDnuU</pre>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<p>5. 서버는 요청을 받을 때마다 JWT 토큰의 <strong>유효성(Signature 및 만료 시간)</strong> 을 검증</p>



<p>6. 유효한 경우 요청을 처리하고, 그렇지 않으면 401 Unauthorized 응</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">4&#x20e3; JWT의 장점과 단점</h2>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>장점</strong></th><th>설명</th></tr></thead><tbody><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 확장성</td><td>세션을 서버 메모리에 저장하지 않아도 되므로, 서버 확장에 유리</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 무상태성</td><td>서버가 사용자 상태를 기억하지 않아도 됨 (Stateless)</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 범용성</td><td>웹, 모바일, API 등 다양한 환경에서 동일한 인증 방식 사용 가능</td></tr></tbody></table></figure>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>단점</strong></th><th>설명</th></tr></thead><tbody><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 토큰 무효화 어려움</td><td>만료 전까지 유효 → 즉시 로그아웃 구현 어려움</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 보안 주의 필요</td><td>비밀키 유출 시 전체 시스템 위험, XSS/CSRF 취약</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 크기 문제</td><td>세션 ID보다 커서 네트워크 트래픽 증가 가능, <em><strong>매 요청마다 JWT 토큰 전송 → 트래픽 증가</strong></em></td></tr></tbody></table></figure>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">5&#x20e3; JWT의 주요 Claim</h2>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Claim</th><th>설명</th></tr></thead><tbody><tr><td><code>iss</code></td><td>토큰 발급자 (Issuer)</td></tr><tr><td><code>sub</code></td><td>토큰 제목 / 사용자 식별자 (Subject)</td></tr><tr><td><code>aud</code></td><td>토큰 대상자 (Audience)</td></tr><tr><td><code>exp</code></td><td>만료 시간 (Expiration Time)</td></tr><tr><td><code>nbf</code></td><td>이 시간 이전에는 유효하지 않음 (Not Before)</td></tr><tr><td><code>iat</code></td><td>토큰 발급 시간 (Issued At)</td></tr><tr><td><code>jti</code></td><td>JWT 고유 식별자 (JWT ID)</td></tr></tbody></table></figure>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">6&#x20e3; Refresh Token 전략</h2>



<p>Access Token의 수명이 짧기 때문에, <strong>Refresh Token</strong>을 사용해 재발급하는 구조가 일반적입니다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>구분</th><th>역할</th></tr></thead><tbody><tr><td>Access Token</td><td>짧은 만료 시간(5~30분) → 요청 인증용</td></tr><tr><td>Refresh Token</td><td>긴 만료 시간(1~14일) → 새로운 Access Token 발급용</td></tr></tbody></table></figure>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<p>1. 로그인 시 Access Token + Refresh Token 발급</p>



<p>2. Access Token 만료 시 Refresh Token으로 갱신 요청</p>



<p>3. 서버는 Refresh Token 검증 후 새로운 Access Token 발급</p>



<p>4. Refresh Token 탈취 시 위험하므로 DB나 Redis에 저장해 관리<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Refresh Token 탈취 시 장기 인증이 노출될 수 있으므로, IP / User-Agent 기반 검증 또는 토큰 회전(Token Rotation) 권장</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">7&#x20e3; JWT 사용 시 보안 주의사항</h2>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>HTTPS 필수 사용</strong> (평문 노출 방지)</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Authorization 헤더</strong> 사용 (쿠키보다 안전)</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>짧은 만료 시간 + Refresh Token 병행</strong></p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>민감정보(비밀번호 등)는 Payload에 절대 포함 금지</strong></p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>IP, User-Agent 등 부가 정보 검증</strong> 가능</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>HttpOnly Cookie + Secure 옵션</strong>으로 XSS 방지</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>서명키(secret)</strong> 는 .env 또는 KeyVault 등 안전한 저장소 사용</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 결론</h2>



<p>JWT는 <strong>확장성과 무상태성</strong>을 제공하는 강력한 인증 수단이지만, <strong>보안 관리(비밀키, 만료, 저장 위치 등)</strong> 가 핵심입니다.</p>



<p>실제 운영환경에서는 <strong>Access/Refresh Token 분리 + HTTPS + 짧은 만료</strong>를 조합해 <strong>안전하고 효율적인 인증 시스템</strong>을 구축해야 합니다.</p>



<p></p>
<p>The post <a href="https://lycos7560.com/etc/jwtjson-web-token-%ec%a0%95%eb%a6%ac/40306/">JWT(Json Web Token) 정리</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/etc/jwtjson-web-token-%ec%a0%95%eb%a6%ac/40306/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>OSI 7 계층 (Open Systems Interconnection 7 Layers)</title>
		<link>https://lycos7560.com/etc/osi-7-%ea%b3%84%ec%b8%b5-open-systems-interconnection-7-layers/40082/</link>
					<comments>https://lycos7560.com/etc/osi-7-%ea%b3%84%ec%b8%b5-open-systems-interconnection-7-layers/40082/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Tue, 01 Jul 2025 14:16:22 +0000</pubDate>
				<category><![CDATA[개인 공부 저장용]]></category>
		<category><![CDATA[기타]]></category>
		<category><![CDATA[Application Layer]]></category>
		<category><![CDATA[ARP]]></category>
		<category><![CDATA[Bit Transmission]]></category>
		<category><![CDATA[Bridge]]></category>
		<category><![CDATA[Cable]]></category>
		<category><![CDATA[Compression]]></category>
		<category><![CDATA[Data Format]]></category>
		<category><![CDATA[Data Link Layer]]></category>
		<category><![CDATA[Datagram]]></category>
		<category><![CDATA[Decryption]]></category>
		<category><![CDATA[DHCP]]></category>
		<category><![CDATA[Dialog Control]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Electrical Characteristics]]></category>
		<category><![CDATA[Encoding]]></category>
		<category><![CDATA[Encryption]]></category>
		<category><![CDATA[End-to-End Communication]]></category>
		<category><![CDATA[Error Detection]]></category>
		<category><![CDATA[Ethernet]]></category>
		<category><![CDATA[Flow Control]]></category>
		<category><![CDATA[Frame]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Hub]]></category>
		<category><![CDATA[ICMP]]></category>
		<category><![CDATA[IP address]]></category>
		<category><![CDATA[IP 주소]]></category>
		<category><![CDATA[IPv4]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[ISO Standard]]></category>
		<category><![CDATA[ISO 표준]]></category>
		<category><![CDATA[JPEG]]></category>
		<category><![CDATA[Layered Architecture]]></category>
		<category><![CDATA[MAC Address]]></category>
		<category><![CDATA[MAC 주소]]></category>
		<category><![CDATA[Modem]]></category>
		<category><![CDATA[MPEG]]></category>
		<category><![CDATA[Network Layer]]></category>
		<category><![CDATA[Network Model]]></category>
		<category><![CDATA[OSI 7 Layer]]></category>
		<category><![CDATA[OSI 7 계층]]></category>
		<category><![CDATA[packet]]></category>
		<category><![CDATA[Physical Layer]]></category>
		<category><![CDATA[Port Number]]></category>
		<category><![CDATA[PPP]]></category>
		<category><![CDATA[Presentation Layer]]></category>
		<category><![CDATA[Reliability]]></category>
		<category><![CDATA[Repeater]]></category>
		<category><![CDATA[Router]]></category>
		<category><![CDATA[Routing]]></category>
		<category><![CDATA[RPC]]></category>
		<category><![CDATA[Segment]]></category>
		<category><![CDATA[Session Layer]]></category>
		<category><![CDATA[Session Management]]></category>
		<category><![CDATA[SMTP]]></category>
		<category><![CDATA[SQL 세션]]></category>
		<category><![CDATA[SSL/TLS]]></category>
		<category><![CDATA[Switch]]></category>
		<category><![CDATA[Synchronization]]></category>
		<category><![CDATA[TCP]]></category>
		<category><![CDATA[Transport Layer]]></category>
		<category><![CDATA[UDP]]></category>
		<category><![CDATA[User Services]]></category>
		<category><![CDATA[Wi-Fi]]></category>
		<category><![CDATA[계층적 구조]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[네트워크 계층]]></category>
		<category><![CDATA[네트워크 모델]]></category>
		<category><![CDATA[대화 제어]]></category>
		<category><![CDATA[데이터 링크 계층]]></category>
		<category><![CDATA[데이터 형식]]></category>
		<category><![CDATA[데이터그램]]></category>
		<category><![CDATA[동기화]]></category>
		<category><![CDATA[라우터]]></category>
		<category><![CDATA[라우팅]]></category>
		<category><![CDATA[리피터]]></category>
		<category><![CDATA[모뎀]]></category>
		<category><![CDATA[물리 계층]]></category>
		<category><![CDATA[복호화]]></category>
		<category><![CDATA[브리지]]></category>
		<category><![CDATA[비트 전송]]></category>
		<category><![CDATA[사용자 서비스]]></category>
		<category><![CDATA[세그먼트]]></category>
		<category><![CDATA[세션 계층]]></category>
		<category><![CDATA[세션 관리]]></category>
		<category><![CDATA[스위치]]></category>
		<category><![CDATA[신뢰성]]></category>
		<category><![CDATA[암호화]]></category>
		<category><![CDATA[압축]]></category>
		<category><![CDATA[오류 감지]]></category>
		<category><![CDATA[응용 계층]]></category>
		<category><![CDATA[이더넷]]></category>
		<category><![CDATA[인코딩]]></category>
		<category><![CDATA[전기적 특성]]></category>
		<category><![CDATA[전송 계층]]></category>
		<category><![CDATA[종단 간 통신]]></category>
		<category><![CDATA[케이블]]></category>
		<category><![CDATA[패킷]]></category>
		<category><![CDATA[포트 번호]]></category>
		<category><![CDATA[표현 계층]]></category>
		<category><![CDATA[프레임]]></category>
		<category><![CDATA[허브]]></category>
		<category><![CDATA[흐름 제어]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=40082</guid>

					<description><![CDATA[<p>🔥 OSI 7 계층 OSI 7계층은 국제 표준화 기구(ISO)에서 네트워크 통신 과정을 7개의 논리적인 계층으로 나눈 참조 모델로 복잡한 네트워크 통신을 계층별로 나누어 표준화 함으로써, 서로 다른 하드웨어 및 소프트웨어 간의 호환성을 높이고, 문제 발생 시 해당 계층에 쉽게 문제를 파악하고 해결할 수 있도록 돕는 역할을 합니다. 각 계층은 독립적인 기능을 수행하며, 하위 계층에 서비스를 [&#8230;]</p>
<p>The post <a href="https://lycos7560.com/etc/osi-7-%ea%b3%84%ec%b8%b5-open-systems-interconnection-7-layers/40082/">OSI 7 계층 (Open Systems Interconnection 7 Layers)</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-3755756a      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#osi-7-계층" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> OSI 7 계층</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#1-물리-계층-physical-layer" class="uagb-toc-link__trigger">1. 물리 계층 (Physical Layer)</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#2-데이터-링크-계층-data-link-layer" class="uagb-toc-link__trigger">2. 데이터 링크 계층 (Data Link Layer)</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#3-네트워크-계층-network-layer" class="uagb-toc-link__trigger">3. 네트워크 계층 (Network Layer)</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#4-전송-계층-transport-layer" class="uagb-toc-link__trigger">4. 전송 계층 (Transport Layer)</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#5-세션-계층-session-layer" class="uagb-toc-link__trigger">5. 세션 계층 (Session Layer)</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#6-표현-계층-presentation-layer" class="uagb-toc-link__trigger">6. 표현 계층 (Presentation Layer)</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#7-응용-계층-application-layer" class="uagb-toc-link__trigger">7. 응용 계층 (Application Layer)</a></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> OSI 7 계층</h2>



<p>OSI 7계층은 국제 표준화 기구(ISO)에서 네트워크 통신 과정을 7개의 논리적인 계층으로 나눈 참조 모델로</p>



<p>복잡한 네트워크 통신을 계층별로 나누어 표준화 함으로써, </p>



<p>서로 <strong>다른 하드웨어 및 소프트웨어 간의 호환성</strong>을 높이고, <strong>문제 발생 시 해당 계층에 쉽게 문제를 파악</strong>하고 해결할 수 있도록 돕는 역할을 합니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>각 계층은 독립적인 기능을 수행하며, 하위 계층에 서비스를 제공하고 상위 계층으로부터 서비스를 받습니다.</p>



<p>데이터는 송신 측에서 7계층부터 1계층으로 내려가면서 각 계층의 헤더(Header)가 추가되어(캡슐화) 전송되고,</p>



<p>수신 측에서는 1계층부터 7계층으로 올라오면서 각 계층의 헤더가 제거되어(역캡슐화) 최종적으로 데이터에 접근하게 됩니다.</p>



<p>각 계층은 </p>



<ol class="wp-block-list">
<li>물리 계층 (Physical Layer)</li>



<li>데이터 링크 계층 (Data Link Layer)</li>



<li>네트워크 계층 (Network Layer)</li>



<li>전송 계층 (Transport Layer)</li>



<li>세션 계층 (Session Layer)</li>



<li>표현 계층 (Presentation Layer)</li>



<li>응용 계층 (Application Layer)</li>
</ol>



<p>으로 이루어져 있습니다.</p>



<div class="wp-block-uagb-container uagb-block-85af2c97 alignfull uagb-is-root-container"><div class="uagb-container-inner-blocks-wrap">
<div class="wp-block-uagb-container uagb-block-580fd3fc">
<figure class="wp-block-image size-full"><img decoding="async" width="960" height="420" src="https://lycos7560.com/wp-content/uploads/2025/07/Osi_7layer_modell.png" alt="" class="wp-image-40083" srcset="https://lycos7560.com/wp-content/uploads/2025/07/Osi_7layer_modell.png 960w, https://lycos7560.com/wp-content/uploads/2025/07/Osi_7layer_modell-300x131.png 300w, https://lycos7560.com/wp-content/uploads/2025/07/Osi_7layer_modell-768x336.png 768w" sizes="(max-width: 960px) 100vw, 960px" /><figcaption class="wp-element-caption"><a href="https://de.wikipedia.org/wiki/Datei:Osi_7layer_modell.png" target="_blank" rel="noreferrer noopener">https://de.wikipedia.org/wiki/Datei:Osi_7layer_modell.png</a></figcaption></figure>
</div>



<div class="wp-block-uagb-container uagb-block-a491888b">
<figure class="wp-block-image size-full"><img decoding="async" width="600" height="764" src="https://lycos7560.com/wp-content/uploads/2025/07/OSI-7-Layer.png" alt="" class="wp-image-40096" srcset="https://lycos7560.com/wp-content/uploads/2025/07/OSI-7-Layer.png 600w, https://lycos7560.com/wp-content/uploads/2025/07/OSI-7-Layer-236x300.png 236w" sizes="(max-width: 600px) 100vw, 600px" /><figcaption class="wp-element-caption"><a href="https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/OSI%207%20%EA%B3%84%EC%B8%B5.md" target="_blank" rel="noreferrer noopener">https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/OSI%207%20%EA%B3%84%EC%B8%B5.md</a></figcaption></figure>
</div>
</div></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">1. 물리 계층 (Physical Layer)</h3>



<h4 class="wp-block-heading">역할</h4>



<p>네트워크 통신의 가장 기초적인 단계로, <strong>데이터를 물리적인 매체(케이블, 무선 신호 등)를 통해 비트(0과 1) 단위의 전기적 신호로 전송하고 수신</strong>하는 계층입니다.</p>



<h4 class="wp-block-heading">주요 기능</h4>



<p>전기적 신호의 전압 레벨, 신호 타이밍, 물리적 연결(커넥터 규격), 전송 매체(UTP, 광섬유 등)의 특성 등을 정의합니다. </p>



<p>단순히 0과 1의 비트 정보만 전달할 뿐 데이터의 의미는 해석하지 않습니다.</p>



<h4 class="wp-block-heading">데이터 단위</h4>



<p>비트 (Bit)</p>



<h4 class="wp-block-heading">관련 장비</h4>



<p>허브(Hub), 리피터(Repeater), 모뎀, 케이블, 커넥터</p>



<h4 class="wp-block-heading">프로토콜 예시</h4>



<p>이더넷(Ethernet)의 물리적 규격, RS-232C</p>



<div class="wp-block-uagb-container uagb-block-d25137a7 alignfull uagb-is-root-container"><div class="uagb-container-inner-blocks-wrap">
<div class="wp-block-uagb-container uagb-block-62d7d6b5">
<figure class="wp-block-image size-full"><img decoding="async" width="250" height="181" src="https://lycos7560.com/wp-content/uploads/2025/07/Repeater-schema.svg_.png" alt="" class="wp-image-40084"/><figcaption class="wp-element-caption"><a href="https://en.wikipedia.org/wiki/Repeater" target="_blank" rel="noreferrer noopener">https://en.wikipedia.org/wiki/Repeater</a><br>리피터(Repeater)를 이용한 신호 증폭</figcaption></figure>
</div>



<div class="wp-block-uagb-container uagb-block-8f94345f">
<figure class="wp-block-image size-full"><img decoding="async" width="536" height="166" src="https://lycos7560.com/wp-content/uploads/2025/07/image-4.png" alt="" class="wp-image-40085" srcset="https://lycos7560.com/wp-content/uploads/2025/07/image-4.png 536w, https://lycos7560.com/wp-content/uploads/2025/07/image-4-300x93.png 300w" sizes="(max-width: 536px) 100vw, 536px" /><figcaption class="wp-element-caption"><a href="https://namu.wiki/w/%EC%9D%B4%EB%8D%94%EB%84%B7%20%EC%BC%80%EC%9D%B4%EB%B8%94" target="_blank" rel="noreferrer noopener">https://namu.wiki/w/%EC%9D%B4%EB%8D%94%EB%84%B7%20%EC%BC%80%EC%9D%B4%EB%B8%94</a><br>차폐 단계에 따른 케이블 이더넷 케이블 분류</figcaption></figure>
</div>



<div class="wp-block-uagb-container uagb-block-7dcd6e85">
<figure class="wp-block-image size-full"><img decoding="async" width="369" height="340" src="https://lycos7560.com/wp-content/uploads/2025/07/image-5.png" alt="" class="wp-image-40086" srcset="https://lycos7560.com/wp-content/uploads/2025/07/image-5.png 369w, https://lycos7560.com/wp-content/uploads/2025/07/image-5-300x276.png 300w" sizes="(max-width: 369px) 100vw, 369px" /><figcaption class="wp-element-caption"><a href="https://namu.wiki/w/%EC%9D%B4%EB%8D%94%EB%84%B7%20%EC%BC%80%EC%9D%B4%EB%B8%94" target="_blank" rel="noreferrer noopener">https://namu.wiki/w/%EC%9D%B4%EB%8D%94%EB%84%B7%20%EC%BC%80%EC%9D%B4%EB%B8%94</a></figcaption></figure>
</div>
</div></div>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">2. 데이터 링크 계층 (Data Link Layer)</h3>



<h4 class="wp-block-heading">역할</h4>



<p>물리 계층을 통해 전송되는 비트 스트림을 <strong>프레임(Frame)</strong>이라는 논리적인 단위로 묶고, 인접한 두 장치(노드) 간의 <strong>신뢰성 있는 데이터 전송</strong>을 보장합니다.</p>



<h4 class="wp-block-heading">주요 기능</h4>



<p><strong>MAC 주소(물리 주소)</strong>를 이용한 <strong>장치 식별 및 주소 지정, 프레임 구성(시작/끝 비트, 헤더, 데이터, 트레일러), 오류 감지 및 수정, 흐름 제어, 매체 접근 제어(CSMA/CD, 토큰 링 등)</strong>를 수행합니다.</p>



<h4 class="wp-block-heading">데이터 단위</h4>



<p>프레임 (Frame)</p>



<h4 class="wp-block-heading">관련 장비</h4>



<p>스위치(Switch), 브리지(Bridge)</p>



<h4 class="wp-block-heading">프로토콜 예시</h4>



<p>이더넷(Ethernet), Wi-Fi, PPP(Point-to-Point Protocol), HDLC</p>



<div class="wp-block-uagb-container uagb-block-ffb89107 alignfull uagb-is-root-container"><div class="uagb-container-inner-blocks-wrap">
<div class="wp-block-uagb-container uagb-block-018b065b">
<figure class="wp-block-image size-full"><img decoding="async" width="613" height="196" src="https://lycos7560.com/wp-content/uploads/2025/07/image-6.png" alt="" class="wp-image-40087" srcset="https://lycos7560.com/wp-content/uploads/2025/07/image-6.png 613w, https://lycos7560.com/wp-content/uploads/2025/07/image-6-300x96.png 300w" sizes="(max-width: 613px) 100vw, 613px" /><figcaption class="wp-element-caption"><a href="https://study-ccna.com/network-switch-explained/" target="_blank" rel="noreferrer noopener">https://study-ccna.com/network-switch-explained/</a><br>CISCO 스위치(Switch)</figcaption></figure>
</div>



<div class="wp-block-uagb-container uagb-block-480160fc">
<figure class="wp-block-image size-full"><img decoding="async" width="458" height="256" src="https://lycos7560.com/wp-content/uploads/2025/07/image-7.png" alt="" class="wp-image-40088" srcset="https://lycos7560.com/wp-content/uploads/2025/07/image-7.png 458w, https://lycos7560.com/wp-content/uploads/2025/07/image-7-300x168.png 300w" sizes="(max-width: 458px) 100vw, 458px" /><figcaption class="wp-element-caption"><a href="https://www.shi.com/product/34187386/ONELINK-BRIDGE-CISCO-CODECNA-CISCO-CAM-EXTENSIONS" target="_blank" rel="noreferrer noopener">https://www.shi.com/product/34187386/ONELINK-BRIDGE-CISCO-CODECNA-CISCO-CAM-EXTENSIONS</a><br>ONELINK BRIDGE CISCO</figcaption></figure>
</div>
</div></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">3. 네트워크 계층 (Network Layer)</h3>



<h4 class="wp-block-heading">역할</h4>



<p>여러 개의 독립적인 네트워크를 통해 목적지까지 <strong>패킷(Packet)</strong>을 가장 효율적인 경로로 전송하는 <strong>라우팅(Routing)</strong> 기능을 수행합니다. </p>



<p>논리적 주소인 <strong>IP 주소</strong>를 사용하여 장치를 식별하고 경로를 결정합니다.</p>



<h4 class="wp-block-heading">주요 기능</h4>



<p>IP 주소를 이용한 <strong>종단 간(End-to-End) 패킷 전송, 최적의 경로 선택(라우팅), 패킷 포워딩(다른 네트워크로 패킷 전달), 네트워크 혼잡 제어</strong>를 담당합니다.</p>



<h4 class="wp-block-heading">데이터 단위</h4>



<p>패킷 (Packet)</p>



<h4 class="wp-block-heading">관련 장비</h4>



<p>라우터(Router), L3 스위치</p>



<h4 class="wp-block-heading">프로토콜 예시</h4>



<p>IP(Internet Protocol &#8211; IPv4/IPv6), ICMP(Internet Control Message Protocol), ARP(Address Resolution Protocol), RIP(Routing Information Protocol), OSPF(Open Shortest Path First)</p>



<div class="wp-block-uagb-container uagb-block-3adc04c5 alignfull uagb-is-root-container"><div class="uagb-container-inner-blocks-wrap">
<div class="wp-block-uagb-container uagb-block-f8f68a52">
<figure class="wp-block-image size-full"><img decoding="async" width="1200" height="548" src="https://lycos7560.com/wp-content/uploads/2025/07/IPv4_Packet-en.svg_.png" alt="" class="wp-image-40089" srcset="https://lycos7560.com/wp-content/uploads/2025/07/IPv4_Packet-en.svg_.png 1200w, https://lycos7560.com/wp-content/uploads/2025/07/IPv4_Packet-en.svg_-300x137.png 300w, https://lycos7560.com/wp-content/uploads/2025/07/IPv4_Packet-en.svg_-768x351.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><figcaption class="wp-element-caption"><a href="https://ko.wikipedia.org/wiki/IPv4" target="_blank" rel="noreferrer noopener">https://ko.wikipedia.org/wiki/IPv4</a><br>IPv4 Header</figcaption></figure>
</div>



<div class="wp-block-uagb-container uagb-block-66ab6aac">
<figure class="wp-block-image size-full"><img decoding="async" width="1920" height="885" src="https://lycos7560.com/wp-content/uploads/2025/07/IPv6_header-en.svg_.png" alt="" class="wp-image-40091" srcset="https://lycos7560.com/wp-content/uploads/2025/07/IPv6_header-en.svg_.png 1920w, https://lycos7560.com/wp-content/uploads/2025/07/IPv6_header-en.svg_-300x138.png 300w, https://lycos7560.com/wp-content/uploads/2025/07/IPv6_header-en.svg_-768x354.png 768w, https://lycos7560.com/wp-content/uploads/2025/07/IPv6_header-en.svg_-1536x708.png 1536w" sizes="(max-width: 1920px) 100vw, 1920px" /><figcaption class="wp-element-caption"><a href="https://ko.wikipedia.org/wiki/IPv6" target="_blank" rel="noreferrer noopener">https://ko.wikipedia.org/wiki/IPv6</a><br>IPv6 Header</figcaption></figure>
</div>
</div></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">4. 전송 계층 (Transport Layer)</h3>



<h4 class="wp-block-heading">역할</h4>



<p>송신자와 수신자 간의 <strong>신뢰할 수 있는 종단 간 데이터 전송</strong>을 보장하며, 응용 프로그램(프로세스)을 식별하기 위해 <strong>포트 번호</strong>를 사용합니다.</p>



<h4 class="wp-block-heading">주요 기능</h4>



<p>연결 설정 및 해제(TCP의 3-Way Handshake), 오류 복구(재전송), 흐름 제어(버퍼링), 데이터 분할 및 재조립(세그먼트화), 포트 번호를 이용한 프로세스 간 통신(Multiplexing/Demultiplexing)을 제공합니다.</p>



<h4 class="wp-block-heading">데이터 단위</h4>



<p>세그먼트 (Segment &#8211; TCP), 데이터그램 (Datagram &#8211; UDP)</p>



<h4 class="wp-block-heading">관련 장비</h4>



<p>게이트웨이(일부 기능), 방화벽(일부 기능)</p>



<h4 class="wp-block-heading">프로토콜 예시</h4>



<p>TCP(Transmission Control Protocol), UDP(User Datagram Protocol)</p>



<figure class="wp-block-image size-full"><img decoding="async" width="687" height="565" src="https://lycos7560.com/wp-content/uploads/2025/07/image-8.jpg" alt="" class="wp-image-40092" srcset="https://lycos7560.com/wp-content/uploads/2025/07/image-8.jpg 687w, https://lycos7560.com/wp-content/uploads/2025/07/image-8-300x247.jpg 300w" sizes="(max-width: 687px) 100vw, 687px" /><figcaption class="wp-element-caption"><a href="https://namu.wiki/w/TCP/IP?uuid=f7667e54-fa2e-4de2-b13a-ec98e8d2d02b" target="_blank" rel="noreferrer noopener">https://namu.wiki/w/TCP/IP?uuid=f7667e54-fa2e-4de2-b13a-ec98e8d2d02b</a></figcaption></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">5. 세션 계층 (Session Layer)</h3>



<h4 class="wp-block-heading">역할</h4>



<p>통신하는 두 응용 프로그램(또는 프로세스) 간의 <strong>대화(세션)를 설정, 유지, 동기화 및 종료</strong>하는 기능을 담당합니다.</p>



<h4 class="wp-block-heading">주요 기능</h4>



<p>세션 설정 및 해제, 데이터 교환 방식(전이중, 반이중, 단방향) 제어, 동기점(Synchronization Point) 설정을 통해 </p>



<p>통신 중 오류 발생 시 처음부터 다시 시작하지 않고 동기점부터 재개할 수 있도록 복구 기능을 제공합니다.</p>



<h4 class="wp-block-heading">데이터 단위</h4>



<p>메시지 (Message) 또는 데이터 (Data)</p>



<h4 class="wp-block-heading">프로토콜 예시</h4>



<p>NetBIOS, RPC(Remote Procedure Call), SQL 세션</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">6. 표현 계층 (Presentation Layer)</h3>



<h4 class="wp-block-heading">역할</h4>



<p>응용 계층의 데이터를 시스템 간에 <strong>서로 이해할 수 있는 공통된 형식으로 변환</strong>하는 계층입니다. </p>



<p>데이터 표현의 독립성을 제공합니다.</p>



<h4 class="wp-block-heading">주요 기능</h4>



<p>데이터 포맷 변환(예: ASCII <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> EBCDIC), 데이터 암호화 및 복호화, 데이터 압축 및 압축 해제 등을 수행하여 </p>



<p>응용 계층에서 사용하는 데이터를 네트워크 전송에 적합한 형태로 변환합니다.</p>



<h4 class="wp-block-heading">데이터 단위</h4>



<p>메시지 (Message) 또는 데이터 (Data)</p>



<h4 class="wp-block-heading">프로토콜 예시</h4>



<p>JPEG, MPEG, GIF, ASCII, EBCDIC, SSL/TLS(일부 보안 및 암호화 기능)</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">7. 응용 계층 (Application Layer)</h3>



<h4 class="wp-block-heading">역할</h4>



<p>최종 사용자(End User)가 네트워크 서비스에 직접 접근할 수 있도록 <strong>응용 프로그램에 특화된 서비스를 제공</strong>하는 최상위 계층입니다. </p>



<p>사용자와 가장 가까운 계층이며, 다양한 네트워크 애플리케이션 프로토콜이 정의됩니다.</p>



<h4 class="wp-block-heading">주요 기능</h4>



<p>사용자 인터페이스 제공, 이메일, 파일 전송, 웹 브라우징 등 특정 애플리케이션 서비스를 제공합니다. </p>



<p>실제 사용자가 이용하는 웹 브라우저, 이메일 클라이언트, 파일 전송 프로그램 등이 이 계층의 프로토콜을 활용합니다.</p>



<h4 class="wp-block-heading">데이터 단위</h4>



<p>메시지 (Message) 또는 데이터 (Data)</p>



<h4 class="wp-block-heading">프로토콜 예시</h4>



<p>HTTP/HTTPS(웹 브라우징), FTP(파일 전송), SMTP/POP3/IMAP(이메일), DNS(도메인 이름 해석), DHCP(IP 주소 할당), SNMP(네트워크 관리)</p>
<p>The post <a href="https://lycos7560.com/etc/osi-7-%ea%b3%84%ec%b8%b5-open-systems-interconnection-7-layers/40082/">OSI 7 계층 (Open Systems Interconnection 7 Layers)</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/etc/osi-7-%ea%b3%84%ec%b8%b5-open-systems-interconnection-7-layers/40082/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Unity Transport 2.5.1 Docs</title>
		<link>https://lycos7560.com/unity/unity-transport-2-5-1/39976/</link>
					<comments>https://lycos7560.com/unity/unity-transport-2-5-1/39976/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Wed, 30 Apr 2025 21:19:50 +0000</pubDate>
				<category><![CDATA[Unity]]></category>
		<category><![CDATA[개인 공부 저장용]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[Transport]]></category>
		<category><![CDATA[Unity Transport]]></category>
		<category><![CDATA[공부]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=39976</guid>

					<description><![CDATA[<p>API https://docs.unity3d.com/Packages/com.unity.transport@2.5/api/index.html 🔥Unity Transport? Unity Transport 2.5.1 https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/index.html Unity Transport는 멀티플레이어 게임 개발을 위한 저수준 네트워킹 라이브러리입니다. Unity의 두 가지 Netcode 솔루션인 Netcode for GameObjects(NFG)와 Netcode for Entities(NFE)의 기반으로 사용됩니다. 또한 사용자가 직접 만든 커스텀 네트워크 솔루션과 함께 사용할 수 있습니다. Unity 엔진에서 지원하는 모든 플랫폼은 UDP 소켓 또는 WebSocket을 통해 제공되는 연결 기반 추상화 [&#8230;]</p>
<p>The post <a href="https://lycos7560.com/unity/unity-transport-2-5-1/39976/">Unity Transport 2.5.1 Docs</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-f2bee75e      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차 테이블						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#unity-transport" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />Unity Transport?</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#요구-사항" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f34e.png" alt="🍎" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 요구 사항</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#참고사항" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 참고사항</a></li></ul></li><li class="uagb-toc__list"><a href="#sample-project" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />Sample Project</a><li class="uagb-toc__list"><a href="#간단한-클라이언트-서버" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />간단한 클라이언트 서버</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#1-서버-생성" class="uagb-toc-link__trigger">1&#x20e3; 서버 생성</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#2-보일러플레이트-코드-boilerplate-code" class="uagb-toc-link__trigger">2&#x20e3; 보일러플레이트 코드 (Boilerplate Code)</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#1-networkdriver-선언-server" class="uagb-toc-link__trigger">1. NetworkDriver 선언  &#8211; Server</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#2-서버-초기화-start-server" class="uagb-toc-link__trigger">2. 서버 초기화 (Start) &#8211; Server</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#3-리소스-정리-ondestroy-server" class="uagb-toc-link__trigger">3. 리소스 정리 (OnDestroy)  &#8211; Server</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#4-서버-업데이트-루프-update-server" class="uagb-toc-link__trigger">4. 서버 업데이트 루프 (Update)  &#8211; Server</a></li></ul><li class="uagb-toc__list"><a href="#3-클라이언트-구현-차이점-중심-client" class="uagb-toc-link__trigger">3&#x20e3; 클라이언트 구현 (차이점 중심) &#8211; Client</a></li></ul></li></ul></li><li class="uagb-toc__list"><a href="#사용-모범-사례" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />사용 모범 사례</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#1-파이프라인-사용-using-pipelines" class="uagb-toc-link__trigger">1&#x20e3; 파이프라인 사용 (Using pipelines)</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#작동-원리-how-it-works" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2753.png" alt="❓" class="wp-smiley" style="height: 1em; max-height: 1em;" />작동 원리 (How it Works)</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#fragmentation-파이프라인-단계" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Fragmentation 파이프라인 단계</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#the-reliable-파이프라인-단계" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> The reliable 파이프라인 단계</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#동시-전송-가능한-패킷-수-제한" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26d4.png" alt="⛔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 동시 전송 가능한 패킷 수 제한</a></li></ul><li class="uagb-toc__list"><a href="#the-reliable-파이프라인-단계" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> The reliable 파이프라인 단계</a></li></ul><li class="uagb-toc__list"><a href="#2-jobified-클라이언트-및-서버" class="uagb-toc-link__trigger">2&#x20e3; Jobified 클라이언트 및 서버</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#3-암호화된-통신-encrypted-communications" class="uagb-toc-link__trigger">3&#x20e3; 암호화된 통신 Encrypted communications</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#4-unitylogging와-통합" class="uagb-toc-link__trigger">4&#x20e3; Unity.Logging와 통합</a></li></ul></li></ul></li></ul></li><li class="uagb-toc__list"><a href="#cross-play-support" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />Cross-play support</a><li class="uagb-toc__list"><a href="#webgl-support" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />WebGL support</a><li class="uagb-toc__list"><a href="#faq" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />FAQ</a><li class="uagb-toc__list"><a href="#cross-play-support" class="uagb-toc-link__trigger"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />Cross-play support</a></ul></ul></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>API</p>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/api/index.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/api/index.html</a></p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />Unity Transport?</h2>



<p>Unity Transport 2.5.1 </p>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/index.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/index.html</a> </p>



<p>Unity Transport는 멀티플레이어 <strong>게임 개발을 위한 저수준 네트워킹 라이브러리</strong>입니다.</p>



<p>Unity의 두 가지 Netcode 솔루션인<strong> Netcode for GameObjects(NFG)</strong>와 <strong>Netcode for Entities(NFE)</strong>의 기반으로 사용됩니다.</p>



<p>또한 사용자가 직접 만든<strong> 커스텀 네트워크 솔루션과 함께 사용</strong>할 수 있습니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="654" height="678" src="https://lycos7560.com/wp-content/uploads/2025/05/image.png" alt="" class="wp-image-39977" srcset="https://lycos7560.com/wp-content/uploads/2025/05/image.png 654w, https://lycos7560.com/wp-content/uploads/2025/05/image-289x300.png 289w" sizes="(max-width: 654px) 100vw, 654px" /><figcaption class="wp-element-caption"><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/index.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/index.html</a></figcaption></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Unity 엔진에서 지원하는 모든 플랫폼은 <strong>UDP 소켓</strong> 또는 <strong>WebSocket</strong>을 통해 제공되는 <strong>연결 기반 추상화 계층(내장 네트워크 드라이버)</strong> 덕분에 Unity Transport에서 원활하게 지원됩니다. </p>



<p>둘 다 암호화 유무에 따라 설정할 수 있으며, 위 블록 다이어그램에서 닫힌 자물쇠와 열린 자물쇠로 표시됩니다.</p>



<p>특히 <strong>파이프라인</strong>은 안정성, 패킷 순서 지정 및 패킷 조각화와 같은 추가적인 선택적 기능들을 제공합니다.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f34e.png" alt="🍎" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 요구 사항</h3>



<p>Unity Transport는 Unity 엔진이 지원하는 모든 플랫폼을 지원합니다.</p>



<p><strong>WebGL의 경우, 클라이언트 모드에서 WebSocket 연결만 지원</strong>되며, <a href="https://unity.com/products/relay" target="_blank" rel="noreferrer noopener">Unity Relay</a>를 사용하는 경우에는 호스팅도 가능합니다.</p>



<p>현재 문서는 <strong>Unity Transport 2.X</strong> 버전에 대한 설명이며, 이는 <strong>Unity Editor 2022.3 이상</strong>에서만 호환됩니다.</p>



<p>구 버전의 에디터는 <strong>Transport 1.X</strong>에서 지원됩니다. 아래는 호환성 표를 참고하세요.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Editor Version</th><th>2021 LTS</th><th>2022 LTS</th><th>2023.1 and later</th></tr></thead><tbody><tr><td>Transport 1.X</td><td><strong>Yes</strong></td><td><strong>Yes</strong></td><td>No</td></tr><tr><td>Transport 2.X</td><td>No</td><td><strong>Yes</strong></td><td><strong>Yes</strong></td></tr></tbody></table></figure>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 참고사항</h3>



<p>이 패키지는 <strong>Netcode for GameObjects</strong>의 <strong><code>NetworkTransport</code> 추상화 계층</strong>과 혼동하면 안됩니다.</p>



<p>더 자세한 내용은 해당 &nbsp;<a href="https://docs-multiplayer.unity3d.com/netcode/current/advanced-topics/transports" target="_blank" rel="noreferrer noopener">transports section of its documentation</a>을 참고하세요.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />Sample Project</h2>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/samples-usage.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/samples-usage.html</a></p>



<p>Unity Transport 패키지에는 <strong>Samples 폴더</strong>가 포함되어 있으며, 이 폴더에는 라이브러리의 기본적인 개념을 설명하는 간단한 어셈블리 정의와 관련된 씬들이 들어 있습니다.</p>



<p>이 샘플들은 <strong>패키지 매니저 창</strong>에서 Unity Transport 패키지를 선택했을 때 가져올 수 있습니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="885" height="536" src="https://lycos7560.com/wp-content/uploads/2025/05/image-1.png" alt="" class="wp-image-39978" srcset="https://lycos7560.com/wp-content/uploads/2025/05/image-1.png 885w, https://lycos7560.com/wp-content/uploads/2025/05/image-1-300x182.png 300w, https://lycos7560.com/wp-content/uploads/2025/05/image-1-768x465.png 768w" sizes="(max-width: 885px) 100vw, 885px" /><figcaption class="wp-element-caption">Unity Transport Sample</figcaption></figure>



<ul class="wp-block-list">
<li><strong>Cross-play Example</strong> : MultiNetworkDriver를 사용하여 UDP와 WebSocket 연결을 모두 허용하는 서버를 만드는 방법의 예입니다.</li>



<li><strong>Jobified Client and Server</strong> : 작업을 사용하는 매우 간단한 클라이언트 및 서버 구현. 패키지 문서와 연계되도록 설계되었습니다.</li>



<li><strong>Ping</strong> <strong>Sample</strong> : 클라이언트와 서버 간 왕복 시간(핑)을 계산하는 소규모 애플리케이션입니다.</li>



<li><strong>Relay Sample(with Relay)</strong> : 유니티 릴레이를 사용하여 클라이언트와 호스트 간의 왕복 시간(핑)을 계산하는 작은 애플리케이션</li>



<li><strong>SimpleClientServer</strong> : 가장 간단한 클라이언트 및 서버 구현. 패키지 문서와 연계되도록 설계되었습니다.</li>
</ul>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />간단한 클라이언트 서버</h2>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/client-server-simple.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/client-server-simple.html</a></p>



<p>이 예제는 Unity Transport 패키지의 모든 주요 기능을 다루며, 다음과 같은 API 사용법을 보여주는 샘플 프로젝트를 만드는 데 도움을 줍니다:</p>



<ul class="wp-block-list">
<li>전송 구성 (Configure the transport)</li>



<li>연결 수립 (Establish a connection)</li>



<li>데이터 전송 (Send data)</li>



<li>데이터 수신 (Receive data)</li>



<li>연결 종료 (Close a connection)</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="647" height="940" src="https://lycos7560.com/wp-content/uploads/2025/05/image-2.png" alt="" class="wp-image-39980" srcset="https://lycos7560.com/wp-content/uploads/2025/05/image-2.png 647w, https://lycos7560.com/wp-content/uploads/2025/05/image-2-206x300.png 206w" sizes="(max-width: 647px) 100vw, 647px" /><figcaption class="wp-element-caption">원격 &#8220;덧셈(add)&#8221; 기능을 구현</figcaption></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">1&#x20e3; 서버 생성</h3>



<p>서버는 들어오는 연결 요청을 듣고 메시지를 주고받는 엔드포인트를 생성합니다.</p>



<p><strong>ServerBehaviour.cs</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ServerBehaviour : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }
}
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">2&#x20e3; 보일러플레이트 코드 (Boilerplate Code)</h3>



<p>반복되는 작업이나 패턴에 대한 일종의 표준화된 코드인 Boilerplate를 생성합니다.</p>



<p>이 패키지는 <strong>완전한 제어권</strong>을 가지도록 선택한 아키텍처 설계로 저수준 API만 제공합니다. </p>



<p>따라서 약간의 Boilerplate 코드를 설정해야합니다.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">1. <strong><strong>NetworkDriver 선언</strong></strong>  &#8211; Server</h4>



<p><strong>ServerBehaviour.cs</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using UnityEngine;
using Unity.Collections;
using Unity.Networking.Transport;

public class ServerBehaviour : MonoBehaviour 
{
    NetworkDriver m_Driver;
    NativeList&lt;NetworkConnection> m_Connections;
}
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>NetworkDriver</strong>: Unity Transport 패키지의 핵심 API로, 네트워크 통신을 제어합니다.</li>



<li><strong>NativeList</strong>: 서버에 연결된 클라이언트들의 연결 정보를 저장하는 컨테이너 (Unmanaged Memory 사용).</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">2. <strong>서버 초기화</strong> (Start) &#8211; Server</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">void Start()
{
    m_Driver = NetworkDriver.Create();
    m_Connections = new NativeList&lt;NetworkConnection>(16, Allocator.Persistent);

    var endpoint = NetworkEndpoint.AnyIpv4.WithPort(7777);
    if (m_Driver.Bind(endpoint) != 0)
    {
        Debug.LogError("Failed to bind to port 7777.");
        return;
    }
    m_Driver.Listen();
}
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ol class="wp-block-list">
<li>드라이버 생성 → 연결 리스트 초기화 (최대 16개 연결 수용)</li>



<li>모든 IPv4 주소(<code>AnyIpv4</code>)에서 7777 포트로 바인딩 시도</li>



<li>성공 시&nbsp;<code>Listen()</code>으로 클라이언트 연결 대기 시작.</li>
</ol>



<ol class="wp-block-list">
<li></li>
</ol>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">3. <strong>리소스 정리 (OnDestroy)</strong>  &#8211; Server</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">void OnDestroy() 
{
    if (m_Driver.IsCreated) {
        m_Driver.Dispose();
        m_Connections.Dispose();
    }
}</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>Unmanaged Memory</strong>를 직접 해제해야 <strong>메모리 누수 방지</strong></li>



<li><code>IsCreated</code>로 할당 여부 확인 후 해제</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">4. <strong><strong>서버 업데이트 루프 (Update)</strong></strong>  &#8211; Server</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">void Update() 
{
    m_Driver.ScheduleUpdate().Complete();

    // 1. 오래된 연결 정리
    for (int i = 0; i &lt; m_Connections.Length; i++) {
        if (!m_Connections[i].IsCreated) {
            m_Connections.RemoveAtSwapBack(i);
            i--;
        }
    }

    // 2. 새 연결 수락
    NetworkConnection c;
    while ((c = m_Driver.Accept()) != default) {
        m_Connections.Add(c);
        Debug.Log("클라이언트 연결 수락");
    }

    // 3. 연결별 이벤트 처리
    for (int i = 0; i &lt; m_Connections.Length; i++) {
        DataStreamReader stream;
        NetworkEvent.Type cmd;
        while ((cmd = m_Driver.PopEventForConnection(m_Connections[i], out stream)) 
               != NetworkEvent.Type.Empty) {
            
            if (cmd == NetworkEvent.Type.Data) {
                uint number = stream.ReadUInt();
                Debug.Log($"클라이언트로부터 {number} 수신, +2 처리");

                number += 2;
                m_Driver.BeginSend(NetworkPipeline.Null, m_Connections[i], out var writer);
                writer.WriteUInt(number);
                m_Driver.EndSend(writer);
            }
            else if (cmd == NetworkEvent.Type.Disconnect) {
                Debug.Log("클라이언트 연결 종료");
                m_Connections[i] = default;
            }
        }
    }
}</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>데이터 수신</strong>: 클라이언트가 보낸 숫자를 읽어 +2 후 재전송.</li>



<li><strong>연결 종료</strong>:&nbsp;<code>Disconnect</code>&nbsp;이벤트 시 연결 리셋.</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">3&#x20e3; <strong>클라이언트 구현 (차이점 중심)</strong> &#8211; Client</h3>



<p><strong>ClientBehaviour.cs</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">public class ClientBehaviour : MonoBehaviour {
    NetworkDriver m_Driver;
    NetworkConnection m_Connection; // 단일 연결만 관리

    void Start() {
        m_Driver = NetworkDriver.Create();
        m_Connection = m_Driver.Connect(NetworkEndpoint.LoopbackIpv4.WithPort(7777));
    }

    void Update() {
        m_Driver.ScheduleUpdate().Complete();

        if (!m_Connection.IsCreated) return;

        DataStreamReader stream;
        NetworkEvent.Type cmd;
        while ((cmd = m_Connection.PopEvent(m_Driver, out stream)) 
               != NetworkEvent.Type.Empty) {
            
            if (cmd == NetworkEvent.Type.Connect) {
                Debug.Log("서버 연결 성공");
                uint value = 1;
                m_Driver.BeginSend(m_Connection, out var writer);
                writer.WriteUInt(value);
                m_Driver.EndSend(writer);
            }
            else if (cmd == NetworkEvent.Type.Data) {
                uint value = stream.ReadUInt();
                Debug.Log($"서버로부터 값 수신: {value}");
                m_Connection.Disconnect(m_Driver);
                m_Connection = default;
            }
            else if (cmd == NetworkEvent.Type.Disconnect) {
                Debug.Log("서버와 연결 종료");
                m_Connection = default;
            }
        }
    }
}</pre>



<p><strong>클라이언트 특이사항</strong>:</p>



<ul class="wp-block-list">
<li><strong>단일 연결</strong>:&nbsp;<code>NetworkConnection</code>&nbsp;하나만 관리.</li>



<li><strong>Connect 이벤트</strong>: 연결 성공 시 서버로 숫자&nbsp;<code>1</code>&nbsp;전송.</li>



<li><strong>데이터 처리</strong>: 서버 응답 후 즉시 연결 종료.</li>
</ul>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<strong>중요</strong>: </p>



<p>모든 네트워크 작업은&nbsp;<strong>비동기 Job 시스템</strong>&nbsp;기반으로 동작하지만, 이 예제에서는&nbsp;<code>Complete()</code>로 강제 동기화하여 간단히 구현했습니다.</p>



<p>실제 프로젝트에서는 Job 체인을 활용한 최적화가 필요합니다.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong>ServerBehaviour.cs</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using Unity.Collections;
using Unity.Networking.Transport;
using UnityEngine;

namespace UnityNetworkingTransportSimpleTest
{
    public class ServerBehaviour : MonoBehaviour
    {

        NetworkDriver m_Driver;
        NativeList&lt;NetworkConnection> m_Connections; // 연결된 클라이언트 목록

        private void Start()
        {
            m_Driver = NetworkDriver.Create(); // NetworkDriver 생성
            m_Connections = new NativeList&lt;NetworkConnection>(16, Allocator.Persistent); // 최대 16개의 연결을 허용하는 NativeList 생성 (영구 할당)

            var endpoint = NetworkEndpoint.AnyIpv4.WithPort(7777); // 모든 IPv4 주소의 7777 포트에서 수신 대기
            if (m_Driver.Bind(endpoint) != 0)
            {
                Debug.LogError("포트 7777 바인딩 실패"); // 포트 바인딩 실패 시 에러 로그 출력
                return;
            }
            m_Driver.Listen(); // 들어오는 연결 요청 수신 시작
        }

        private void Update()
        {
            m_Driver.ScheduleUpdate().Complete(); // 네트워크 업데이트 스케줄링 및 완료

            // 1. 오래된 연결 정리
            for (int i = 0; i &lt; m_Connections.Length; i++)
            {
                if (!m_Connections[i].IsCreated) { // 연결이 끊어진 클라이언트 정리
                    m_Connections.RemoveAtSwapBack(i); // 연결 리스트에서 제거
                    i--; // 인덱스 조정
                }
            }

            // 2. 새 연결 수락
            NetworkConnection newNetworkConnection;
            while ((newNetworkConnection = m_Driver.Accept()) != default)
            {
                m_Connections.Add(newNetworkConnection); // 새로운 연결을 연결 리스트에 추가
                Debug.Log("클라이언트 연결 수락"); // 클라이언트 연결 수락 시 로그 출력
            }

            // 3. 연결별 이벤트 처리
            for (int i = 0; i &lt; m_Connections.Length; i++)
            {
                DataStreamReader stream;
                NetworkEvent.Type cmd;
                while ((cmd = m_Driver.PopEventForConnection(m_Connections[i], out stream)) != NetworkEvent.Type.Empty)
                {

                    if (cmd == NetworkEvent.Type.Data)
                    {
                        uint number = stream.ReadUInt(); // 수신된 데이터에서 unsigned integer 값 읽기
                        Debug.Log($"클라이언트로부터 {number} 수신, +2 처리"); // 클라이언트로부터 받은 값 로그 출력 및 처리 내용 설명

                        number += 2; // 받은 값에 2를 더함
                        m_Driver.BeginSend(NetworkPipeline.Null, m_Connections[i], out var writer); // 클라이언트에게 메시지 전송 시작 (신뢰성 없는 파이프라인 사용)
                        writer.WriteUInt(number); // 처리된 unsigned integer 값 쓰기
                        m_Driver.EndSend(writer); // 메시지 전송 완료
                    }
                    else if (cmd == NetworkEvent.Type.Disconnect)
                    {
                        Debug.Log("클라이언트 연결 종료"); // 클라이언트 연결이 종료되었을 때 로그 출력
                        m_Connections[i] = default; // 연결 상태 초기화
                    }
                }
            }
        }

        private void OnDestroy()
        {
            if (m_Driver.IsCreated)
            {
                m_Driver.Dispose(); // NetworkDriver 자원 해제
                m_Connections.Dispose(); // 연결 리스트 자원 해제
            }
        }
    }
}</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ClientBehaviour.cs</p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using Unity.Collections;
using Unity.Networking.Transport;
using UnityEngine;

namespace UnityNetworkingTransportSimpleTest
{
    public class ClientBehaviour : MonoBehaviour
    {
        NetworkDriver m_Driver;
        NetworkConnection m_Connection; // 클라이언트는 단일 연결만 관리

        private void Start()
        {
            m_Driver = NetworkDriver.Create(); // NetworkDriver 생성
            m_Connection = m_Driver.Connect(NetworkEndpoint.LoopbackIpv4.WithPort(7777)); // 루프백 주소의 7777 포트로 서버에 연결 시도
        }

        private void Update()
        {
            m_Driver.ScheduleUpdate().Complete(); // 네트워크 업데이트 스케줄링 및 완료

            if (!m_Connection.IsCreated) return; // 연결이 생성되지 않았으면 더 이상 진행하지 않음

            DataStreamReader stream;
            NetworkEvent.Type cmd;
            while ((cmd = m_Connection.PopEvent(m_Driver, out stream)) != NetworkEvent.Type.Empty) { // 연결에서 발생한 네트워크 이벤트 처리

                if (cmd == NetworkEvent.Type.Connect)
                {
                    Debug.Log("서버 연결 성공"); // 서버 연결 성공 시 로그 출력
                    uint value = 1;
                    m_Driver.BeginSend(m_Connection, out var writer); // 메시지 전송 시작
                    writer.WriteUInt(value); // unsigned integer 값 쓰기
                    m_Driver.EndSend(writer); // 메시지 전송 완료
                }
                else if (cmd == NetworkEvent.Type.Data)
                {
                    uint value = stream.ReadUInt(); // 수신된 데이터에서 unsigned integer 값 읽기
                    Debug.Log($"서버로부터 값 수신: {value}"); // 서버로부터 받은 값 로그 출력
                    m_Connection.Disconnect(m_Driver); // 서버와 연결 종료
                    m_Connection = default; // 연결 상태 초기화
                }
                else if (cmd == NetworkEvent.Type.Disconnect)
                {
                    Debug.Log("서버와 연결 종료"); // 서버와 연결이 종료되었을 때 로그 출력
                    m_Connection = default; // 연결 상태 초기화
                }
            }
        }
    }
}</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1246" height="199" src="https://lycos7560.com/wp-content/uploads/2025/05/image-3.png" alt="" class="wp-image-39981" srcset="https://lycos7560.com/wp-content/uploads/2025/05/image-3.png 1246w, https://lycos7560.com/wp-content/uploads/2025/05/image-3-300x48.png 300w, https://lycos7560.com/wp-content/uploads/2025/05/image-3-768x123.png 768w" sizes="(max-width: 1246px) 100vw, 1246px" /></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />사용 모범 사례</h2>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">1&#x20e3; 파이프라인 사용 (Using pipelines)</h3>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/pipelines-usage.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/pipelines-usage.html</a></p>



<p>파이프라인(Pipelines)은 Unity Transport의 핵심 기능으로, 기본 제공되는&nbsp;<strong>비신뢰성 데이터그램(unreliable datagrams)</strong>&nbsp;위에 선택적 기능 계층을 추가할 수 있게 해줍니다.</p>



<p><strong>주요 적용 기능</strong>: 순서 보장(sequencing), 신뢰성(reliability), 패킷 분할(fragmentation) 등.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2753.png" alt="❓" class="wp-smiley" style="height: 1em; max-height: 1em;" />작동 원리 (How it Works)</h4>



<p>파이프라인은 하나 이상의 스테이지로 구성된 순서로 정의됩니다. </p>



<p>메시지가 파이프라인을 통해 전송되면 스테이지를 순서대로 거치며, 첫 번째 스테이지의 출력이 두 번째 스테이지로 파이프됩니다. </p>



<p>따라서 첫 번째 스테이지에서 패킷에 헤더를 추가하면 두 번째 스테이지는 이 헤더를 포함한 전체 패킷을 처리합니다. </p>



<p>메시지가 수신되면 스테이지 체인을 역순으로 거칩니다.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="445" height="346" src="https://lycos7560.com/wp-content/uploads/2025/05/image-4.png" alt="" class="wp-image-39983" srcset="https://lycos7560.com/wp-content/uploads/2025/05/image-4.png 445w, https://lycos7560.com/wp-content/uploads/2025/05/image-4-300x233.png 300w" sizes="(max-width: 445px) 100vw, 445px" /><figcaption class="wp-element-caption"><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/pipelines-usage.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/pipelines-usage.html</a></figcaption></figure>



<p>예를 들어 <code>FragmentationPipelineStage</code>는 큰 메시지를 더 작은 조각으로 나누는 것을 가능하게 하고, </p>



<p><code>ReliableSequencedPipelineStage</code>는 메시지를 순서와 전달을 보장하며 전송하는 것을 가능하게 합니다. </p>



<p>두 기능 모두를 제공하는 파이프라인을 만들고 싶다면 다음과 같이 만들 수 있습니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// In initialization code, before any connections are made.
var myPipeline = driver.CreatePipeline(typeof(FragmentationPipelineStage), typeof(ReliableSequencedPipelineStage));</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>이렇게 하면 메시지를 먼저 패킷에 맞게 더 작은 조각으로 분할한 다음, 각 조각이 <strong>신뢰성 있게</strong> 그리고 <strong>올바른 순서대로</strong> 전달되는 파이프라인이 생성됩니다.</p>



<p>이 과정은 아래 그림과 같이 설명됩니다. 조각에 있는 작은 주황색 부분은 <strong>순서 번호</strong>와 <strong>신뢰성 단계에서 추가된 기타 정보</strong>를 나타냅니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="1654" height="885" src="https://lycos7560.com/wp-content/uploads/2025/05/image-5.png" alt="" class="wp-image-39984" style="width:1003px;height:auto" srcset="https://lycos7560.com/wp-content/uploads/2025/05/image-5.png 1654w, https://lycos7560.com/wp-content/uploads/2025/05/image-5-300x161.png 300w, https://lycos7560.com/wp-content/uploads/2025/05/image-5-768x411.png 768w, https://lycos7560.com/wp-content/uploads/2025/05/image-5-1536x822.png 1536w" sizes="(max-width: 1654px) 100vw, 1654px" /><figcaption class="wp-element-caption"><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/pipelines-usage.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/pipelines-usage.html</a></figcaption></figure>



<p><strong>단계의 순서가 중요하다는 점에 유의하세요.</strong></p>



<p>만약 단계를 거꾸로 구성했다면, 신뢰성 정보는 <strong>분할되지 않은 큰 메시지</strong>에만 추가되었을 것입니다.</p>



<p>이 경우, <strong>조각 중 하나라도 손실되면 전체 메시지를 다시 전송해야 하므로</strong> 대역폭 효율이 떨어집니다.</p>



<p>하지만 <strong>신뢰성 단계(reliable stage)를 분할 단계(fragmentation) 이후에</strong> 배치하면, <strong>조각 하나가 손실되더라도 그 조각만 다시 전송하면 되므로 더 효율적</strong>입니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>새로운 파이프라인에서 메시지를 전송하려면 </p>



<p><code>BeginSend</code>를 사용할 수 있습니다:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">driver.BeginSend(myPipeline, connection, out var writer);</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>메시지를 어느 파이프라인으로 받았는지 확인하려면 </p>



<p><code>PopEvent</code> 또는 <code>PopEventForConnection</code>의 마지막 인자를 사용하세요:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">var eventType = driver.PopEvent(out _, out _, out var receivePipeline);
if (eventType == NetworkEvent.Type.Data)
{
    // 데이터 메시지는 receivePipeline 파이프라인에서 수신되었습니다.
}
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f514.png" alt="🔔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>주의</strong></p>



<p>파이프라인은 서버와 클라이언트에서 항상 <strong>같은 방식으로 구성</strong>되어야 합니다.</p>



<p>즉, <code>CreatePipeline</code> 호출과 그 순서는 <strong>양쪽에서 동일</strong>해야 합니다.</p>



<p>Unity Transport는 이러한 불일치를 자동으로 막아주지 않으므로, <strong>파이프라인 생성 코드는 서버와 클라이언트 간에 공유하는 것을 권장</strong>합니다.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Fragmentation 파이프라인 단계</h4>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/pipelines-usage.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/pipelines-usage.html</a></p>



<p>기본적으로 Unity Transport는 <strong>MTU(약 1400바이트)</strong> 안에 들어가는 크기의 메시지만 전송할 수 있습니다.</p>



<p>더 큰 메시지를 보내기 위해서는 이를 더 작은 조각으로 분할해야 하며, 이를 <strong>메시지 분할(Fragmentation)</strong> 이라고 합니다.</p>



<p><code>FragmentationPipelineStage</code>가 포함된 파이프라인을 구성하면, 메시지를 자동으로 분할해 줍니다.</p>



<p>분할 전 최대 페이로드 크기는 <code>NetworkDriver</code>를 생성할 때 설정할 수 있습니다:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">var settings = new NetworkSettings();
settings.WithFragmentationStageParameters(payloadCapacity: 10000);

var driver = NetworkDriver.Create(settings);
var fragmentedPipeline = driver.CreatePipeline(typeof(FragmentationPipelineStage));
</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>설정 가능한 <strong>최대 값은 약 20MB</strong>이지만, 이 파이프라인 단계는 <strong>수 킬로바이트 크기의 페이로드</strong>에 최적화되어 있습니다.</p>



<p>기본값은 <strong>4096바이트</strong>이며, 이보다 훨씬 큰 메시지는 초기화 시점에 한 번 보내는 정도로만 사용하는 것을 권장합니다.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>참고:</strong> </p>



<p>여러 파이프라인 단계를 조합할 경우, <code>FragmentationPipelineStage</code>는 <strong>일반적으로 가장 먼저 배치</strong>되어야 합니다.</p>



<p>대부분의 파이프라인 단계는 <strong>MTU보다 큰 패킷을 지원하지 않기 때문입니다.</strong></p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> The reliable 파이프라인 단계</h4>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/pipelines-usage.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/pipelines-usage.html</a></p>



<p><code>ReliableSequencedPipelineStage</code>를 사용한 파이프라인은 <strong>TCP처럼 패킷의 순서 보장과 안정적인 전송</strong>을 보장합니다.</p>



<ul class="wp-block-list">
<li>패킷은 <strong>시퀀스 번호</strong>로 태그되며, 상대는 이 번호의 수신을 확인합니다.</li>



<li>수신 확인이 되지 않으면 패킷은 <strong>재전송</strong>됩니다.</li>



<li>순서가 어긋난 패킷은 <strong>버퍼에 저장</strong>되고, 이전 패킷이 도착할 때까지 대기합니다.</li>
</ul>



<p>이 기능은 유용하지만, <strong>멀티플레이어 게임에서는 과도하게 사용하면 성능에 악영향</strong>을 줄 수 있습니다.</p>



<p>신뢰성 있는 데이터 스트림은 <strong>헤드 오브 라인 블로킹(Head-of-line blocking)</strong> 으로 인해 지연이 발생할 수 있습니다.</p>



<p>따라서 <strong>정말 중요한 데이터</strong> (예: <strong>RPC 호출, 캐릭터 동작</strong> 등)에만 이 단계를 사용하는 것을 권장합니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26d4.png" alt="⛔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 동시 전송 가능한 패킷 수 제한</h5>



<p>Reliable 단계는 <strong>동시에 전송 가능한 패킷 수가 제한</strong>됩니다.</p>



<p>기본값은 <strong>32개</strong>, 최대 <strong>64개</strong>까지 늘릴 수 있습니다.</p>



<p>이 제한은 <strong>연결별, 파이프라인별</strong>로 적용되며, 공유되지 않습니다.</p>



<p><strong>팁:</strong> 가능한 한 신뢰성 있는 메시지를 <strong>배치(Batching)</strong> 하세요. 예: 20바이트짜리 메시지 2개를 따로 보내는 대신 40바이트로 묶어 한 번에 전송.</p>



<p>만약 이미 32개의 패킷이 전송 대기 중인 상황에서 또 보내려고 하면, <code>EndSend</code>는 <code>NetworkSendQueueFull</code> (값: -5)을 반환합니다.</p>



<p>이 경우 메시지를 큐에 저장하고 나중에 재전송하세요:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">driver.BeginSend(myReliablePipeline, connection, out var writer);
// 메시지 작성
if (driver.EndSend(writer) == (int)Error.StatusCode.NetworkSendQueueFull)
{
    // 메시지를 큐에 저장 후 나중에 재전송
}</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 제한 늘리기

var settings = new NetworkSettings();
settings.WithReliableStageParameters(windowSize: 64);


var driver = NetworkDriver.Create(settings);
var reliablePipeline = driver.CreatePipeline(typeof(ReliableSequencedPipelineStage));

// 기본값은 32, 최대는 64입니다.
// 32보다 큰 값을 사용할 경우 헤더 크기가 약간 증가(4바이트) 하며, 실제 데이터 공간은 그만큼 줄어듭니다.
</pre>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> The reliable 파이프라인 단계</h4>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/pipelines-usage.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/pipelines-usage.html</a></p>



<p><code>SimulatorPipelineStage</code>는 <strong>앱 테스트용</strong>으로 사용되며, <strong>패킷 손실, 지연, 지터</strong> 등의 다양한 네트워크 조건을 시뮬레이션할 수 있습니다.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">var settings = new NetworkSettings();
settings.WithSimulatorStageParameters(
    maxPacketCount: 100,
    mode: ApplyMode.AllPackets,
    packetDelayMs: 50);

var driver = NetworkDriver.Create(settings);
var simulatorPipeline = driver.CreatePipeline(typeof(SimulatorPipelineStage));


// maxPacketCount: 지연 가능한 최대 패킷 수. 이 수를 초과하면 지연 없이 전달됩니다.
// mode: 어떤 방향에 시뮬레이션을 적용할지 설정 (보내기, 받기, 또는 모두).
// packetDelayMs: 적용할 지연 시간 (ms). 일반 브로드밴드는 20ms, 열악한 모바일은 최대 200ms.
// packetJitterMs: 지연의 편차. 일반적으로 지연의 절반 이하가 적당합니다.
// packetDropPercentage: 손실할 패킷의 비율 (%). 나쁜 모바일 환경에서도 보통 3%를 넘지 않습니다.
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>참고:</strong> </p>



<p>여러 단계로 구성된 파이프라인에서 <code>SimulatorPipelineStage</code>는 <strong>가장 마지막에 배치</strong>해야 합니다.</p>



<p>그렇지 않으면 <strong>다른 단계에서 처리되기 전에 패킷이 손실</strong>되어 의미가 없어질 수 있습니다 (예: Reliable 단계와 함께 사용할 경우).</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">2&#x20e3; Jobified 클라이언트 및 서버</h3>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/client-server-jobs.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/client-server-jobs.html</a></p>



<p><strong>Client 코드 (JobifiedClientBehaviour.cs)</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using UnityEngine;
using Unity.Jobs;
using Unity.Collections;
using Unity.Networking.Transport;

namespace Unity.Networking.Transport.Samples
{
    public class JobifiedClientBehaviour : MonoBehaviour
    {
        NetworkDriver m_Driver;
        NativeArray&lt;NetworkConnection> m_Connection;

        JobHandle m_ClientJobHandle;

        void Start()
        {
            // 네트워크 드라이버 생성 및 초기화
            m_Driver = NetworkDriver.Create();
            m_Connection = new NativeArray&lt;NetworkConnection>(1, Allocator.Persistent);

            // 로컬 호스트(127.0.0.1)의 포트 7777에 연결 시도
            var endpoint = NetworkEndpoint.LoopbackIpv4.WithPort(7777);
            m_Connection[0] = m_Driver.Connect(endpoint);
        }

        void OnDestroy()
        {
            // 이전 프레임의 잡이 모두 완료되도록 대기 후, 네이티브 리소스 해제
            m_ClientJobHandle.Complete();
            m_Driver.Dispose();
            m_Connection.Dispose();
        }

        void Update()
        {
            // 이전 프레임에서 스케줄된 작업 완료 대기
            m_ClientJobHandle.Complete();

            // 클라이언트 업데이트 작업 생성 및 설정
            var job = new ClientUpdateJob
            {
                Driver = m_Driver,
                Connection = m_Connection,
            };

            // 네트워크 드라이버 업데이트 스케줄링
            m_ClientJobHandle = m_Driver.ScheduleUpdate();

            // 클라이언트 작업 스케줄링 (드라이버 업데이트 이후 실행되도록 설정)
            m_ClientJobHandle = job.Schedule(m_ClientJobHandle);
        }

        // 클라이언트 상태를 업데이트하는 IJob 기반 작업
        struct ClientUpdateJob : IJob
        {
            public NetworkDriver Driver;
            public NativeArray&lt;NetworkConnection> Connection;

            public void Execute()
            {
                // 연결이 유효하지 않으면 조기 종료
                if (!Connection[0].IsCreated)
                {
                    return;
                }

                DataStreamReader stream;
                NetworkEvent.Type cmd;

                // 이벤트 루프를 통해 네트워크 이벤트 처리
                while ((cmd = Connection[0].PopEvent(Driver, out stream)) != NetworkEvent.Type.Empty)
                {
                    if (cmd == NetworkEvent.Type.Connect)
                    {
                        Debug.Log("서버에 연결됨.");

                        // 서버에 uint 값 1을 전송
                        uint value = 1;
                        Driver.BeginSend(Connection[0], out var writer);
                        writer.WriteUInt(value);
                        Driver.EndSend(writer);
                    }
                    else if (cmd == NetworkEvent.Type.Data)
                    {
                        // 서버로부터 데이터를 수신하고 출력
                        uint value = stream.ReadUInt();
                        Debug.Log($"서버로부터 받은 값: {value}");

                        // 데이터 수신 후 연결 종료
                        Driver.Disconnect(Connection[0]);
                        Connection[0] = default;
                    }
                    else if (cmd == NetworkEvent.Type.Disconnect)
                    {
                        // 서버에서 연결이 종료되었음을 로그에 기록하고 상태 초기화
                        Debug.Log("서버와의 연결이 종료됨.");
                        Connection[0] = default;
                    }
                }
            }
        }
    }
}
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong>Server 코드 (JobifiedServerBehaviour.cs)</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using UnityEngine;
using Unity.Jobs;
using Unity.Collections;
using Unity.Networking.Transport;

namespace Unity.Networking.Transport.Samples
{
    public class JobifiedServerBehaviour : MonoBehaviour
    {
        NetworkDriver m_Driver;
        NativeList&lt;NetworkConnection> m_Connections;

        JobHandle m_ServerJobHandle;

        void Start()
        {
            // 네트워크 드라이버 생성 및 초기화
            m_Driver = NetworkDriver.Create();
            m_Connections = new NativeList&lt;NetworkConnection>(16, Allocator.Persistent);

            // 포트 7777에 바인딩 시도
            var endpoint = NetworkEndpoint.AnyIpv4.WithPort(7777);
            if (m_Driver.Bind(endpoint) != 0)
            {
                Debug.LogError("포트 7777 바인딩 실패.");
                return;
            }

            // 클라이언트 연결 대기 시작
            m_Driver.Listen();
        }

        void OnDestroy()
        {
            if (m_Driver.IsCreated)
            {
                // 모든 잡 완료 후 리소스 해제
                m_ServerJobHandle.Complete();
                m_Driver.Dispose();
                m_Connections.Dispose();
            }
        }

        void Update()
        {
            // 이전 프레임의 잡 완료 대기
            m_ServerJobHandle.Complete();

            // 끊긴 연결 제거 및 새 연결 수락을 처리하는 잡 생성
            var connectionJob = new ServerUpdateConnectionsJob
            {
                Driver = m_Driver,
                Connections = m_Connections
            };

            // 클라이언트별로 데이터 수신 및 응답을 처리하는 병렬 잡 생성
            var serverUpdateJob = new ServerUpdateJob
            {
                Driver = m_Driver.ToConcurrent(),
                Connections = m_Connections.AsDeferredJobArray()
            };

            // 드라이버 업데이트 → 연결 처리 → 데이터 처리 순으로 잡 체인 스케줄링
            m_ServerJobHandle = m_Driver.ScheduleUpdate();
            m_ServerJobHandle = connectionJob.Schedule(m_ServerJobHandle);
            m_ServerJobHandle = serverUpdateJob.Schedule(m_Connections, 1, m_ServerJobHandle);
        }

        // 끊긴 연결을 정리하고 새 연결을 수락하는 작업
        struct ServerUpdateConnectionsJob : IJob
        {
            public NetworkDriver Driver;
            public NativeList&lt;NetworkConnection> Connections;

            public void Execute()
            {
                // 유효하지 않은 연결 제거
                for (int i = 0; i &lt; Connections.Length; i++)
                {
                    if (!Connections[i].IsCreated)
                    {
                        Connections.RemoveAtSwapBack(i);
                        i--;
                    }
                }

                // 새 클라이언트 연결 수락
                NetworkConnection c;
                while ((c = Driver.Accept()) != default)
                {
                    Connections.Add(c);
                    Debug.Log("클라이언트 연결 수락됨.");
                }
            }
        }

        // 각 연결로부터 데이터를 수신하고 처리하는 병렬 작업
        struct ServerUpdateJob : IJobParallelForDefer
        {
            public NetworkDriver.Concurrent Driver;
            public NativeArray&lt;NetworkConnection> Connections;

            public void Execute(int i)
            {
                DataStreamReader stream;
                NetworkEvent.Type cmd;

                // 클라이언트 이벤트 루프
                while ((cmd = Driver.PopEventForConnection(Connections[i], out stream)) != NetworkEvent.Type.Empty)
                {
                    if (cmd == NetworkEvent.Type.Data)
                    {
                        // 숫자 수신 후 2를 더해 응답
                        uint number = stream.ReadUInt();
                        Debug.Log($"클라이언트로부터 {number} 수신. 2를 더해 전송.");

                        number += 2;

                        Driver.BeginSend(Connections[i], out var writer);
                        writer.WriteUInt(number);
                        Driver.EndSend(writer);
                    }
                    else if (cmd == NetworkEvent.Type.Disconnect)
                    {
                        // 연결 해제 처리
                        Debug.Log("클라이언트 연결 해제됨.");
                        Connections[i] = default;
                    }
                }
            }
        }
    }
}
</pre>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">3&#x20e3; 암호화된 통신 Encrypted communications</h3>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/client-server-secure.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/client-server-secure.html</a></p>



<p>Unity Transport 패키지는 서버/클라이언트의 신뢰성을 보장하는 동시에 서버와 클라이언트 간의 연결을 암호화하도록 구성할 수 있습니다.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">4&#x20e3; Unity.Logging와 통합</h3>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/logging.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/logging.html</a></p>



<p>Unity Transport는 Unity Logging 패키지( )와의 선택적 통합을 제공합니다.</p>



<p><code>com.unity.logging package</code>. 이 패키지는 기존 Unity 로깅 메커니즘에 대한 유연한 대안으로, 특히 프로덕션 서버에 유용합니다.</p>



<p>일반적으로 로그 메시지는 모두 를 거쳐 전송되지만&nbsp;<code>UnityEngine.Debug.Log</code>, 로깅 패키지가 프로젝트에 포함되면 Unity Transport는 자동으로&nbsp;<code>Unity.Logging</code>기본 로거 설정을 사용합니다.</p>



<p>특정 로그 설정을 조정하는 방법에 대한 자세한 내용은&nbsp;<a href="https://docs.unity3d.com/Packages/com.unity.logging@latest" target="_blank" rel="noreferrer noopener">로깅 패키지 설명서 사이트를</a>&nbsp;확인하세요.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />Cross-play support</h2>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/cross-play.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/cross-play.html</a></p>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />WebGL support</h2>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/websockets.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/websockets.html</a></p>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />FAQ</h2>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/faq.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/faq.html</a></p>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" />Cross-play support</h2>



<p><a href="https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/migration.html" target="_blank" rel="noreferrer noopener">https://docs.unity3d.com/Packages/com.unity.transport@2.5/manual/migration.html</a></p>



<p></p>
<p>The post <a href="https://lycos7560.com/unity/unity-transport-2-5-1/39976/">Unity Transport 2.5.1 Docs</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/unity/unity-transport-2-5-1/39976/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
