private static void SaveSessionStateStoreData(HttpContext context, IMongoRepository repository, string id,
                                                      SessionStateStoreData sessionStateStoreData, TimeSpan sessionTimeout)
        {
            if (IsDebugEnabled)
            {
                log.Debug("세션 정보를 캐시에 저장합니다... id=[{0}], sessionTimeout=[{1}]", id, sessionTimeout);
            }

            With.TryAction(() => RemoveExpires(repository));

            try {
                byte[] cacheItem = null;

                // NOTE: SessionStateItemCollection 자체적으로 제공하는 Serialize/Deserialize를 사용해야 합니다.
                //       SessionStateItemCollection 은 SerializableAttribte 가 정의되어 있지 않아 일반적인 방식으로는 직렬화를 수행할 수 없습니다.
                //
                if (sessionStateStoreData != null && sessionStateStoreData.Items != null)
                {
                    cacheItem = WebTool.SerializeSessionState((SessionStateItemCollection)sessionStateStoreData.Items);
                }

                var result = repository.Save(new MongoSessionStateEntry(id, cacheItem, DateTime.UtcNow.Add(sessionTimeout)));

                if (IsDebugEnabled)
                {
                    log.Debug("세션 정보를 캐시에 저장했습니다!!! id=[{0}], 저장결과=[{1}], sessionTimeout=[{2}]", id, result.Ok, sessionTimeout);
                }
            }
            catch (Exception ex) {
                if (log.IsErrorEnabled)
                {
                    log.Error("캐시에 세션 정보를 저장하는데 실패했습니다. id=[{0}]", id);
                    log.Error(ex);
                }
            }
        }
        private void SaveSessionStateStoreData(HttpContext context,
                                               string id,
                                               SessionStateStoreData sessionStateStoreData,
                                               TimeSpan sessionTimeout)
        {
            if (IsDebugEnabled)
            {
                log.Debug("세션 정보를 캐시에 저장합니다... id=[{0}], sessionTimeout=[{1}]", id, sessionTimeout);
            }

            try {
                byte[] cacheItem = null;

                // NOTE: SessionStateItemCollection 자체적으로 제공하는 SerializeSessionState/Deserialize를 사용해야 합니다.
                // NOTE: SessionStateItemCollection 은 SerializableAttribte 가 정의되어 있지 않아 일반적인 방식으로는 직렬화를 수행할 수 없습니다.
                //
                if (sessionStateStoreData != null && sessionStateStoreData.Items != null)
                {
                    cacheItem = WebTool.SerializeSessionState((SessionStateItemCollection)sessionStateStoreData.Items);
                }

                CacheRepository.Set(id, cacheItem ?? new byte[0], sessionTimeout);

                if (IsDebugEnabled)
                {
                    log.Debug("세션 정보를 캐시에 저장했습니다!!! id=[{0}], sessionTimeout=[{1}]", id, sessionTimeout);
                }
            }
            catch (Exception ex) {
                if (log.IsErrorEnabled)
                {
                    log.Error("캐시에 세션 정보를 저장하는데 실패했습니다. id=[{0}]", id);
                    log.Error(ex);
                }
            }
        }