@ControllerAdviceによるアーキテクチャ改善

各コントローラメソッドごとに現在ログインしているユーザーの情報を照会してモデルに入れるロジックは、コードの重複を発生させ、保守性を低下させます。また、非ログインユーザーのアクセス時に発生する可能性があるNullPointerExceptionの潜在的な原因にもなります。 これを解決するために@ControllerAdviceを導入しました。共通で必要なユーザー情報(userInfo)といいねリスト(likeList)をグローバルモデル属性として定義し、すべてのコントローラで個別に管理していたロジックを1箇所に集中させました。 @Control...
更新日

柔軟なレスポンス構造設計とユーザー体験改善のためのプロフィール管理機能実装

サービスの拡張性と保守性を高めるために共通レスポンスオブジェクトを改善し、ユーザーが直接自分のアイデンティティを表現できるプロフィール画像管理機能を実装しました。この過程で経験した技術的解決方案を共有します。 共通レスポンスオブジェクトのジェネリックタイプ推論改善 既存のResponseDtoはLombokの@Builderを通じて生成されました。しかし、ジェネリックタイプを使用する構造上、ビルダー使用時に明示的なタイプ指定がないとコンパイラがタイプを正確に推論できない問題が発生しました。これを解決するため、静的ファクトリメソッドパターンを導入...
更新日

ある人の関心事はその人の欠乏と関連があるようだ

ある人の関心事はその人の欠乏と関連があるようだ。未来が心配になれば自己啓発書を、心が虚しくなれば読みかけの小説を取り出したりする。
更新日

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

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

一貫性のあるユーザー体験とデータ整合性のためのロジック改善

ムジェはユーザーのさまざまなペルソナを尊重し、記録の価値を保存するプラットフォームを指向しています。サービスが成長するにつれて、既存に作成された断片化されたロジックは保守の複雑度を高め、時にはユーザーの意図とは異なる結果を招くこともあります。最近行われたアップデートを通じて直面した技術的問題とこれを解決するために試みた構造的改善事項を共有したいと思います。 1. フォームバインディングの曖昧性解決とUI/UX一貫性の確保 既存の投稿エディタは、メインページのクイック作成(Quick Compose)ツールとは異なるユーザー体験を提供していました...
更新日

検索機能実装とムジェ正式デプロイのためのサービス安定化の道のり

ムジェプロジェクトが本日、正式バージョンをデプロイしました。Spring Boot基盤の技術スタックを活用してサービスの完成度を高める過程で直面した技術的挑戦とこれを解決した過程について共有したいと思います。 1. ユーザー体験の核心、検索システムの設計と実装 情報が蓄積されるにつれて、ユーザーが望む投稿と作成者を迅速に見つけられる検索機能の必要性が台頭しました。ムジェの検索システムは、単純なキーワードマッチングを超えて、ユーザー中心の利便性を最大化する方向で設計されました。 テキスト検索とハンドル検索の統合 バックエンドではPostRep...
更新日

投稿管理インタラクション改善とフロントエンドロジックの抽象化

ブログプロジェクトトリードを開発しながら、ユーザー体験(UX)の核心である投稿管理機能を高度化しました。既存のページ単位レンダリング方式から脱却し、非同期通信による動的UI更新と共通ロジックの外部化を通じてコード保守性を確保した過程を共有します。 1. 投稿レンダリングロジックの統合と抽象化 初期実装段階では、メインフィードページと投稿詳細ページでそれぞれ類似したJavaScriptロジックが重複して存在しました。投稿カード(Postcard)を生成してリストに追加する過程が断片化されていて、機能修正時に2箇所のコードを同時に変更する必要がある...
更新日

Out Of Memory解決記

低スペックコンテナ環境におけるSpring Bootサービスの安定性確保方法 クラウド環境の発展により、サービスを簡単にデプロイできるようになりましたが、限られたリソース内でアプリケーションの安定性を維持することは、依然としてエンジニアにとって重要な課題です。特にRailwayのようなPaaS環境のフリーティアで提供される1GB前後のメモリは、Spring Bootアプリケーションを動作させるにはやや挑戦的な数値です。 本投稿では、1GBメモリ環境で発生したOutOfMemory(OOM)問題を診断し、これを解決するために行ったJVMチューニン...
更新日

UIコンポーネント統合によるフロントエンド保守性の改善

サービスの規模が大きくなるにつれて、ユーザーに表示されるUIコンポーネントの一貫性を維持することは、開発者にとって重要な課題となります。特にブログやSNSのように投稿カードがさまざまなページで繰り返し使用される場合、これを管理するロジックが断片化されると、わずかなデザイン変更にも膨大なコストが発生します。 本記事では、サーバーサイドレンダリング(SSR)とクライアントサイドレンダリング(CSR)に分かれていた投稿レンダリングロジックを一つのJavaScriptクラスに統合し、保守性を最大化した過程を共有したいと思います。 断片化されたロジックの...
更新日

Thymeleafレイアウトを利用したUI改編記

はじめに 「Bootstrapで難しい部分だけカスタムCSSを書いてほしい」というリクエストから始まったプロジェクトでした。既存のレガシーUIを現代的なSNSスタイルに完全にリニューアルしながら経験したことと解決策を共有したいと思います。 問題状況 既存のブログは伝統的なWebブログレイアウトに従っていました。しかし、ユーザー体験を改善し、より現代的なインターフェースを提供するために、TwitterのようなSNSフィード形式への転換が必要でした。特にバックエンド開発者の立場でUIを直接構成するためには、以下のような悩みがありました。 ...
更新日

Spring Bootプロファイルを活用した環境別設定管理

概要 マルチ環境アプリケーションを開発する際、最も厄介な問題の一つは、環境別の設定をどのように管理するかという点です。開発環境、ステージング環境、本番環境ごとにデータベースアドレス、キャッシュポリシー、ログレベルなどがすべて異なる必要があるためです。 本記事では、Spring Bootのプロファイル(Profile)機能を活用して環境別設定を効率的に管理する方法を紹介します。 問題状況 一般的なプロジェクトで環境別設定を管理する際、以下のような問題が発生します。 # 既存の問題: 同じ設定が複数のファイルに重複 application...
更新日

ソーシャルリファレンス

https://dribbble.com/shots/16842379-Social-Feed https://dribbble.com/shots/27002130-Vibe-Coding-Website-Design-Landing-page
更新日
ソーシャルリファレンス

Cloudflare R2を活用した画像アップロードと自動整理システムの構築

はじめに Webアプリケーションにおいて画像アップロード機能は必須ですが、管理しなければ未使用のファイルがストレージに蓄積されてコストと管理負担が増加します。特にユーザーが画像をアップロードした後、投稿作成をキャンセルしたり、投稿を削除したりする際に、関連する画像をどう処理するかは重要な課題です。 本記事では、Spring Bootベースのブログプロジェクトにおいて、Toast UI Editorを通じた画像アップロードからCloudflare R2ストレージへの保存、そしてバッチ作業による自動整理までの全プロセスを紹介します。 課題の定...
更新日

セキュリティ、保守性、そして同時性制御

今回の記事では、プロジェクトの品質を一段階高めるために進めたリファクタリング過程を共有します。データベース接続情報を安全に保護する暗号化作業から、フロントエンドコードの重複を除去するモジュール化、そして頻繁なデータ更新状況での同時性制御処理方法を紹介します。 1. Jasyptを活用した機密情報の暗号化 開発を進めていくと、データベースURL、ユーザー名、パスワードなどの機密情報がapplication.yamlファイルに平文で露出される場合が多くあります。これはセキュリティ上大きな脆弱性となり得るため、Jasypt (Java Simplif...
更新日

Railwayでデプロイし、同時性問題を考慮したいいね機能の追加

1. Spring Bootアプリケーションのデプロイとデータベース接続エラーの解決 プロジェクトの初期段階でデプロイの利便性を考慮し、Railwayプラットフォームを選択しました。Dockerfileベースの自動デプロイシステムを構築しましたが、実行段階でJDBCConnectionExceptionが発生する問題に直面しました。このエラーの主な原因は、データベース接続文字列の形式の不一致でした。 RailwayがHILOするDATABASE_URLは標準PostgreSQL形式に従っていますが、Spring BootのJDBCドライバーは明...
更新日

ログレベル

ソフトウェア開発および運用過程において、ログ(Log)はシステムの状態を把握し、問題を診断するための核心的な指標となります。無分別なログ記録はシステムのパフォーマンス低下とストレージ不足を招く可能性があり、逆に不十分な記録は障害対応を困難にします。これを効率的に管理するために導入された概念がログレベル(Log Level)です。 本記事では、標準的に通用するログレベルの定義と状況別活用方案について記述します。 1. ログレベルの定義と階層構造 ログレベルは、イベントの重要度と詳細さに応じて段階を区分した標準です。下位レベルは上位レベルの情...
更新日