<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Tech on Game Server Services | Docs</title>
		<link>/ko/tags/tech/</link>
		<description>Recent content in Tech on Game Server Services | Docs</description>
		<generator>Hugo</generator>
		<language>ko</language>
		
		
		
		
			<atom:link href="/ko/tags/tech/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>에러 핸들링 구현 패턴</title>
				<link>/ko/articles/tech/error/pattern/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/ko/articles/tech/error/pattern/</guid>
				<description>&lt;p&gt;GS2 를 이용한 네트워크 기능 구현에서 에러 핸들링은 게임의 안정성과 사용자 경험(UX)에 직결됩니다.&#xA;여기서는 단순히 예외를 포착하는 데 그치지 않는 실전적인 구현 패턴을 소개합니다.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-에러-분류와-대응-방침&#34;&gt;1. 에러 분류와 대응 방침&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#1-%ec%97%90%eb%9f%ac-%eb%b6%84%eb%a5%98%ec%99%80-%eb%8c%80%ec%9d%91-%eb%b0%a9%ec%b9%a8&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GS2 의 예외는 그 성질에 따라 크게 3가지로 분류할 수 있습니다.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;분류&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;해당하는 예외 (예)&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;대응 방침&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;일시적인 에러&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;InternalServerError&lt;/code&gt;, &lt;code&gt;ServiceUnavailable&lt;/code&gt;, &lt;code&gt;RequestTimeout&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;자동 재시도&lt;/strong&gt;. 몇 차례 시도해도 안 되는 경우 에러 다이얼로그를 표시.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;로직/설정 에러&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;BadRequest&lt;/code&gt;, &lt;code&gt;NotFound&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;개발 중에 해결해야 할 에러&lt;/strong&gt;. 릴리스 후에는 버그로 간주하여 로그를 수집하고, 사용자에게는 적절한 메시지를 표시.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;인증·상태 에러&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;Unauthorized&lt;/code&gt;, &lt;code&gt;Conflict&lt;/code&gt;, &lt;code&gt;QuotaLimitExceeded&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;특별한 복구 처리&lt;/strong&gt;가 필요. 재로그인이나 데이터 재동기화(도메인 재취득)를 수행.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;2-재시도-전략-구현지수-백오프&#34;&gt;2. 재시도 전략 구현(지수 백오프)&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#2-%ec%9e%ac%ec%8b%9c%eb%8f%84-%ec%a0%84%eb%9e%b5-%ea%b5%ac%ed%98%84%ec%a7%80%ec%88%98-%eb%b0%b1%ec%98%a4%ed%94%84&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;서버의 과부하나 일시적인 네트워크 불안정으로 인한 에러에 대해서는 즉시 재시도하는 것이 아니라, 간격을 두고 재시도하는 &amp;ldquo;지수 백오프(Exponential Backoff)&amp;ldquo;가 권장됩니다.&lt;/p&gt;</description>
			</item>
			<item>
				<title>트랜잭션 액션의 조합</title>
				<link>/ko/articles/tech/transaction/combination/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/ko/articles/tech/transaction/combination/</guid>
				<description>&lt;p&gt;각 서비스의 API 레퍼런스에는 「하나의 트랜잭션에 지정할 수 있는 조합」이라는 표가 있습니다.&#xA;이 페이지는 그 표를 읽기 위한 전제를 정리한 것입니다.&lt;/p&gt;&#xA;&lt;h2 id=&#34;액션의-종별&#34;&gt;액션의 「종별」&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%ec%95%a1%ec%85%98%ec%9d%98-%ec%a2%85%eb%b3%84&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;각 서비스의 액션 표에 있는 「종별」은 그 액션을 트랜잭션의 검증·소비·획득 중 어느 목록에 둘 수 있는지를 나타냅니다.&lt;/p&gt;&#xA;&lt;p&gt;액션의 이름이나 실제 효과와 일치하지 않는 경우가 있습니다. 이름이 &lt;code&gt;Verify&lt;/code&gt;라도 소비 액션이거나, 아무것도 업데이트하지 않는데 획득 액션인 경우가 있습니다.&lt;/p&gt;&#xA;&lt;h2 id=&#34;각-서비스의-표를-읽는-법&#34;&gt;각 서비스의 표를 읽는 법&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%ea%b0%81-%ec%84%9c%eb%b9%84%ec%8a%a4%ec%9d%98-%ed%91%9c%eb%a5%bc-%ec%9d%bd%eb%8a%94-%eb%b2%95&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;각 서비스의 페이지에는 그 서비스의 조작을 나열한 표가 있습니다.&lt;/p&gt;</description>
			</item>
			<item>
				<title>SDK의 캐시 메커니즘</title>
				<link>/ko/articles/tech/cache/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/ko/articles/tech/cache/</guid>
				<description>&lt;p&gt;GS2의 Game Engine용 SDK(GS2 SDK for Unity, GS2 SDK for Unreal Engine, GS2 SDK for Godot 등)에는, 서버에서 취득한 데이터를 SDK 내부에 캐싱하는 메커니즘이 내장되어 있습니다.&#xA;이 캐시 메커니즘을 이해하면, API 호출 횟수를 줄여 게임의 응답성과 비용을 모두 개선할 수 있습니다.&lt;/p&gt;&#xA;&lt;h2 id=&#34;캐시의-기본-동작&#34;&gt;캐시의 기본 동작&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%ec%ba%90%ec%8b%9c%ec%9d%98-%ea%b8%b0%eb%b3%b8-%eb%8f%99%ec%9e%91&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Domain 객체(&lt;code&gt;gs2.Inventory.Namespace(...).Me(...).Inventory(...)&lt;/code&gt;와 같은 접근)를 통해 데이터를 취득하면, 취득한 데이터는 SDK 내부의 캐시에 보관됩니다.&#xA;동일한 리소스에 대한 재취득은 서버에 문의하지 않고 캐시에서 반환됩니다.&lt;/p&gt;&#xA;&lt;p&gt;따라서 UI 각 부분에서 필요한 값을 매번 서버에서 가져오지 않아도, Domain 객체를 통해 몇 번이든 안심하고 값을 참조할 수 있습니다.&lt;/p&gt;</description>
			</item>
			<item>
				<title>비용 최적화</title>
				<link>/ko/articles/tech/cost/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/ko/articles/tech/cost/</guid>
				<description>&lt;p&gt;GS2는 종량제 요금제를 채택하고 있기 때문에 게임 설계에 따라 이용 요금이 크게 달라질 수 있습니다.&#xA;이 섹션에서는 성능을 유지하면서 비용을 억제하기 위한 설계 포인트를 설명합니다.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-api-호출-횟수-절감&#34;&gt;1. API 호출 횟수 절감&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#1-api-%ed%98%b8%ec%b6%9c-%ed%9a%9f%ec%88%98-%ec%a0%88%ea%b0%90&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GS2 요금에서 큰 비중을 차지하는 것이 API 요청 수입니다.&lt;/p&gt;&#xA;&lt;h3 id=&#34;sdk의-캐시-메커니즘-활용&#34;&gt;SDK의 캐시 메커니즘 활용&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#sdk%ec%9d%98-%ec%ba%90%ec%8b%9c-%eb%a9%94%ec%bb%a4%eb%8b%88%ec%a6%98-%ed%99%9c%ec%9a%a9&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GS2 SDK에는 캐시 메커니즘이 내장되어 있습니다.&#xA;동일한 데이터를 짧은 시간에 여러 번 가져올 경우, 서버에 요청을 보내지 않고 캐시에서 반환하도록 설계되어 있습니다.&#xA;SDK 각 메서드의 &lt;code&gt;Future&lt;/code&gt;나 &lt;code&gt;Async&lt;/code&gt; 버전을 사용할 때는 가능한 한 고수준 API(Domain 객체를 통한 접근)를 사용해 주세요.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
