<?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)에 직결됩니다.
여기서는 단순히 예외를 포착하는 데 그치지 않는 실전적인 구현 패턴을 소개합니다.&lt;/p&gt;
&lt;h2 id="1-에러-분류와-대응-방침"&gt;1. 에러 분류와 대응 방침&lt;a class="td-heading-self-link" href="#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" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GS2 의 예외는 그 성질에 따라 크게 3가지로 분류할 수 있습니다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;분류&lt;/th&gt;
 &lt;th&gt;해당하는 예외 (예)&lt;/th&gt;
 &lt;th&gt;대응 방침&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;일시적인 에러&lt;/strong&gt;&lt;/td&gt;
 &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;
 &lt;td&gt;&lt;strong&gt;자동 재시도&lt;/strong&gt;. 몇 차례 시도해도 안 되는 경우 에러 다이얼로그를 표시.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;로직/설정 에러&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;BadRequest&lt;/code&gt;, &lt;code&gt;NotFound&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;개발 중에 해결해야 할 에러&lt;/strong&gt;. 릴리스 후에는 버그로 간주하여 로그를 수집하고, 사용자에게는 적절한 메시지를 표시.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;인증·상태 에러&lt;/strong&gt;&lt;/td&gt;
 &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;
 &lt;td&gt;&lt;strong&gt;특별한 복구 처리&lt;/strong&gt;가 필요. 재로그인이나 데이터 재동기화(도메인 재취득)를 수행.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="2-재시도-전략-구현지수-백오프"&gt;2. 재시도 전략 구현(지수 백오프)&lt;a class="td-heading-self-link" href="#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" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;서버의 과부하나 일시적인 네트워크 불안정으로 인한 에러에 대해서는 즉시 재시도하는 것이 아니라, 간격을 두고 재시도하는 &amp;ldquo;지수 백오프(Exponential Backoff)&amp;ldquo;가 권장됩니다.&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 내부에 캐싱하는 메커니즘이 내장되어 있습니다.
이 캐시 메커니즘을 이해하면, API 호출 횟수를 줄여 게임의 응답성과 비용을 모두 개선할 수 있습니다.&lt;/p&gt;
&lt;h2 id="캐시의-기본-동작"&gt;캐시의 기본 동작&lt;a class="td-heading-self-link" href="#%ec%ba%90%ec%8b%9c%ec%9d%98-%ea%b8%b0%eb%b3%b8-%eb%8f%99%ec%9e%91" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Domain 객체(&lt;code&gt;gs2.Inventory.Namespace(...).Me(...).Inventory(...)&lt;/code&gt;와 같은 접근)를 통해 데이터를 취득하면, 취득한 데이터는 SDK 내부의 캐시에 보관됩니다.
동일한 리소스에 대한 재취득은 서버에 문의하지 않고 캐시에서 반환됩니다.&lt;/p&gt;
&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는 종량제 요금제를 채택하고 있기 때문에 게임 설계에 따라 이용 요금이 크게 달라질 수 있습니다.
이 섹션에서는 성능을 유지하면서 비용을 억제하기 위한 설계 포인트를 설명합니다.&lt;/p&gt;
&lt;h2 id="1-api-호출-횟수-절감"&gt;1. API 호출 횟수 절감&lt;a class="td-heading-self-link" href="#1-api-%ed%98%b8%ec%b6%9c-%ed%9a%9f%ec%88%98-%ec%a0%88%ea%b0%90" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GS2 요금에서 큰 비중을 차지하는 것이 API 요청 수입니다.&lt;/p&gt;
&lt;h3 id="sdk의-캐시-메커니즘-활용"&gt;SDK의 캐시 메커니즘 활용&lt;a class="td-heading-self-link" href="#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" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GS2 SDK에는 캐시 메커니즘이 내장되어 있습니다.
동일한 데이터를 짧은 시간에 여러 번 가져올 경우, 서버에 요청을 보내지 않고 캐시에서 반환하도록 설계되어 있습니다.
SDK 각 메서드의 &lt;code&gt;Future&lt;/code&gt;나 &lt;code&gt;Async&lt;/code&gt; 버전을 사용할 때는 가능한 한 고수준 API(Domain 객체를 통한 접근)를 사용해 주세요.&lt;/p&gt;</description></item></channel></rss>