閲覧数と権限システム改善記

記録の本質に集中するプラットフォーム「ムジェ」は、正式リリース以降、ユーザーの利用パターンを分析しながらシステムの安定性とデータ信頼性を高めることに注力しています。特に今回のアップデートでは、ユーザーが投稿を消費する最も基本的な指標である「閲覧数」算定方式の改編と共に、フロントエンドとバックエンド間のデータ同期化過程で発生した技術的負債を解決した過程を共有したいと思います。

1. 指標の信頼性のための閲覧数算定ロジック改編

単にページがロードされるたびに数値が増加する既存方式は、リフレッシュ乱用に脆弱であり、データの信頼性を担保することが困難です。これを解決するため、クッキー(Cookie)ベースの重複防止ロジックを導入しました。

サーバー側では識別用クッキーを活用し、同じブラウザ環境で特定の投稿を1時間以内に再訪問する場合、閲覧数が重複集計されないよう制御します。また、ユーザーが投稿リストで「もっと見る」をクリックして実際の本文内容を消費する時点に閲覧数増加APIを呼び出すよう設計することで、単純な露出ではなく実質的な投稿消費経験を数値化できるようになりました。

2. Hibernate遅延ロード例外(LazyInitializationException)の構造的解決

閲覧数増加ロジックを追加する過程で、永続性コンテキストのライフサイクルに関連する技術的難題に直面しました。バルク性クエリである@Modifying演算が実行された後、永続性コンテキストが初期化(clear)されることで、その後のDTO変換過程で参照していたエンティティが準永続状態となりLazyInitializationExceptionが発生したのです。

これを解決するため、サービスレイヤーの作業順序を再配置し、関連するユーザー情報と親投稿情報を一度のクエリで即時ロードすることで、永続性コンテキストの状態に関係なく安定的にDTOを生成できる構造を確立しました。これは例外防止だけでなく、N+1問題を根本的に遮断してランタイムパフォーマンスを最適化する結果につながりました。

3. 直感的なカウント単位処理: フロントエンドレンダリング最適化

サービス規模が拡大するにつれて、大きな数字をユーザーにどう伝えるかについての悩みも並行されました。千単位を超える閲覧数を可読性よく表示するため、バックエンドから伝達された原始データをフロントエンドで動的にフォーマットするロジックを実装しました。

1,000単位は「千」、10,000単位は「万」で表記し、小数点第一位で切り捨て処理する方式を採択しました。この過程でサーバーの演算負担を減らすため、JavaScriptクラス内部にフォーマットメソッドを内蔵して処理することで、サーバーは純粋なデータ伝達に集中し、クライアントは視覚的最適化に集中する役割分離を実現しました。

4. 権限検証体系の一貫性確保とセキュリティ強化

セキュリティ面では、投稿修正及び削除時に実行される所有権検証ロジックをアカウント識別子(メール)の代わりに、サービス内固有ペルソナである「ハンドル」ベースに一元化しました。これはドメインモデルの意味論的一貫性を確保するだけでなく、Spring Securityのセッション管理ポリシーと絡み合ってより堅固な認証体系を構築する土台となりました。

また、セッション維持時間をサービス特性に合わせて調整し、ログアウト時にセッション識別子だけでなく閲覧数記録クッキーも共に破棄するよう設定することで、共有デバイス環境でもユーザーの利用記録が安全に保護されるよう措置しました。

おわりに

機能を追加することより重要なことは、実装された機能が「意図した通りに正確に動作すること」だと考えます。今回の改善作業は、たとえ目立つ華やかな変化ではないとしても、サービスの基盤となるデータの品質を高め、技術的安定性を強固にする重要な過程でした。今後もムジェは信頼できる記録環境を提供します。

リンク:
リンク: » 韓国語で見る (한국어로 보기)
リンク: » 英語版を見る (Switch to English)
シェア: